From 353b7b3488c7faa48de9d61cb84671ed535e3651 Mon Sep 17 00:00:00 2001 From: yrjkqq Date: Mon, 31 Mar 2025 16:16:10 +0800 Subject: [PATCH 01/18] feat: update dependencies and add support for Morph Holesky Testnet --- packages/doc/package.json | 2 +- .../doc/src/stories/widgets/Swap.stories.tsx | 219 ++---------------- packages/dodoex-api/package.json | 4 +- .../dodoex-api/src/chainConfig/basicToken.ts | 4 + packages/dodoex-api/src/chainConfig/chain.ts | 2 + .../src/chainConfig/contractConfig.ts | 14 ++ .../dodoex-api/src/chainConfig/platform.ts | 1 + packages/dodoex-api/src/gql/gql.ts | 8 + packages/dodoex-api/src/gql/graphql.ts | 95 ++++++++ .../src/services/TokenApi/graphqlQuery.ts | 14 ++ packages/dodoex-widgets/package.json | 6 +- .../dodoex-widgets/src/constants/chainList.ts | 8 + .../dodoex-widgets/src/constants/chains.ts | 8 + .../src/hooks/Token/useInitTokenList.ts | 8 +- .../dodoex-widgets/src/store/actions/token.ts | 5 +- .../src/store/selectors/token.ts | 4 +- 16 files changed, 178 insertions(+), 224 deletions(-) diff --git a/packages/doc/package.json b/packages/doc/package.json index 8ae872b2..8150a465 100644 --- a/packages/doc/package.json +++ b/packages/doc/package.json @@ -8,7 +8,7 @@ }, "dependencies": { "@babel/runtime": "^7.17.0", - "@dodoex/components": "^3.0.2", + "@dodoex/components": "^3.0.3", "@emotion/styled": "^11.10.0", "@storybook/addon-docs": "^8.3.5", "@web3modal/ethers5": "^3.5.5", diff --git a/packages/doc/src/stories/widgets/Swap.stories.tsx b/packages/doc/src/stories/widgets/Swap.stories.tsx index 80b75f50..e341d2c7 100644 --- a/packages/doc/src/stories/widgets/Swap.stories.tsx +++ b/packages/doc/src/stories/widgets/Swap.stories.tsx @@ -2,228 +2,35 @@ import { ComponentStory, ComponentMeta } from '@storybook/react'; import { SwapWidget } from '@dodoex/widgets'; import { TokenInfo } from '@dodoex/widgets/dist/src/hooks/Token/type'; -export enum ChainId { - MAINNET = 1, - RINKEBY = 4, - GOERLI = 5, - - BSC = 56, - - HECO = 128, - - POLYGON = 137, - - ARBITRUM_ONE = 42161, - ARBITRUM_RINKEBY = 421611, - - AURORA = 1313161554, - - MOONRIVER = 1285, - - OKCHAIN = 66, - - OPTIMISM = 10, - - BOBA = 288, - - AVALANCHE = 43114, - - CRONOS = 25, -} -const ChainIdObj: { - [key in ChainId]?: keyof typeof ChainId; -} = {}; -Object.keys(ChainId).forEach((key: any) => { - const numVal = Number(ChainId[key]) as ChainId; - if (!isNaN(numVal)) { - ChainIdObj[numVal] = key; - } -}); - // More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export export default { title: 'Widgets/Swap', component: SwapWidget, - argTypes: { - defaultChainId: { - options: Object.keys(ChainIdObj).map((key) => Number(key)), - control: { - type: 'select', - labels: ChainIdObj, - }, - }, - colorMode: { - options: ['light', 'dark'], - control: { type: 'radio' }, - }, - apikey: { - control: { - type: 'text', - }, - }, - width: { - control: { - type: 'text', - }, - }, - height: { - control: { - type: 'text', - }, - }, - locale: { - options: ['en-US', 'zh-CN'], - control: { type: 'radio' }, - }, - feeRate: { - control: { - type: 'number', - }, - }, - rebateTo: { - control: { - type: 'text', - }, - }, - onProviderChanged: { - action: 'providerChanged', - }, - onTxFail: { - action: 'txFail', - }, - onTxSubmit: { - action: 'txSubmit', - }, - onTxSuccess: { - action: 'txSuccess', - }, - onTxReverted: { - action: 'txReverted', - }, - onPayTokenChange: { - action: 'payTokenChange', - }, - onReceiveTokenChange: { - action: 'receiveTokenChange', - }, - onConnectWalletClick: { - action: 'connectWalletClick', - }, - noPowerBy: { - control: { - type: 'boolean', - }, - }, - }, -} as ComponentMeta; +}; export const Primary = (args) => ; Primary.args = { apikey: 'ef9apopzq9qrgntjubojbxe7hy4z5eez', - theme: { - palette: { - mode: 'light', - primary: { - main: '#1A1A1B', - }, - secondary: { - main: '#FFE804', - contrastText: '#1A1A1B', - }, - error: { - main: '#EC5A7D', - contrastText: '#FFFFFF', - }, - warning: { - main: '#B15600', - contrastText: '#1A1A1B', - }, - success: { - main: '#2FBA90', - contrastText: '#1A1A1B', - }, - purple: { - main: '#6851B4', - contrastText: '#1A1A1B', - }, - background: { - default: '#F9F6E8', - paper: '#FFFFFF', - paperContrast: '#F6F6F6', - paperDarkContrast: 'rgba(26, 26, 27, 0.1)', - backdrop: 'rgba(0, 0, 0, 0.9)', - input: '#F0F0F0', - tag: 'rgba(26, 26, 27, 0.04)', - }, - text: { - primary: '#1A1A1B', - secondary: 'rgba(26, 26, 27, 0.5)', - disabled: 'rgba(26, 26, 27, 0.3)', - placeholder: 'rgba(26, 26, 27, 0.3)', - link: '#1A1A1B', - }, - border: { - main: 'rgba(26, 26, 27, 0.1)', - light: 'rgba(26, 26, 27, 0.3)', - disabled: 'rgba(26, 26, 27, 0.1)', - }, - hover: { - default: 'rgba(26, 26, 27, 0.1)', - }, - }, - }, - defaultFromToken: { - chainId: 1, - address: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', - name: 'Ether', - decimals: 18, - symbol: 'ETH', - logoURI: - 'https://images.dodoex.io/prKmKP8yDTuPMHTCZ_DcxG8BqsuHNO8w5KDmJWmPodg/rs:fit:96:96:0/g:no/aHR0cHM6Ly9pbWFnZS1wcm94eS5kb2RvZXguaW8vOUVaWU1ER2ZVN3g2N3ZBZThqWkUxZzA0RExUaFhaV0JIb09wZFhpeXhHRS9hSFIwY0hNNkx5OWpaRzR0YldWa2FXRXVaRzlrYjJWNExtbHZMMlZ5WXpJd0wyaDBkSEJ6WDNNeVgyTnZhVzV0WVhKclpYUmpZWEJmWTI5dFgzTjBZWFJwWTE5cGJXZGZZMjlwYm5OZk5qUjROalJmTVRBeU4xOHhNekkyTjJGbE5EY3dMbkJ1WncucG5n.webp', - // amount: 10, - }, - defaultToToken: { - chainId: 1, - address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - name: 'USD Coin', - decimals: 6, - symbol: 'USDC', - logoURI: - 'https://images.dodoex.io/sQ5dF3FkjjQUsmfqFFE5cKq-cthh4u0wUooBE5Epf-k/rs:fit:96:96:0/g:no/aHR0cHM6Ly9pbWFnZS1wcm94eS5kb2RvZXguaW8vTDlEVElLa2dONG5mRkNTSF9GMUdXU3JiZkJDa2JZRTkwbmFDS0dIWnRsby9hSFIwY0hNNkx5OWpaRzR0YldWa2FXRXVaRzlrYjJWNExtbHZMM1Z6WkdOZlpXVTFNbUV4WldReVlpOTFjMlJqWDJWbE5USmhNV1ZrTW1JdWNHNW4ucG5n.webp', - amount: 100, - }, - popularTokenList: [ - { - chainId: 1, - address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - name: 'USD Coin', - decimals: 6, - symbol: 'USDC', - logoURI: - 'https://images.dodoex.io/sQ5dF3FkjjQUsmfqFFE5cKq-cthh4u0wUooBE5Epf-k/rs:fit:96:96:0/g:no/aHR0cHM6Ly9pbWFnZS1wcm94eS5kb2RvZXguaW8vTDlEVElLa2dONG5mRkNTSF9GMUdXU3JiZkJDa2JZRTkwbmFDS0dIWnRsby9hSFIwY0hNNkx5OWpaRzR0YldWa2FXRXVaRzlrYjJWNExtbHZMM1Z6WkdOZlpXVTFNbUV4WldReVlpOTFjMlJqWDJWbE5USmhNV1ZrTW1JdWNHNW4ucG5n.webp', - }, + popularTokenList: [], + tokenList: [ { - chainId: 1, - address: '0x4Fabb145d64652a948d72533023f6E7A623C7C53', - name: 'Binance USD', + address: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', + symbol: 'ETH', + name: 'ETH', decimals: 18, - symbol: 'BUSD', - logoURI: - 'https://images.dodoex.io/xZmadzpVOnpuq2jNG_5EGKeqMET0LU_gmfnp4VxkcxI/rs:fit:96:96:0/g:no/aHR0cHM6Ly9pbWFnZS1wcm94eS5kb2RvZXguaW8vSHQwWXZKMGNnU0lGTFM0aHExTV9jOXVITV9fMHpXaHBKSGVOQU5neTBuby9hSFIwY0hNNkx5OWpaRzR0YldWa2FXRXVaRzlrYjJWNExtbHZMMkoxYzJSZk4ySTJOalJpWWpReVpDOWlkWE5rWHpkaU5qWTBZbUkwTW1RdWNHNW4ucG5n.webp', + chainId: 2810, }, { - chainId: 4, - symbol: 'DODO', - address: '0xeaa70c2a40820dF9D38149C84dd943CFcB562587', - name: 'DODO', + address: '0x5300000000000000000000000000000000000011', + symbol: 'WETH', + name: 'WETH', decimals: 18, - source: 'dodo', - logoURI: '', + chainId: 2810, }, ], - tokenList: 'all', - crossChain: true, + crossChain: false, + onlyChainId: 2810, getAutoSlippage: ({ fromToken, toToken, diff --git a/packages/dodoex-api/package.json b/packages/dodoex-api/package.json index 972e27ef..0abeb321 100644 --- a/packages/dodoex-api/package.json +++ b/packages/dodoex-api/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/api", - "version": "3.0.3-beta.2", + "version": "3.0.4-ve33.1", "description": "DODO API Kit", "source": "src/index.ts", "types": "dist/types/index.d.ts", @@ -21,7 +21,7 @@ "release": "semantic-release", "release:local": "np --any-branch --no-cleanup --no-tests", "release.npm-publish": "npm publish --access public", - "release.npm-publish-beta": "npm publish --tag beta" + "release.npm-publish-beta": "yarn run build && npm publish --tag beta" }, "author": "", "publishConfig": { diff --git a/packages/dodoex-api/src/chainConfig/basicToken.ts b/packages/dodoex-api/src/chainConfig/basicToken.ts index 15f37bd7..80fa7e41 100644 --- a/packages/dodoex-api/src/chainConfig/basicToken.ts +++ b/packages/dodoex-api/src/chainConfig/basicToken.ts @@ -145,4 +145,8 @@ export const basicTokenMap: { ...DEFAULT_BASIC_TOKEN, wrappedTokenAddress: '0x5300000000000000000000000000000000000011', }, + [ChainId.MORPH_HOLESKY_TESTNET]: { + ...DEFAULT_BASIC_TOKEN, + wrappedTokenAddress: '0x5300000000000000000000000000000000000011', + }, }; diff --git a/packages/dodoex-api/src/chainConfig/chain.ts b/packages/dodoex-api/src/chainConfig/chain.ts index c31323f1..ceb21a90 100644 --- a/packages/dodoex-api/src/chainConfig/chain.ts +++ b/packages/dodoex-api/src/chainConfig/chain.ts @@ -42,4 +42,6 @@ export enum ChainId { NEOX = 47763, MORPH = 2818, + + MORPH_HOLESKY_TESTNET = 2810, } diff --git a/packages/dodoex-api/src/chainConfig/contractConfig.ts b/packages/dodoex-api/src/chainConfig/contractConfig.ts index 9dafbbcd..be6e5f9c 100644 --- a/packages/dodoex-api/src/chainConfig/contractConfig.ts +++ b/packages/dodoex-api/src/chainConfig/contractConfig.ts @@ -363,6 +363,20 @@ const contractMap: { DODO_DPP_PROXY: morph.DODODppProxy, DODO_MINEV3_PROXY: morph.DODOMineV3Proxy, }, + [ChainId.MORPH_HOLESKY_TESTNET]: { + MULTI_CALL: '0xC81BEA01Ab9add22D734fd008B5400Fe273D05Df', + DODO_APPROVE: '0x5Da9A0Cb4202164DF40d171011f7752298E735De', + ERC20_HELPER: '0xdbb14F2460bdCFe3918B360d54298fd483a7Ad12', + + ROUTE_V2_DATA_FETCH: '', + ROUTE_V1_DATA_FETCH: '', + CALLEE_HELPER: '', + + DODO_PROXY: '', + DODO_DSP_PROXY: '', + DODO_DPP_PROXY: '', + DODO_MINEV3_PROXY: '', + }, }; export default contractMap; diff --git a/packages/dodoex-api/src/chainConfig/platform.ts b/packages/dodoex-api/src/chainConfig/platform.ts index 95374143..ce3d94a8 100644 --- a/packages/dodoex-api/src/chainConfig/platform.ts +++ b/packages/dodoex-api/src/chainConfig/platform.ts @@ -26,4 +26,5 @@ export const platformIdMap: { [ChainId.PLUME_TESTNET]: 'plume-testnet', [ChainId.NEOX]: 'neox', [ChainId.MORPH]: 'morph', + [ChainId.MORPH_HOLESKY_TESTNET]: 'morph-testnet', }; diff --git a/packages/dodoex-api/src/gql/gql.ts b/packages/dodoex-api/src/gql/gql.ts index 8eb8d6c8..ace26de4 100644 --- a/packages/dodoex-api/src/gql/gql.ts +++ b/packages/dodoex-api/src/gql/gql.ts @@ -16,6 +16,8 @@ const documents = { types.FetchErc20SwapCrossChainListDocument, '\n query FetchErc20ForecastSlippage($where: Erc20_extenderc20ExtendV2Filter) {\n erc20_extend_erc20ExtendV2(where: $where) {\n forecastSlippageList {\n forecastSlippage\n forecastValue\n confidenceRatio\n confidenceIntervalUpper\n confidenceIntervalLower\n }\n }\n }\n ': types.FetchErc20ForecastSlippageDocument, + '\n query Ve33_token_list($where: Ve33_tokenlistFilter) {\n ve33_token_list(where: $where) {\n name\n address\n symbol\n decimals\n slippage\n position\n chainId\n logo\n }\n }\n ': + types.Ve33_Token_ListDocument, '\n query Ticks($where: Tick_filter, $skip: Int, $first: Int) {\n ticks(where: $where, skip: $skip, first: $first) {\n id\n poolAddress\n tickIdx\n liquidityNet\n price0\n price1\n }\n }\n': types.TicksDocument, '\n query FetchMiningList($where: Miningmining_list_filter) {\n mining_list(where: $where) {\n list {\n chainId\n type\n version\n address\n baseApy\n baseLpToken {\n decimals\n address: id\n symbol\n }\n baseToken {\n decimals\n address: id\n price\n symbol\n logoImg\n }\n endBlock\n miningContractAddress\n miningTotalDollar\n baseLpTokenMining\n quoteLpTokenMining\n quoteApy\n quoteLpToken {\n decimals\n address: id\n symbol\n }\n quoteToken {\n decimals\n address: id\n price\n symbol\n logoImg\n }\n rewardTokenInfos {\n apy\n decimals\n address: id\n price\n logoImg\n rewardNumIndex\n rewardPerBlock\n startBlock\n endBlock\n startTime\n endTime\n symbol\n }\n rewardQuoteTokenInfos {\n apy\n decimals\n address: id\n price\n logoImg\n rewardNumIndex\n rewardPerBlock\n startBlock\n endBlock\n startTime\n endTime\n symbol\n }\n startBlock\n title\n platform\n startTime\n endTime\n }\n totalCount\n chains\n }\n }\n ': @@ -66,6 +68,12 @@ export function graphql( export function graphql( source: '\n query FetchErc20ForecastSlippage($where: Erc20_extenderc20ExtendV2Filter) {\n erc20_extend_erc20ExtendV2(where: $where) {\n forecastSlippageList {\n forecastSlippage\n forecastValue\n confidenceRatio\n confidenceIntervalUpper\n confidenceIntervalLower\n }\n }\n }\n ', ): typeof import('./graphql').FetchErc20ForecastSlippageDocument; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql( + source: '\n query Ve33_token_list($where: Ve33_tokenlistFilter) {\n ve33_token_list(where: $where) {\n name\n address\n symbol\n decimals\n slippage\n position\n chainId\n logo\n }\n }\n ', +): typeof import('./graphql').Ve33_Token_ListDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/packages/dodoex-api/src/gql/graphql.ts b/packages/dodoex-api/src/gql/graphql.ts index 0f8ac08e..469d081a 100644 --- a/packages/dodoex-api/src/gql/graphql.ts +++ b/packages/dodoex-api/src/gql/graphql.ts @@ -258,6 +258,32 @@ export type All_Filter = { export type All_OrderBy = 'chain' | 'id'; +export type AmmTick = { + id: Scalars['String']['output']; + liquidityGross: Scalars['BigDecimal']['output']; + liquidityNet: Scalars['BigDecimal']['output']; + poolAddress: Scalars['String']['output']; + price0: Scalars['BigDecimal']['output']; + price1: Scalars['BigDecimal']['output']; + protocolPosition?: Maybe; + tickArrayLower?: Maybe; + tickArrayUpper?: Maybe; + tickIdx: Scalars['BigDecimal']['output']; +}; + +export type AmmTicksDataResult = { + chain: Scalars['String']['output']; + pairType: Scalars['String']['output']; + poolAddress: Scalars['String']['output']; + ticks: Array>; +}; + +export type AmmgetTicksDataInput = { + chain: Scalars['String']['input']; + pairType: Scalars['String']['input']; + poolAddress: Scalars['String']['input']; +}; + export type AnnouncementAnnouncement = { endAt?: Maybe; id?: Maybe; @@ -1876,6 +1902,7 @@ export type Cross_Chain_SwapExtend = { encodeId?: Maybe; fromToken?: Maybe; lifiBridge?: Maybe; + productStateInfo?: Maybe; refunded?: Maybe; route?: Maybe; toToken?: Maybe; @@ -1948,6 +1975,7 @@ export type Cross_Chain_SwaporderCreateDataExtendRoute = { feeUSD?: InputMaybe; step?: InputMaybe; toAmount?: InputMaybe; + toAmountMin?: InputMaybe; }; export type Cross_Chain_SwaporderDetailData = { @@ -1960,8 +1988,10 @@ export type Cross_Chain_SwaporderListData = { chainId?: InputMaybe; limit?: InputMaybe; page?: InputMaybe; + product?: InputMaybe; refreshNow?: InputMaybe; source?: InputMaybe; + status?: InputMaybe; user?: InputMaybe; }; @@ -1973,6 +2003,7 @@ export type Cross_Chain_SwaporderNewStatusData = { export type Cross_Chain_SwaporderRefundCountData = { chainId?: InputMaybe; from?: InputMaybe; + product?: InputMaybe; refreshNow?: InputMaybe; source?: InputMaybe; user?: InputMaybe; @@ -5912,6 +5943,7 @@ export type Erc20listV2Filter = { chainIds?: InputMaybe; page?: InputMaybe; pageSize?: InputMaybe; + productName?: InputMaybe; refreshNow?: InputMaybe; }; @@ -6991,6 +7023,7 @@ export type LiquidityLp = { liquidityTokenInMining?: Maybe; /** my liquidity usd */ liquidityUSD?: Maybe; + nftMint?: Maybe; outOfRange?: Maybe; /** Share in the pool */ poolShare?: Maybe; @@ -12106,6 +12139,8 @@ export type Query = { aggregateFragments: Array; all?: Maybe; alls: Array; + /** 获取amm ticks */ + amm_getTicksData: AmmTicksDataResult; announcement_getAnnouncement?: Maybe; approval?: Maybe; approvals: Array; @@ -12577,6 +12612,7 @@ export type Query = { /** get service charges for vdodo */ vdodo_getServiceCharges: VdodoVdodoServiceChargesResult; vdodo_getStats: VdodoStatsResult; + ve33_token_list?: Maybe>>; withdrawFundHistories: Array; withdrawFundHistory?: Maybe; withdrawReserve?: Maybe; @@ -12644,6 +12680,10 @@ export type QueryAllsArgs = { where?: InputMaybe; }; +export type QueryAmm_GetTicksDataArgs = { + where?: InputMaybe; +}; + export type QueryAnnouncement_GetAnnouncementArgs = { lang?: InputMaybe; }; @@ -14778,6 +14818,10 @@ export type QueryVdodo_GetStatsArgs = { where?: InputMaybe; }; +export type QueryVe33_Token_ListArgs = { + where?: InputMaybe; +}; + export type QueryWithdrawFundHistoriesArgs = { block?: InputMaybe; first?: InputMaybe; @@ -20144,6 +20188,23 @@ export type VdodoVdodoServiceChargesResult = { pool_fees_total: Scalars['String']['output']; }; +export type Ve33_TokenVe33Token = { + address?: Maybe; + chainId?: Maybe; + decimals?: Maybe; + logo?: Maybe; + name?: Maybe; + position?: Maybe; + slippage?: Maybe; + symbol?: Maybe; +}; + +export type Ve33_TokenlistFilter = { + chainId?: InputMaybe; + page?: InputMaybe; + pageSize?: InputMaybe; +}; + export type WithdrawFundHistory = { chain: Scalars['String']['output']; /** id hash-logindex */ @@ -20609,6 +20670,23 @@ export type FetchErc20ForecastSlippageQuery = { } | null; }; +export type Ve33_Token_ListQueryVariables = Exact<{ + where?: InputMaybe; +}>; + +export type Ve33_Token_ListQuery = { + ve33_token_list?: Array<{ + name?: string | null; + address?: string | null; + symbol?: string | null; + decimals?: number | null; + slippage?: string | null; + position?: number | null; + chainId?: number | null; + logo?: string | null; + } | null> | null; +}; + export type TicksQueryVariables = Exact<{ where?: InputMaybe; skip?: InputMaybe; @@ -21451,6 +21529,23 @@ export const FetchErc20ForecastSlippageDocument = new TypedDocumentString(` FetchErc20ForecastSlippageQuery, FetchErc20ForecastSlippageQueryVariables >; +export const Ve33_Token_ListDocument = new TypedDocumentString(` + query Ve33_token_list($where: Ve33_tokenlistFilter) { + ve33_token_list(where: $where) { + name + address + symbol + decimals + slippage + position + chainId + logo + } +} + `) as unknown as TypedDocumentString< + Ve33_Token_ListQuery, + Ve33_Token_ListQueryVariables +>; export const TicksDocument = new TypedDocumentString(` query Ticks($where: Tick_filter, $skip: Int, $first: Int) { ticks(where: $where, skip: $skip, first: $first) { diff --git a/packages/dodoex-api/src/services/TokenApi/graphqlQuery.ts b/packages/dodoex-api/src/services/TokenApi/graphqlQuery.ts index 1fa68ab3..71bb833e 100644 --- a/packages/dodoex-api/src/services/TokenApi/graphqlQuery.ts +++ b/packages/dodoex-api/src/services/TokenApi/graphqlQuery.ts @@ -40,4 +40,18 @@ export const tokenGraphqlQuery = { } } `), + fetchVe33TokenList: graphql(` + query Ve33_token_list($where: Ve33_tokenlistFilter) { + ve33_token_list(where: $where) { + name + address + symbol + decimals + slippage + position + chainId + logo + } + } + `), }; diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index c5dc75a3..9f811564 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.0.2-beta.17", + "version": "3.0.4-ve33.1", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", @@ -23,7 +23,7 @@ "release": "semantic-release", "release:local": "np --any-branch --no-cleanup --no-tests", "release.npm-publish": "npm publish --access public", - "release.npm-publish-beta": "npm publish --tag beta", + "release.npm-publish-beta": "yarn run build && npm publish --tag beta", "test": "jest src", "test:e2e": "jest e2e" }, @@ -58,7 +58,7 @@ }, "dependencies": { "@babel/runtime": "^7.17.0", - "@dodoex/api": "3.0.3-beta.2", + "@dodoex/api": "3.0.4-ve33.1", "@dodoex/components": "3.0.3", "@dodoex/contract-request": "^1.3.0", "@dodoex/dodo-contract-request": "1.10.0-alpha.3", diff --git a/packages/dodoex-widgets/src/constants/chainList.ts b/packages/dodoex-widgets/src/constants/chainList.ts index 1f7fdcd1..929eef22 100644 --- a/packages/dodoex-widgets/src/constants/chainList.ts +++ b/packages/dodoex-widgets/src/constants/chainList.ts @@ -213,6 +213,14 @@ export const chainListMap: Map = new Map([ name: 'Morph', }, ], + [ + ChainId.MORPH_HOLESKY_TESTNET, + { + chainId: ChainId.MORPH_HOLESKY_TESTNET, + logo: MorphLogo, + name: 'Morph Holesky Testnet', + }, + ], ]); export const isTestNet = (chainId: ChainId) => { diff --git a/packages/dodoex-widgets/src/constants/chains.ts b/packages/dodoex-widgets/src/constants/chains.ts index faa2fc4a..0ab5a0a8 100644 --- a/packages/dodoex-widgets/src/constants/chains.ts +++ b/packages/dodoex-widgets/src/constants/chains.ts @@ -55,6 +55,10 @@ export const rpcServerMap: { [ChainId.PLUME_TESTNET]: ['https://test-rpc.plumenetwork.xyz'], [ChainId.NEOX]: ['https://mainnet-1.rpc.banelabs.org'], [ChainId.MORPH]: ['https://rpc.morphl2.io'], + [ChainId.MORPH_HOLESKY_TESTNET]: [ + 'https://rpc-quicknode-holesky.morphl2.io', + 'https://rpc-holesky.morphl2.io', + ], }; export const getRpcSingleUrlMap = (newRpcServerMap?: { [chainId: number]: string[]; @@ -101,6 +105,7 @@ export const scanUrlDomainMap: { [ChainId.PLUME_TESTNET]: 'test-explorer.plumenetwork.xyz', [ChainId.NEOX]: 'xexplorer.neo.org', [ChainId.MORPH]: 'explorer.morphl2.io', + [ChainId.MORPH_HOLESKY_TESTNET]: 'explorer-holesky.morphl2.io', }; export const ThegraphKeyMap: { @@ -129,6 +134,7 @@ export const ThegraphKeyMap: { [ChainId.PLUME_TESTNET]: 'plume-testnet', [ChainId.NEOX]: 'neox', [ChainId.MORPH]: 'morph', + [ChainId.MORPH_HOLESKY_TESTNET]: 'morph-testnet', }; export const blockTimeMap: { @@ -157,6 +163,7 @@ export const blockTimeMap: { [ChainId.PLUME_TESTNET]: 2600, [ChainId.NEOX]: 12000, [ChainId.MORPH]: 3200, + [ChainId.MORPH_HOLESKY_TESTNET]: 4200, }; export const dexKeysMap: { @@ -185,4 +192,5 @@ export const dexKeysMap: { [ChainId.PLUME_TESTNET]: [], [ChainId.NEOX]: [], [ChainId.MORPH]: [], + [ChainId.MORPH_HOLESKY_TESTNET]: [], }; diff --git a/packages/dodoex-widgets/src/hooks/Token/useInitTokenList.ts b/packages/dodoex-widgets/src/hooks/Token/useInitTokenList.ts index 8c646ac9..f69f8c86 100644 --- a/packages/dodoex-widgets/src/hooks/Token/useInitTokenList.ts +++ b/packages/dodoex-widgets/src/hooks/Token/useInitTokenList.ts @@ -1,12 +1,10 @@ -import { useWeb3React } from '@web3-react/core'; +import { isArray, unionBy } from 'lodash'; import { useEffect } from 'react'; import { useDispatch } from 'react-redux'; -import { unionBy, isArray } from 'lodash'; +import defaultTokens from '../../constants/tokenList'; import { AppThunkDispatch } from '../../store/actions'; import { setPopularTokenList, setTokenList } from '../../store/actions/token'; import { TokenList, TokenListType } from './type'; -import { useCurrentChainId } from '../ConnectWallet'; -import defaultTokens from '../../constants/tokenList'; export interface InitTokenListProps { tokenList?: TokenList | TokenListType; @@ -17,8 +15,6 @@ export default function useInitTokenList({ popularTokenList, }: InitTokenListProps) { const dispatch = useDispatch(); - const { account } = useWeb3React(); - const chainId = useCurrentChainId(); useEffect(() => { const computed = async () => { diff --git a/packages/dodoex-widgets/src/store/actions/token.ts b/packages/dodoex-widgets/src/store/actions/token.ts index 4e98d435..df80b039 100644 --- a/packages/dodoex-widgets/src/store/actions/token.ts +++ b/packages/dodoex-widgets/src/store/actions/token.ts @@ -1,7 +1,6 @@ -import BigNumber from 'bignumber.js'; import { AppThunkAction } from '.'; -import { TokenList, TokenInfo } from '../../hooks/Token'; -import { AccountBalances, SlippageWithToken } from '../reducers/token'; +import { TokenInfo, TokenList } from '../../hooks/Token'; +import { SlippageWithToken } from '../reducers/token'; export const setTokenList = (tokenList: TokenList): AppThunkAction => { return async (dispatch) => { diff --git a/packages/dodoex-widgets/src/store/selectors/token.ts b/packages/dodoex-widgets/src/store/selectors/token.ts index d6a491ae..345afade 100644 --- a/packages/dodoex-widgets/src/store/selectors/token.ts +++ b/packages/dodoex-widgets/src/store/selectors/token.ts @@ -1,9 +1,7 @@ -import BigNumber from 'bignumber.js'; import { ChainId } from '@dodoex/api'; -import type { DefaultTokenInfo } from '../../hooks/Token'; +import { unionBy } from 'lodash'; import { store } from '..'; import { RootState } from '../reducers'; -import { unionBy } from 'lodash'; export const getTokenList = (state?: RootState) => { return (state ?? store.getState()).token.tokenList; From 0aeb964cc9a975ee6630b52fe6c50b124eea7a1d Mon Sep 17 00:00:00 2001 From: yrjkqq Date: Tue, 1 Apr 2025 14:52:56 +0800 Subject: [PATCH 02/18] feat: update @dodoex/components to version 3.0.4-ve33.1, enhance Swap widget with improved slippage settings, and refactor related components --- packages/doc/package.json | 2 +- .../doc/src/stories/widgets/Swap.stories.tsx | 28 +--- packages/dodoex-components/package.json | 4 +- .../dodoex-components/src/Tooltip/Tooltip.tsx | 2 +- packages/dodoex-widgets/package.json | 4 +- .../Swap/components/ReviewDialog.tsx | 37 +++-- .../components/SwapSettingsDialog/index.tsx | 155 +++++++++++++++--- .../src/components/Swap/index.tsx | 94 ++++------- packages/dodoex-widgets/src/constants/swap.ts | 18 ++ .../src/hooks/Swap/useExecuteSwap.ts | 10 +- .../src/hooks/Swap/useFetchRoutePrice.test.ts | 139 ---------------- .../src/hooks/Swap/useFetchRoutePrice.ts | 18 +- .../src/hooks/Swap/useSlippageLimit.ts | 16 +- .../src/hooks/Swap/useSwapSettingStore.ts | 4 +- packages/dodoex-widgets/src/index.tsx | 54 +++--- packages/dodoex-widgets/src/locales/en-US.js | 2 +- packages/dodoex-widgets/src/locales/en-US.po | 87 +++++----- packages/dodoex-widgets/src/locales/zh-CN.js | 2 +- packages/dodoex-widgets/src/locales/zh-CN.po | 87 +++++----- 19 files changed, 361 insertions(+), 402 deletions(-) delete mode 100644 packages/dodoex-widgets/src/hooks/Swap/useFetchRoutePrice.test.ts diff --git a/packages/doc/package.json b/packages/doc/package.json index 8150a465..b9a86113 100644 --- a/packages/doc/package.json +++ b/packages/doc/package.json @@ -8,7 +8,7 @@ }, "dependencies": { "@babel/runtime": "^7.17.0", - "@dodoex/components": "^3.0.3", + "@dodoex/components": "^3.0.4-ve33.1", "@emotion/styled": "^11.10.0", "@storybook/addon-docs": "^8.3.5", "@web3modal/ethers5": "^3.5.5", diff --git a/packages/doc/src/stories/widgets/Swap.stories.tsx b/packages/doc/src/stories/widgets/Swap.stories.tsx index e341d2c7..27046b13 100644 --- a/packages/doc/src/stories/widgets/Swap.stories.tsx +++ b/packages/doc/src/stories/widgets/Swap.stories.tsx @@ -1,17 +1,19 @@ -import { ComponentStory, ComponentMeta } from '@storybook/react'; import { SwapWidget } from '@dodoex/widgets'; -import { TokenInfo } from '@dodoex/widgets/dist/src/hooks/Token/type'; // More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export export default { title: 'Widgets/Swap', - component: SwapWidget, + component: 'div', }; -export const Primary = (args) => ; +export const Primary = (props: any) => { + const { projectId, apiKey, ...other } = props; + + return ; +}; Primary.args = { - apikey: 'ef9apopzq9qrgntjubojbxe7hy4z5eez', + apiKey: 'ef9apopzq9qrgntjubojbxe7hy4z5eez', popularTokenList: [], tokenList: [ { @@ -31,20 +33,4 @@ Primary.args = { ], crossChain: false, onlyChainId: 2810, - getAutoSlippage: ({ - fromToken, - toToken, - }: { - fromToken: TokenInfo | null; - toToken: TokenInfo | null; - }) => { - if (!fromToken || !toToken || fromToken.chainId !== toToken.chainId) { - return undefined; - } - return new Promise((resolve) => { - setTimeout(() => { - resolve(0.9); - }, 1000); - }); - }, }; diff --git a/packages/dodoex-components/package.json b/packages/dodoex-components/package.json index 5565165d..9a865eb7 100644 --- a/packages/dodoex-components/package.json +++ b/packages/dodoex-components/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/components", - "version": "3.0.3", + "version": "3.0.4-ve33.1", "description": "UI component library", "source": "src/index.ts", "types": "dist/types/index.d.ts", @@ -13,7 +13,7 @@ "publish-sample": "npm publish --access public", "prerelease": "yarn run build", "release": "np --any-branch --no-cleanup --no-tests", - "release.npm-publish-beta": "npm publish --tag beta" + "release.npm-publish-beta": "yarn run build &&npm publish --tag beta" }, "author": "", "publishConfig": { diff --git a/packages/dodoex-components/src/Tooltip/Tooltip.tsx b/packages/dodoex-components/src/Tooltip/Tooltip.tsx index 5c7af2cc..a3e5e302 100644 --- a/packages/dodoex-components/src/Tooltip/Tooltip.tsx +++ b/packages/dodoex-components/src/Tooltip/Tooltip.tsx @@ -91,7 +91,7 @@ export default function Tooltip({ /** This prop won't impact the enter click delay */ enterDelay = 100, /** This prop won't impact the enter click delay */ - leaveDelay = 0, + leaveDelay = 300, arrow = true, PopperProps, open: openProps, diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index 9f811564..cde6f1d1 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.0.4-ve33.1", + "version": "3.0.4-ve33.2", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", @@ -59,7 +59,7 @@ "dependencies": { "@babel/runtime": "^7.17.0", "@dodoex/api": "3.0.4-ve33.1", - "@dodoex/components": "3.0.3", + "@dodoex/components": "3.0.4-ve33.1", "@dodoex/contract-request": "^1.3.0", "@dodoex/dodo-contract-request": "1.10.0-alpha.3", "@dodoex/icons": "^2.0.2", diff --git a/packages/dodoex-widgets/src/components/Swap/components/ReviewDialog.tsx b/packages/dodoex-widgets/src/components/Swap/components/ReviewDialog.tsx index 3fc34bc2..ae9fe88b 100644 --- a/packages/dodoex-widgets/src/components/Swap/components/ReviewDialog.tsx +++ b/packages/dodoex-widgets/src/components/Swap/components/ReviewDialog.tsx @@ -1,27 +1,29 @@ -import { Trans } from '@lingui/macro'; -import BigNumber from 'bignumber.js'; -import { useEffect, useState, useMemo } from 'react'; -import Dialog, { DialogProps } from './Dialog'; import { Box, Button, ButtonBase, - useTheme, LoadingSkeleton, + useTheme, } from '@dodoex/components'; -import { TokenInfo } from '../../../hooks/Token'; -import { formatTokenAmountNumber } from '../../../utils/formatter'; -import { formatReadableNumber } from '../../../utils/formatter'; -import TokenLogo from '../../TokenLogo'; -import { DetailBorder, Done, CaretUp, DoubleRight } from '@dodoex/icons'; -import { getContractStatus } from '../../../store/selectors/globals'; -import { ContractStatus } from '../../../store/reducers/globals'; +import { CaretUp, DetailBorder, Done, DoubleRight } from '@dodoex/icons'; +import { Trans } from '@lingui/macro'; +import BigNumber from 'bignumber.js'; +import { useEffect, useMemo, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; -import { AppThunkDispatch } from '../../../store/actions'; -import useInflights from '../../../hooks/Submission/useInflights'; import { PRICE_IMPACT_THRESHOLD } from '../../../constants/swap'; -import { QuestionTooltip } from '../../Tooltip'; +import { useSwapSettingStore } from '../../../hooks/Swap/useSwapSettingStore'; +import { TokenInfo } from '../../../hooks/Token'; +import { AppThunkDispatch } from '../../../store/actions'; import { setContractStatus } from '../../../store/actions/globals'; +import { ContractStatus } from '../../../store/reducers/globals'; +import { getContractStatus } from '../../../store/selectors/globals'; +import { + formatReadableNumber, + formatTokenAmountNumber, +} from '../../../utils/formatter'; +import TokenLogo from '../../TokenLogo'; +import { QuestionTooltip } from '../../Tooltip'; +import Dialog from './Dialog'; export interface ReviewDialogProps { open: boolean; @@ -40,7 +42,6 @@ export interface ReviewDialogProps { curFromFiatPrice: BigNumber | null; pricePerFromToken: number | null; loading: boolean; - slippage: string | number | null; } export function ReviewDialog({ open, @@ -59,11 +60,13 @@ export function ReviewDialog({ pricePerFromToken, additionalFeeAmount, loading, - slippage, }: ReviewDialogProps) { const theme = useTheme(); + const dispatch = useDispatch(); const contractStatus = useSelector(getContractStatus); + const slippage = useSwapSettingStore((state) => state.slippage); + const isPriceWaningShown = useMemo( () => new BigNumber(priceImpact).gt(PRICE_IMPACT_THRESHOLD), [priceImpact], diff --git a/packages/dodoex-widgets/src/components/Swap/components/SwapSettingsDialog/index.tsx b/packages/dodoex-widgets/src/components/Swap/components/SwapSettingsDialog/index.tsx index f952ac8f..a6416748 100644 --- a/packages/dodoex-widgets/src/components/Swap/components/SwapSettingsDialog/index.tsx +++ b/packages/dodoex-widgets/src/components/Swap/components/SwapSettingsDialog/index.tsx @@ -1,31 +1,26 @@ +import { Box, ButtonBase, Input, useTheme } from '@dodoex/components'; import { Trans } from '@lingui/macro'; -import Dialog from '../Dialog'; -import { Box, Input, useTheme } from '@dodoex/components'; +import { throttle } from 'lodash'; import React from 'react'; -import { TokenInfo } from '../../../../hooks/Token'; -import SlippageSetting from './SlippageSetting'; -import QuestionTooltip from '../../../Tooltip/QuestionTooltip'; -import { DEFAULT_SWAP_DDL } from '../../../../constants/swap'; +import { + DEFAULT_SWAP_DDL, + DEFAULT_SWAP_SLIPPAGE, + SWAP_SLIPPAGE_LIST, +} from '../../../../constants/swap'; import { useSwapSettingStore } from '../../../../hooks/Swap/useSwapSettingStore'; import { TextSwitch } from '../../../TextSwitch'; +import QuestionTooltip from '../../../Tooltip/QuestionTooltip'; +import Dialog from '../Dialog'; import MoreTradeSetting from './MoreTradeSetting'; -import { throttle } from 'lodash'; export interface SwapSettingsDialogProps { open: boolean; onClose: () => void; - fromToken?: TokenInfo | null; - toToken?: TokenInfo | null; } -export function SwapSettingsDialog({ - open, - onClose, - fromToken, - toToken, -}: SwapSettingsDialogProps) { +export function SwapSettingsDialog({ open, onClose }: SwapSettingsDialogProps) { const theme = useTheme(); - const { ddl, expertMode, disableIndirectRouting } = useSwapSettingStore(); + const { slippage, ddl, disableIndirectRouting } = useSwapSettingStore(); const scrollRef = React.useRef(null); const [showMoreSettingEntry, setShowMoreSettingEntry] = React.useState(false); @@ -75,11 +70,124 @@ export function SwapSettingsDialog({ }} ref={scrollRef} > - + + + Slippage Tolerance + + Slippage is the difference between the current market price of + a token and the price at which the actual swap is executed. + Volatile tokens usually require a larger value. + + } + /> + + + + % + + } + value={slippage} + onChange={(evt) => { + useSwapSettingStore.setState({ + slippage: evt.target.value, + }); + }} + onBlur={() => { + const value = Number(slippage); + + if (!slippage || isNaN(value) || value <= 0) { + useSwapSettingStore.setState({ + slippage: String(DEFAULT_SWAP_SLIPPAGE), + }); + } + }} + /> + + {SWAP_SLIPPAGE_LIST.map((item) => { + const isActive = Number(slippage) === Number(item.value); + return ( + { + useSwapSettingStore.setState({ + slippage: item.value, + }); + }} + > + {item.value}% + + ); + })} + + + @@ -124,6 +232,15 @@ export function SwapSettingsDialog({ ddl: evt.target.value, }); }} + onBlur={() => { + const value = Number(ddl); + + if (!slippage || isNaN(value) || value <= 0) { + useSwapSettingStore.setState({ + ddl: String(DEFAULT_SWAP_DDL), + }); + } + }} /> minutes @@ -134,7 +251,7 @@ export function SwapSettingsDialog({ flexDirection: 'column', gap: 12, mt: 24, - pt: 14, + pt: 24, borderTop: `solid 1px ${theme.palette.border.main}`, }} > diff --git a/packages/dodoex-widgets/src/components/Swap/index.tsx b/packages/dodoex-widgets/src/components/Swap/index.tsx index 01347e24..1c8f9736 100644 --- a/packages/dodoex-widgets/src/components/Swap/index.tsx +++ b/packages/dodoex-widgets/src/components/Swap/index.tsx @@ -1,45 +1,29 @@ -import BigNumber from 'bignumber.js'; -import { debounce } from 'lodash'; +import { ChainId } from '@dodoex/api'; import { Box, Button, ButtonBase, - useTheme, RotatingIcon, Tooltip, + useTheme, } from '@dodoex/components'; -import { formatTokenAmountNumber } from '../../utils'; -import { useMemo, useState, useEffect, useCallback } from 'react'; -import { useDispatch } from 'react-redux'; import { + Dodo, + DoubleRight, Setting, SettingCrossChain, - Dodo, Warn, - DoubleRight, } from '@dodoex/icons'; import { Trans, t } from '@lingui/macro'; -import { TokenCard } from './components/TokenCard'; -import { QuestionTooltip } from '../Tooltip'; -import { SwitchBox } from './components/SwitchBox'; -import { ReviewDialog } from './components/ReviewDialog'; -import { SettingsDialog } from './components/SettingsDialog'; -import { RoutePriceStatus } from '../../hooks/Swap'; -import { TokenPairPriceWithToggle } from './components/TokenPairPriceWithToggle'; -import ConnectWallet from './components/ConnectWallet'; -import { TokenInfo } from '../../hooks/Token/type'; -import { - useMarginAmount, - useFetchFiatPrice, - useFetchRoutePrice, -} from '../../hooks/Swap'; -import { formatReadableNumber } from '../../utils/formatter'; import { useWeb3React } from '@web3-react/core'; +import BigNumber from 'bignumber.js'; +import { debounce } from 'lodash'; +import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useDispatch } from 'react-redux'; import { AppUrl } from '../../constants/api'; -import { ChainId } from '@dodoex/api'; import { basicTokenMap } from '../../constants/chains'; +import { setLastToken } from '../../constants/localstorage'; import { PRICE_IMPACT_THRESHOLD } from '../../constants/swap'; -import TokenLogo from '../TokenLogo'; import { swapAlertEnterAmountBtn, swapAlertFetchPriceBtn, @@ -47,42 +31,50 @@ import { swapAlertSelectTokenBtn, swapReviewBtn, } from '../../constants/testId'; -import useInflights from '../../hooks/Submission/useInflights'; -import { AppThunkDispatch } from '../../store/actions'; import { useFetchRoutePriceBridge } from '../../hooks/Bridge/useFetchRoutePriceBridge'; -import SelectBridgeDialog from '../Bridge/SelectBridgeDialog'; -import BridgeRouteShortCard from '../Bridge/BridgeRouteShortCard'; import { useSendRoute } from '../../hooks/Bridge/useSendRoute'; -import BridgeSummaryDialog from '../Bridge/BridgeSummaryDialog'; -import ErrorMessageDialog from '../ErrorMessageDialog'; import { useSwitchBridgeOrSwapSlippage } from '../../hooks/Bridge/useSwitchBridgeOrSwapSlippage'; +import useInflights from '../../hooks/Submission/useInflights'; +import { + RoutePriceStatus, + useFetchFiatPrice, + useFetchRoutePrice, + useMarginAmount, +} from '../../hooks/Swap'; import { useInitDefaultToken } from '../../hooks/Swap/useInitDefaultToken'; -import { setLastToken } from '../../constants/localstorage'; import { maxSlippageWarning, useSlippageLimit, } from '../../hooks/Swap/useSlippageLimit'; +import { TokenInfo } from '../../hooks/Token/type'; import { useDisabledTokenSwitch } from '../../hooks/Token/useDisabledTokenSwitch'; -import { - GetAutoSlippage, - useSetAutoSlippage, -} from '../../hooks/setting/useSetAutoSlippage'; -import { setFromTokenChainId } from '../../store/actions/wallet'; import { useTokenStatus } from '../../hooks/Token/useTokenStatus'; import { useFetchETHBalance } from '../../hooks/contract'; +import { AppThunkDispatch } from '../../store/actions'; +import { setFromTokenChainId } from '../../store/actions/wallet'; +import { formatTokenAmountNumber } from '../../utils'; +import { formatReadableNumber } from '../../utils/formatter'; +import BridgeRouteShortCard from '../Bridge/BridgeRouteShortCard'; +import BridgeSummaryDialog from '../Bridge/BridgeSummaryDialog'; +import SelectBridgeDialog from '../Bridge/SelectBridgeDialog'; +import ErrorMessageDialog from '../ErrorMessageDialog'; +import TokenLogo from '../TokenLogo'; +import { QuestionTooltip } from '../Tooltip'; import { useUserOptions } from '../UserOptionsProvider'; +import ConnectWallet from './components/ConnectWallet'; +import { ReviewDialog } from './components/ReviewDialog'; +import { SettingsDialog } from './components/SettingsDialog'; import { SwapSettingsDialog } from './components/SwapSettingsDialog'; -import { useSwapSlippage } from '../../hooks/Swap/useSwapSlippage'; +import { SwitchBox } from './components/SwitchBox'; +import { TokenCard } from './components/TokenCard'; +import { TokenPairPriceWithToggle } from './components/TokenPairPriceWithToggle'; export interface SwapProps { - /** Higher priority setting slippage */ - getAutoSlippage?: GetAutoSlippage; onPayTokenChange?: (token: TokenInfo) => void; onReceiveTokenChange?: (token: TokenInfo) => void; } export function Swap({ - getAutoSlippage, onPayTokenChange, onReceiveTokenChange, }: SwapProps = {}) { @@ -134,17 +126,6 @@ export function Swap({ fiatPrice: isReverseRouting ? toFiatPrice : fromFiatPrice, }); - useSetAutoSlippage({ - fromToken, - toToken, - getAutoSlippage, - }); - const { slippage: slippageSwap, slippageLoading: slippageLoadingSwap } = - useSwapSlippage({ - fromToken, - toToken, - }); - const fromEtherTokenQuery = useFetchETHBalance(fromToken?.chainId); const { bridgeRouteList, status: bridgeRouteStatus } = @@ -222,8 +203,6 @@ export function Swap({ toAmount: toAmt, estimateGas, isReverseRouting, - slippage: slippageSwap, - slippageLoading: slippageLoadingSwap, }); const { resAmount, @@ -393,9 +372,7 @@ export function Swap({ setIsReverseRouting(true); }, [isReverseRouting, updateToAmt, dispatch]); - const isSlippageExceedLimit = useSlippageLimit( - isBridge ? undefined : slippageSwap, - ); + const isSlippageExceedLimit = useSlippageLimit(); const displayPriceImpact = useMemo( () => (Number(priceImpact) * 100).toFixed(2), @@ -1037,7 +1014,6 @@ export function Swap({ pricePerFromToken={resPricePerFromToken} onClose={() => setIsReviewDialogOpen(false)} loading={resPriceStatus === RoutePriceStatus.Loading} - slippage={slippageSwap} /> {isBridge ? ( setIsSettingsDialogOpen(false)} - fromToken={fromToken} - toToken={toToken} /> )} ({ - useUserOptions: () => ({ - defaultChainId: 1, - }), -})); -jest.mock('react-redux', () => ({ - ...jest.requireActual('react-redux'), - useDispatch: () => jest.fn(), - useSelector: (fn: () => any) => { - if (typeof fn === 'function') { - return fn(); - } - return []; - }, -})); -jest.mock('@web3-react/core', () => ({ - useWeb3React: () => ({ - account: '0x2Ba1633338dDD2Ab37fbc95ea615BA98f0445380', - }), -})); - -describe('useFetchRoutePrice: request success', () => { - const res = { - data: { - data: { - data: '', - msgError: '', - priceImpact: 0.0005, - resAmount: 1.23, - baseFeeAmount: 0.0015, // support in share profit version - additionalFeeAmount: 0.0015, // support in share profit version - resPricePerFromToken: 1288.37, - resPricePerToToken: 0.00077, - routeData: '', - targetApproveAddr: '', - targetDecimals: 18, - to: '0xa2398842F37465f89540430bDC00219fA9E4D28a', - useSource: 'dodoV1AndV2AndUni', - }, - }, - }; - (axios.get as any).mockImplementationOnce(() => Promise.resolve(res)); - const { result } = renderHook(() => - useFetchRoutePrice({ - toToken: tokenEther, - fromToken: tokenUSDT, - fromAmount: '1.1', - marginAmount: '0', - toAmount: '', - }), - ); - - it('Returns params', () => { - const { status, rawBrief } = result.current; - const { - resAmount, - priceImpact, - baseFeeAmount, - additionalFeeAmount, - resPricePerToToken, - resPricePerFromToken, - } = rawBrief || {}; - expect(status).toBe(RoutePriceStatus.Success); - expect(resAmount).toBe(1.23); - expect(priceImpact).toBe(0.0005); - expect(baseFeeAmount).toBe(0.0015); - expect(additionalFeeAmount).toBe(0.0015); - expect(resPricePerToToken).toBe(0.00077); - expect(resPricePerFromToken).toBe(1288.37); - }); -}); - -describe('useFetchRoutePrice: skip request', () => { - const errorMessage = 'Network Error'; - const res = { - data: { - data: {}, - }, - }; - // (axios.get as any).mockImplementationOnce(() => - // Promise.reject(errorMessage), - // ); - (axios.get as any).mockImplementationOnce(() => Promise.resolve(res)); - const { result } = renderHook(() => - useFetchRoutePrice({ - toToken: tokenEther, - fromToken: tokenUSDTChainBSC, - fromAmount: '1.1', - marginAmount: '0', - toAmount: '', - }), - ); - - it('Returns params', () => { - const { status } = result.current; - expect(status).toBe(RoutePriceStatus.Initial); - }); -}); - -describe('useFetchRoutePrice: request failed', () => { - const errorMessage = 'Network Error'; - const res = { - data: { - data: {}, - }, - }; - // (axios.get as any).mockImplementationOnce(() => - // Promise.reject(errorMessage), - // ); - (axios.get as any).mockImplementationOnce(() => Promise.resolve(res)); - const { result } = renderHook(() => - useFetchRoutePrice({ - toToken: tokenEther, - fromToken: tokenUSDT, - fromAmount: '1.1', - marginAmount: '0', - toAmount: '', - }), - ); - - it('Returns params', () => { - const { status } = result.current; - expect(status).toBe(RoutePriceStatus.Failed); - }); -}); diff --git a/packages/dodoex-widgets/src/hooks/Swap/useFetchRoutePrice.ts b/packages/dodoex-widgets/src/hooks/Swap/useFetchRoutePrice.ts index e056d777..b512b393 100644 --- a/packages/dodoex-widgets/src/hooks/Swap/useFetchRoutePrice.ts +++ b/packages/dodoex-widgets/src/hooks/Swap/useFetchRoutePrice.ts @@ -1,6 +1,6 @@ -import axios from 'axios'; -import { useWeb3React } from '@web3-react/core'; import { parseFixed } from '@ethersproject/bignumber'; +import { useWeb3React } from '@web3-react/core'; +import axios from 'axios'; import React, { useCallback, useEffect, @@ -8,13 +8,13 @@ import React, { useRef, useState, } from 'react'; +import { useUserOptions } from '../../components/UserOptionsProvider'; import { EmptyAddress } from '../../constants/address'; -import { usePriceTimer } from './usePriceTimer'; -import useExecuteSwap from './useExecuteSwap'; +import { APIServiceKey } from '../../constants/api'; import { TokenInfo } from '../Token'; import { useGetAPIService } from '../setting/useGetAPIService'; -import { APIServiceKey } from '../../constants/api'; -import { useUserOptions } from '../../components/UserOptionsProvider'; +import useExecuteSwap from './useExecuteSwap'; +import { usePriceTimer } from './usePriceTimer'; import { useSwapSettingStore } from './useSwapSettingStore'; export enum RoutePriceStatus { @@ -31,8 +31,6 @@ export interface FetchRoutePrice { toAmount: string; estimateGas?: boolean; isReverseRouting?: boolean; - slippage?: number; - slippageLoading?: boolean; } interface IRouteResponse { @@ -57,8 +55,6 @@ export function useFetchRoutePrice({ marginAmount, estimateGas, isReverseRouting, - slippage, - slippageLoading, }: FetchRoutePrice) { const { account, chainId: walletChainId, provider } = useWeb3React(); const { defaultChainId, feeRate, rebateTo, apikey } = useUserOptions(); @@ -67,6 +63,7 @@ export function useFetchRoutePrice({ [walletChainId, fromToken, defaultChainId], ); const ddl = useSwapSettingStore((state) => Number(state.ddl)); + const slippage = useSwapSettingStore((state) => Number(state.slippage)); const disableIndirectRouting = useSwapSettingStore((state) => Number(state.disableIndirectRouting), ); @@ -105,6 +102,7 @@ export function useFetchRoutePrice({ chainId, deadLine: apiDdl, apikey, + // 3% 传 3 slippage, source: disableIndirectRouting ? 'noMaxHops' : 'dodoV2AndMixWasm', toTokenAddress: toToken.address, diff --git a/packages/dodoex-widgets/src/hooks/Swap/useSlippageLimit.ts b/packages/dodoex-widgets/src/hooks/Swap/useSlippageLimit.ts index 33e29f01..3aa61043 100644 --- a/packages/dodoex-widgets/src/hooks/Swap/useSlippageLimit.ts +++ b/packages/dodoex-widgets/src/hooks/Swap/useSlippageLimit.ts @@ -1,16 +1,12 @@ -import { useSelector } from 'react-redux'; -import { getSlippage } from '../../store/selectors/settings'; -import { useDefaultSlippage } from '../setting/useDefaultSlippage'; import { useMemo } from 'react'; +import { useSwapSettingStore } from './useSwapSettingStore'; export const maxSlippageWarning = 5; -export const useSlippageLimit = (slippageSwap?: number) => { - const { defaultSlippage } = useDefaultSlippage(slippageSwap === undefined); - const slippage = useSelector(getSlippage) || defaultSlippage; +export const useSlippageLimit = () => { + const slippage = useSwapSettingStore((state) => state.slippage); + return useMemo(() => { - const compareSlippage = - slippageSwap === undefined ? Number(slippage) : slippageSwap; - return compareSlippage > maxSlippageWarning; - }, [slippage, slippageSwap]); + return Number(slippage) > maxSlippageWarning; + }, [slippage]); }; diff --git a/packages/dodoex-widgets/src/hooks/Swap/useSwapSettingStore.ts b/packages/dodoex-widgets/src/hooks/Swap/useSwapSettingStore.ts index e8ebcd8e..b72027ff 100644 --- a/packages/dodoex-widgets/src/hooks/Swap/useSwapSettingStore.ts +++ b/packages/dodoex-widgets/src/hooks/Swap/useSwapSettingStore.ts @@ -1,6 +1,6 @@ import { create } from 'zustand'; import { persist, createJSONStorage } from 'zustand/middleware'; -import { DEFAULT_SWAP_DDL } from '../../constants/swap'; +import { DEFAULT_SWAP_DDL, DEFAULT_SWAP_SLIPPAGE } from '../../constants/swap'; export interface CustomSwapPairSlippage { account: string; @@ -30,6 +30,7 @@ interface SwapSettingState { ddl: string; expertMode: boolean; disableIndirectRouting: boolean; + slippage: string; } export const useSwapSettingStore = create( @@ -42,6 +43,7 @@ export const useSwapSettingStore = create( ddl: String(DEFAULT_SWAP_DDL), expertMode: false, disableIndirectRouting: false, + slippage: String(DEFAULT_SWAP_SLIPPAGE), }), { name: 'swap-setting-storage', diff --git a/packages/dodoex-widgets/src/index.tsx b/packages/dodoex-widgets/src/index.tsx index db36d7cb..e9bec767 100644 --- a/packages/dodoex-widgets/src/index.tsx +++ b/packages/dodoex-widgets/src/index.tsx @@ -1,61 +1,60 @@ -import { Swap, SwapProps } from './components/Swap'; import { createRoot } from 'react-dom/client'; +import { Swap, SwapProps } from './components/Swap'; import { Widget, WidgetProps } from './components/Widget'; -export { useRouterStore, PageType } from './router'; +import { Pool } from './widgets/PoolWidget'; +export { PageType, useRouterStore } from './router'; export type { Page } from './router'; export { WIDGET_CLASS_NAME } from './components/Widget'; export { MetadataFlag } from './hooks/Submission/types'; -export { rpcServerMap, scanUrlDomainMap } from './constants/chains'; -export { chainListMap } from './constants/chainList'; -import { Pool } from './widgets/PoolWidget'; -export { Widget, UnstyleWidget, Message } from './components/Widget'; -export { WIDGET_MODULE_CLASS_NAME } from './components/WidgetContainer'; -export type { WidgetProps } from './components/Widget'; -export type SwapWidgetProps = WidgetProps & SwapProps; -export type { TokenInfo } from './hooks/Token/type'; -export { useMessageState } from './hooks/useMessageState'; export { Swap } from './components/Swap'; export { default as SwapOrderHistory } from './components/Swap/SwapOrderHistory'; +export { Message, UnstyleWidget, Widget } from './components/Widget'; +export type { WidgetProps } from './components/Widget'; +export { WIDGET_MODULE_CLASS_NAME } from './components/WidgetContainer'; +export { chainListMap } from './constants/chainList'; +export { rpcServerMap, scanUrlDomainMap } from './constants/chains'; export { useTradeSwapOrderList } from './hooks/Swap/useTradeSwapOrderList'; +export type { TokenInfo } from './hooks/Token/type'; +export { useMessageState } from './hooks/useMessageState'; +export { MiningCreate } from './widgets/MiningWidget/MiningCreate'; +export { MiningDetail } from './widgets/MiningWidget/MiningDetail'; +export { MiningList } from './widgets/MiningWidget/MiningList'; export { Pool } from './widgets/PoolWidget'; -export { default as PoolList } from './widgets/PoolWidget/PoolList'; -export { default as PoolCreate } from './widgets/PoolWidget/PoolCreate'; export { default as AMMV2Create } from './widgets/PoolWidget/AMMV2Create'; -export { default as PoolModify } from './widgets/PoolWidget/PoolModify'; +export { default as AddLiquidityV3 } from './widgets/PoolWidget/AMMV3/AddLiquidityV3'; +export { AMMV3PositionManage } from './widgets/PoolWidget/AMMV3/AMMV3PositionManage'; +export { AMMV3PositionsView } from './widgets/PoolWidget/AMMV3/AMMV3PositionsView'; +export { usePoolBalanceInfo } from './widgets/PoolWidget/hooks/usePoolBalanceInfo'; +export { default as PoolCreate } from './widgets/PoolWidget/PoolCreate'; export { default as PoolDetail } from './widgets/PoolWidget/PoolDetail'; +export { default as PoolList } from './widgets/PoolWidget/PoolList'; +export { default as PoolModify } from './widgets/PoolWidget/PoolModify'; export { - default as PoolOperateDialog, PoolOperate, + default as PoolOperateDialog, } from './widgets/PoolWidget/PoolOperate'; export type { PoolOperateProps } from './widgets/PoolWidget/PoolOperate'; -export { usePoolBalanceInfo } from './widgets/PoolWidget/hooks/usePoolBalanceInfo'; -export { MiningList } from './widgets/MiningWidget/MiningList'; -export { MiningDetail } from './widgets/MiningWidget/MiningDetail'; -export { MiningCreate } from './widgets/MiningWidget/MiningCreate'; -export { default as AddLiquidityV3 } from './widgets/PoolWidget/AMMV3/AddLiquidityV3'; -export { AMMV3PositionsView } from './widgets/PoolWidget/AMMV3/AMMV3PositionsView'; -export { AMMV3PositionManage } from './widgets/PoolWidget/AMMV3/AMMV3PositionManage'; +export type SwapWidgetProps = WidgetProps & SwapProps; +export { EmptyList } from './components/List/EmptyList'; +export { FailedList } from './components/List/FailedList'; export { TokenCard } from './components/Swap/components/TokenCard'; export { default as TokenLogo } from './components/TokenLogo'; -export { FailedList } from './components/List/FailedList'; -export { EmptyList } from './components/List/EmptyList'; export { getEtherscanPage } from './utils/address'; export { + formatPercentageNumber, formatReadableNumber, - formatTokenAmountNumber, formatShortNumber, - formatPercentageNumber, + formatTokenAmountNumber, } from './utils/formatter'; export function SwapWidget(props: SwapWidgetProps) { return ( @@ -78,7 +77,6 @@ export function InitSwapWidget(props: SwapWidgetProps) { root.render( diff --git a/packages/dodoex-widgets/src/locales/en-US.js b/packages/dodoex-widgets/src/locales/en-US.js index f1993091..9ab0ca7e 100644 --- a/packages/dodoex-widgets/src/locales/en-US.js +++ b/packages/dodoex-widgets/src/locales/en-US.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"Transaction Time:\",\"+uZnU3\":\"Cross Chain\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"The current slippage protection coefficient set exceeds \",[\"maxSlippageWarning\"],\"%, which may result in losses.\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"Opening \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"To\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/nzjSF\":[[\"0\"],\" pending\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"Balance:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"Dismiss\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"Due to the market condition, market price and estimated price may have a slight difference\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" confirmed\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"The current network is inconsistent with the wallet - please switch in wallet\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"Current price impact\",\"6UYTy8\":\"Minute\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"Hour\",\"6lss/t\":\"Pricing Model\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"Enter the token symbol or address\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"Fee includes: Cross Chain fees + Swap fees. Gas fee not included.\",\"7VpPHA\":\"Confirm\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"This token is on\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"Estimated service provider fees\",\"93m8jT\":\"Basic Fee\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"Price impact exceeds the slippage tolerance you set. Try increasing the slippage tolerance.\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"s\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"This CP has been settled by other addrs\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"Max\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"Slippage\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"Insufficient funds - Please retry after depositing more \",[\"EtherTokenSymbol\"],\" into your wallet\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"Are you sure swapping to another chain?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"Destination\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"Unapproved\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"Insufficient cross-chain fees, need at least \",[\"0\"],\" \",[\"1\"]],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"Transaction Pending\",\"Fdp03t\":\"on\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"Day\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HuVZMK\":\"Days\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"Connecting...\",\"J39pAJ\":\"Additional Fee\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"Fetching best price...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"Review Swap\",\"K/PgcA\":\"Select Cross Chain\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"Attention: High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"Select Tokens\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"The setting has been switched to swap mode\",\"NVAuTg\":\"Quote not available\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"Fetching Price...\",\"OfhWJH\":\"Reset\",\"OgKD6h\":\"Best offer\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"Confirming\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"Fee\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"Confirm Cross Chain\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"Estimated Time\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"Swap summary\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"Tx\",\"S8G1qk\":\"Single\",\"SXnevP\":\"Review Cross Chain\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"Price Impact\",\"T0Y2+3\":\"Select a token\",\"TFOxRM\":\"Mins\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"Wallet incompatibility\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"Settings\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"Connect to your \",[\"0\"],\" Wallet\"],\"V+rJKF\":\"Seconds\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"Swap Detail\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"For\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"On\",\"Z7ZXbT\":\"Approve\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"Additional routing fees set by the Widget user\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"Maximum slippage do not exceed 50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"Minutes\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"Cancel\",\"dI46oG\":\"Auto switch network\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"Min\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"Transaction rejected.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"Service update, please wait and try again\",\"gz+9Rb\":\"Gas price is too low, please adjust in your wallet and try again\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC node data exception\",\"h5FVz1\":\"Estimated transaction time\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"Connect to your wallet\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"Enter an amount\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"Approving\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"Something went wrong.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"Second\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"Confirm swap\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"Slippage Tolerance\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"Send to:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"Unable to SETTLE during the cooling-off period\",\"qLkska\":\"The setting has been switched to cross chain mode\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"Connect to a wallet\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"Detail\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"SELECT TOKEN\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"Cross Chain Summary\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20: low-level call failed. Please contact the DODO team.\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"Unsupported network - switch to trade\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"Swap\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"Source\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"User denied transaction signature.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop exception\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"Hours\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"Close\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"Transaction Deadline\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"Insufficient balance\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"Transaction Time:\",\"+uZnU3\":\"Cross Chain\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"The current slippage protection coefficient set exceeds \",[\"maxSlippageWarning\"],\"%, which may result in losses.\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"Opening \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"To\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/nzjSF\":[[\"0\"],\" pending\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"Balance:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"Dismiss\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"Due to the market condition, market price and estimated price may have a slight difference\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" confirmed\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"The current network is inconsistent with the wallet - please switch in wallet\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"Current price impact\",\"6UYTy8\":\"Minute\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"Hour\",\"6lss/t\":\"Pricing Model\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"Enter the token symbol or address\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"Fee includes: Cross Chain fees + Swap fees. Gas fee not included.\",\"7VpPHA\":\"Confirm\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"This token is on\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"Estimated service provider fees\",\"93m8jT\":\"Basic Fee\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"Price impact exceeds the slippage tolerance you set. Try increasing the slippage tolerance.\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"s\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"This CP has been settled by other addrs\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"Max\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"Slippage\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"Insufficient funds - Please retry after depositing more \",[\"EtherTokenSymbol\"],\" into your wallet\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"Are you sure swapping to another chain?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"Destination\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"Unapproved\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"Insufficient cross-chain fees, need at least \",[\"0\"],\" \",[\"1\"]],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"Transaction Pending\",\"Fdp03t\":\"on\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"Day\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HuVZMK\":\"Days\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"Connecting...\",\"J39pAJ\":\"Additional Fee\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"Fetching best price...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"Review Swap\",\"K/PgcA\":\"Select Cross Chain\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"Attention: High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"Select Tokens\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"The setting has been switched to swap mode\",\"NVAuTg\":\"Quote not available\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"Fetching Price...\",\"OfhWJH\":\"Reset\",\"OgKD6h\":\"Best offer\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"Confirming\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"Fee\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"Confirm Cross Chain\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"Estimated Time\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"Swap summary\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"Tx\",\"S8G1qk\":\"Single\",\"SXnevP\":\"Review Cross Chain\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"Price Impact\",\"T0Y2+3\":\"Select a token\",\"TFOxRM\":\"Mins\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"Wallet incompatibility\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"Settings\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"Connect to your \",[\"0\"],\" Wallet\"],\"V+rJKF\":\"Seconds\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"Swap Detail\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"For\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"On\",\"Z7ZXbT\":\"Approve\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"Additional routing fees set by the Widget user\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"Maximum slippage do not exceed 50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"Minutes\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"Cancel\",\"dI46oG\":\"Auto switch network\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"Min\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"Transaction rejected.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"Service update, please wait and try again\",\"gz+9Rb\":\"Gas price is too low, please adjust in your wallet and try again\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC node data exception\",\"h5FVz1\":\"Estimated transaction time\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"Connect to your wallet\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"Enter an amount\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"Approving\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"Something went wrong.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"Second\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"Confirm swap\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"Slippage Tolerance\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"Send to:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"Unable to SETTLE during the cooling-off period\",\"qLkska\":\"The setting has been switched to cross chain mode\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"Connect to a wallet\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"Detail\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"SELECT TOKEN\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"Cross Chain Summary\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20: low-level call failed. Please contact the DODO team.\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"Unsupported network - switch to trade\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"Swap\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"Source\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"User denied transaction signature.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop exception\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"Hours\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"Close\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"Transaction Deadline\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"Insufficient balance\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file diff --git a/packages/dodoex-widgets/src/locales/en-US.po b/packages/dodoex-widgets/src/locales/en-US.po index 4215ab88..51dca57b 100644 --- a/packages/dodoex-widgets/src/locales/en-US.po +++ b/packages/dodoex-widgets/src/locales/en-US.po @@ -30,7 +30,7 @@ msgstr "Cross Chain" msgid "99% Default" msgstr "99% Default" -#: src/components/Swap/index.tsx:518 +#: src/components/Swap/index.tsx:495 msgid "The current slippage protection coefficient set exceeds {maxSlippageWarning}%, which may result in losses." msgstr "The current slippage protection coefficient set exceeds {maxSlippageWarning}%, which may result in losses." @@ -212,8 +212,8 @@ msgstr "Rewards" msgid "Pay" msgstr "Pay" -#: src/components/Swap/components/ReviewDialog.tsx:337 -#: src/components/Swap/index.tsx:443 +#: src/components/Swap/components/ReviewDialog.tsx:340 +#: src/components/Swap/index.tsx:420 msgid "Due to the market condition, market price and estimated price may have a slight difference" msgstr "Due to the market condition, market price and estimated price may have a slight difference" @@ -238,7 +238,7 @@ msgstr "{0} confirmed" msgid "Creation Time" msgstr "Creation Time" -#: src/components/Swap/index.tsx:550 +#: src/components/Swap/index.tsx:527 msgid "The current network is inconsistent with the wallet - please switch in wallet" msgstr "The current network is inconsistent with the wallet - please switch in wallet" @@ -275,7 +275,7 @@ msgstr "Max price" msgid "Staked Tokens" msgstr "Staked Tokens" -#: src/components/Swap/index.tsx:451 +#: src/components/Swap/index.tsx:428 msgid "Current price impact" msgstr "Current price impact" @@ -347,7 +347,7 @@ msgstr "Fee includes: Cross Chain fees + Swap fees. Gas fee not included." msgid "Confirm" msgstr "Confirm" -#: src/components/Swap/index.tsx:1017 +#: src/components/Swap/index.tsx:994 msgid "Powered by DODO protocol" msgstr "Powered by DODO protocol" @@ -392,11 +392,11 @@ msgstr "Custom" msgid "Higher than dynamic slippage" msgstr "Higher than dynamic slippage" -#: src/components/Swap/components/ReviewDialog.tsx:272 +#: src/components/Swap/components/ReviewDialog.tsx:275 msgid "Estimated service provider fees" msgstr "Estimated service provider fees" -#: src/components/Swap/components/ReviewDialog.tsx:270 +#: src/components/Swap/components/ReviewDialog.tsx:273 msgid "Basic Fee" msgstr "Basic Fee" @@ -498,7 +498,7 @@ msgid "Go back" msgstr "Go back" #: src/components/Bridge/BridgeSummaryDialog/BridgeSummaryDetail.tsx:276 -#: src/components/Swap/components/ReviewDialog.tsx:357 +#: src/components/Swap/components/ReviewDialog.tsx:360 #: src/components/Swap/components/SwapSettingsDialog/SlippageCurveChart/index.tsx:123 msgid "Slippage" msgstr "Slippage" @@ -588,6 +588,10 @@ msgstr "The area of the chart indicates the buy/sell volume of {baseSymbol} that msgid "Added successful" msgstr "Added successful" +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:90 +msgid "Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value." +msgstr "Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value." + #: src/widgets/PoolWidget/PoolCreate/index.tsx:485 msgid "Add Initial Liquidity" msgstr "Add Initial Liquidity" @@ -698,7 +702,7 @@ msgstr "Add Position" msgid "Emulator" msgstr "Emulator" -#: src/components/Swap/index.tsx:706 +#: src/components/Swap/index.tsx:683 msgid "Transaction Pending" msgstr "Transaction Pending" @@ -713,7 +717,7 @@ msgstr "on" msgid "Suitable for stablecoins with price fluctuations within 2%" msgstr "Suitable for stablecoins with price fluctuations within 2%" -#: src/components/Swap/components/ReviewDialog.tsx:360 +#: src/components/Swap/components/ReviewDialog.tsx:363 msgid "High slippage tolerance will increase the success rate of transaction, but might not get the best quote." msgstr "High slippage tolerance will increase the success rate of transaction, but might not get the best quote." @@ -746,7 +750,7 @@ msgstr "My Positions" msgid "Day" msgstr "Day" -#: src/components/Swap/components/SwapSettingsDialog/index.tsx:128 +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:245 msgid "minutes" msgstr "minutes" @@ -792,7 +796,7 @@ msgstr "{0}" msgid "Connecting..." msgstr "Connecting..." -#: src/components/Swap/components/ReviewDialog.tsx:300 +#: src/components/Swap/components/ReviewDialog.tsx:303 msgid "Additional Fee" msgstr "Additional Fee" @@ -827,7 +831,7 @@ msgid "Price discrepancy {lqAndDodoCompareText} between liquidity pool and the q msgstr "Price discrepancy {lqAndDodoCompareText} between liquidity pool and the quote price on DODO." #: src/components/Swap/components/TokenPairPriceWithToggle.tsx:52 -#: src/components/Swap/index.tsx:571 +#: src/components/Swap/index.tsx:548 msgid "Fetching best price..." msgstr "Fetching best price..." @@ -847,7 +851,7 @@ msgstr "*Collecting fees will withdraw currently available fees for you." msgid "Related CrowdPooling" msgstr "Related CrowdPooling" -#: src/components/Swap/index.tsx:795 +#: src/components/Swap/index.tsx:772 msgid "Review Swap" msgstr "Review Swap" @@ -884,7 +888,7 @@ msgstr "Any Ratio" msgid "Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes." msgstr "Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes." -#: src/components/Swap/index.tsx:713 +#: src/components/Swap/index.tsx:690 msgid "Select Tokens" msgstr "Select Tokens" @@ -944,7 +948,7 @@ msgstr "The pegged exchange rate refers to the exchange rate between two token a msgid "Deposit amounts" msgstr "Deposit amounts" -#: src/components/Swap/components/SwapSettingsDialog/index.tsx:177 +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:294 msgid "Disable Indirect Routing" msgstr "Disable Indirect Routing" @@ -975,13 +979,13 @@ msgstr "My Pools" msgid "Share Of Pool" msgstr "Share Of Pool" -#: src/components/Swap/index.tsx:893 +#: src/components/Swap/index.tsx:870 msgid "The setting has been switched to swap mode" msgstr "The setting has been switched to swap mode" #: src/components/Swap/components/TokenPairPriceWithToggle.tsx:61 -#: src/components/Swap/index.tsx:626 -#: src/components/Swap/index.tsx:755 +#: src/components/Swap/index.tsx:603 +#: src/components/Swap/index.tsx:732 msgid "Quote not available" msgstr "Quote not available" @@ -1044,7 +1048,7 @@ msgstr "If there are no participants before the end, the rewards cannot be taken msgid "Your position will appear here." msgstr "Your position will appear here." -#: src/components/Swap/index.tsx:740 +#: src/components/Swap/index.tsx:717 msgid "Fetching Price..." msgstr "Fetching Price..." @@ -1071,7 +1075,7 @@ msgid "Ratio Settings" msgstr "Ratio Settings" #: src/components/Bridge/BridgeSummaryDialog/index.tsx:147 -#: src/components/Swap/components/ReviewDialog.tsx:443 +#: src/components/Swap/components/ReviewDialog.tsx:446 #: src/widgets/MiningWidget/MiningCreate/operate-widgets/BottomButtonGroup.tsx:367 msgid "Confirming" msgstr "Confirming" @@ -1102,7 +1106,7 @@ msgid "Confirm Cross Chain" msgstr "Confirm Cross Chain" #. js-lingui-explicit-id -#: src/components/Swap/components/ReviewDialog.tsx:421 +#: src/components/Swap/components/ReviewDialog.tsx:424 msgid "Price impact reaches <0>{priceImpact}%, accept the quote" msgstr "Price impact reaches <0>{priceImpact}%, accept the quote" @@ -1120,7 +1124,7 @@ msgstr "Estimated Time" msgid "Classical AMM-like pool. Suitable for most assets." msgstr "Classical AMM-like pool. Suitable for most assets." -#: src/components/Swap/components/ReviewDialog.tsx:97 +#: src/components/Swap/components/ReviewDialog.tsx:100 msgid "Swap summary" msgstr "Swap summary" @@ -1176,7 +1180,7 @@ msgstr "Tx" msgid "Single" msgstr "Single" -#: src/components/Swap/index.tsx:785 +#: src/components/Swap/index.tsx:762 msgid "Review Cross Chain" msgstr "Review Cross Chain" @@ -1213,7 +1217,7 @@ msgstr "Start Time" msgid "Mining" msgstr "Mining" -#: src/components/Swap/components/ReviewDialog.tsx:334 +#: src/components/Swap/components/ReviewDialog.tsx:337 msgid "Price Impact" msgstr "Price Impact" @@ -1264,7 +1268,7 @@ msgid "Bought {0} {1}, price in the pool decreased to {2}" msgstr "Bought {0} {1}, price in the pool decreased to {2}" #: src/components/Swap/components/SettingsDialog/index.tsx:39 -#: src/components/Swap/components/SwapSettingsDialog/index.tsx:68 +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:63 msgid "Settings" msgstr "Settings" @@ -1356,7 +1360,7 @@ msgstr "This pool must be initialized before you can add liquidity. To initializ msgid "Can the pool price be adjusted?" msgstr "Can the pool price be adjusted?" -#: src/components/Swap/components/ReviewDialog.tsx:243 +#: src/components/Swap/components/ReviewDialog.tsx:246 msgid "Swap Detail" msgstr "Swap Detail" @@ -1364,7 +1368,7 @@ msgstr "Swap Detail" msgid "No ForceStop access" msgstr "No ForceStop access" -#: src/components/Swap/components/SwapSettingsDialog/index.tsx:180 +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:297 msgid "Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens." msgstr "Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens." @@ -1437,7 +1441,7 @@ msgstr "Total Swap Fee" msgid "On" msgstr "On" -#: src/components/Swap/index.tsx:723 +#: src/components/Swap/index.tsx:700 #: src/hooks/Token/useGetTokenStatus.ts:60 #: src/hooks/Token/useTokenStatus.ts:134 msgid "Approve" @@ -1447,7 +1451,7 @@ msgstr "Approve" msgid "Share" msgstr "Share" -#: src/components/Swap/components/ReviewDialog.tsx:303 +#: src/components/Swap/components/ReviewDialog.tsx:306 msgid "Additional routing fees set by the Widget user" msgstr "Additional routing fees set by the Widget user" @@ -1783,7 +1787,7 @@ msgstr "Back" msgid "Dynamic slippage is {recommendSlippage}%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price." msgstr "Dynamic slippage is {recommendSlippage}%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price." -#: src/components/Swap/index.tsx:729 +#: src/components/Swap/index.tsx:706 #: src/widgets/PoolWidget/AMMV3/hooks/useV3DerivedMintInfo.tsx:534 msgid "Enter an amount" msgstr "Enter an amount" @@ -1792,7 +1796,7 @@ msgstr "Enter an amount" msgid "Ratio" msgstr "Ratio" -#: src/components/Swap/index.tsx:723 +#: src/components/Swap/index.tsx:700 #: src/components/TokenPairStatusButton.tsx:45 #: src/components/TokenStatusButton.tsx:31 msgid "Approving" @@ -1855,7 +1859,7 @@ msgstr "Select Network" msgid "AMM V2 Position" msgstr "AMM V2 Position" -#: src/components/Swap/components/ReviewDialog.tsx:445 +#: src/components/Swap/components/ReviewDialog.tsx:448 msgid "Confirm swap" msgstr "Confirm swap" @@ -1864,6 +1868,7 @@ msgid "Once created, the price cannot be changed. This option applies to assets msgstr "Once created, the price cannot be changed. This option applies to assets like ETH-WETH." #: src/components/Swap/components/SettingsDialog/index.tsx:50 +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:87 #: src/widgets/PoolWidget/AMMV2Create/Setting.tsx:100 #: src/widgets/PoolWidget/PoolOperate/components/SlippageSetting.tsx:123 msgid "Slippage Tolerance" @@ -2023,7 +2028,7 @@ msgstr "Traders" msgid "Unable to SETTLE during the cooling-off period" msgstr "Unable to SETTLE during the cooling-off period" -#: src/components/Swap/index.tsx:891 +#: src/components/Swap/index.tsx:868 msgid "The setting has been switched to cross chain mode" msgstr "The setting has been switched to cross chain mode" @@ -2187,7 +2192,7 @@ msgstr "differs from the price quoted by DODO by {lqAndDodoCompareText}" msgid "Real Time" msgstr "Real Time" -#: src/components/Swap/index.tsx:587 +#: src/components/Swap/index.tsx:564 msgid "Unsupported network - switch to trade" msgstr "Unsupported network - switch to trade" @@ -2209,8 +2214,8 @@ msgstr "Paid" msgid "Failed to add" msgstr "Failed to add" -#: src/components/Swap/index.tsx:886 -#: src/hooks/Swap/useExecuteSwap.ts:60 +#: src/components/Swap/index.tsx:863 +#: src/hooks/Swap/useExecuteSwap.ts:56 msgid "Swap" msgstr "Swap" @@ -2246,7 +2251,7 @@ msgstr "Manage" msgid "Source" msgstr "Source" -#: src/components/Swap/components/SwapSettingsDialog/index.tsx:90 +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:198 msgid "You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time." msgstr "You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time." @@ -2336,7 +2341,7 @@ msgstr "To avoid loss of rewards, please ensure that at least 1 or more particip msgid "https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef" msgstr "https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef" -#: src/components/Swap/components/SwapSettingsDialog/index.tsx:87 +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:195 msgid "Transaction Deadline" msgstr "Transaction Deadline" @@ -2361,7 +2366,7 @@ msgstr "OK" msgid "Total Rewards=Daily Rewards*Duration" msgstr "Total Rewards=Daily Rewards*Duration" -#: src/components/Swap/index.tsx:766 +#: src/components/Swap/index.tsx:743 #: src/components/TokenStatusButton.tsx:18 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:124 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:233 diff --git a/packages/dodoex-widgets/src/locales/zh-CN.js b/packages/dodoex-widgets/src/locales/zh-CN.js index 4870e3fe..62247dc3 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.js +++ b/packages/dodoex-widgets/src/locales/zh-CN.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"交易时长:\",\"+uZnU3\":\"跨链桥\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"当前滑点保护系数设置超过\",[\"maxSlippageWarning\"],\"%,可能会造成损失。\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"连接 \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"至\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/nzjSF\":[[\"0\"],\" 等待中\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"余额:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"忽略\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"由于市场情况不同,市场价格与估算价格可能略有差异。\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" 已确认\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"当前网络与钱包不一致,请在钱包中切换\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"当前价格冲击\",\"6UYTy8\":\"分钟\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"小时\",\"6lss/t\":\"Pricing Model\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"输入代币符号或地址\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"费用包括过跨链桥和交易的手续费,不包括 gas 费。\",\"7VpPHA\":\"确认\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"该代币在\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"预计服务供应商费用\",\"93m8jT\":\"基础手续费\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"价格冲击超过了你设置的滑点, 请提高滑点后重试\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"秒\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"此众筹池已被其他地址结算\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"全部\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"滑点\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"余额不足 - 请在钱包充值\",[\"EtherTokenSymbol\"],\"后重试\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"是否确认切换到另一个链?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"目标\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"未授权\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"跨链费用不足,至少需要 \",[\"0\"],\" \",[\"1\"],\" \"],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"交易进行中\",\"Fdp03t\":\"在\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"天\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HuVZMK\":\"天\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"连接中...\",\"J39pAJ\":\"额外手续费\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"获取最优价格中...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"预览交易\",\"K/PgcA\":\"选择跨链桥\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"注意:滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"选择代币\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"设置已切换至闪兑模式\",\"NVAuTg\":\"没有报价\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"获取价格中...\",\"OfhWJH\":\"重置\",\"OgKD6h\":\"最优价格\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"确认中\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"手续费\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"确认跨链交易\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"价格冲击为<0>\",[\"priceImpact\"],\"%, 仍接受此报价\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"预计时间\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"交易预览\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"交易哈希:\",\"S8G1qk\":\"Single\",\"SXnevP\":\"预览跨链交易\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"价格冲击\",\"T0Y2+3\":\"选择代币\",\"TFOxRM\":\"分钟\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"钱包不兼容\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"设置\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"连接你的\",[\"0\"],\"钱包\"],\"V+rJKF\":\"秒\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"交易详情\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"对于\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"在\",\"Z7ZXbT\":\"代币授权\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"由 Widget 设置的额外路由费用\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"最大滑点不能超过50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"分钟\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"取消\",\"dI46oG\":\"自动切换网络\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"分钟\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"交易被拒绝.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"服务升级中, 请等待或重试\",\"gz+9Rb\":\"Gas 价格过低, 请调整后重试\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC节点异常\",\"h5FVz1\":\"预计交易时长\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"连接钱包\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"输入代币数量\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"授权中\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"发生异常错误.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"秒\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"确认交易\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"滑点\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"发送至:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"在冷静期无法进行清算\",\"qLkska\":\"设置已切换到跨链桥交易模式\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"连接钱包\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"详情\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"选择代币\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"跨链桥概览\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20:low-level call failed,请联系DODO团队解决。\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"未支持网络 - 请切换后进行交易\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"交易\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"源\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"用户拒绝交易签名.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop 异常\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"小时\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"关闭\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"交易截止时间\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"余额不足\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"交易时长:\",\"+uZnU3\":\"跨链桥\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"当前滑点保护系数设置超过\",[\"maxSlippageWarning\"],\"%,可能会造成损失。\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"连接 \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"至\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/nzjSF\":[[\"0\"],\" 等待中\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"余额:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"忽略\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"由于市场情况不同,市场价格与估算价格可能略有差异。\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" 已确认\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"当前网络与钱包不一致,请在钱包中切换\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"当前价格冲击\",\"6UYTy8\":\"分钟\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"小时\",\"6lss/t\":\"Pricing Model\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"输入代币符号或地址\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"费用包括过跨链桥和交易的手续费,不包括 gas 费。\",\"7VpPHA\":\"确认\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"该代币在\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"预计服务供应商费用\",\"93m8jT\":\"基础手续费\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"价格冲击超过了你设置的滑点, 请提高滑点后重试\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"秒\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"此众筹池已被其他地址结算\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"全部\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"滑点\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"余额不足 - 请在钱包充值\",[\"EtherTokenSymbol\"],\"后重试\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"是否确认切换到另一个链?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"目标\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"未授权\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"跨链费用不足,至少需要 \",[\"0\"],\" \",[\"1\"],\" \"],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"交易进行中\",\"Fdp03t\":\"在\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"天\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HuVZMK\":\"天\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"连接中...\",\"J39pAJ\":\"额外手续费\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"获取最优价格中...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"预览交易\",\"K/PgcA\":\"选择跨链桥\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"注意:滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"选择代币\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"设置已切换至闪兑模式\",\"NVAuTg\":\"没有报价\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"获取价格中...\",\"OfhWJH\":\"重置\",\"OgKD6h\":\"最优价格\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"确认中\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"手续费\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"确认跨链交易\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"价格冲击为<0>\",[\"priceImpact\"],\"%, 仍接受此报价\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"预计时间\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"交易预览\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"交易哈希:\",\"S8G1qk\":\"Single\",\"SXnevP\":\"预览跨链交易\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"价格冲击\",\"T0Y2+3\":\"选择代币\",\"TFOxRM\":\"分钟\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"钱包不兼容\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"设置\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"连接你的\",[\"0\"],\"钱包\"],\"V+rJKF\":\"秒\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"交易详情\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"对于\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"在\",\"Z7ZXbT\":\"代币授权\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"由 Widget 设置的额外路由费用\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"最大滑点不能超过50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"分钟\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"取消\",\"dI46oG\":\"自动切换网络\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"分钟\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"交易被拒绝.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"服务升级中, 请等待或重试\",\"gz+9Rb\":\"Gas 价格过低, 请调整后重试\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC节点异常\",\"h5FVz1\":\"预计交易时长\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"连接钱包\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"输入代币数量\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"授权中\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"发生异常错误.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"秒\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"确认交易\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"滑点\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"发送至:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"在冷静期无法进行清算\",\"qLkska\":\"设置已切换到跨链桥交易模式\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"连接钱包\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"详情\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"选择代币\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"跨链桥概览\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20:low-level call failed,请联系DODO团队解决。\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"未支持网络 - 请切换后进行交易\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"交易\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"源\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"用户拒绝交易签名.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop 异常\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"小时\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"关闭\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"交易截止时间\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"余额不足\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file diff --git a/packages/dodoex-widgets/src/locales/zh-CN.po b/packages/dodoex-widgets/src/locales/zh-CN.po index cd4c8a1b..d563bf7b 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.po +++ b/packages/dodoex-widgets/src/locales/zh-CN.po @@ -30,7 +30,7 @@ msgstr "跨链桥" msgid "99% Default" msgstr "" -#: src/components/Swap/index.tsx:518 +#: src/components/Swap/index.tsx:495 msgid "The current slippage protection coefficient set exceeds {maxSlippageWarning}%, which may result in losses." msgstr "当前滑点保护系数设置超过{maxSlippageWarning}%,可能会造成损失。" @@ -212,8 +212,8 @@ msgstr "" msgid "Pay" msgstr "" -#: src/components/Swap/components/ReviewDialog.tsx:337 -#: src/components/Swap/index.tsx:443 +#: src/components/Swap/components/ReviewDialog.tsx:340 +#: src/components/Swap/index.tsx:420 msgid "Due to the market condition, market price and estimated price may have a slight difference" msgstr "由于市场情况不同,市场价格与估算价格可能略有差异。" @@ -238,7 +238,7 @@ msgstr "{0} 已确认" msgid "Creation Time" msgstr "" -#: src/components/Swap/index.tsx:550 +#: src/components/Swap/index.tsx:527 msgid "The current network is inconsistent with the wallet - please switch in wallet" msgstr "当前网络与钱包不一致,请在钱包中切换" @@ -275,7 +275,7 @@ msgstr "" msgid "Staked Tokens" msgstr "" -#: src/components/Swap/index.tsx:451 +#: src/components/Swap/index.tsx:428 msgid "Current price impact" msgstr "当前价格冲击" @@ -347,7 +347,7 @@ msgstr "费用包括过跨链桥和交易的手续费,不包括 gas 费。" msgid "Confirm" msgstr "确认" -#: src/components/Swap/index.tsx:1017 +#: src/components/Swap/index.tsx:994 msgid "Powered by DODO protocol" msgstr "Powered by DODO protocol" @@ -392,11 +392,11 @@ msgstr "" msgid "Higher than dynamic slippage" msgstr "" -#: src/components/Swap/components/ReviewDialog.tsx:272 +#: src/components/Swap/components/ReviewDialog.tsx:275 msgid "Estimated service provider fees" msgstr "预计服务供应商费用" -#: src/components/Swap/components/ReviewDialog.tsx:270 +#: src/components/Swap/components/ReviewDialog.tsx:273 msgid "Basic Fee" msgstr "基础手续费" @@ -498,7 +498,7 @@ msgid "Go back" msgstr "" #: src/components/Bridge/BridgeSummaryDialog/BridgeSummaryDetail.tsx:276 -#: src/components/Swap/components/ReviewDialog.tsx:357 +#: src/components/Swap/components/ReviewDialog.tsx:360 #: src/components/Swap/components/SwapSettingsDialog/SlippageCurveChart/index.tsx:123 msgid "Slippage" msgstr "滑点" @@ -588,6 +588,10 @@ msgstr "" msgid "Added successful" msgstr "" +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:90 +msgid "Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value." +msgstr "" + #: src/widgets/PoolWidget/PoolCreate/index.tsx:485 msgid "Add Initial Liquidity" msgstr "" @@ -698,7 +702,7 @@ msgstr "" msgid "Emulator" msgstr "" -#: src/components/Swap/index.tsx:706 +#: src/components/Swap/index.tsx:683 msgid "Transaction Pending" msgstr "交易进行中" @@ -713,7 +717,7 @@ msgstr "在" msgid "Suitable for stablecoins with price fluctuations within 2%" msgstr "" -#: src/components/Swap/components/ReviewDialog.tsx:360 +#: src/components/Swap/components/ReviewDialog.tsx:363 msgid "High slippage tolerance will increase the success rate of transaction, but might not get the best quote." msgstr "滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。" @@ -746,7 +750,7 @@ msgstr "" msgid "Day" msgstr "天" -#: src/components/Swap/components/SwapSettingsDialog/index.tsx:128 +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:245 msgid "minutes" msgstr "" @@ -792,7 +796,7 @@ msgstr "" msgid "Connecting..." msgstr "连接中..." -#: src/components/Swap/components/ReviewDialog.tsx:300 +#: src/components/Swap/components/ReviewDialog.tsx:303 msgid "Additional Fee" msgstr "额外手续费" @@ -827,7 +831,7 @@ msgid "Price discrepancy {lqAndDodoCompareText} between liquidity pool and the q msgstr "" #: src/components/Swap/components/TokenPairPriceWithToggle.tsx:52 -#: src/components/Swap/index.tsx:571 +#: src/components/Swap/index.tsx:548 msgid "Fetching best price..." msgstr "获取最优价格中..." @@ -847,7 +851,7 @@ msgstr "" msgid "Related CrowdPooling" msgstr "" -#: src/components/Swap/index.tsx:795 +#: src/components/Swap/index.tsx:772 msgid "Review Swap" msgstr "预览交易" @@ -884,7 +888,7 @@ msgstr "" msgid "Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes." msgstr "" -#: src/components/Swap/index.tsx:713 +#: src/components/Swap/index.tsx:690 msgid "Select Tokens" msgstr "选择代币" @@ -944,7 +948,7 @@ msgstr "" msgid "Deposit amounts" msgstr "" -#: src/components/Swap/components/SwapSettingsDialog/index.tsx:177 +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:294 msgid "Disable Indirect Routing" msgstr "" @@ -975,13 +979,13 @@ msgstr "" msgid "Share Of Pool" msgstr "" -#: src/components/Swap/index.tsx:893 +#: src/components/Swap/index.tsx:870 msgid "The setting has been switched to swap mode" msgstr "设置已切换至闪兑模式" #: src/components/Swap/components/TokenPairPriceWithToggle.tsx:61 -#: src/components/Swap/index.tsx:626 -#: src/components/Swap/index.tsx:755 +#: src/components/Swap/index.tsx:603 +#: src/components/Swap/index.tsx:732 msgid "Quote not available" msgstr "没有报价" @@ -1044,7 +1048,7 @@ msgstr "" msgid "Your position will appear here." msgstr "" -#: src/components/Swap/index.tsx:740 +#: src/components/Swap/index.tsx:717 msgid "Fetching Price..." msgstr "获取价格中..." @@ -1071,7 +1075,7 @@ msgid "Ratio Settings" msgstr "" #: src/components/Bridge/BridgeSummaryDialog/index.tsx:147 -#: src/components/Swap/components/ReviewDialog.tsx:443 +#: src/components/Swap/components/ReviewDialog.tsx:446 #: src/widgets/MiningWidget/MiningCreate/operate-widgets/BottomButtonGroup.tsx:367 msgid "Confirming" msgstr "确认中" @@ -1102,7 +1106,7 @@ msgid "Confirm Cross Chain" msgstr "确认跨链交易" #. js-lingui-explicit-id -#: src/components/Swap/components/ReviewDialog.tsx:421 +#: src/components/Swap/components/ReviewDialog.tsx:424 msgid "Price impact reaches <0>{priceImpact}%, accept the quote" msgstr "价格冲击为<0>{priceImpact}%, 仍接受此报价" @@ -1120,7 +1124,7 @@ msgstr "预计时间" msgid "Classical AMM-like pool. Suitable for most assets." msgstr "" -#: src/components/Swap/components/ReviewDialog.tsx:97 +#: src/components/Swap/components/ReviewDialog.tsx:100 msgid "Swap summary" msgstr "交易预览" @@ -1176,7 +1180,7 @@ msgstr "交易哈希:" msgid "Single" msgstr "" -#: src/components/Swap/index.tsx:785 +#: src/components/Swap/index.tsx:762 msgid "Review Cross Chain" msgstr "预览跨链交易" @@ -1213,7 +1217,7 @@ msgstr "" msgid "Mining" msgstr "" -#: src/components/Swap/components/ReviewDialog.tsx:334 +#: src/components/Swap/components/ReviewDialog.tsx:337 msgid "Price Impact" msgstr "价格冲击" @@ -1264,7 +1268,7 @@ msgid "Bought {0} {1}, price in the pool decreased to {2}" msgstr "" #: src/components/Swap/components/SettingsDialog/index.tsx:39 -#: src/components/Swap/components/SwapSettingsDialog/index.tsx:68 +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:63 msgid "Settings" msgstr "设置" @@ -1356,7 +1360,7 @@ msgstr "" msgid "Can the pool price be adjusted?" msgstr "" -#: src/components/Swap/components/ReviewDialog.tsx:243 +#: src/components/Swap/components/ReviewDialog.tsx:246 msgid "Swap Detail" msgstr "交易详情" @@ -1364,7 +1368,7 @@ msgstr "交易详情" msgid "No ForceStop access" msgstr "No ForceStop access" -#: src/components/Swap/components/SwapSettingsDialog/index.tsx:180 +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:297 msgid "Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens." msgstr "" @@ -1437,7 +1441,7 @@ msgstr "" msgid "On" msgstr "在" -#: src/components/Swap/index.tsx:723 +#: src/components/Swap/index.tsx:700 #: src/hooks/Token/useGetTokenStatus.ts:60 #: src/hooks/Token/useTokenStatus.ts:134 msgid "Approve" @@ -1447,7 +1451,7 @@ msgstr "代币授权" msgid "Share" msgstr "" -#: src/components/Swap/components/ReviewDialog.tsx:303 +#: src/components/Swap/components/ReviewDialog.tsx:306 msgid "Additional routing fees set by the Widget user" msgstr "由 Widget 设置的额外路由费用" @@ -1783,7 +1787,7 @@ msgstr "" msgid "Dynamic slippage is {recommendSlippage}%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price." msgstr "" -#: src/components/Swap/index.tsx:729 +#: src/components/Swap/index.tsx:706 #: src/widgets/PoolWidget/AMMV3/hooks/useV3DerivedMintInfo.tsx:534 msgid "Enter an amount" msgstr "输入代币数量" @@ -1792,7 +1796,7 @@ msgstr "输入代币数量" msgid "Ratio" msgstr "" -#: src/components/Swap/index.tsx:723 +#: src/components/Swap/index.tsx:700 #: src/components/TokenPairStatusButton.tsx:45 #: src/components/TokenStatusButton.tsx:31 msgid "Approving" @@ -1855,7 +1859,7 @@ msgstr "" msgid "AMM V2 Position" msgstr "" -#: src/components/Swap/components/ReviewDialog.tsx:445 +#: src/components/Swap/components/ReviewDialog.tsx:448 msgid "Confirm swap" msgstr "确认交易" @@ -1864,6 +1868,7 @@ msgid "Once created, the price cannot be changed. This option applies to assets msgstr "" #: src/components/Swap/components/SettingsDialog/index.tsx:50 +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:87 #: src/widgets/PoolWidget/AMMV2Create/Setting.tsx:100 #: src/widgets/PoolWidget/PoolOperate/components/SlippageSetting.tsx:123 msgid "Slippage Tolerance" @@ -2023,7 +2028,7 @@ msgstr "" msgid "Unable to SETTLE during the cooling-off period" msgstr "在冷静期无法进行清算" -#: src/components/Swap/index.tsx:891 +#: src/components/Swap/index.tsx:868 msgid "The setting has been switched to cross chain mode" msgstr "设置已切换到跨链桥交易模式" @@ -2187,7 +2192,7 @@ msgstr "" msgid "Real Time" msgstr "" -#: src/components/Swap/index.tsx:587 +#: src/components/Swap/index.tsx:564 msgid "Unsupported network - switch to trade" msgstr "未支持网络 - 请切换后进行交易" @@ -2209,8 +2214,8 @@ msgstr "" msgid "Failed to add" msgstr "" -#: src/components/Swap/index.tsx:886 -#: src/hooks/Swap/useExecuteSwap.ts:60 +#: src/components/Swap/index.tsx:863 +#: src/hooks/Swap/useExecuteSwap.ts:56 msgid "Swap" msgstr "交易" @@ -2246,7 +2251,7 @@ msgstr "" msgid "Source" msgstr "源" -#: src/components/Swap/components/SwapSettingsDialog/index.tsx:90 +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:198 msgid "You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time." msgstr "" @@ -2336,7 +2341,7 @@ msgstr "" msgid "https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef" msgstr "" -#: src/components/Swap/components/SwapSettingsDialog/index.tsx:87 +#: src/components/Swap/components/SwapSettingsDialog/index.tsx:195 msgid "Transaction Deadline" msgstr "交易截止时间" @@ -2361,7 +2366,7 @@ msgstr "" msgid "Total Rewards=Daily Rewards*Duration" msgstr "" -#: src/components/Swap/index.tsx:766 +#: src/components/Swap/index.tsx:743 #: src/components/TokenStatusButton.tsx:18 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:124 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:233 From 1a892a4dbef4a403dba9794fce29a5c92cc04e8f Mon Sep 17 00:00:00 2001 From: yrjkqq Date: Thu, 3 Apr 2025 14:45:43 +0800 Subject: [PATCH 03/18] chore: remove example Angular, React, and JS applications along with their configurations and dependencies --- example/angular-app/.editorconfig | 16 - example/angular-app/.gitignore | 42 - example/angular-app/README.md | 84 - example/angular-app/angular.json | 102 - example/angular-app/package.json | 39 - .../angular-app/src/app/app-routing.module.ts | 10 - .../angular-app/src/app/app.component.html | 39 - .../angular-app/src/app/app.component.scss | 0 .../angular-app/src/app/app.component.spec.ts | 35 - example/angular-app/src/app/app.component.ts | 10 - example/angular-app/src/app/app.module.ts | 20 - .../src/app/widgets/widgets.component.html | 9 - .../src/app/widgets/widgets.component.scss | 8 - .../src/app/widgets/widgets.component.ts | 17 - example/angular-app/src/assets/.gitkeep | 0 example/angular-app/src/favicon.ico | Bin 948 -> 0 bytes example/angular-app/src/index.html | 13 - example/angular-app/src/main.ts | 7 - example/angular-app/src/styles.scss | 6 - example/angular-app/tsconfig.app.json | 14 - example/angular-app/tsconfig.json | 31 - example/angular-app/tsconfig.spec.json | 14 - example/angular-app/yarn.lock | 9779 ------------ example/js-app/README.md | 101 - example/js-app/express.js | 12 - example/js-app/package.json | 20 - example/js-app/src/index.html | 36 - example/js-app/src/main.js | 12 - example/js-app/webpack/dev.js | 28 - example/js-app/webpack/prod.js | 17 - example/js-app/yarn.lock | 7171 --------- example/react-app/.gitignore | 19 - example/react-app/README.md | 80 - example/react-app/package.json | 45 - example/react-app/public/favicon.ico | Bin 3870 -> 0 bytes example/react-app/public/index.html | 43 - example/react-app/public/logo192.png | Bin 5347 -> 0 bytes example/react-app/public/logo512.png | Bin 9664 -> 0 bytes example/react-app/public/manifest.json | 25 - example/react-app/public/robots.txt | 3 - example/react-app/src/App.css | 44 - example/react-app/src/App.test.tsx | 9 - example/react-app/src/App.tsx | 63 - example/react-app/src/index.css | 18 - example/react-app/src/index.tsx | 19 - example/react-app/src/logo.svg | 1 - example/react-app/src/react-app-env.d.ts | 1 - example/react-app/src/reportWebVitals.ts | 15 - example/react-app/src/setupTests.ts | 5 - example/react-app/tsconfig.json | 24 - example/react-app/yarn.lock | 13161 ---------------- .../doc/src/stories/widgets/Pool.stories.tsx | 42 +- .../doc/src/stories/widgets/Swap.stories.tsx | 13 +- .../stories/widgets/Ve33PoolList.stories.tsx | 56 + packages/dodoex-widgets/package.json | 12 +- packages/dodoex-widgets/src/index.tsx | 9 + .../src/widgets/Ve33PoolList/index.tsx | 5 + yarn.lock | 78 +- 58 files changed, 130 insertions(+), 31352 deletions(-) delete mode 100644 example/angular-app/.editorconfig delete mode 100644 example/angular-app/.gitignore delete mode 100644 example/angular-app/README.md delete mode 100644 example/angular-app/angular.json delete mode 100644 example/angular-app/package.json delete mode 100644 example/angular-app/src/app/app-routing.module.ts delete mode 100644 example/angular-app/src/app/app.component.html delete mode 100644 example/angular-app/src/app/app.component.scss delete mode 100644 example/angular-app/src/app/app.component.spec.ts delete mode 100644 example/angular-app/src/app/app.component.ts delete mode 100644 example/angular-app/src/app/app.module.ts delete mode 100644 example/angular-app/src/app/widgets/widgets.component.html delete mode 100644 example/angular-app/src/app/widgets/widgets.component.scss delete mode 100644 example/angular-app/src/app/widgets/widgets.component.ts delete mode 100644 example/angular-app/src/assets/.gitkeep delete mode 100644 example/angular-app/src/favicon.ico delete mode 100644 example/angular-app/src/index.html delete mode 100644 example/angular-app/src/main.ts delete mode 100644 example/angular-app/src/styles.scss delete mode 100644 example/angular-app/tsconfig.app.json delete mode 100644 example/angular-app/tsconfig.json delete mode 100644 example/angular-app/tsconfig.spec.json delete mode 100644 example/angular-app/yarn.lock delete mode 100644 example/js-app/README.md delete mode 100644 example/js-app/express.js delete mode 100644 example/js-app/package.json delete mode 100644 example/js-app/src/index.html delete mode 100644 example/js-app/src/main.js delete mode 100644 example/js-app/webpack/dev.js delete mode 100644 example/js-app/webpack/prod.js delete mode 100644 example/js-app/yarn.lock delete mode 100644 example/react-app/.gitignore delete mode 100644 example/react-app/README.md delete mode 100644 example/react-app/package.json delete mode 100644 example/react-app/public/favicon.ico delete mode 100644 example/react-app/public/index.html delete mode 100644 example/react-app/public/logo192.png delete mode 100644 example/react-app/public/logo512.png delete mode 100644 example/react-app/public/manifest.json delete mode 100644 example/react-app/public/robots.txt delete mode 100644 example/react-app/src/App.css delete mode 100644 example/react-app/src/App.test.tsx delete mode 100644 example/react-app/src/App.tsx delete mode 100644 example/react-app/src/index.css delete mode 100644 example/react-app/src/index.tsx delete mode 100644 example/react-app/src/logo.svg delete mode 100644 example/react-app/src/react-app-env.d.ts delete mode 100644 example/react-app/src/reportWebVitals.ts delete mode 100644 example/react-app/src/setupTests.ts delete mode 100644 example/react-app/tsconfig.json delete mode 100644 example/react-app/yarn.lock create mode 100644 packages/doc/src/stories/widgets/Ve33PoolList.stories.tsx create mode 100644 packages/dodoex-widgets/src/widgets/Ve33PoolList/index.tsx diff --git a/example/angular-app/.editorconfig b/example/angular-app/.editorconfig deleted file mode 100644 index 59d9a3a3..00000000 --- a/example/angular-app/.editorconfig +++ /dev/null @@ -1,16 +0,0 @@ -# Editor configuration, see https://editorconfig.org -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -insert_final_newline = true -trim_trailing_whitespace = true - -[*.ts] -quote_type = single - -[*.md] -max_line_length = off -trim_trailing_whitespace = false diff --git a/example/angular-app/.gitignore b/example/angular-app/.gitignore deleted file mode 100644 index 0711527e..00000000 --- a/example/angular-app/.gitignore +++ /dev/null @@ -1,42 +0,0 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. - -# Compiled output -/dist -/tmp -/out-tsc -/bazel-out - -# Node -/node_modules -npm-debug.log -yarn-error.log - -# IDEs and editors -.idea/ -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# Visual Studio Code -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -.history/* - -# Miscellaneous -/.angular/cache -.sass-cache/ -/connect.lock -/coverage -/libpeerconnection.log -testem.log -/typings - -# System files -.DS_Store -Thumbs.db diff --git a/example/angular-app/README.md b/example/angular-app/README.md deleted file mode 100644 index 2c654dcb..00000000 --- a/example/angular-app/README.md +++ /dev/null @@ -1,84 +0,0 @@ -# Angular App Example - -

- - DODO - -

- -

-npm version -

- -This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 15.1.3. - -## dodoex-widgets - -To start the demo: - -```bash -yarn # install dependencies -yarn start # run the development server -# or -npm # install dependencies -npm run start # run the development server -``` - -Navigate to [http://localhost:4200](http://localhost:4200) to see the widget. - ---- - -Supported [API](https://docs.dodoex.io/english/developers/swap-widget/api) from the `SwapWidget`: - -- `provider`: EIP-1193 provider -- `jsonRpcUrlMap`: Specify nodes of different chains -- `defaultChainId`: Default Chain ID - -- `tokenList`: a TokenList; in this case [Token List Example](https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json) -- `popularTokenList`: Selectable List of Popular Tokens - -- `onTxFail`: Triggered if transaction fails -- `onTxSubmit`: Triggered after transaction is submitted -- `onTxSuccess`: Triggered if transaction executes successfully -- `onTxReverted`: Triggered if transaction executes reverted - -- `theme`: Can override theme, text, and style. Refer to the Instructions page for more information. -- `colorMode`: Light or dark mode -- `apikey`: Passed onto the apikey provided by DODO -- `width`: Widget width -- `height`: Widget height -- `feeRate`: Transaction fee rate. Unit: 1e18 -- `rebateTo`: Profit sharing address -- `defaultFromToken`: Default Origin Token -- `defaultToToken`: Default Destination Token -- `crossChain`: Enable cross-chain -- `swapSlippage`: Default swap slippage -- `bridgeSlippage`: Default cross-chain slippage -- `apiServices`: Custom api service - -For all available props (including theming), please refer to the up-to-date [documentation](https://docs.dodoex.io/english/developers/swap-widget). - -### Other issues with Angular App - -- Please make sure your tsconfig.ts file has set the `skipLibCheck` to `true` to ignore ts check of widgets packages. - -### Additional documentation - -- [DODO App](https://app.dodoex.io/) - Trade tokens, deposit tokens in liquidity pools, & create Crowdpooling campaigns with DODO! Decentralized exchange with market-leading liquidity. - -- [About DODO](https://docs.dodoex.io/english/) - An Innovative Algorithm-Driven and Decentralized Trading Platform. - -- [Swap Widget Docs](https://docs.dodoex.io/english/)-to be continue - Explore the Swap Widget's features and API. - -- [Discord](https://discord.com/invite/tyKReUK) - Hop into #widgets for help. - -- [GitHub](https://github.com/DODOEX/widgets) - View the Swap Widget's source. - -## Further help - -To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/example/angular-app/angular.json b/example/angular-app/angular.json deleted file mode 100644 index 73cc2795..00000000 --- a/example/angular-app/angular.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "cli": { - "packageManager": "npm", - "analytics": false - }, - "newProjectRoot": "projects", - "projects": { - "angular-app": { - "projectType": "application", - "schematics": { - "@schematics/angular:component": { - "style": "scss" - } - }, - "root": "", - "sourceRoot": "src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "dist/angular-app", - "index": "src/index.html", - "main": "src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": ["src/favicon.ico", "src/assets"], - "styles": ["src/styles.scss"], - "allowedCommonJsDependencies": ["react-dom/client"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "browserTarget": "angular-app:build:production" - }, - "development": { - "browserTarget": "angular-app:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "browserTarget": "angular-app:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "polyfills": [ - "zone.js", - "zone.js/testing" - ], - "tsConfig": "tsconfig.spec.json", - "inlineStyleLanguage": "scss", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "src/styles.scss" - ], - "scripts": [] - } - } - } - } - } -} diff --git a/example/angular-app/package.json b/example/angular-app/package.json deleted file mode 100644 index 188bc5d1..00000000 --- a/example/angular-app/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "angular-app", - "version": "0.0.0", - "scripts": { - "ng": "ng", - "start": "ng serve", - "build": "ng build", - "watch": "ng build --watch --configuration development", - "test": "ng test" - }, - "private": true, - "dependencies": { - "@angular/animations": "^15.1.0", - "@angular/common": "^15.1.0", - "@angular/compiler": "^15.1.0", - "@angular/core": "^15.1.0", - "@angular/forms": "^15.1.0", - "@angular/platform-browser": "^15.1.0", - "@angular/platform-browser-dynamic": "^15.1.0", - "@angular/router": "^15.1.0", - "@dodoex/widgets": "^2.6.4", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.12.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^15.1.3", - "@angular/cli": "~15.1.3", - "@angular/compiler-cli": "^15.1.0", - "@types/jasmine": "~4.3.0", - "jasmine-core": "~4.5.0", - "karma": "~6.4.0", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage": "~2.2.0", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.0.0", - "typescript": "~5.6.3" - } -} \ No newline at end of file diff --git a/example/angular-app/src/app/app-routing.module.ts b/example/angular-app/src/app/app-routing.module.ts deleted file mode 100644 index 02972627..00000000 --- a/example/angular-app/src/app/app-routing.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -const routes: Routes = []; - -@NgModule({ - imports: [RouterModule.forRoot(routes)], - exports: [RouterModule] -}) -export class AppRoutingModule { } diff --git a/example/angular-app/src/app/app.component.html b/example/angular-app/src/app/app.component.html deleted file mode 100644 index d6291f3c..00000000 --- a/example/angular-app/src/app/app.component.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - -

- -
diff --git a/example/angular-app/src/app/app.component.scss b/example/angular-app/src/app/app.component.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/example/angular-app/src/app/app.component.spec.ts b/example/angular-app/src/app/app.component.spec.ts deleted file mode 100644 index f0ed53e7..00000000 --- a/example/angular-app/src/app/app.component.spec.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { TestBed } from '@angular/core/testing'; -import { RouterTestingModule } from '@angular/router/testing'; -import { AppComponent } from './app.component'; - -describe('AppComponent', () => { - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [ - RouterTestingModule - ], - declarations: [ - AppComponent - ], - }).compileComponents(); - }); - - it('should create the app', () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); - - it(`should have as title 'angular-app'`, () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app.title).toEqual('angular-app'); - }); - - it('should render title', () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('.content span')?.textContent).toContain('angular-app app is running!'); - }); -}); diff --git a/example/angular-app/src/app/app.component.ts b/example/angular-app/src/app/app.component.ts deleted file mode 100644 index 720ba193..00000000 --- a/example/angular-app/src/app/app.component.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.scss'] -}) -export class AppComponent { - title = 'angular-app'; -} diff --git a/example/angular-app/src/app/app.module.ts b/example/angular-app/src/app/app.module.ts deleted file mode 100644 index 54792ebc..00000000 --- a/example/angular-app/src/app/app.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; - -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; -import { WidgetsComponent } from './widgets/widgets.component'; - -@NgModule({ - declarations: [ - AppComponent, - WidgetsComponent - ], - imports: [ - BrowserModule, - AppRoutingModule - ], - providers: [], - bootstrap: [AppComponent] -}) -export class AppModule { } diff --git a/example/angular-app/src/app/widgets/widgets.component.html b/example/angular-app/src/app/widgets/widgets.component.html deleted file mode 100644 index d2277f90..00000000 --- a/example/angular-app/src/app/widgets/widgets.component.html +++ /dev/null @@ -1,9 +0,0 @@ -
-
-
- - diff --git a/example/angular-app/src/app/widgets/widgets.component.scss b/example/angular-app/src/app/widgets/widgets.component.scss deleted file mode 100644 index 3e68d322..00000000 --- a/example/angular-app/src/app/widgets/widgets.component.scss +++ /dev/null @@ -1,8 +0,0 @@ -.widget-container { - width: 100%; - height: 100%; - display: flex; - justify-content: center; - align-items: center; - background-color: rgb(249, 246, 232); -} diff --git a/example/angular-app/src/app/widgets/widgets.component.ts b/example/angular-app/src/app/widgets/widgets.component.ts deleted file mode 100644 index 79c0ae74..00000000 --- a/example/angular-app/src/app/widgets/widgets.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { InitSwapWidget } from '@dodoex/widgets'; - -@Component({ - selector: 'app-widgets', - templateUrl: './widgets.component.html', - styleUrls: ['./widgets.component.scss'], -}) -export class WidgetsComponent { - ngOnInit() { - InitSwapWidget({ - colorMode: 'dark', - crossChain: true, - apikey: 'ef9apopzq9qrgntjubojbxe7hy4z5eez', // for default test - }); - } -} diff --git a/example/angular-app/src/assets/.gitkeep b/example/angular-app/src/assets/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/example/angular-app/src/favicon.ico b/example/angular-app/src/favicon.ico deleted file mode 100644 index 997406ad22c29aae95893fb3d666c30258a09537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmV;l155mgP)CBYU7IjCFmI-B}4sMJt3^s9NVg!P0 z6hDQy(L`XWMkB@zOLgN$4KYz;j0zZxq9KKdpZE#5@k0crP^5f9KO};h)ZDQ%ybhht z%t9#h|nu0K(bJ ztIkhEr!*UyrZWQ1k2+YkGqDi8Z<|mIN&$kzpKl{cNP=OQzXHz>vn+c)F)zO|Bou>E z2|-d_=qY#Y+yOu1a}XI?cU}%04)zz%anD(XZC{#~WreV!a$7k2Ug`?&CUEc0EtrkZ zL49MB)h!_K{H(*l_93D5tO0;BUnvYlo+;yss%n^&qjt6fZOa+}+FDO(~2>G z2dx@=JZ?DHP^;b7*Y1as5^uphBsh*s*z&MBd?e@I>-9kU>63PjP&^#5YTOb&x^6Cf z?674rmSHB5Fk!{Gv7rv!?qX#ei_L(XtwVqLX3L}$MI|kJ*w(rhx~tc&L&xP#?cQow zX_|gx$wMr3pRZIIr_;;O|8fAjd;1`nOeu5K(pCu7>^3E&D2OBBq?sYa(%S?GwG&_0-s%_v$L@R!5H_fc)lOb9ZoOO#p`Nn`KU z3LTTBtjwo`7(HA6 z7gmO$yTR!5L>Bsg!X8616{JUngg_@&85%>W=mChTR;x4`P=?PJ~oPuy5 zU-L`C@_!34D21{fD~Y8NVnR3t;aqZI3fIhmgmx}$oc-dKDC6Ap$Gy>a!`A*x2L1v0 WcZ@i?LyX}70000 - - - - AngularApp - - - - - - - - diff --git a/example/angular-app/src/main.ts b/example/angular-app/src/main.ts deleted file mode 100644 index c58dc05c..00000000 --- a/example/angular-app/src/main.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; - -import { AppModule } from './app/app.module'; - - -platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.error(err)); diff --git a/example/angular-app/src/styles.scss b/example/angular-app/src/styles.scss deleted file mode 100644 index 522c12a8..00000000 --- a/example/angular-app/src/styles.scss +++ /dev/null @@ -1,6 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ -html, body { - margin: 0; - width: 100%; - height: 100%; -} diff --git a/example/angular-app/tsconfig.app.json b/example/angular-app/tsconfig.app.json deleted file mode 100644 index 374cc9d2..00000000 --- a/example/angular-app/tsconfig.app.json +++ /dev/null @@ -1,14 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/app", - "types": [] - }, - "files": [ - "src/main.ts" - ], - "include": [ - "src/**/*.d.ts" - ] -} diff --git a/example/angular-app/tsconfig.json b/example/angular-app/tsconfig.json deleted file mode 100644 index 0bf32c47..00000000 --- a/example/angular-app/tsconfig.json +++ /dev/null @@ -1,31 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "sourceMap": true, - "declaration": false, - "downlevelIteration": true, - "experimentalDecorators": true, - "moduleResolution": "node", - "importHelpers": true, - "target": "ES2022", - "module": "ES2022", - "useDefineForClassFields": false, - "lib": ["ES2022", "dom"] - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/example/angular-app/tsconfig.spec.json b/example/angular-app/tsconfig.spec.json deleted file mode 100644 index be7e9da7..00000000 --- a/example/angular-app/tsconfig.spec.json +++ /dev/null @@ -1,14 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/spec", - "types": [ - "jasmine" - ] - }, - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/example/angular-app/yarn.lock b/example/angular-app/yarn.lock deleted file mode 100644 index 0d2cccc7..00000000 --- a/example/angular-app/yarn.lock +++ /dev/null @@ -1,9779 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@2.2.0", "@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@angular-devkit/architect@0.1501.3": - version "0.1501.3" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1501.3.tgz#bf6dc29441fb086ea099ab68454c2b438a1f4257" - integrity sha512-+hvesYUgChdAkBcWSO2pseIGBzRDAATyIw36UBwOmYkL7wM65TEXpspbo5ZIfU1M/l7X/lHzDXLTzCMfb0Qxbg== - dependencies: - "@angular-devkit/core" "15.1.3" - rxjs "6.6.7" - -"@angular-devkit/build-angular@^15.1.3": - version "15.1.3" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-15.1.3.tgz#2bfe0615e6ca412706404fb1ac543f73b8c71f20" - integrity sha512-QQfvpccShQldpMmuwgpZfbE6cNiNwff2aAY1YGswU9DBpeoz4YWeW4e8ss2j/Mxn5RXo7cbzWkhbm1xXTFY1FA== - dependencies: - "@ampproject/remapping" "2.2.0" - "@angular-devkit/architect" "0.1501.3" - "@angular-devkit/build-webpack" "0.1501.3" - "@angular-devkit/core" "15.1.3" - "@babel/core" "7.20.12" - "@babel/generator" "7.20.7" - "@babel/helper-annotate-as-pure" "7.18.6" - "@babel/plugin-proposal-async-generator-functions" "7.20.7" - "@babel/plugin-transform-async-to-generator" "7.20.7" - "@babel/plugin-transform-runtime" "7.19.6" - "@babel/preset-env" "7.20.2" - "@babel/runtime" "7.20.7" - "@babel/template" "7.20.7" - "@discoveryjs/json-ext" "0.5.7" - "@ngtools/webpack" "15.1.3" - ansi-colors "4.1.3" - autoprefixer "10.4.13" - babel-loader "9.1.2" - babel-plugin-istanbul "6.1.1" - browserslist "4.21.4" - cacache "17.0.4" - chokidar "3.5.3" - copy-webpack-plugin "11.0.0" - critters "0.0.16" - css-loader "6.7.3" - esbuild-wasm "0.16.17" - glob "8.0.3" - https-proxy-agent "5.0.1" - inquirer "8.2.4" - jsonc-parser "3.2.0" - karma-source-map-support "1.4.0" - less "4.1.3" - less-loader "11.1.0" - license-webpack-plugin "4.0.2" - loader-utils "3.2.1" - magic-string "0.27.0" - mini-css-extract-plugin "2.7.2" - open "8.4.0" - ora "5.4.1" - parse5-html-rewriting-stream "6.0.1" - piscina "3.2.0" - postcss "8.4.21" - postcss-loader "7.0.2" - resolve-url-loader "5.0.0" - rxjs "6.6.7" - sass "1.57.1" - sass-loader "13.2.0" - semver "7.3.8" - source-map-loader "4.0.1" - source-map-support "0.5.21" - terser "5.16.1" - text-table "0.2.0" - tree-kill "1.2.2" - tslib "2.4.1" - webpack "5.75.0" - webpack-dev-middleware "6.0.1" - webpack-dev-server "4.11.1" - webpack-merge "5.8.0" - webpack-subresource-integrity "5.1.0" - optionalDependencies: - esbuild "0.16.17" - -"@angular-devkit/build-webpack@0.1501.3": - version "0.1501.3" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1501.3.tgz#19844cb57ece43fe6fb9815a7a730386286b4668" - integrity sha512-ZsgbTFf1I9hAf4FvNxBJphF95Hw9QchCaWQdQXY+2mqQuPP70uK1Kd/TzNCfx5lyNFHMI9oWpCg2QLrAdwqJnA== - dependencies: - "@angular-devkit/architect" "0.1501.3" - rxjs "6.6.7" - -"@angular-devkit/core@15.1.3": - version "15.1.3" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-15.1.3.tgz#6f276421996827a3eb41494c132817c8a0109a96" - integrity sha512-biuS+DceyZEqcE/cLvndtslqn3Q6uCmJ0RLpACikH6ESYorvk+A91H0ofuGue6HB/2CUN/F+mPSr7sWVI1W9sA== - dependencies: - ajv "8.12.0" - ajv-formats "2.1.1" - jsonc-parser "3.2.0" - rxjs "6.6.7" - source-map "0.7.4" - -"@angular-devkit/schematics@15.1.3": - version "15.1.3" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-15.1.3.tgz#8e097b817ad3abdba2d1b5a4f8c21dcf62083f3b" - integrity sha512-IXZ56/5uFnHqnLq+80JhmFx5mflyW8LgS/8Tr2l5DYVA71Fh3b1q+vGrEZB1X2zPoFeDOGAxv3Fi+kmjcz1GZg== - dependencies: - "@angular-devkit/core" "15.1.3" - jsonc-parser "3.2.0" - magic-string "0.27.0" - ora "5.4.1" - rxjs "6.6.7" - -"@angular/animations@^15.1.0": - version "15.1.2" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-15.1.2.tgz#ae86be7eacad6fbc73ac82812cf1ca5911b7983e" - integrity sha512-Bamm2gNdSMVeXEFwlXG75rx49NJfbupDQM6geix0uI30iVCYlufPz+kMe4SzpasO5hHzP7Pat3cmEu4356It+g== - dependencies: - tslib "^2.3.0" - -"@angular/cli@~15.1.3": - version "15.1.3" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-15.1.3.tgz#cb2be6f57459717f1ac5c5029df603acb0b6927f" - integrity sha512-gNVvyvkGZ1zKiDdWjPqCLst8iHcB1C4B2nXrr3B+/YAd1G/y87VI1aBKFlK9ulG4tkwktog5uQaut7xs48IsEQ== - dependencies: - "@angular-devkit/architect" "0.1501.3" - "@angular-devkit/core" "15.1.3" - "@angular-devkit/schematics" "15.1.3" - "@schematics/angular" "15.1.3" - "@yarnpkg/lockfile" "1.1.0" - ansi-colors "4.1.3" - ini "3.0.1" - inquirer "8.2.4" - jsonc-parser "3.2.0" - npm-package-arg "10.1.0" - npm-pick-manifest "8.0.1" - open "8.4.0" - ora "5.4.1" - pacote "15.0.8" - resolve "1.22.1" - semver "7.3.8" - symbol-observable "4.0.0" - yargs "17.6.2" - -"@angular/common@^15.1.0": - version "15.1.2" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-15.1.2.tgz#fcb6a6e4d82738558f17aac8539d241215613f89" - integrity sha512-1Ra6EoaZjPcdDsGBge3qSajO1ECYceX+2EWHdjvJ9ZEIaXsLNFMQBUMgJnjsnrojs9Gd3bxJ0WHkahij5/8WNA== - dependencies: - tslib "^2.3.0" - -"@angular/compiler-cli@^15.1.0": - version "15.1.2" - resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-15.1.2.tgz#591bb83e8972e4d773349f66feba81a6f0b64130" - integrity sha512-gAqbQSKI4oeboh0UKsFdaEoST9IBVzqeckJzSTwAGxJeS33IM7Jjo3LViqHuzQyWKXe6srkci0LD4C2Mrj4kfQ== - dependencies: - "@babel/core" "7.19.3" - "@jridgewell/sourcemap-codec" "^1.4.14" - chokidar "^3.0.0" - convert-source-map "^1.5.1" - dependency-graph "^0.11.0" - magic-string "^0.27.0" - reflect-metadata "^0.1.2" - semver "^7.0.0" - tslib "^2.3.0" - yargs "^17.2.1" - -"@angular/compiler@^15.1.0": - version "15.1.2" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-15.1.2.tgz#5c31ab53cd56da22fa08015ffa6acc9eba3f4bc0" - integrity sha512-hKlr1i61a2Gl0h53goSSUbZmzNgdC1zAHu+Ws0+1Qfv9cDgg1aVphFGFMdV0kbjLV+k7LyFjj5EgWU48o5UXww== - dependencies: - tslib "^2.3.0" - -"@angular/core@^15.1.0": - version "15.1.2" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-15.1.2.tgz#2f258e4ecbfbbb851f84a361bb4b655987d8b3b4" - integrity sha512-K9pz6Bq6RuY/OWhKLZT1JQvk4orvU9wozgXY8cZaOGmNCQQ7sJv5zGkO5csO6o1ON1v/AHowrP/FAF1i8tml5g== - dependencies: - tslib "^2.3.0" - -"@angular/forms@^15.1.0": - version "15.1.2" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-15.1.2.tgz#9d716f614d67b89eae47762aa29d274426bed68c" - integrity sha512-ZL3EkCQ2SDrv9hdyPX54WPiTf9SQpkKz4bn/Gxe6lySLy0oHR5Te68DPMljWBeHYa+cNTCDdPN81AKLIDjRQtA== - dependencies: - tslib "^2.3.0" - -"@angular/platform-browser-dynamic@^15.1.0": - version "15.1.2" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.1.2.tgz#e1d7dd4e668c642117eb3d132aec13732002b514" - integrity sha512-JBSRYeaW+Vb/lKXwxgrU8m42Avxjwmx8vGRp/krJfhh4KL9CJ84zf7Ldxb0sCv06kGdu6vbOUasNGDdgIQfdOQ== - dependencies: - tslib "^2.3.0" - -"@angular/platform-browser@^15.1.0": - version "15.1.2" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-15.1.2.tgz#b2f2b2cef7c2a31222cf2b84c300ab936e57705d" - integrity sha512-eWyfUOFZ05vB0UfPUTPK7pPJZjFtbGZlJOea3IUqEohuyRqq3CqYCrv7SVXGKQVOx1qRA0Ckr9FOB8/qYbTq1A== - dependencies: - tslib "^2.3.0" - -"@angular/router@^15.1.0": - version "15.1.2" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-15.1.2.tgz#b301e1500ef21a2cb5eb0574d3614658592cf46f" - integrity sha512-p2tTHYvBsMaayJNWAZMBqrL7jwxs6NQaEDImBtMwnOnQr/M+LwQdAeNFfpky20ODZw0JwTW84q04l8klExq0kw== - dependencies: - tslib "^2.3.0" - -"@assemblyscript/loader@^0.10.1": - version "0.10.1" - resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.10.1.tgz#70e45678f06c72fa2e350e8553ec4a4d72b92e06" - integrity sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg== - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5": - version "7.20.14" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.14.tgz#4106fc8b755f3e3ee0a0a7c27dde5de1d2b2baf8" - integrity sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw== - -"@babel/core@7.19.3": - version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.3.tgz#2519f62a51458f43b682d61583c3810e7dcee64c" - integrity sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.3" - "@babel/helper-compilation-targets" "^7.19.3" - "@babel/helper-module-transforms" "^7.19.0" - "@babel/helpers" "^7.19.0" - "@babel/parser" "^7.19.3" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.3" - "@babel/types" "^7.19.3" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - -"@babel/core@7.20.12", "@babel/core@^7.12.3": - version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" - integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helpers" "^7.20.7" - "@babel/parser" "^7.20.7" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.12" - "@babel/types" "^7.20.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/generator@7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" - integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== - dependencies: - "@babel/types" "^7.20.7" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/generator@^7.19.3", "@babel/generator@^7.20.7": - version "7.20.14" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.14.tgz#9fa772c9f86a46c6ac9b321039400712b96f64ce" - integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== - dependencies: - "@babel/types" "^7.20.7" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@7.18.6", "@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" - integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.18.6" - "@babel/types" "^7.18.9" - -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.3", "@babel/helper-compilation-targets@^7.20.0", "@babel/helper-compilation-targets@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" - integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.5", "@babel/helper-create-class-features-plugin@^7.20.7": - version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz#4349b928e79be05ed2d1643b20b99bb87c503819" - integrity sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-member-expression-to-functions" "^7.20.7" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/helper-split-export-declaration" "^7.18.6" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz#5ea79b59962a09ec2acf20a963a01ab4d076ccca" - integrity sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - regexpu-core "^5.2.1" - -"@babel/helper-define-polyfill-provider@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" - integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== - dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-explode-assignable-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" - integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== - dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" - -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-member-expression-to-functions@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz#a6f26e919582275a93c3aa6594756d71b0bb7f05" - integrity sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw== - dependencies: - "@babel/types" "^7.20.7" - -"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.0", "@babel/helper-module-transforms@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" - integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.10" - "@babel/types" "^7.20.7" - -"@babel/helper-optimise-call-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" - integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== - dependencies: - "@babel/types" "^7.18.6" - -"@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.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" - integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== - -"@babel/helper-remap-async-to-generator@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" - integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-wrap-function" "^7.18.9" - "@babel/types" "^7.18.9" - -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" - integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.20.7" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" - integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== - dependencies: - "@babel/types" "^7.20.0" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== - -"@babel/helper-wrap-function@^7.18.9": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" - integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== - dependencies: - "@babel/helper-function-name" "^7.19.0" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.5" - "@babel/types" "^7.20.5" - -"@babel/helpers@^7.19.0", "@babel/helpers@^7.20.7": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.13.tgz#e3cb731fb70dc5337134cadc24cbbad31cc87ad2" - integrity sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.13" - "@babel/types" "^7.20.7" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.14.7", "@babel/parser@^7.19.3", "@babel/parser@^7.20.13", "@babel/parser@^7.20.7": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.13.tgz#ddf1eb5a813588d2fb1692b70c6fce75b945c088" - integrity sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": - version "7.18.6" - 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.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" - integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" - integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-proposal-optional-chaining" "^7.20.7" - -"@babel/plugin-proposal-async-generator-functions@7.20.7", "@babel/plugin-proposal-async-generator-functions@^7.20.1": - 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.18.6": - 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-class-static-block@^7.18.6": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz#92592e9029b13b15be0f7ce6a7aedc2879ca45a7" - integrity sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.20.7" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.18.6": - 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-namespace-from@^7.18.9": - 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.18.6": - 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.18.9": - 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.18.6": - 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.18.6": - 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.20.2": - 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.18.6": - 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.18.9", "@babel/plugin-proposal-optional-chaining@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz#49f2b372519ab31728cc14115bb0998b15bfda55" - integrity sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ== - 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.18.6": - 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.18.6": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz#309c7668f2263f1c711aa399b5a9a6291eef6135" - integrity sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.20.5" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@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.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-class-properties@^7.12.13": - 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-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-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-import-assertions@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" - integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== - dependencies: - "@babel/helper-plugin-utils" "^7.19.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.17.12": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" - integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - 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.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": - 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.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.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.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.14.5": - 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-transform-arrow-functions@^7.18.6": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551" - integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-async-to-generator@7.20.7", "@babel/plugin-transform-async-to-generator@^7.18.6": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" - integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== - dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" - -"@babel/plugin-transform-block-scoped-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" - integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-block-scoping@^7.20.2": - version "7.20.14" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.14.tgz#2f5025f01713ba739daf737997308e0d29d1dd75" - integrity sha512-sMPepQtsOs5fM1bwNvuJJHvaCfOEQfmc01FGw0ELlTpTJj5Ql/zuNRRldYhAPys4ghXdBIQJbRVYi44/7QflQQ== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-classes@^7.20.2": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz#f438216f094f6bb31dc266ebfab8ff05aecad073" - integrity sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-split-export-declaration" "^7.18.6" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.18.9": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa" - integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/template" "^7.20.7" - -"@babel/plugin-transform-destructuring@^7.20.2": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz#8bda578f71620c7de7c93af590154ba331415454" - integrity sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" - integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-duplicate-keys@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" - integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-exponentiation-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" - integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-for-of@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" - integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-function-name@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" - integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== - dependencies: - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" - integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-member-expression-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" - integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-modules-amd@^7.19.6": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" - integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== - dependencies: - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-modules-commonjs@^7.19.6": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz#8cb23010869bf7669fd4b3098598b6b2be6dc607" - integrity sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw== - dependencies: - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-simple-access" "^7.20.2" - -"@babel/plugin-transform-modules-systemjs@^7.19.6": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" - integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== - dependencies: - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-identifier" "^7.19.1" - -"@babel/plugin-transform-modules-umd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" - integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== - dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" - integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.20.5" - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-new-target@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" - integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-object-super@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" - integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" - -"@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz#0ee349e9d1bc96e78e3b37a7af423a4078a7083f" - integrity sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-property-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" - integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-regenerator@^7.18.6": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" - integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - regenerator-transform "^0.15.1" - -"@babel/plugin-transform-reserved-words@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" - integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-runtime@7.19.6": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz#9d2a9dbf4e12644d6f46e5e75bfbf02b5d6e9194" - integrity sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw== - dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.19.0" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - semver "^6.3.0" - -"@babel/plugin-transform-shorthand-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" - integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-spread@^7.19.0": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" - integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - -"@babel/plugin-transform-sticky-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" - integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-template-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" - integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-typeof-symbol@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" - integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-unicode-escapes@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" - integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-unicode-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" - integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/preset-env@7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.20.2.tgz#9b1642aa47bb9f43a86f9630011780dab7f86506" - integrity sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg== - dependencies: - "@babel/compat-data" "^7.20.1" - "@babel/helper-compilation-targets" "^7.20.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.20.1" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.18.6" - "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" - "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.20.2" - "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.18.6" - "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" - "@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.20.0" - "@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.18.6" - "@babel/plugin-transform-async-to-generator" "^7.18.6" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.20.2" - "@babel/plugin-transform-classes" "^7.20.2" - "@babel/plugin-transform-computed-properties" "^7.18.9" - "@babel/plugin-transform-destructuring" "^7.20.2" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.18.8" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.19.6" - "@babel/plugin-transform-modules-commonjs" "^7.19.6" - "@babel/plugin-transform-modules-systemjs" "^7.19.6" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" - "@babel/plugin-transform-new-target" "^7.18.6" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.20.1" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.18.6" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.19.0" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.10" - "@babel/plugin-transform-unicode-regex" "^7.18.6" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.20.2" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - core-js-compat "^3.25.1" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - 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" - -"@babel/runtime@7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd" - integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ== - dependencies: - regenerator-runtime "^0.13.11" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.0", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.6", "@babel/runtime@^7.20.7", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b" - integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA== - dependencies: - regenerator-runtime "^0.13.11" - -"@babel/runtime@^7.20.13", "@babel/runtime@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" - integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@7.20.7", "@babel/template@^7.18.10", "@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/traverse@^7.19.3", "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.13", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473" - integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.20.13" - "@babel/types" "^7.20.7" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.19.3", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.4.4": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" - integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@discoveryjs/json-ext@0.5.7": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@dodoex/components@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@dodoex/components/-/components-2.0.1.tgz#6e3f41775bf0d416b92b5d40a2a96e2b11b8d994" - integrity sha512-CZ8ZFcFkctDFdw88gSzBt0XgAsIruy7CV3CCtJ3QZ8zuUJ7zmwUX4nK7eAKeQCwbN9H0bR9Wx3RVrfMjdLN0+g== - dependencies: - "@babel/runtime" "^7.17.0" - "@dodoex/icons" "^2.0.0" - "@mui/base" "^5.0.0-beta.5" - "@mui/system" "5.8.4" - "@szhsin/react-accordion" "^1.2.1" - clsx "^1.2.1" - -"@dodoex/icons@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@dodoex/icons/-/icons-2.0.0.tgz#7cbc8425f2c0d9a314bc1a65571438dc1d9793ba" - integrity sha512-u09YHl32MyHeD5K3vt4njNCOGqNFsFXwZX1Xr//grvWg0JLCZ43iizCQRgPdyIkKqhJprQCuEJwvBMM4jtFJiA== - dependencies: - "@babel/runtime" "^7.17.2" - -"@dodoex/icons@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@dodoex/icons/-/icons-2.0.1.tgz#f241c1812bf32d13d51a948ccb3c585de311b008" - integrity sha512-4E0L5jtaZ+Ya48KAH1ODBk2oX1kWsBKa5nscal8MhlrZkqynbB52TJFI+t95SL6j1iwQen12U/iAHazUuycFTA== - dependencies: - "@babel/runtime" "^7.17.2" - -"@dodoex/widgets@^2.6.4": - version "2.6.4" - resolved "https://registry.yarnpkg.com/@dodoex/widgets/-/widgets-2.6.4.tgz#b67cb5cc7bfd774c4847e840d73e08a4f29ef00a" - integrity sha512-g5PdNobkAcnCtImgaQkNVZONuxGJWswhI6aooW212K5GY31dP6x6PL3YZ4euZAmim8UsX7J0HVcjD5I1IdTHUg== - dependencies: - "@babel/runtime" "^7.17.0" - "@dodoex/components" "^2.0.1" - "@dodoex/icons" "^2.0.1" - "@emotion/react" "^11.10.0" - "@emotion/styled" "^11.10.0" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/contracts" "^5.7.0" - "@lingui/core" "^4.3.0" - "@lingui/macro" "^4.3.0" - "@lingui/react" "^4.3.0" - "@reduxjs/toolkit" "^1.6.1" - "@semantic-release/changelog" "^6.0.1" - "@semantic-release/git" "^10.0.1" - "@web3-react/core" "8.2.0" - "@web3-react/eip1193" "8.2.0" - "@web3-react/metamask" "8.2.1" - "@web3-react/types" "8.2.0" - "@web3-react/walletconnect-v2" "8.3.6" - axios "^0.27.2" - bignumber.js "^9.0.2" - identicon.js "^2.3.3" - lodash "^4.17.21" - make-plural "^7.0.0" - react-window "^1.8.8" - semantic-release "^19.0.2" - -"@emotion/babel-plugin@^11.10.5": - version "11.10.5" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz#65fa6e1790ddc9e23cc22658a4c5dea423c55c3c" - integrity sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/plugin-syntax-jsx" "^7.17.12" - "@babel/runtime" "^7.18.3" - "@emotion/hash" "^0.9.0" - "@emotion/memoize" "^0.8.0" - "@emotion/serialize" "^1.1.1" - 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.1.3" - -"@emotion/cache@^11.10.5": - version "11.10.5" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.5.tgz#c142da9351f94e47527ed458f7bbbbe40bb13c12" - integrity sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA== - dependencies: - "@emotion/memoize" "^0.8.0" - "@emotion/sheet" "^1.2.1" - "@emotion/utils" "^1.2.0" - "@emotion/weak-memoize" "^0.3.0" - stylis "4.1.3" - -"@emotion/hash@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" - integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== - -"@emotion/is-prop-valid@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" - integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg== - dependencies: - "@emotion/memoize" "^0.8.0" - -"@emotion/memoize@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" - integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== - -"@emotion/react@^11.10.0": - version "11.10.5" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.5.tgz#95fff612a5de1efa9c0d535384d3cfa115fe175d" - integrity sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.10.5" - "@emotion/cache" "^11.10.5" - "@emotion/serialize" "^1.1.1" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@emotion/utils" "^1.2.0" - "@emotion/weak-memoize" "^0.3.0" - hoist-non-react-statics "^3.3.1" - -"@emotion/serialize@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.1.tgz#0595701b1902feded8a96d293b26be3f5c1a5cf0" - integrity sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA== - dependencies: - "@emotion/hash" "^0.9.0" - "@emotion/memoize" "^0.8.0" - "@emotion/unitless" "^0.8.0" - "@emotion/utils" "^1.2.0" - csstype "^3.0.2" - -"@emotion/sheet@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.1.tgz#0767e0305230e894897cadb6c8df2c51e61a6c2c" - integrity sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA== - -"@emotion/styled@^11.10.0": - version "11.10.5" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.10.5.tgz#1fe7bf941b0909802cb826457e362444e7e96a79" - integrity sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.10.5" - "@emotion/is-prop-valid" "^1.2.0" - "@emotion/serialize" "^1.1.1" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@emotion/utils" "^1.2.0" - -"@emotion/unitless@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" - integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== - -"@emotion/use-insertion-effect-with-fallbacks@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz#ffadaec35dbb7885bd54de3fa267ab2f860294df" - integrity sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A== - -"@emotion/utils@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561" - integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw== - -"@emotion/weak-memoize@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" - integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== - -"@esbuild/android-arm64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" - integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg== - -"@esbuild/android-arm@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2" - integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw== - -"@esbuild/android-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e" - integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ== - -"@esbuild/darwin-arm64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220" - integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w== - -"@esbuild/darwin-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4" - integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg== - -"@esbuild/freebsd-arm64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27" - integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw== - -"@esbuild/freebsd-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72" - integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug== - -"@esbuild/linux-arm64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca" - integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g== - -"@esbuild/linux-arm@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196" - integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ== - -"@esbuild/linux-ia32@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54" - integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg== - -"@esbuild/linux-loong64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8" - integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ== - -"@esbuild/linux-mips64el@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726" - integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw== - -"@esbuild/linux-ppc64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8" - integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g== - -"@esbuild/linux-riscv64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9" - integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw== - -"@esbuild/linux-s390x@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87" - integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w== - -"@esbuild/linux-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f" - integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw== - -"@esbuild/netbsd-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775" - integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA== - -"@esbuild/openbsd-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35" - integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg== - -"@esbuild/sunos-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c" - integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw== - -"@esbuild/win32-arm64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a" - integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw== - -"@esbuild/win32-ia32@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09" - integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig== - -"@esbuild/win32-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" - integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q== - -"@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@^5", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@^5.6.2", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/contracts@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@^5": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" - integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@floating-ui/core@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.4.1.tgz#0d633f4b76052668afb932492ac452f7ebe97f17" - integrity sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ== - dependencies: - "@floating-ui/utils" "^0.1.1" - -"@floating-ui/dom@^1.5.1": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.2.tgz#6812e89d1d4d4ea32f10d15c3b81feb7f9836d89" - integrity sha512-6ArmenS6qJEWmwzczWyhvrXRdI/rI78poBcW0h/456+onlabit+2G+QxHx5xTOX60NBJQXjsCLFbW2CmsXpUog== - dependencies: - "@floating-ui/core" "^1.4.1" - "@floating-ui/utils" "^0.1.1" - -"@floating-ui/react-dom@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.2.tgz#fab244d64db08e6bed7be4b5fcce65315ef44d20" - integrity sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ== - dependencies: - "@floating-ui/dom" "^1.5.1" - -"@floating-ui/utils@^0.1.1": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.2.tgz#b7e9309ccce5a0a40ac482cb894f120dba2b357f" - integrity sha512-ou3elfqG/hZsbmF4bxeJhPHIf3G2pm0ujc39hYEZrfVqt7Vk/Zji6CXc3W0pmYM8BW1g40U+akTl9DKZhFhInQ== - -"@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== - -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== - -"@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/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== - -"@lingui/conf@4.5.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@lingui/conf/-/conf-4.5.0.tgz#09b39de3a03a9017cd8299b1d8df923c78447ebf" - integrity sha512-OBm4RQQtbpvmuazLWVpvpaOpt/xvu1PBv8WUX8QoW1vsROe/3P5BpRHRYFyMeZz5mhORJgis9lQtDTq145Ruug== - dependencies: - "@babel/runtime" "^7.20.13" - chalk "^4.1.0" - cosmiconfig "^8.0.0" - jest-validate "^29.4.3" - jiti "^1.17.1" - lodash.get "^4.4.2" - -"@lingui/core@4.5.0", "@lingui/core@^4.3.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@lingui/core/-/core-4.5.0.tgz#8b907238bd0b420b372272d0a757c56bed3aed14" - integrity sha512-8zTuIXJo5Qvjato7LWE6Q4RHiO4LjTBVOoRlqfOGYDp8VZ9w9P7Z7IJgxI7UP5Z1wiuEvnMdVF9I1C4acqXGlQ== - dependencies: - "@babel/runtime" "^7.20.13" - "@lingui/message-utils" "4.5.0" - unraw "^3.0.0" - -"@lingui/macro@^4.3.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@lingui/macro/-/macro-4.5.0.tgz#4e779f4652200b7ecc6f3364fda840ae365fb996" - integrity sha512-6qha9YXuNnta4HCR+g6J6UPaAuAFlM1duqgznh4X7hHSsFG+m6oX7/srAMfU41Z8lbDmgXc3raqHLXFSdUNbYQ== - dependencies: - "@babel/runtime" "^7.20.13" - "@babel/types" "^7.20.7" - "@lingui/conf" "4.5.0" - "@lingui/core" "4.5.0" - "@lingui/message-utils" "4.5.0" - -"@lingui/message-utils@4.5.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@lingui/message-utils/-/message-utils-4.5.0.tgz#7ae9dc6cb65cbb5e2dc1b8cdcc4c8b92d5c7189f" - integrity sha512-iRqh2wvNtzJO3NStB77nEXEfeI53aVVjzD7/mBrEm/P0lC7sqPHk0WBQCfzE0N9xm6a+XHmHu3J+x2nnQ2OjcA== - dependencies: - "@messageformat/parser" "^5.0.0" - -"@lingui/react@^4.3.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@lingui/react/-/react-4.5.0.tgz#1cae72e89890f8d270b37cdde051a3c69df97727" - integrity sha512-dv/oxBshyaVJ3XzbPDnWn3abhwtaS1sx8cEO2qDjs+OhW0AeWD9hyVDrduf5SBIuXFJfJQNNA8+2P2nO0lxRbQ== - dependencies: - "@babel/runtime" "^7.20.13" - "@lingui/core" "4.5.0" - -"@lit-labs/ssr-dom-shim@^1.0.0", "@lit-labs/ssr-dom-shim@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.1.tgz#64df34e2f12e68e78ac57e571d25ec07fa460ca9" - integrity sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ== - -"@lit/reactive-element@^1.3.0", "@lit/reactive-element@^1.6.0": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@lit/reactive-element/-/reactive-element-1.6.3.tgz#25b4eece2592132845d303e091bad9b04cdcfe03" - integrity sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ== - dependencies: - "@lit-labs/ssr-dom-shim" "^1.0.0" - -"@messageformat/parser@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@messageformat/parser/-/parser-5.0.0.tgz#5737e69d7d4a469998b527710f1891174fc1b262" - integrity sha512-WiDKhi8F0zQaFU8cXgqq69eYFarCnTVxKcvhAONufKf0oUxbqLMW6JX6rV4Hqh+BEQWGyKKKHY4g1XA6bCLylA== - dependencies: - moo "^0.5.1" - -"@metamask/detect-provider@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@metamask/detect-provider/-/detect-provider-1.2.0.tgz#3667a7531f2a682e3c3a43eaf3a1958bdb42a696" - integrity sha512-ocA76vt+8D0thgXZ7LxFPyqw3H7988qblgzddTDA6B8a/yU0uKV42QR/DhA+Jh11rJjxW0jKvwb5htA6krNZDQ== - -"@motionone/animation@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.15.1.tgz#4a85596c31cbc5100ae8eb8b34c459fb0ccf6807" - integrity sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ== - dependencies: - "@motionone/easing" "^10.15.1" - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - tslib "^2.3.1" - -"@motionone/dom@^10.16.2": - version "10.16.2" - resolved "https://registry.yarnpkg.com/@motionone/dom/-/dom-10.16.2.tgz#0c44df8ee3d1cfc50ee11d27050b27824355a61a" - integrity sha512-bnuHdNbge1FutZXv+k7xub9oPWcF0hsu8y1HTH/qg6av58YI0VufZ3ngfC7p2xhMJMnoh0LXFma2EGTgPeCkeg== - dependencies: - "@motionone/animation" "^10.15.1" - "@motionone/generators" "^10.15.1" - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - hey-listen "^1.0.8" - tslib "^2.3.1" - -"@motionone/easing@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.15.1.tgz#95cf3adaef34da6deebb83940d8143ede3deb693" - integrity sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw== - dependencies: - "@motionone/utils" "^10.15.1" - tslib "^2.3.1" - -"@motionone/generators@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.15.1.tgz#dc6abb11139d1bafe758a41c134d4c753a9b871c" - integrity sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ== - dependencies: - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - tslib "^2.3.1" - -"@motionone/svelte@^10.16.2": - version "10.16.2" - resolved "https://registry.yarnpkg.com/@motionone/svelte/-/svelte-10.16.2.tgz#0b37c3b12927814d31d24941d1ca0ff49981b444" - integrity sha512-38xsroKrfK+aHYhuQlE6eFcGy0EwrB43Q7RGjF73j/kRUTcLNu/LAaKiLLsN5lyqVzCgTBVt4TMT/ShWbTbc5Q== - dependencies: - "@motionone/dom" "^10.16.2" - tslib "^2.3.1" - -"@motionone/types@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.15.1.tgz#89441b54285012795cbba8612cbaa0fa420db3eb" - integrity sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA== - -"@motionone/utils@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.15.1.tgz#6b5f51bde75be88b5411e084310299050368a438" - integrity sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw== - dependencies: - "@motionone/types" "^10.15.1" - hey-listen "^1.0.8" - tslib "^2.3.1" - -"@motionone/vue@^10.16.2": - version "10.16.2" - resolved "https://registry.yarnpkg.com/@motionone/vue/-/vue-10.16.2.tgz#faf13afc27620a2df870c71c58a04ee8de8dea65" - integrity sha512-7/dEK/nWQXOkJ70bqb2KyNfSWbNvWqKKq1C8juj+0Mg/AorgD8O5wE3naddK0G+aXuNMqRuc4jlsYHHWHtIzVw== - dependencies: - "@motionone/dom" "^10.16.2" - tslib "^2.3.1" - -"@mui/base@^5.0.0-beta.5": - version "5.0.0-beta.15" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.15.tgz#76bebd377cc3b7fdc80924759a4100e5319ed0f9" - integrity sha512-Xtom3YSdi0iwYPtyVRFUEGoRwi6IHWixPwifDKaK+4PkEPtUWMU5YOIJfTsmC59ri+dFvA3oBNSiTPUGGrklZw== - dependencies: - "@babel/runtime" "^7.22.15" - "@floating-ui/react-dom" "^2.0.2" - "@mui/types" "^7.2.4" - "@mui/utils" "^5.14.9" - "@popperjs/core" "^2.11.8" - clsx "^2.0.0" - prop-types "^15.8.1" - -"@mui/private-theming@^5.8.4": - version "5.11.2" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.11.2.tgz#93eafb317070888a988efa8d6a9ec1f69183a606" - integrity sha512-qZwMaqRFPwlYmqwVKblKBGKtIjJRAj3nsvX93pOmatsXyorW7N/0IPE/swPgz1VwChXhHO75DwBEx8tB+aRMNg== - dependencies: - "@babel/runtime" "^7.20.7" - "@mui/utils" "^5.11.2" - prop-types "^15.8.1" - -"@mui/styled-engine@^5.8.0": - version "5.11.0" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.11.0.tgz#79afb30c612c7807c4b77602cf258526d3997c7b" - integrity sha512-AF06K60Zc58qf0f7X+Y/QjaHaZq16znliLnGc9iVrV/+s8Ln/FCoeNuFvhlCbZZQ5WQcJvcy59zp0nXrklGGPQ== - dependencies: - "@babel/runtime" "^7.20.6" - "@emotion/cache" "^11.10.5" - csstype "^3.1.1" - prop-types "^15.8.1" - -"@mui/system@5.8.4": - version "5.8.4" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.8.4.tgz#88306aefcc3a60528f69dcd2d66516831859c328" - integrity sha512-eeYZXlOn4p+tYwqqDlci6wW4knJ68aGx5A24YU9ubYZ5o0IwveoNP3LC9sHAMxigk/mUTqL4bpSMJ2HbTn2aQg== - dependencies: - "@babel/runtime" "^7.17.2" - "@mui/private-theming" "^5.8.4" - "@mui/styled-engine" "^5.8.0" - "@mui/types" "^7.1.4" - "@mui/utils" "^5.8.4" - clsx "^1.1.1" - csstype "^3.1.0" - prop-types "^15.8.1" - -"@mui/types@^7.1.4": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.3.tgz#06faae1c0e2f3a31c86af6f28b3a4a42143670b9" - integrity sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw== - -"@mui/types@^7.2.4": - version "7.2.4" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.4.tgz#b6fade19323b754c5c6de679a38f068fd50b9328" - integrity sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA== - -"@mui/utils@^5.11.2", "@mui/utils@^5.8.4": - version "5.11.2" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.11.2.tgz#29764311acb99425159b159b1cb382153ad9be1f" - integrity sha512-AyizuHHlGdAtH5hOOXBW3kriuIwUIKUIgg0P7LzMvzf6jPhoQbENYqY6zJqfoZ7fAWMNNYT8mgN5EftNGzwE2w== - dependencies: - "@babel/runtime" "^7.20.7" - "@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" - -"@mui/utils@^5.14.9": - version "5.14.9" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.14.9.tgz#eeefef88dbee687ac90e8972c63f0d41f19348a3" - integrity sha512-9ysB5e+RwS7ofn0n3nwAg1/3c81vBTmSvauD3EuK9LmqMzhmF//BFDaC44U4yITvB/0m1kWyDqg924Ll3VHCcg== - dependencies: - "@babel/runtime" "^7.22.15" - prop-types "^15.8.1" - react-is "^18.2.0" - -"@ngtools/webpack@15.1.3": - version "15.1.3" - resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-15.1.3.tgz#08c6197004cc6563919cbec08b4a26e8e09f1bdf" - integrity sha512-xbV74ulf5BwIA61jASjKxzS0gzD6CQQkqPXDRo8I1tpDMQpEKFKWivw+1Joy6Anm62DWR4xuMEhnj5kjKWemgw== - -"@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/arborist@^5.6.3": - version "5.6.3" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.6.3.tgz#40810080272e097b4a7a4f56108f4a31638a9874" - integrity sha512-/7hbqEM6YuRjwTcQXkK1+xKslEblY5kFQe0tZ7jKyMlIR6x4iOmhLErIkBBGtTKvYxRKdpcxnFXjCobg3UqmsA== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^2.0.3" - "@npmcli/metavuln-calculator" "^3.0.1" - "@npmcli/move-file" "^2.0.0" - "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/package-json" "^2.0.0" - "@npmcli/query" "^1.2.0" - "@npmcli/run-script" "^4.1.3" - bin-links "^3.0.3" - cacache "^16.1.3" - common-ancestor-path "^1.0.1" - hosted-git-info "^5.2.1" - json-parse-even-better-errors "^2.3.1" - json-stringify-nice "^1.1.4" - minimatch "^5.1.0" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - nopt "^6.0.0" - npm-install-checks "^5.0.0" - npm-package-arg "^9.0.0" - npm-pick-manifest "^7.0.2" - npm-registry-fetch "^13.0.0" - npmlog "^6.0.2" - pacote "^13.6.1" - parse-conflict-json "^2.0.1" - proc-log "^2.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^2.0.2" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.7" - ssri "^9.0.0" - treeverse "^2.0.0" - walk-up-path "^1.0.0" - -"@npmcli/ci-detect@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-2.0.0.tgz#e63c91bcd4185ac1e85720a34fc48e164ece5b89" - integrity sha512-8yQtQ9ArHh/TzdUDKQwEvwCgpDuhSWTDAbiKMl3854PcT+Dk4UmWaiawuFTLy9n5twzXOBXVflWe+90/ffXQrA== - -"@npmcli/config@^4.2.1": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-4.2.2.tgz#2e3334dda84f48d059309c53d152e66b05ca24b7" - integrity sha512-5GNcLd+0c4bYBnFop53+26CO5GQP0R9YcxlernohpHDWdIgzUg9I0+GEMk3sNHnLntATVU39d283A4OO+W402w== - dependencies: - "@npmcli/map-workspaces" "^2.0.2" - ini "^3.0.0" - mkdirp-infer-owner "^2.0.0" - nopt "^6.0.0" - proc-log "^2.0.0" - read-package-json-fast "^2.0.3" - semver "^7.3.5" - walk-up-path "^1.0.0" - -"@npmcli/disparity-colors@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-2.0.0.tgz#cb518166ee21573b96241a3613fef70acb2a60ba" - integrity sha512-FFXGrIjhvd2qSZ8iS0yDvbI7nbjdyT2VNO7wotosjYZM2p2r8PN3B7Om3M5NO9KqW/OVzfzLB3L0V5Vo5QXC7A== - dependencies: - ansi-styles "^4.3.0" - -"@npmcli/fs@^2.1.0", "@npmcli/fs@^2.1.1": - 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/fs@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" - integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== - dependencies: - semver "^7.3.5" - -"@npmcli/git@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.2.tgz#5c5de6b4d70474cf2d09af149ce42e4e1dacb931" - integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== - dependencies: - "@npmcli/promise-spawn" "^3.0.0" - lru-cache "^7.4.4" - mkdirp "^1.0.4" - npm-pick-manifest "^7.0.0" - proc-log "^2.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^2.0.2" - -"@npmcli/git@^4.0.0": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.0.3.tgz#354db5fe1f29696303638e191d8538ee9b01b4bb" - integrity sha512-8cXNkDIbnXPVbhXMmQ7/bklCAjtmPaXfI9aEM4iH+xSuEHINLMHhlfESvVwdqmHJRJkR48vNJTSUvoF6GRPSFA== - dependencies: - "@npmcli/promise-spawn" "^6.0.0" - lru-cache "^7.4.4" - mkdirp "^1.0.4" - npm-pick-manifest "^8.0.0" - proc-log "^3.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^3.0.0" - -"@npmcli/installed-package-contents@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== - dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -"@npmcli/installed-package-contents@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.1.tgz#3cad3141c95613426820128757a3549bef1b346b" - integrity sha512-GIykAFdOVK31Q1/zAtT5MbxqQL2vyl9mvFJv+OGu01zxbhL3p0xc8gJjdNGX1mWmUT43aEKVO2L6V/2j4TOsAA== - dependencies: - npm-bundled "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -"@npmcli/map-workspaces@^2.0.2", "@npmcli/map-workspaces@^2.0.3": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc" - integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== - dependencies: - "@npmcli/name-from-folder" "^1.0.1" - glob "^8.0.1" - minimatch "^5.0.1" - read-package-json-fast "^2.0.3" - -"@npmcli/metavuln-calculator@^3.0.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" - integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== - dependencies: - cacache "^16.0.0" - json-parse-even-better-errors "^2.3.1" - pacote "^13.0.3" - semver "^7.3.5" - -"@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" - -"@npmcli/name-from-folder@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" - integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== - -"@npmcli/node-gyp@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" - integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== - -"@npmcli/node-gyp@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" - integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== - -"@npmcli/package-json@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" - integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== - dependencies: - json-parse-even-better-errors "^2.3.1" - -"@npmcli/promise-spawn@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" - integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== - dependencies: - infer-owner "^1.0.4" - -"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" - integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== - dependencies: - which "^3.0.0" - -"@npmcli/query@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-1.2.0.tgz#46468d583cf013aa92102970700f9555314aabe4" - integrity sha512-uWglsUM3PjBLgTSmZ3/vygeGdvWEIZ3wTUnzGFbprC/RtvQSaT+GAXu1DXmSFj2bD3oOZdcRm1xdzsV2z1YWdw== - dependencies: - npm-package-arg "^9.1.0" - postcss-selector-parser "^6.0.10" - semver "^7.3.7" - -"@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.2.0", "@npmcli/run-script@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946" - integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== - dependencies: - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/promise-spawn" "^3.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^2.0.3" - which "^2.0.2" - -"@npmcli/run-script@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.0.tgz#f89e322c729e26ae29db6cc8cc76559074aac208" - integrity sha512-ql+AbRur1TeOdl1FY+RAwGW9fcr4ZwiVKabdvm93mujGREVuVLbdkXRJDrkTXSdCjaxYydr1wlA2v67jxWG5BQ== - dependencies: - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/promise-spawn" "^6.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^3.0.0" - which "^3.0.0" - -"@octokit/auth-token@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.3.tgz#ce7e48a3166731f26068d7a7a7996b5da58cbe0c" - integrity sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA== - dependencies: - "@octokit/types" "^9.0.0" - -"@octokit/core@^4.1.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.0.tgz#8c253ba9605aca605bc46187c34fcccae6a96648" - integrity sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg== - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^7.0.0": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.5.tgz#2bb2a911c12c50f10014183f5d596ce30ac67dd1" - integrity sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA== - dependencies: - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^5.0.0": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.5.tgz#a4cb3ea73f83b861893a6370ee82abb36e81afd2" - integrity sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ== - dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^16.0.0": - version "16.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-16.0.0.tgz#d92838a6cd9fb4639ca875ddb3437f1045cc625e" - integrity sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA== - -"@octokit/plugin-paginate-rest@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz#f34b5a7d9416019126042cd7d7b811e006c0d561" - integrity sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw== - dependencies: - "@octokit/types" "^9.0.0" - -"@octokit/plugin-request-log@^1.0.4": - 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@^7.0.0": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz#f7ebe18144fd89460f98f35a587b056646e84502" - integrity sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.3.1" - -"@octokit/request-error@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" - integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^6.0.0": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.3.tgz#76d5d6d44da5c8d406620a4c285d280ae310bdb4" - integrity sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA== - dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/rest@^19.0.0": - version "19.0.7" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.7.tgz#d2e21b4995ab96ae5bfae50b4969da7e04e0bb70" - integrity sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA== - dependencies: - "@octokit/core" "^4.1.0" - "@octokit/plugin-paginate-rest" "^6.0.0" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^7.0.0" - -"@octokit/types@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.0.0.tgz#6050db04ddf4188ec92d60e4da1a2ce0633ff635" - integrity sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw== - dependencies: - "@octokit/openapi-types" "^16.0.0" - -"@pnpm/network.ca-file@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" - integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== - dependencies: - graceful-fs "4.2.10" - -"@pnpm/npm-conf@^1.0.4": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz#3475541fb71d7b6ce68acaaa3392eae9fedf3276" - integrity sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A== - dependencies: - "@pnpm/network.ca-file" "^1.0.1" - config-chain "^1.1.11" - -"@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== - -"@reduxjs/toolkit@^1.6.1": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.2.tgz#4cd153491118038e2eebcb63b2264e42a8a2d74c" - integrity sha512-5ZAZ7hwAKWSii5T6NTPmgIBUqyVdlDs+6JjThz6J6dmHLDm6zCzv2OjHIFAi3Vvs1qjmXU0bm6eBojukYXjVMQ== - dependencies: - immer "^9.0.16" - redux "^4.2.0" - redux-thunk "^2.4.2" - reselect "^4.1.7" - -"@schematics/angular@15.1.3": - version "15.1.3" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-15.1.3.tgz#725fbe07d62345003334371164538407e30742c3" - integrity sha512-jCJ0Nq/FpoMnA63rPAhRWQJFVbS+K8NpdTHZ/7l4wx9iFtIH7khCdbp3QYMJSwZh5pEiw/NO7ouxsWo5YgapYQ== - dependencies: - "@angular-devkit/core" "15.1.3" - "@angular-devkit/schematics" "15.1.3" - jsonc-parser "3.2.0" - -"@semantic-release/changelog@^6.0.1": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@semantic-release/changelog/-/changelog-6.0.2.tgz#fdcdbd368788c8fcc69c4af29bf2064f4afb45f4" - integrity sha512-jHqfTkoPbDEOAgAP18mGP53IxeMwxTISN+GwTRy9uLu58UjARoZU8ScCgWGeO2WPkEsm57H8AkyY02W2ntIlIw== - dependencies: - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - fs-extra "^11.0.0" - lodash "^4.17.4" - -"@semantic-release/commit-analyzer@^9.0.2": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz#a78e54f9834193b55f1073fa6258eecc9a545e03" - integrity sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g== - dependencies: - conventional-changelog-angular "^5.0.0" - conventional-commits-filter "^2.0.0" - conventional-commits-parser "^3.2.3" - debug "^4.0.0" - import-from "^4.0.0" - lodash "^4.17.4" - micromatch "^4.0.2" - -"@semantic-release/error@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-3.0.0.tgz#30a3b97bbb5844d695eb22f9d3aa40f6a92770c2" - integrity sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw== - -"@semantic-release/git@^10.0.1": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/git/-/git-10.0.1.tgz#c646e55d67fae623875bf3a06a634dd434904498" - integrity sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w== - dependencies: - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - debug "^4.0.0" - dir-glob "^3.0.0" - execa "^5.0.0" - lodash "^4.17.4" - micromatch "^4.0.0" - p-reduce "^2.0.0" - -"@semantic-release/github@^8.0.0": - version "8.0.7" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.7.tgz#643aee7a5cdd2acd3ae643bb90ad4ac796901de6" - integrity sha512-VtgicRIKGvmTHwm//iqTh/5NGQwsncOMR5vQK9pMT92Aem7dv37JFKKRuulUsAnUOIlO4G8wH3gPiBAA0iW0ww== - dependencies: - "@octokit/rest" "^19.0.0" - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - bottleneck "^2.18.1" - debug "^4.0.0" - dir-glob "^3.0.0" - fs-extra "^11.0.0" - globby "^11.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - issue-parser "^6.0.0" - lodash "^4.17.4" - mime "^3.0.0" - p-filter "^2.0.0" - p-retry "^4.0.0" - url-join "^4.0.0" - -"@semantic-release/npm@^9.0.0": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-9.0.2.tgz#0f0903b4df6e93ef237372146bc376087fed4e1d" - integrity sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g== - dependencies: - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - execa "^5.0.0" - fs-extra "^11.0.0" - lodash "^4.17.15" - nerf-dart "^1.0.0" - normalize-url "^6.0.0" - npm "^8.3.0" - rc "^1.2.8" - read-pkg "^5.0.0" - registry-auth-token "^5.0.0" - semver "^7.1.2" - tempy "^1.0.0" - -"@semantic-release/release-notes-generator@^10.0.0": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz#85f7ca78bfa6b01fb5fda0ac48112855d69171dc" - integrity sha512-k4x4VhIKneOWoBGHkx0qZogNjCldLPRiAjnIpMnlUh6PtaWXp/T+C9U7/TaNDDtgDa5HMbHl4WlREdxHio6/3w== - dependencies: - conventional-changelog-angular "^5.0.0" - conventional-changelog-writer "^5.0.0" - conventional-commits-filter "^2.0.0" - conventional-commits-parser "^3.2.3" - debug "^4.0.0" - get-stream "^6.0.0" - import-from "^4.0.0" - into-stream "^6.0.0" - lodash "^4.17.4" - read-pkg-up "^7.0.0" - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@socket.io/component-emitter@~3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" - integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== - -"@stablelib/aead@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/aead/-/aead-1.0.1.tgz#c4b1106df9c23d1b867eb9b276d8f42d5fc4c0c3" - integrity sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg== - -"@stablelib/binary@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.1.tgz#c5900b94368baf00f811da5bdb1610963dfddf7f" - integrity sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== - dependencies: - "@stablelib/int" "^1.0.1" - -"@stablelib/bytes@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/bytes/-/bytes-1.0.1.tgz#0f4aa7b03df3080b878c7dea927d01f42d6a20d8" - integrity sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ== - -"@stablelib/chacha20poly1305@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz#de6b18e283a9cb9b7530d8767f99cde1fec4c2ee" - integrity sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA== - dependencies: - "@stablelib/aead" "^1.0.1" - "@stablelib/binary" "^1.0.1" - "@stablelib/chacha" "^1.0.1" - "@stablelib/constant-time" "^1.0.1" - "@stablelib/poly1305" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/chacha@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/chacha/-/chacha-1.0.1.tgz#deccfac95083e30600c3f92803a3a1a4fa761371" - integrity sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/constant-time@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/constant-time/-/constant-time-1.0.1.tgz#bde361465e1cf7b9753061b77e376b0ca4c77e35" - integrity sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg== - -"@stablelib/ed25519@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@stablelib/ed25519/-/ed25519-1.0.3.tgz#f8fdeb6f77114897c887bb6a3138d659d3f35996" - integrity sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg== - dependencies: - "@stablelib/random" "^1.0.2" - "@stablelib/sha512" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/hash@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/hash/-/hash-1.0.1.tgz#3c944403ff2239fad8ebb9015e33e98444058bc5" - integrity sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg== - -"@stablelib/hkdf@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/hkdf/-/hkdf-1.0.1.tgz#b4efd47fd56fb43c6a13e8775a54b354f028d98d" - integrity sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g== - dependencies: - "@stablelib/hash" "^1.0.1" - "@stablelib/hmac" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/hmac@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/hmac/-/hmac-1.0.1.tgz#3d4c1b8cf194cb05d28155f0eed8a299620a07ec" - integrity sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA== - dependencies: - "@stablelib/constant-time" "^1.0.1" - "@stablelib/hash" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/int@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/int/-/int-1.0.1.tgz#75928cc25d59d73d75ae361f02128588c15fd008" - integrity sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w== - -"@stablelib/keyagreement@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz#4612efb0a30989deb437cd352cee637ca41fc50f" - integrity sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg== - dependencies: - "@stablelib/bytes" "^1.0.1" - -"@stablelib/poly1305@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/poly1305/-/poly1305-1.0.1.tgz#93bfb836c9384685d33d70080718deae4ddef1dc" - integrity sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA== - dependencies: - "@stablelib/constant-time" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/random@^1.0.1", "@stablelib/random@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.2.tgz#2dece393636489bf7e19c51229dd7900eddf742c" - integrity sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/sha256@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/sha256/-/sha256-1.0.1.tgz#77b6675b67f9b0ea081d2e31bda4866297a3ae4f" - integrity sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/hash" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/sha512@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/sha512/-/sha512-1.0.1.tgz#6da700c901c2c0ceacbd3ae122a38ac57c72145f" - integrity sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/hash" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/wipe@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" - integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== - -"@stablelib/x25519@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@stablelib/x25519/-/x25519-1.0.3.tgz#13c8174f774ea9f3e5e42213cbf9fc68a3c7b7fd" - integrity sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw== - dependencies: - "@stablelib/keyagreement" "^1.0.1" - "@stablelib/random" "^1.0.2" - "@stablelib/wipe" "^1.0.1" - -"@szhsin/react-accordion@^1.2.1": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@szhsin/react-accordion/-/react-accordion-1.2.3.tgz#ee4d83c66a89748bfe2a2b23dd14bbb3d4f63fbf" - integrity sha512-KsDmaYsv4+Rnla+fSdZMIMonzuvXlDRPaFeIa7Je0dnwY4iFry5eiw27GQ6276+tYkVRgUyfS/mEcL48efSivA== - dependencies: - react-transition-state "^2.1.1" - -"@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== - -"@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/bonjour@^3.5.9": - version "3.5.10" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" - integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== - dependencies: - "@types/node" "*" - -"@types/connect-history-api-fallback@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" - integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== - dependencies: - "@types/node" "*" - -"@types/cookie@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" - integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== - -"@types/cors@^2.8.12": - version "2.8.13" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.13.tgz#b8ade22ba455a1b8cb3b5d3f35910fd204f84f94" - integrity sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA== - dependencies: - "@types/node" "*" - -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.4.10" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.10.tgz#19731b9685c19ed1552da7052b6f668ed7eb64bb" - integrity sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.31": - version "4.17.33" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" - integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - -"@types/express@*", "@types/express@^4.17.13": - version "4.17.16" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.16.tgz#986caf0b4b850611254505355daa24e1b8323de8" - integrity sha512-LkKpqRZ7zqXJuvoELakaFYuETHjZkSol8EV6cNnyishutDBCCdv6+dsKPbKkCcIk57qRphOLY5sEgClw1bO3gA== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.31" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/http-proxy@^1.17.8": - version "1.17.9" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" - integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jasmine@~4.3.0": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-4.3.1.tgz#2d8ab5601c2fe7d9673dcb157e03f128ab5c5fff" - integrity sha512-Vu8l+UGcshYmV1VWwULgnV/2RDbBaO6i2Ptx7nd//oJPIZGhoI1YLST4VKagD2Pq/Bc2/7zvtvhM7F3p4SN7kQ== - -"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/mime@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" - integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== - -"@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== - -"@types/node@*", "@types/node@>=10.0.0": - version "18.11.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" - integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/prop-types@*", "@types/prop-types@^15.7.5": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - -"@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== - -"@types/react-is@^16.7.1 || ^17.0.0": - version "17.0.3" - resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-17.0.3.tgz#2d855ba575f2fc8d17ef9861f084acc4b90a137a" - integrity sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "18.0.27" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.27.tgz#d9425abe187a00f8a5ec182b010d4fd9da703b71" - integrity sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@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/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== - -"@types/serve-index@^1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" - integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== - dependencies: - "@types/express" "*" - -"@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" - integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== - dependencies: - "@types/mime" "*" - "@types/node" "*" - -"@types/sockjs@^0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" - integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== - dependencies: - "@types/node" "*" - -"@types/trusted-types@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.4.tgz#2b38784cd16957d3782e8e2b31c03bc1d13b4d65" - integrity sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ== - -"@types/ws@^8.5.1": - version "8.5.4" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" - integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^17.0.8": - version "17.0.24" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" - integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== - dependencies: - "@types/yargs-parser" "*" - -"@walletconnect/core@2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.10.1.tgz#d1fb442bd77424666bacdb0f5a07f7708fb3d984" - integrity sha512-WAoXfmj+Zy5q48TnrKUjmHXJCBahzKwbul+noepRZf7JDtUAZ9IOWpUjg+UPRbfK5EiWZ0TF42S6SXidf7EHoQ== - dependencies: - "@walletconnect/heartbeat" "1.2.1" - "@walletconnect/jsonrpc-provider" "1.0.13" - "@walletconnect/jsonrpc-types" "1.0.3" - "@walletconnect/jsonrpc-utils" "1.0.8" - "@walletconnect/jsonrpc-ws-connection" "1.0.13" - "@walletconnect/keyvaluestorage" "^1.0.2" - "@walletconnect/logger" "^2.0.1" - "@walletconnect/relay-api" "^1.0.9" - "@walletconnect/relay-auth" "^1.0.4" - "@walletconnect/safe-json" "^1.0.2" - "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.10.1" - "@walletconnect/utils" "2.10.1" - events "^3.3.0" - lodash.isequal "4.5.0" - uint8arrays "^3.1.0" - -"@walletconnect/environment@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.1.tgz#1d7f82f0009ab821a2ba5ad5e5a7b8ae3b214cd7" - integrity sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg== - dependencies: - tslib "1.14.1" - -"@walletconnect/ethereum-provider@^2.8.4": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/ethereum-provider/-/ethereum-provider-2.10.1.tgz#4733a98f0b388cf5ae6c2b269f50da87da432ee5" - integrity sha512-Yhoz8EXkKzxOlBT6G+elphqCx/gkH6RxD9/ZAiy9lLc8Ng5p1gvKCVVP5zsGNE9FbkKmHd+J9JJRzn2Bw2yqtQ== - dependencies: - "@walletconnect/jsonrpc-http-connection" "^1.0.7" - "@walletconnect/jsonrpc-provider" "^1.0.13" - "@walletconnect/jsonrpc-types" "^1.0.3" - "@walletconnect/jsonrpc-utils" "^1.0.8" - "@walletconnect/sign-client" "2.10.1" - "@walletconnect/types" "2.10.1" - "@walletconnect/universal-provider" "2.10.1" - "@walletconnect/utils" "2.10.1" - events "^3.3.0" - -"@walletconnect/events@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/events/-/events-1.0.1.tgz#2b5f9c7202019e229d7ccae1369a9e86bda7816c" - integrity sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ== - dependencies: - keyvaluestorage-interface "^1.0.0" - tslib "1.14.1" - -"@walletconnect/heartbeat@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@walletconnect/heartbeat/-/heartbeat-1.2.1.tgz#afaa3a53232ae182d7c9cff41c1084472d8f32e9" - integrity sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q== - dependencies: - "@walletconnect/events" "^1.0.1" - "@walletconnect/time" "^1.0.2" - tslib "1.14.1" - -"@walletconnect/jsonrpc-http-connection@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.7.tgz#a6973569b8854c22da707a759d241e4f5c2d5a98" - integrity sha512-qlfh8fCfu8LOM9JRR9KE0s0wxP6ZG9/Jom8M0qsoIQeKF3Ni0FyV4V1qy/cc7nfI46SLQLSl4tgWSfLiE1swyQ== - dependencies: - "@walletconnect/jsonrpc-utils" "^1.0.6" - "@walletconnect/safe-json" "^1.0.1" - cross-fetch "^3.1.4" - tslib "1.14.1" - -"@walletconnect/jsonrpc-provider@1.0.13", "@walletconnect/jsonrpc-provider@^1.0.13": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.13.tgz#9a74da648d015e1fffc745f0c7d629457f53648b" - integrity sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g== - dependencies: - "@walletconnect/jsonrpc-utils" "^1.0.8" - "@walletconnect/safe-json" "^1.0.2" - tslib "1.14.1" - -"@walletconnect/jsonrpc-types@1.0.3", "@walletconnect/jsonrpc-types@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.3.tgz#65e3b77046f1a7fa8347ae02bc1b841abe6f290c" - integrity sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw== - dependencies: - keyvaluestorage-interface "^1.0.0" - tslib "1.14.1" - -"@walletconnect/jsonrpc-types@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.2.tgz#b79519f679cd6a5fa4a1bea888f27c1916689a20" - integrity sha512-CZe8tjJX73OWdHjrBHy7HtAapJ2tT0Q3TYhPBhRxi3643lwPIQWC9En45ldY14TZwgSewkbZ0FtGBZK0G7Bbyg== - dependencies: - keyvaluestorage-interface "^1.0.0" - tslib "1.14.1" - -"@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.7", "@walletconnect/jsonrpc-utils@^1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz#82d0cc6a5d6ff0ecc277cb35f71402c91ad48d72" - integrity sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw== - dependencies: - "@walletconnect/environment" "^1.0.1" - "@walletconnect/jsonrpc-types" "^1.0.3" - tslib "1.14.1" - -"@walletconnect/jsonrpc-ws-connection@1.0.13": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.13.tgz#23b0cdd899801bfbb44a6556936ec2b93ef2adf4" - integrity sha512-mfOM7uFH4lGtQxG+XklYuFBj6dwVvseTt5/ahOkkmpcAEgz2umuzu7fTR+h5EmjQBdrmYyEBOWADbeaFNxdySg== - dependencies: - "@walletconnect/jsonrpc-utils" "^1.0.6" - "@walletconnect/safe-json" "^1.0.2" - events "^3.3.0" - tslib "1.14.1" - ws "^7.5.1" - -"@walletconnect/keyvaluestorage@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.0.2.tgz#92f5ca0f54c1a88a093778842ce0c874d86369c8" - integrity sha512-U/nNG+VLWoPFdwwKx0oliT4ziKQCEoQ27L5Hhw8YOFGA2Po9A9pULUYNWhDgHkrb0gYDNt//X7wABcEWWBd3FQ== - dependencies: - safe-json-utils "^1.1.1" - tslib "1.14.1" - -"@walletconnect/logger@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.0.1.tgz#7f489b96e9a1ff6bf3e58f0fbd6d69718bf844a8" - integrity sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ== - dependencies: - pino "7.11.0" - tslib "1.14.1" - -"@walletconnect/modal-core@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@walletconnect/modal-core/-/modal-core-2.6.2.tgz#d73e45d96668764e0c8668ea07a45bb8b81119e9" - integrity sha512-cv8ibvdOJQv2B+nyxP9IIFdxvQznMz8OOr/oR/AaUZym4hjXNL/l1a2UlSQBXrVjo3xxbouMxLb3kBsHoYP2CA== - dependencies: - valtio "1.11.2" - -"@walletconnect/modal-ui@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@walletconnect/modal-ui/-/modal-ui-2.6.2.tgz#fa57c087c57b7f76aaae93deab0f84bb68b59cf9" - integrity sha512-rbdstM1HPGvr7jprQkyPggX7rP4XiCG85ZA+zWBEX0dVQg8PpAgRUqpeub4xQKDgY7pY/xLRXSiCVdWGqvG2HA== - dependencies: - "@walletconnect/modal-core" "2.6.2" - lit "2.8.0" - motion "10.16.2" - qrcode "1.5.3" - -"@walletconnect/modal@^2.4.5": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@walletconnect/modal/-/modal-2.6.2.tgz#4b534a836f5039eeb3268b80be7217a94dd12651" - integrity sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA== - dependencies: - "@walletconnect/modal-core" "2.6.2" - "@walletconnect/modal-ui" "2.6.2" - -"@walletconnect/relay-api@^1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.9.tgz#f8c2c3993dddaa9f33ed42197fc9bfebd790ecaf" - integrity sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg== - dependencies: - "@walletconnect/jsonrpc-types" "^1.0.2" - tslib "1.14.1" - -"@walletconnect/relay-auth@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz#0b5c55c9aa3b0ef61f526ce679f3ff8a5c4c2c7c" - integrity sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ== - dependencies: - "@stablelib/ed25519" "^1.0.2" - "@stablelib/random" "^1.0.1" - "@walletconnect/safe-json" "^1.0.1" - "@walletconnect/time" "^1.0.2" - tslib "1.14.1" - uint8arrays "^3.0.0" - -"@walletconnect/safe-json@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.1.tgz#9813fa0a7a544b16468730c2d7bed046ed160957" - integrity sha512-Fm7e31oSYY15NQr8SsLJheKAy5L744udZf2lJKcz6wFmPJEzf7hOF0866o/rrldRzJnjZ4H2GJ45pFudsnLW5A== - dependencies: - tslib "1.14.1" - -"@walletconnect/safe-json@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.2.tgz#7237e5ca48046e4476154e503c6d3c914126fa77" - integrity sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA== - dependencies: - tslib "1.14.1" - -"@walletconnect/sign-client@2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.10.1.tgz#db60bc9400cd79f0cb2380067343512b21ee4749" - integrity sha512-iG3eJGi1yXeG3xGeVSSMf8wDFyx239B0prLQfy1uYDtYFb2ynnH/09oqAZyKn96W5nfQzUgM2Mz157PVdloH3Q== - dependencies: - "@walletconnect/core" "2.10.1" - "@walletconnect/events" "^1.0.1" - "@walletconnect/heartbeat" "1.2.1" - "@walletconnect/jsonrpc-utils" "1.0.8" - "@walletconnect/logger" "^2.0.1" - "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.10.1" - "@walletconnect/utils" "2.10.1" - events "^3.3.0" - -"@walletconnect/time@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@walletconnect/time/-/time-1.0.2.tgz#6c5888b835750ecb4299d28eecc5e72c6d336523" - integrity sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g== - dependencies: - tslib "1.14.1" - -"@walletconnect/types@2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.10.1.tgz#1355bce236f3eef575716ea3efe4beed98a873ef" - integrity sha512-7pccAhajQdiH2kYywjE1XI64IqRI+4ioyGy0wvz8d0UFQ/DSG3MLKR8jHf5aTOafQQ/HRLz6xvlzN4a7gIVkUQ== - dependencies: - "@walletconnect/events" "^1.0.1" - "@walletconnect/heartbeat" "1.2.1" - "@walletconnect/jsonrpc-types" "1.0.3" - "@walletconnect/keyvaluestorage" "^1.0.2" - "@walletconnect/logger" "^2.0.1" - events "^3.3.0" - -"@walletconnect/universal-provider@2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/universal-provider/-/universal-provider-2.10.1.tgz#c4a77bd2eed1a335edae5b2b298636092fff63ef" - integrity sha512-81QxTH/X4dRoYCz0U9iOrBYOcj7N897ONcB57wsGhEkV7Rc9htmWJq2CzeOuxvVZ+pNZkE+/aw9LrhizO1Ltxg== - dependencies: - "@walletconnect/jsonrpc-http-connection" "^1.0.7" - "@walletconnect/jsonrpc-provider" "1.0.13" - "@walletconnect/jsonrpc-types" "^1.0.2" - "@walletconnect/jsonrpc-utils" "^1.0.7" - "@walletconnect/logger" "^2.0.1" - "@walletconnect/sign-client" "2.10.1" - "@walletconnect/types" "2.10.1" - "@walletconnect/utils" "2.10.1" - events "^3.3.0" - -"@walletconnect/utils@2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.10.1.tgz#65b37c9800eb0e80a08385b6987471fb46e1e22e" - integrity sha512-DM0dKgm9O58l7VqJEyV2OVv16XRePhDAReI23let6WdW1dSpw/Y/A89Lp99ZJOjLm2FxyblMRF3YRaZtHwBffw== - dependencies: - "@stablelib/chacha20poly1305" "1.0.1" - "@stablelib/hkdf" "1.0.1" - "@stablelib/random" "^1.0.2" - "@stablelib/sha256" "1.0.1" - "@stablelib/x25519" "^1.0.3" - "@walletconnect/relay-api" "^1.0.9" - "@walletconnect/safe-json" "^1.0.2" - "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.10.1" - "@walletconnect/window-getters" "^1.0.1" - "@walletconnect/window-metadata" "^1.0.1" - detect-browser "5.3.0" - query-string "7.1.3" - uint8arrays "^3.1.0" - -"@walletconnect/window-getters@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.1.tgz#f36d1c72558a7f6b87ecc4451fc8bd44f63cbbdc" - integrity sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q== - dependencies: - tslib "1.14.1" - -"@walletconnect/window-metadata@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz#2124f75447b7e989e4e4e1581d55d25bc75f7be5" - integrity sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA== - dependencies: - "@walletconnect/window-getters" "^1.0.1" - tslib "1.14.1" - -"@web3-react/core@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@web3-react/core/-/core-8.2.0.tgz#95fb615bb283be520e6f61b5e48cfb0047943808" - integrity sha512-r7dmK2E8Jrpvm/DF93hGMB+8lECHSI3Oo0NrHbhxkisK6in6rdgAXeYFhZtM48LBAm9py6fQvLzjCM6Qx9q0oQ== - dependencies: - "@web3-react/store" "^8.2.0" - "@web3-react/types" "^8.2.0" - zustand "^4.3.5" - optionalDependencies: - "@ethersproject/providers" "^5" - -"@web3-react/eip1193@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@web3-react/eip1193/-/eip1193-8.2.0.tgz#a7953769f9d0bec54472aceb01f72c889458378f" - integrity sha512-Ugbt+FisHO8aLD5o5B4AZdtgSVpjrbmtC5MgHrOEBw+IwFqr20EJreh052u8ExI2OrPjARIVOkNcp50Xxs7oUw== - dependencies: - "@web3-react/types" "^8.2.0" - eventemitter3 "^4.0.7" - -"@web3-react/metamask@8.2.1": - version "8.2.1" - resolved "https://registry.yarnpkg.com/@web3-react/metamask/-/metamask-8.2.1.tgz#7ffac16e2a55ff8f1195e2831a9f9f99fa0bfba9" - integrity sha512-JysxkAImIygkD95Bimrj7HwcTq79tq4ZSlphZt24LBMrEVY5K8k+e5mCAuJuDZ7Fu+aBxqpS0lgPjaBGKdNu/A== - dependencies: - "@metamask/detect-provider" "^1.2.0" - "@web3-react/types" "^8.2.0" - -"@web3-react/store@^8.2.0": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@web3-react/store/-/store-8.2.2.tgz#d85a560e2655919030d237e2e0e6e2529ff038e0" - integrity sha512-ITMkLzyw8tSTTEf8NcjIdewphbCpWHwK4EmwRxPCZMMRs+apZwoj3R/YNflMBoPMC+ybWKnVVpDd6CprF1TU9A== - dependencies: - "@ethersproject/address" "^5" - "@web3-react/types" "^8.2.2" - zustand "4.4.0" - -"@web3-react/types@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@web3-react/types/-/types-8.2.0.tgz#195464ebb94cb417e6dc3c16951573f9b6b3832a" - integrity sha512-TBYTFlqJZaEpVbuAAKRJFX5PZc3lI1TqDZzY94zwCrCh4GBepwwK7+PxmRAppMFuNa5x0vFX/ghLEC44e6TCFg== - dependencies: - zustand "^4.3.5" - -"@web3-react/types@^8.2.0", "@web3-react/types@^8.2.2": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@web3-react/types/-/types-8.2.2.tgz#1ae7f11069d9a9c711aa4152f95331747fb1e551" - integrity sha512-PrPrJNjJhUX3lL/365llAZwY0bpUm9N52OjGMFyzCIX7IR13f7WLUk/LyQa9ALneCBu3cJUVTZANuFdqdREuvw== - dependencies: - zustand "4.4.0" - -"@web3-react/walletconnect-v2@8.3.6": - version "8.3.6" - resolved "https://registry.yarnpkg.com/@web3-react/walletconnect-v2/-/walletconnect-v2-8.3.6.tgz#8f9e561ba3fa7dd15c56bec7ee1de066857f07b1" - integrity sha512-8N01Rns+Ey203D60TAj0iN4LOPsllvdY+8fl8ev+1NaPlgOtF3KrasPrFJ/5ZmVF31jBQYo2kC/X3OITBBnHDA== - dependencies: - "@walletconnect/ethereum-provider" "^2.8.4" - "@walletconnect/modal" "^2.4.5" - "@web3-react/types" "^8.2.0" - eventemitter3 "^4.0.7" - -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== - -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== - -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== - -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== - -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - -"@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" - -"@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - -"@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@xtuc/long" "4.2.2" - -"@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== - -"@yarnpkg/lockfile@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" - integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== - -JSONStream@^1.0.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abab@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -abbrev@^1.0.0, abbrev@~1.1.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-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== - -acorn@^8.5.0, acorn@^8.7.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - -adjust-sourcemap-loader@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz#fc4a0fd080f7d10471f30a7320f25560ade28c99" - integrity sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A== - dependencies: - loader-utils "^2.0.0" - regex-parser "^2.2.11" - -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.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - 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, 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.0.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@8.12.0, ajv@^8.0.0, ajv@^8.8.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -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" - -ansi-colors@4.1.3: - 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: - 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-escapes@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" - integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== - dependencies: - type-fest "^1.0.2" - -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-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.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.3.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" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -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== - -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", aproba@^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== - -archy@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== - -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== - -argv-formatter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" - integrity sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw== - -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-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== - -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== - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -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== - -atomic-sleep@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" - integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== - -autoprefixer@10.4.13: - version "10.4.13" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.13.tgz#b5136b59930209a321e9fa3dca2e7c4d223e83a8" - integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== - dependencies: - browserslist "^4.21.4" - caniuse-lite "^1.0.30001426" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -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" - -babel-loader@9.1.2: - version "9.1.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.2.tgz#a16a080de52d08854ee14570469905a5fc00d39c" - integrity sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA== - dependencies: - find-cache-dir "^3.3.2" - schema-utils "^4.0.0" - -babel-plugin-istanbul@6.1.1: - 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-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-polyfill-corejs2@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" - integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== - dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.3" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" - integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - core-js-compat "^3.25.1" - -babel-plugin-polyfill-regenerator@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" - integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - -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== - -base64-js@^1.2.0, 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== - -base64id@2.0.0, base64id@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" - integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== - -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== - -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.2.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.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.0.2: - version "9.1.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" - integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== - -bin-links@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.3.tgz#3842711ef3db2cd9f16a5f404a996a12db355a6e" - integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== - dependencies: - cmd-shim "^5.0.0" - mkdirp-infer-owner "^2.0.0" - npm-normalize-package-bin "^2.0.0" - read-cmd-shim "^3.0.0" - rimraf "^3.0.0" - write-file-atomic "^4.0.0" - -binary-extensions@^2.0.0, binary-extensions@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -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" - -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.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.1, body-parser@^1.19.0: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - 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.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -bonjour-service@^1.0.11: - version "1.1.0" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.0.tgz#424170268d68af26ff83a5c640b95def01803a13" - integrity sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q== - dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" - fast-deep-equal "^3.1.3" - multicast-dns "^7.2.5" - -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== - -bottleneck@^2.18.1: - version "2.19.5" - resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" - integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== - -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@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -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== - -browserslist@4.21.4: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== - dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" - -browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== - dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" - -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@^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" - -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -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@17.0.4, cacache@^17.0.0: - version "17.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.0.4.tgz#5023ed892ba8843e3b7361c26d0ada37e146290c" - integrity sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^8.0.1" - lru-cache "^7.7.1" - minipass "^4.0.0" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - -cacache@^16.0.0, cacache@^16.1.0, cacache@^16.1.3: - 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" - -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -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== - -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.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.30001400, caniuse-lite@^1.0.30001426, caniuse-lite@^1.0.30001449: - version "1.0.30001449" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001449.tgz#a8d11f6a814c75c9ce9d851dc53eb1d1dfbcd657" - integrity sha512-CPB+UL9XMT/Av+pJxCKGhdx+yg1hzplvFJQlJ2n68PyQGMz9L/E2zCyLdOL8uasbouTUgnPl+y0tccI/se+BEw== - -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" - -chalk@^2.0.0, chalk@^2.3.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@^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" - -chalk@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" - integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== - -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== - -chokidar@3.5.3, "chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.5.1, 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" - -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.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -cidr-regex@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d" - integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw== - dependencies: - ip-regex "^4.1.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== - -cli-columns@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" - integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== - dependencies: - string-width "^4.2.3" - strip-ansi "^6.0.1" - -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-spinners@^2.5.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" - integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== - -cli-table3@^0.6.1, cli-table3@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.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== - -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@^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.1.1, 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.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" - integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== - -cmd-shim@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" - integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== - dependencies: - mkdirp-infer-owner "^2.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: - 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@^2.0.10: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== - -columnify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" - integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== - dependencies: - strip-ansi "^6.0.1" - wcwidth "^1.0.0" - -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== - -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - -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== - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -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" - -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== - -config-chain@^1.1.11: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -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== - -connect@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.2" - parseurl "~1.3.3" - utils-merge "1.0.1" - -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== - -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: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -conventional-changelog-angular@^5.0.0: - version "5.0.13" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" - integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-writer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" - integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== - dependencies: - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" - handlebars "^4.7.7" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" - -conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" - integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -convert-source-map@^1.5.0, convert-source-map@^1.5.1, 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== - -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.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -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-anything@^2.0.1: - version "2.0.6" - resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480" - integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw== - dependencies: - is-what "^3.14.1" - -copy-webpack-plugin@11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" - integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== - dependencies: - fast-glob "^3.2.11" - glob-parent "^6.0.1" - globby "^13.1.1" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - -core-js-compat@^3.25.1: - version "3.27.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.27.2.tgz#607c50ad6db8fd8326af0b2883ebb987be3786da" - integrity sha512-welaYuF7ZtbYKGrIy7y3eb40d37rG1FvzEOfe7hSLd2iD6duMDqUhRfSvCGyC46HhR6Y8JXXdZ2lnRUMkPBpvg== - dependencies: - browserslist "^4.21.4" - -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== - -cors@~2.8.5: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - -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" - -cosmiconfig@^8.0.0: - version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== - dependencies: - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - path-type "^4.0.0" - -critters@0.0.16: - version "0.0.16" - resolved "https://registry.yarnpkg.com/critters/-/critters-0.0.16.tgz#ffa2c5561a65b43c53b940036237ce72dcebfe93" - integrity sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A== - dependencies: - chalk "^4.1.0" - css-select "^4.2.0" - parse5 "^6.0.1" - parse5-htmlparser2-tree-adapter "^6.0.1" - postcss "^8.3.7" - pretty-bytes "^5.3.0" - -cross-fetch@^3.1.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - -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" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -css-loader@6.7.3: - version "6.7.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd" - integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== - dependencies: - icss-utils "^5.1.0" - postcss "^8.4.19" - 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.2.0" - semver "^7.3.8" - -css-select@^4.2.0: - 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-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== - -csstype@^3.0.2, csstype@^3.1.0, csstype@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" - integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== - -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== - -date-format@^4.0.14: - version "4.0.14" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" - integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== - -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -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.1.0, debug@^4.1.1, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: - 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.6: - 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" - -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== - -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== - -decode-uri-component@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -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== - -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" - -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== - -del@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - -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, 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== - -dependency-graph@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" - integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== - -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== - -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-browser@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.3.0.tgz#9705ef2bddf46072d0f7265a1fe300e36fe7ceca" - integrity sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w== - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -dezalgo@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" - integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== - dependencies: - asap "^2.0.0" - wrappy "1" - -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== - -diff@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== - -dijkstrajs@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz#2e48c0d3b825462afe75ab4ad5e829c8ece36257" - integrity sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg== - -dir-glob@^3.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-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - -dns-packet@^5.2.2: - version "5.4.0" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" - integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -dom-serialize@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - integrity sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ== - dependencies: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^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" - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -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" - -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" - -dot-prop@^5.1.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" - -duplexer2@~0.1.0: - 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" - -duplexify@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" - integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== - dependencies: - end-of-stream "^1.4.1" - inherits "^2.0.3" - readable-stream "^3.1.1" - stream-shift "^1.0.0" - -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.251, electron-to-chromium@^1.4.284: - version "1.4.284" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" - integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== - -elliptic@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - 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" - -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== - -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== - -encode-utf8@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" - integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== - -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.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.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" - -engine.io-parser@~5.0.3: - version "5.0.6" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.6.tgz#7811244af173e157295dec9b2718dfe42a64ef45" - integrity sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw== - -engine.io@~6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.2.1.tgz#e3f7826ebc4140db9bbaa9021ad6b1efb175878f" - integrity sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA== - dependencies: - "@types/cookie" "^0.4.1" - "@types/cors" "^2.8.12" - "@types/node" ">=10.0.0" - accepts "~1.3.4" - base64id "2.0.0" - cookie "~0.4.1" - cors "~2.8.5" - debug "~4.3.1" - engine.io-parser "~5.0.3" - ws "~8.2.3" - -enhanced-resolve@^5.10.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" - integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - integrity sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA== - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -env-ci@^5.0.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.5.0.tgz#43364e3554d261a586dec707bc32be81112b545f" - integrity sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A== - dependencies: - execa "^5.0.0" - fromentries "^1.3.2" - java-properties "^1.0.0" - -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== - -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== - -errno@^0.1.1: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -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" - -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== - -esbuild-wasm@0.16.17: - version "0.16.17" - resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.16.17.tgz#b8d41ab99a9b725765a138f0f1d2381e891f913d" - integrity sha512-Tn7NuMqRcM+T/qCOxbQRq0qrwWl1sUWp6ARfJRakE8Bepew6zata4qrKgH2YqovNC5e/2fcTa7o+VL/FAOZC1Q== - -esbuild@0.16.17: - version "0.16.17" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.16.17.tgz#fc2c3914c57ee750635fee71b89f615f25065259" - integrity sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg== - optionalDependencies: - "@esbuild/android-arm" "0.16.17" - "@esbuild/android-arm64" "0.16.17" - "@esbuild/android-x64" "0.16.17" - "@esbuild/darwin-arm64" "0.16.17" - "@esbuild/darwin-x64" "0.16.17" - "@esbuild/freebsd-arm64" "0.16.17" - "@esbuild/freebsd-x64" "0.16.17" - "@esbuild/linux-arm" "0.16.17" - "@esbuild/linux-arm64" "0.16.17" - "@esbuild/linux-ia32" "0.16.17" - "@esbuild/linux-loong64" "0.16.17" - "@esbuild/linux-mips64el" "0.16.17" - "@esbuild/linux-ppc64" "0.16.17" - "@esbuild/linux-riscv64" "0.16.17" - "@esbuild/linux-s390x" "0.16.17" - "@esbuild/linux-x64" "0.16.17" - "@esbuild/netbsd-x64" "0.16.17" - "@esbuild/openbsd-x64" "0.16.17" - "@esbuild/sunos-x64" "0.16.17" - "@esbuild/win32-arm64" "0.16.17" - "@esbuild/win32-ia32" "0.16.17" - "@esbuild/win32-x64" "0.16.17" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -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@^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@^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== - -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" - -esprima@^4.0.0, esprima@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -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.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== - -eventemitter-asyncresource@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz#734ff2e44bf448e627f7748f905d6bdd57bdb65b" - integrity sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ== - -eventemitter3@^4.0.0, eventemitter3@^4.0.7: - 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== - -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" - -express@^4.17.3: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - 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.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@^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" - -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-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - 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-redact@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" - integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== - -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.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - 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" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== - dependencies: - escape-string-regexp "^1.0.5" - -figures@^3.0.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" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -filter-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" - integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== - -finalhandler@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - 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" - -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-cache-dir@^3.3.2: - 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.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@^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@^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" - -find-versions@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" - integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ== - dependencies: - semver-regex "^3.1.2" - -flatted@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -follow-redirects@^1.0.0, follow-redirects@^1.14.9: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -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.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" - integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -from2@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fromentries@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" - integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== - -fs-extra@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.0.tgz#5784b102104433bb0e090f48bfc4a30742c357ed" - integrity sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -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-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-minipass@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.1.tgz#853809af15b6d03e27638d1ab6432e6b378b085d" - integrity sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw== - dependencies: - minipass "^4.0.0" - -fs-monkey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" - integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== - -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.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -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" - -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-intrinsic@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" - integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -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-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== - -git-log-parser@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/git-log-parser/-/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" - integrity sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA== - dependencies: - argv-formatter "~1.0.0" - spawn-error-forwarder "~1.0.0" - split2 "~1.0.0" - stream-combiner2 "~1.1.1" - through2 "~2.0.0" - traverse "~0.6.6" - -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-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -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.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^7.1.3, glob@^7.1.4, glob@^7.1.7: - 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@^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" - -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== - -globby@^11.0.0, globby@^11.0.1: - 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" - -globby@^13.1.1: - version "13.1.3" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" - integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - -graceful-fs@4.2.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -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== - -handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -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-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-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-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@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash.js@1.1.7, 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" - -hdr-histogram-js@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz#0b860534655722b6e3f3e7dca7b78867cf43dcb5" - integrity sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g== - dependencies: - "@assemblyscript/loader" "^0.10.1" - base64-js "^1.2.0" - pako "^1.0.3" - -hdr-histogram-percentiles-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz#9409f4de0c2dda78e61de2d9d78b1e9f3cba283c" - integrity sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw== - -hey-listen@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" - integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== - -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.3.1: - 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" - -hook-std@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" - integrity sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g== - -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.0, 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" - -hosted-git-info@^5.0.0, hosted-git-info@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz#0ba1c97178ef91f3ab30842ae63d6a272341156f" - integrity sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw== - dependencies: - lru-cache "^7.5.1" - -hosted-git-info@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" - integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== - dependencies: - lru-cache "^7.5.1" - -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-entities@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" - integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== - -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== - -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-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@^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" - -https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0: - 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@^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" - -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, iconv-lite@^0.6.3: - 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== - -identicon.js@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/identicon.js/-/identicon.js-2.3.3.tgz#c505b8d60ecc6ea13bbd991a33964c44c1ad60a1" - integrity sha512-/qgOkXKZ7YbeCYbawJ9uQQ3XJ3uBg9VDpvHjabCAPp6aRMhjLaFAxG90+1TxzrhKaj6AYpVGrx6UXQfQA41UEA== - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-walk@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" - integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== - dependencies: - minimatch "^5.0.1" - -ignore-walk@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.0.tgz#1dd41c6eb4f661a49750a510a10c2cd934583fd8" - integrity sha512-bTf9UWe/UP1yxG3QUrj/KOvEhTAUWPcv+WvbFZ28LcqznXabp7Xu6o9y1JEC18+oqODuS7VhTpekV5XvFwsxJg== - dependencies: - minimatch "^5.0.1" - -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -image-size@~0.5.0: - version "0.5.5" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" - integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ== - -immer@^9.0.16: - version "9.0.19" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.19.tgz#67fb97310555690b5f9cd8380d38fc0aabb6b38b" - integrity sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ== - -immutable@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.2.2.tgz#2da9ff4384a4330c36d4d1bc88e90f9e0b0ccd16" - integrity sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og== - -import-fresh@^3.2.1, import-fresh@^3.3.0: - 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-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" - integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== - -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.3: - 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@3.0.1, ini@^3.0.0, ini@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.1.tgz#c76ec81007875bc44d544ff7a11a55d12294102d" - integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== - -ini@^1.3.4, 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== - -init-package-json@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" - integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== - dependencies: - npm-package-arg "^9.0.1" - promzard "^0.3.0" - read "^1.0.7" - read-package-json "^5.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" - -inquirer@8.2.4: - version "8.2.4" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" - integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== - 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 "^7.0.0" - -into-stream@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702" - integrity sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA== - dependencies: - from2 "^2.3.0" - p-is-promise "^3.0.0" - -ip-regex@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" - integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -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.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== - -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-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-cidr@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" - integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== - dependencies: - cidr-regex "^3.1.1" - -is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - -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-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@^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-glob@^4.0.1, is-glob@^4.0.3, 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-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-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-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -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@^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.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-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-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== - dependencies: - text-extensions "^1.0.0" - -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-what@^3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" - integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== - -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@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isbinaryfile@^4.0.8: - version "4.0.10" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" - integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== - -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@^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== - -issue-parser@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-6.0.0.tgz#b1edd06315d4f2044a9755daf85fdafde9b4014a" - integrity sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA== - dependencies: - lodash.capitalize "^4.2.1" - lodash.escaperegexp "^4.1.2" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.uniqby "^4.7.0" - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - 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.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.1: - 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.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jasmine-core@^4.1.0, jasmine-core@~4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-4.5.0.tgz#1a6bd0bde3f60996164311c88a0995d67ceda7c3" - integrity sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw== - -java-properties@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" - integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-validate@^29.4.3: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.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" - -jiti@^1.17.1: - version "1.20.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.20.0.tgz#2d823b5852ee8963585c8dd8b7992ffc1ae83b42" - integrity sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA== - -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@^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@^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" - -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-parse-better-errors@^1.0.1: - 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, json-parse-even-better-errors@^2.3.1: - 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-parse-even-better-errors@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz#2cb2ee33069a78870a0c7e3da560026b89669cf7" - integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== - -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-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^2.1.2, json5@^2.2.1, json5@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonc-parser@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - -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" - -jsonparse@^1.2.0, jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -just-diff-apply@^5.2.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" - integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== - -just-diff@^5.0.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.2.0.tgz#60dca55891cf24cd4a094e33504660692348a241" - integrity sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw== - -karma-chrome-launcher@~3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz#baca9cc071b1562a1db241827257bfe5cab597ea" - integrity sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ== - dependencies: - which "^1.2.1" - -karma-coverage@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-2.2.0.tgz#64f838b66b71327802e7f6f6c39d569b7024e40c" - integrity sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA== - dependencies: - istanbul-lib-coverage "^3.2.0" - istanbul-lib-instrument "^5.1.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.1" - istanbul-reports "^3.0.5" - minimatch "^3.0.4" - -karma-jasmine-html-reporter@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.0.0.tgz#76c26ce40e217dc36a630fbcd7b31c3462948bf2" - integrity sha512-SB8HNNiazAHXM1vGEzf8/tSyEhkfxuDdhYdPBX2Mwgzt0OuF2gicApQ+uvXLID/gXyJQgvrM9+1/2SxZFUUDIA== - -karma-jasmine@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-5.1.0.tgz#3af4558a6502fa16856a0f346ec2193d4b884b2f" - integrity sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ== - dependencies: - jasmine-core "^4.1.0" - -karma-source-map-support@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz#58526ceccf7e8730e56effd97a4de8d712ac0d6b" - integrity sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A== - dependencies: - source-map-support "^0.5.5" - -karma@~6.4.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.1.tgz#f2253716dd3a41aaa813fa9f54b6ee047e1127d9" - integrity sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA== - dependencies: - "@colors/colors" "1.5.0" - body-parser "^1.19.0" - braces "^3.0.2" - chokidar "^3.5.1" - connect "^3.7.0" - di "^0.0.1" - dom-serialize "^2.2.1" - glob "^7.1.7" - graceful-fs "^4.2.6" - http-proxy "^1.18.1" - isbinaryfile "^4.0.8" - lodash "^4.17.21" - log4js "^6.4.1" - mime "^2.5.2" - minimatch "^3.0.4" - mkdirp "^0.5.5" - qjobs "^1.2.0" - range-parser "^1.2.1" - rimraf "^3.0.2" - socket.io "^4.4.1" - source-map "^0.6.1" - tmp "^0.2.1" - ua-parser-js "^0.7.30" - yargs "^16.1.1" - -keyvaluestorage-interface@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" - integrity sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g== - -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== - -klona@^2.0.4, klona@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" - integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== - -less-loader@11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-11.1.0.tgz#a452384259bdf8e4f6d5fdcc39543609e6313f82" - integrity sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug== - dependencies: - klona "^2.0.4" - -less@4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/less/-/less-4.1.3.tgz#175be9ddcbf9b250173e0a00b4d6920a5b770246" - integrity sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA== - dependencies: - copy-anything "^2.0.1" - parse-node-version "^1.0.1" - tslib "^2.3.0" - optionalDependencies: - errno "^0.1.1" - graceful-fs "^4.1.2" - image-size "~0.5.0" - make-dir "^2.1.0" - mime "^1.4.1" - needle "^3.1.0" - source-map "~0.6.0" - -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== - -libnpmaccess@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.4.tgz#2dd158bd8a071817e2207d3b201d37cf1ad6ae6b" - integrity sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag== - dependencies: - aproba "^2.0.0" - minipass "^3.1.1" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" - -libnpmdiff@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-4.0.5.tgz#ffaf93fa9440ea759444b8830fdb5c661b09a7c0" - integrity sha512-9fICQIzmH892UwHHPmb+Seup50UIBWcMIK2FdxvlXm9b4kc1nSH0b/BuY1mORJQtB6ydPMnn+BLzOTmd/SKJmw== - dependencies: - "@npmcli/disparity-colors" "^2.0.0" - "@npmcli/installed-package-contents" "^1.0.7" - binary-extensions "^2.2.0" - diff "^5.1.0" - minimatch "^5.0.1" - npm-package-arg "^9.0.1" - pacote "^13.6.1" - tar "^6.1.0" - -libnpmexec@^4.0.14: - version "4.0.14" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-4.0.14.tgz#9ad44232434b374e477eb2c2e4548baaf698f773" - integrity sha512-dwmzv2K29SdoAHBOa7QR6CfQbFG/PiZDRF6HZrlI6C4DLt2hNgOHTFaUGOpqE2C+YGu0ZwYTDywxRe0eOnf0ZA== - dependencies: - "@npmcli/arborist" "^5.6.3" - "@npmcli/ci-detect" "^2.0.0" - "@npmcli/fs" "^2.1.1" - "@npmcli/run-script" "^4.2.0" - chalk "^4.1.0" - mkdirp-infer-owner "^2.0.0" - npm-package-arg "^9.0.1" - npmlog "^6.0.2" - pacote "^13.6.1" - proc-log "^2.0.0" - read "^1.0.7" - read-package-json-fast "^2.0.2" - semver "^7.3.7" - walk-up-path "^1.0.0" - -libnpmfund@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-3.0.5.tgz#817f9e2120889beb483d9ba8eda142bb84293e4e" - integrity sha512-KdeRoG/dem8H3PcEU2/0SKi3ip7AWwczgS72y/3PE+PBrz/s/G52FNIA9jeLnBirkLC0sOyQHfeM3b7e24ZM+g== - dependencies: - "@npmcli/arborist" "^5.6.3" - -libnpmhook@^8.0.4: - version "8.0.4" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-8.0.4.tgz#6c58e5fe763ff5d600ae9c20457ea9a69d1f7d87" - integrity sha512-nuD6e+Nx0OprjEi0wOeqASMl6QIH235th/Du2/8upK3evByFhzIgdfOeP1OhstavW4xtsl0hk5Vw4fAWWuSUgA== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^13.0.0" - -libnpmorg@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-4.0.4.tgz#2a01d49372cf0df90d79a61e69bddaf2ed704311" - integrity sha512-1bTpD7iub1rDCsgiBguhJhiDufLQuc8DEti20euqsXz9O0ncXVpCYqf2SMmHR4GEdmAvAj2r7FMiyA9zGdaTpA== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^13.0.0" - -libnpmpack@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-4.1.3.tgz#025cfe39829acd8260662bf259e3a9331fc1e4b2" - integrity sha512-rYP4X++ME3ZiFO+2iN3YnXJ4LB4Gsd0z5cgszWJZxaEpDN4lRIXirSyynGNsN/hn4taqnlxD+3DPlFDShvRM8w== - dependencies: - "@npmcli/run-script" "^4.1.3" - npm-package-arg "^9.0.1" - pacote "^13.6.1" - -libnpmpublish@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.5.tgz#5a894f3de2e267d62f86be2a508e362599b5a4b1" - integrity sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg== - dependencies: - normalize-package-data "^4.0.0" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" - semver "^7.3.7" - ssri "^9.0.0" - -libnpmsearch@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-5.0.4.tgz#b32aa2b23051c00cdcc0912274d0d416e6655d81" - integrity sha512-XHDmsvpN5+pufvGnfLRqpy218gcGGbbbXR6wPrDJyd1em6agKdYByzU5ccskDHH9iVm2UeLydpDsW1ksYuU0cg== - dependencies: - npm-registry-fetch "^13.0.0" - -libnpmteam@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-4.0.4.tgz#ac26068808d93b1051d926457db14e4b3ff669ef" - integrity sha512-rzKSwi6MLzwwevbM/vl+BBQTErgn24tCfgPUdzBlszrw3j5necOu7WnTzgvZMDv6maGUwec6Ut1rxszOgH0l+Q== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^13.0.0" - -libnpmversion@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-3.0.7.tgz#e4c6c07ee28cf351ce1e2293a5ac9922b09ea94d" - integrity sha512-O0L4eNMUIMQ+effi1HsZPKp2N6wecwqGqB8PvkvmLPWN7EsdabdzAVG48nv0p/OjlbIai5KQg/L+qMMfCA4ZjA== - dependencies: - "@npmcli/git" "^3.0.0" - "@npmcli/run-script" "^4.1.3" - json-parse-even-better-errors "^2.3.1" - proc-log "^2.0.0" - semver "^7.3.7" - -license-webpack-plugin@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz#1e18442ed20b754b82f1adeff42249b81d11aec6" - integrity sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw== - dependencies: - webpack-sources "^3.0.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== - -lit-element@^3.3.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-3.3.3.tgz#10bc19702b96ef5416cf7a70177255bfb17b3209" - integrity sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA== - dependencies: - "@lit-labs/ssr-dom-shim" "^1.1.0" - "@lit/reactive-element" "^1.3.0" - lit-html "^2.8.0" - -lit-html@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-2.8.0.tgz#96456a4bb4ee717b9a7d2f94562a16509d39bffa" - integrity sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q== - dependencies: - "@types/trusted-types" "^2.0.2" - -lit@2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/lit/-/lit-2.8.0.tgz#4d838ae03059bf9cafa06e5c61d8acc0081e974e" - integrity sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA== - dependencies: - "@lit/reactive-element" "^1.6.0" - lit-element "^3.3.0" - lit-html "^2.8.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.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@3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" - integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== - -loader-utils@^2.0.0: - 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@^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" - -lodash.capitalize@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" - integrity sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw== - -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.escaperegexp@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" - integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== - -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.isequal@4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== - -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.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== - -lodash.uniqby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" - integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== - -lodash@^4.17.15, lodash@^4.17.21, 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-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" - -log4js@^6.4.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.7.1.tgz#06e12b1ac915dd1067146ffad8215f666f7d2c51" - integrity sha512-lzbd0Eq1HRdWM2abSD7mk6YIVY0AogGJzb/z+lqzRk+8+XJP+M6L1MS5FUSc3jjGru4dbKjEMJmqlsoYYpuivQ== - dependencies: - date-format "^4.0.14" - debug "^4.3.4" - flatted "^3.2.7" - rfdc "^1.3.0" - streamroller "^3.1.3" - -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" - -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.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: - version "7.14.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea" - integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA== - -magic-string@0.27.0, magic-string@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" - integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.13" - -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: - 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-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6, make-fetch-happen@^10.2.0: - 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@^11.0.0: - version "11.0.2" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.0.2.tgz#a880370fb2452d528a5ca40b2d6308999773ab17" - integrity sha512-5n/Pq41w/uZghpdlXAY5kIM85RgJThtTH/NYBRAZ9VUOBWV90USaQjwGrw76fZP3Lj5hl/VZjpVvOaRBMoL/2w== - dependencies: - agentkeepalive "^4.2.1" - cacache "^17.0.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 "^4.0.0" - minipass-collect "^1.0.2" - minipass-fetch "^3.0.0" - 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 "^10.0.0" - -make-plural@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-7.2.0.tgz#93174b1419672a48a2340db6c1d3fb217530c684" - integrity sha512-WkdI+iaWaBCFM2wUXwos8Z7spg5Dt64Xe/VI6NpRaly21cDtD76N6S97K//UtzV0dHOiXX+E90TnszdXHG0aMg== - -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== - -marked-terminal@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.1.1.tgz#d2edc2991841d893ee943b44b40b2ee9518b4d9f" - integrity sha512-+cKTOx9P4l7HwINYhzbrBSyzgxO2HaHKGZGuB1orZsMIgXYaJyfidT81VXRdpelW/PcHEWxywscePVgI/oUF6g== - dependencies: - ansi-escapes "^5.0.0" - cardinal "^2.1.1" - chalk "^5.0.0" - cli-table3 "^0.6.1" - node-emoji "^1.11.0" - supports-hyperlinks "^2.2.0" - -marked@^4.0.10: - version "4.2.12" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.12.tgz#d69a64e21d71b06250da995dcd065c11083bebb5" - integrity sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw== - -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== - -memfs@^3.4.12, memfs@^3.4.3: - version "3.4.13" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.13.tgz#248a8bd239b3c240175cd5ec548de5227fc4f345" - integrity sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg== - dependencies: - fs-monkey "^1.0.3" - -"memoize-one@>=3.1.1 <6": - 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@^8.0.0: - version "8.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - 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-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.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== - -micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.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.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, mime@^1.4.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.5.2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - -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== - -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-css-extract-plugin@2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz#e049d3ea7d3e4e773aad585c6cb329ce0c7b72d7" - integrity sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw== - dependencies: - schema-utils "^4.0.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - 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@^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, minimatch@^5.1.0: - 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" - -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.0, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -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@^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-fetch@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.1.tgz#bae3789f668d82ffae3ea47edc6b78b8283b3656" - integrity sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw== - dependencies: - minipass "^4.0.0" - 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-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== - dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" - -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.1, 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@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.0.1.tgz#2b9408c6e81bb8b338d600fb3685e375a370a057" - integrity sha512-V9esFpNbK0arbN3fm2sxDKqMYgIp7XtVdE4Esj+PE4Qaaxdg1wIw48ITQIOn1sc8xXSmUviVL3cyjMqPlrVkiA== - -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" - -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== - dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" - -mkdirp@^0.5.5: - 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== - -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -moo@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" - integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== - -motion@10.16.2: - version "10.16.2" - resolved "https://registry.yarnpkg.com/motion/-/motion-10.16.2.tgz#7dc173c6ad62210a7e9916caeeaf22c51e598d21" - integrity sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ== - dependencies: - "@motionone/animation" "^10.15.1" - "@motionone/dom" "^10.16.2" - "@motionone/svelte" "^10.16.2" - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - "@motionone/vue" "^10.16.2" - -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, ms@^2.1.2: - 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" - -multiformats@^9.4.2: - version "9.9.0" - resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" - integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== - -mute-stream@0.0.8, mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== - -needle@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-3.2.0.tgz#07d240ebcabfd65c76c03afae7f6defe6469df44" - integrity sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ== - dependencies: - debug "^3.2.6" - iconv-lite "^0.6.3" - sax "^1.2.4" - -negotiator@0.6.3, 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.0, 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== - -nerf-dart@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/nerf-dart/-/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" - integrity sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g== - -nice-napi@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nice-napi/-/nice-napi-1.0.2.tgz#dc0ab5a1eac20ce548802fc5686eaa6bc654927b" - integrity sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA== - dependencies: - node-addon-api "^3.0.0" - node-gyp-build "^4.2.2" - -node-addon-api@^3.0.0: - 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-emoji@^1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" - integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== - dependencies: - lodash "^4.17.21" - -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.7: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== - 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: - version "4.6.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" - integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== - -node-gyp@^9.0.0, node-gyp@^9.1.0: - version "9.3.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4" - integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^10.0.3" - nopt "^6.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-releases@^2.0.6, node-releases@^2.0.8: - version "2.0.9" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.9.tgz#fe66405285382b0c4ac6bcfbfbe7e8a510650b4d" - integrity sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA== - -nopt@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" - integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== - dependencies: - abbrev "^1.0.0" - -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-package-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz#b46b24e0616d06cadf9d5718b29b6d445a82a62c" - integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== - dependencies: - hosted-git-info "^5.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -normalize-package-data@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" - integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== - dependencies: - hosted-git-info "^6.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -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.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-audit-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-3.0.0.tgz#1bf3e531208b5f77347c8d00c3d9badf5be30cd6" - integrity sha512-tWQzfbwz1sc4244Bx2BVELw0EmZlCsCF0X93RDcmmwhonCsPMoEviYsi+32R+mdRvOWXolPce9zo64n2xgPESw== - dependencies: - chalk "^4.0.0" - -npm-bundled@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" - integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-bundled@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-2.0.1.tgz#94113f7eb342cd7a67de1e789f896b04d2c600f4" - integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== - dependencies: - npm-normalize-package-bin "^2.0.0" - -npm-bundled@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" - integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== - dependencies: - npm-normalize-package-bin "^3.0.0" - -npm-install-checks@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" - integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== - dependencies: - semver "^7.1.1" - -npm-install-checks@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.0.0.tgz#9a021d8e8b3956d61fd265c2eda4735bcd3d9b83" - integrity sha512-SBU9oFglRVZnfElwAtF14NivyulDqF1VKqqwNsFW9HDcbHMAPHpRSsVFgKuwFGq/hVvWZExz62Th0kvxn/XE7Q== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-normalize-package-bin@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" - integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== - -npm-normalize-package-bin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz#6097436adb4ef09e2628b59a7882576fe53ce485" - integrity sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q== - -npm-package-arg@10.1.0, npm-package-arg@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" - integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== - dependencies: - hosted-git-info "^6.0.0" - proc-log "^3.0.0" - semver "^7.3.5" - validate-npm-package-name "^5.0.0" - -npm-package-arg@^9.0.0, npm-package-arg@^9.0.1, npm-package-arg@^9.1.0: - version "9.1.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz#fc8acecb00235f42270dda446f36926ddd9ac2bc" - integrity sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg== - dependencies: - hosted-git-info "^5.0.0" - proc-log "^2.0.1" - semver "^7.3.5" - validate-npm-package-name "^4.0.0" - -npm-packlist@^5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" - integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== - dependencies: - glob "^8.0.1" - ignore-walk "^5.0.1" - npm-bundled "^2.0.0" - npm-normalize-package-bin "^2.0.0" - -npm-packlist@^7.0.0: - version "7.0.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" - integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== - dependencies: - ignore-walk "^6.0.0" - -npm-pick-manifest@8.0.1, npm-pick-manifest@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz#c6acd97d1ad4c5dbb80eac7b386b03ffeb289e5f" - integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== - dependencies: - npm-install-checks "^6.0.0" - npm-normalize-package-bin "^3.0.0" - npm-package-arg "^10.0.0" - semver "^7.3.5" - -npm-pick-manifest@^7.0.0, npm-pick-manifest@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz#1d372b4e7ea7c6712316c0e99388a73ed3496e84" - integrity sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw== - dependencies: - npm-install-checks "^5.0.0" - npm-normalize-package-bin "^2.0.0" - npm-package-arg "^9.0.0" - semver "^7.3.5" - -npm-profile@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-6.2.1.tgz#975c31ec75a6ae029ab5b8820ffdcbae3a1e3d5e" - integrity sha512-Tlu13duByHyDd4Xy0PgroxzxnBYWbGGL5aZifNp8cx2DxUrHSoETXtPKg38aRPsBWMRfDtvcvVfJNasj7oImQQ== - dependencies: - npm-registry-fetch "^13.0.1" - proc-log "^2.0.0" - -npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.1: - version "13.3.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e" - integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== - dependencies: - make-fetch-happen "^10.0.6" - minipass "^3.1.6" - minipass-fetch "^2.0.3" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^9.0.1" - proc-log "^2.0.0" - -npm-registry-fetch@^14.0.0: - version "14.0.3" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz#8545e321c2b36d2c6fe6e009e77e9f0e527f547b" - integrity sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA== - dependencies: - make-fetch-happen "^11.0.0" - minipass "^4.0.0" - minipass-fetch "^3.0.0" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^10.0.0" - proc-log "^3.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" - -npm-user-validate@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" - integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== - -npm@^8.3.0: - version "8.19.3" - resolved "https://registry.yarnpkg.com/npm/-/npm-8.19.3.tgz#adb51bf8886d519dd4df162726d0ad157ecfa272" - integrity sha512-0QjmyPtDxSyMWWD8I91QGbrgx9KzbV6C9FK1liEb/K0zppiZkr5KxXc990G+LzPwBHDfRjUBlO9T1qZ08vl9mA== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^5.6.3" - "@npmcli/ci-detect" "^2.0.0" - "@npmcli/config" "^4.2.1" - "@npmcli/fs" "^2.1.0" - "@npmcli/map-workspaces" "^2.0.3" - "@npmcli/package-json" "^2.0.0" - "@npmcli/run-script" "^4.2.1" - abbrev "~1.1.1" - archy "~1.0.0" - cacache "^16.1.3" - chalk "^4.1.2" - chownr "^2.0.0" - cli-columns "^4.0.0" - cli-table3 "^0.6.2" - columnify "^1.6.0" - fastest-levenshtein "^1.0.12" - fs-minipass "^2.1.0" - glob "^8.0.1" - graceful-fs "^4.2.10" - hosted-git-info "^5.2.1" - ini "^3.0.1" - init-package-json "^3.0.2" - is-cidr "^4.0.2" - json-parse-even-better-errors "^2.3.1" - libnpmaccess "^6.0.4" - libnpmdiff "^4.0.5" - libnpmexec "^4.0.14" - libnpmfund "^3.0.5" - libnpmhook "^8.0.4" - libnpmorg "^4.0.4" - libnpmpack "^4.1.3" - libnpmpublish "^6.0.5" - libnpmsearch "^5.0.4" - libnpmteam "^4.0.4" - libnpmversion "^3.0.7" - make-fetch-happen "^10.2.0" - minimatch "^5.1.0" - minipass "^3.1.6" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - ms "^2.1.2" - node-gyp "^9.1.0" - nopt "^6.0.0" - npm-audit-report "^3.0.0" - npm-install-checks "^5.0.0" - npm-package-arg "^9.1.0" - npm-pick-manifest "^7.0.2" - npm-profile "^6.2.0" - npm-registry-fetch "^13.3.1" - npm-user-validate "^1.0.1" - npmlog "^6.0.2" - opener "^1.5.2" - p-map "^4.0.0" - pacote "^13.6.2" - parse-conflict-json "^2.0.2" - proc-log "^2.0.1" - qrcode-terminal "^0.12.0" - read "~1.0.7" - read-package-json "^5.0.2" - read-package-json-fast "^2.0.3" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.7" - ssri "^9.0.1" - tar "^6.1.11" - text-table "~0.2.0" - tiny-relative-date "^1.3.0" - treeverse "^2.0.0" - validate-npm-package-name "^4.0.0" - which "^2.0.2" - write-file-atomic "^4.0.1" - -npmlog@^6.0.0, npmlog@^6.0.2: - 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@^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" - -object-assign@^4, 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-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -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== - -on-exit-leak-free@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" - integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== - -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-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== - 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.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@8.4.0, open@^8.0.9: - version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -ora@5.4.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-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-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-filter@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" - integrity sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw== - dependencies: - p-map "^2.0.0" - -p-is-promise@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" - integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== - -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.2.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-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@^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-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -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-reduce@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" - integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== - -p-retry@^4.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-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== - -pacote@15.0.8: - version "15.0.8" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.0.8.tgz#8a1cb1e0207f9f3c74894feaa716aaa9e35f890e" - integrity sha512-UlcumB/XS6xyyIMwg/WwMAyUmga+RivB5KgkRwA1hZNtrx+0Bt41KxHCvg1kr0pZ/ZeD8qjhW4fph6VaYRCbLw== - dependencies: - "@npmcli/git" "^4.0.0" - "@npmcli/installed-package-contents" "^2.0.1" - "@npmcli/promise-spawn" "^6.0.1" - "@npmcli/run-script" "^6.0.0" - cacache "^17.0.0" - fs-minipass "^3.0.0" - minipass "^4.0.0" - npm-package-arg "^10.0.0" - npm-packlist "^7.0.0" - npm-pick-manifest "^8.0.0" - npm-registry-fetch "^14.0.0" - proc-log "^3.0.0" - promise-retry "^2.0.1" - read-package-json "^6.0.0" - read-package-json-fast "^3.0.0" - ssri "^10.0.0" - tar "^6.1.11" - -pacote@^13.0.3, pacote@^13.6.1, pacote@^13.6.2: - version "13.6.2" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a" - integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== - dependencies: - "@npmcli/git" "^3.0.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/promise-spawn" "^3.0.0" - "@npmcli/run-script" "^4.1.0" - cacache "^16.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.6" - mkdirp "^1.0.4" - npm-package-arg "^9.0.0" - npm-packlist "^5.1.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.1" - proc-log "^2.0.0" - promise-retry "^2.0.1" - read-package-json "^5.0.0" - read-package-json-fast "^2.0.3" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - -pako@^1.0.3: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -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-conflict-json@^2.0.1, parse-conflict-json@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" - integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== - dependencies: - json-parse-even-better-errors "^2.3.1" - just-diff "^5.0.1" - just-diff-apply "^5.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, parse-json@^5.2.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-node-version@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" - integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== - -parse5-html-rewriting-stream@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz#de1820559317ab4e451ea72dba05fddfd914480b" - integrity sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg== - dependencies: - parse5 "^6.0.1" - parse5-sax-parser "^6.0.1" - -parse5-htmlparser2-tree-adapter@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - -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: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -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== - -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@^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-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== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -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== - -pino-abstract-transport@v0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz#4b54348d8f73713bfd14e3dc44228739aa13d9c0" - integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== - dependencies: - duplexify "^4.1.2" - split2 "^4.0.0" - -pino-std-serializers@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1791ccd2539c091ae49ce9993205e2cd5dbba1e2" - integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== - -pino@7.11.0: - version "7.11.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-7.11.0.tgz#0f0ea5c4683dc91388081d44bff10c83125066f6" - integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== - dependencies: - atomic-sleep "^1.0.0" - fast-redact "^3.0.0" - on-exit-leak-free "^0.2.0" - pino-abstract-transport v0.5.0 - pino-std-serializers "^4.0.0" - process-warning "^1.0.0" - quick-format-unescaped "^4.0.3" - real-require "^0.1.0" - safe-stable-stringify "^2.1.0" - sonic-boom "^2.2.1" - thread-stream "^0.15.1" - -piscina@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/piscina/-/piscina-3.2.0.tgz#f5a1dde0c05567775690cccefe59d9223924d154" - integrity sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA== - dependencies: - eventemitter-asyncresource "^1.0.0" - hdr-histogram-js "^2.0.1" - hdr-histogram-percentiles-obj "^3.0.0" - optionalDependencies: - nice-napi "^1.0.2" - -pkg-conf@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" - integrity sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g== - dependencies: - find-up "^2.0.0" - load-json-file "^4.0.0" - -pkg-dir@^4.1.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" - -pngjs@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" - integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== - -postcss-loader@7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.0.2.tgz#b53ff44a26fba3688eee92a048c7f2d4802e23bb" - integrity sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.8" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== - 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.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - 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.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" - integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@8.4.21, postcss@^8.2.14, postcss@^8.3.7, postcss@^8.4.19: - version "8.4.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -pretty-bytes@^5.3.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - -pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -proc-log@^2.0.0, proc-log@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" - integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== - -proc-log@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" - integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== - -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-warning@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" - integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== - -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" - integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== - -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" - -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== - dependencies: - read "1" - -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" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -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-compare@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.5.1.tgz#17818e33d1653fbac8c2ec31406bce8a2966f600" - integrity sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA== - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== - -punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - -qjobs@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" - integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== - -qrcode-terminal@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" - integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== - -qrcode@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.3.tgz#03afa80912c0dccf12bc93f615a535aad1066170" - integrity sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg== - dependencies: - dijkstrajs "^1.0.1" - encode-utf8 "^1.0.3" - pngjs "^5.0.0" - yargs "^15.3.1" - -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" - -query-string@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" - integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg== - dependencies: - decode-uri-component "^0.2.2" - filter-obj "^1.1.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - -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-format-unescaped@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" - integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== - -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== - -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" - -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.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.2.8: - 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-is@^16.13.1, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^18.0.0, react-is@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -react-transition-state@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/react-transition-state/-/react-transition-state-2.1.1.tgz#1601a6177926b647041b7d598bf124321ab8d25b" - integrity sha512-kQx5g1FVu9knoz1T1WkapjUgFz08qQ/g1OmuWGi3/AoEFfS0kStxrPlZx81urjCXdz2d+1DqLpU6TyLW/Ro04Q== - -react-window@^1.8.8: - version "1.8.9" - resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.9.tgz#24bc346be73d0468cdf91998aac94e32bc7fa6a8" - integrity sha512-+Eqx/fj1Aa5WnhRfj9dJg4VYATGwIUP2ItwItiJ6zboKWA6EX3lYDAXfGF2hyNqplEprhbtjbipiADEcwQ823Q== - dependencies: - "@babel/runtime" "^7.0.0" - memoize-one ">=3.1.1 <6" - -read-cmd-shim@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" - integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== - -read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" - -read-package-json-fast@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" - integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== - dependencies: - json-parse-even-better-errors "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -read-package-json@^5.0.0, read-package-json@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.2.tgz#b8779ccfd169f523b67208a89cc912e3f663f3fa" - integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== - dependencies: - glob "^8.0.1" - json-parse-even-better-errors "^2.3.1" - normalize-package-data "^4.0.0" - npm-normalize-package-bin "^2.0.0" - -read-package-json@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.0.tgz#6a741841ad72a40e77a82b9c3c8c10e865bbc519" - integrity sha512-b/9jxWJ8EwogJPpv99ma+QwtqB7FSl3+V6UXS7Aaay8/5VwMY50oIFooY1UKXMWpfNCM6T/PoGqa5GD1g9xf9w== - dependencies: - glob "^8.0.1" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^5.0.0" - npm-normalize-package-bin "^3.0.0" - -read-pkg-up@^7.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@^5.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" - -read@1, read@^1.0.7, read@~1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== - dependencies: - mute-stream "~0.0.4" - -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - 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.1.1: - 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" - -readdir-scoped-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - -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" - -real-require@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381" - integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== - -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" - -redux-thunk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.2.tgz#b9d05d11994b99f7a91ea223e8b04cf0afa5ef3b" - integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== - -redux@^4.2.0: - 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" - -reflect-metadata@^0.1.2: - version "0.1.13" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" - integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== - -regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== - 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.13.11: - 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.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -regenerator-transform@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" - integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== - dependencies: - "@babel/runtime" "^7.8.4" - -regex-parser@^2.2.11: - version "2.2.11" - resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" - integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== - -regexpu-core@^5.2.1: - version "5.2.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.2.tgz#3e4e5d12103b64748711c3aad69934d7718e75fc" - integrity sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsgen "^0.7.1" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -registry-auth-token@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.1.tgz#5e6cd106e6c251135a046650c58476fc03e92833" - integrity sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA== - dependencies: - "@pnpm/npm-conf" "^1.0.4" - -regjsgen@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6" - integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA== - -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" - -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== - -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.1.7: - version "4.1.7" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.7.tgz#56480d9ff3d3188970ee2b76527bd94a95567a42" - integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A== - -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-url-loader@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz#ee3142fb1f1e0d9db9524d539cfa166e9314f795" - integrity sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg== - dependencies: - adjust-sourcemap-loader "^4.0.0" - convert-source-map "^1.7.0" - loader-utils "^2.0.0" - postcss "^8.2.14" - source-map "0.6.1" - -resolve@1.22.1, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.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" - -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== - -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -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" - -run-async@^2.4.0: - 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.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.6.7: - 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.5.5, rxjs@~7.8.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" - integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== - dependencies: - tslib "^2.1.0" - -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.1.0, 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-json-utils@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/safe-json-utils/-/safe-json-utils-1.1.1.tgz#0e883874467d95ab914c3f511096b89bfb3e63b1" - integrity sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ== - -safe-stable-stringify@^2.1.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sass-loader@13.2.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-13.2.0.tgz#80195050f58c9aac63b792fa52acb6f5e0f6bdc3" - integrity sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg== - dependencies: - klona "^2.0.4" - neo-async "^2.6.2" - -sass@1.57.1: - version "1.57.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.57.1.tgz#dfafd46eb3ab94817145e8825208ecf7281119b5" - integrity sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw== - dependencies: - chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" - -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== - -schema-utils@^3.1.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.8.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" - -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.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== - dependencies: - node-forge "^1" - -semantic-release@^19.0.2: - version "19.0.5" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-19.0.5.tgz#d7fab4b33fc20f1288eafd6c441e5d0938e5e174" - integrity sha512-NMPKdfpXTnPn49FDogMBi36SiBfXkSOJqCkk0E4iWOY1tusvvgBwqUmxTX1kmlT6kIYed9YwNKD1sfPpqa5yaA== - dependencies: - "@semantic-release/commit-analyzer" "^9.0.2" - "@semantic-release/error" "^3.0.0" - "@semantic-release/github" "^8.0.0" - "@semantic-release/npm" "^9.0.0" - "@semantic-release/release-notes-generator" "^10.0.0" - aggregate-error "^3.0.0" - cosmiconfig "^7.0.0" - debug "^4.0.0" - env-ci "^5.0.0" - execa "^5.0.0" - figures "^3.0.0" - find-versions "^4.0.0" - get-stream "^6.0.0" - git-log-parser "^1.2.0" - hook-std "^2.0.0" - hosted-git-info "^4.0.0" - lodash "^4.17.21" - marked "^4.0.10" - marked-terminal "^5.0.0" - micromatch "^4.0.2" - p-each-series "^2.1.0" - p-reduce "^2.0.0" - read-pkg-up "^7.0.0" - resolve-from "^5.0.0" - semver "^7.3.2" - semver-diff "^3.1.1" - signale "^1.2.1" - yargs "^16.2.0" - -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - -semver-regex@^3.1.2: - version "3.1.4" - resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.4.tgz#13053c0d4aa11d070a2f2872b6b1e3ae1e1971b4" - integrity sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA== - -"semver@2 || 3 || 4 || 5", semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.3.8, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -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.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - 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" - -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== - -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== - -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@^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@^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== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.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== - -signale@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" - integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== - dependencies: - chalk "^2.3.2" - figures "^2.0.0" - pkg-conf "^2.1.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -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== - -socket.io-adapter@~2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz#b50a4a9ecdd00c34d4c8c808224daa1a786152a6" - integrity sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg== - -socket.io-parser@~4.2.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.2.tgz#1dd384019e25b7a3d374877f492ab34f2ad0d206" - integrity sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.1" - -socket.io@^4.4.1: - version "4.5.4" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.5.4.tgz#a4513f06e87451c17013b8d13fdfaf8da5a86a90" - integrity sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ== - dependencies: - accepts "~1.3.4" - base64id "~2.0.0" - debug "~4.3.2" - engine.io "~6.2.1" - socket.io-adapter "~2.4.0" - socket.io-parser "~4.2.1" - -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@^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.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -sonic-boom@^2.2.1: - version "2.8.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" - integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== - dependencies: - atomic-sleep "^1.0.0" - -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-loader@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-4.0.1.tgz#72f00d05f5d1f90f80974eda781cbd7107c125f2" - integrity sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA== - dependencies: - abab "^2.0.6" - iconv-lite "^0.6.3" - source-map-js "^1.0.2" - -source-map-support@0.5.21, source-map-support@^0.5.5, 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@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: - 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.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -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== - -spawn-error-forwarder@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" - integrity sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -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.12" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== - -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-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== - -split2@^3.0.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split2@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -split2@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" - integrity sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg== - dependencies: - through2 "~2.0.0" - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -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@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.1.tgz#c61f85894bbc6929fc3746f05e31cf5b44c030d5" - integrity sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw== - dependencies: - minipass "^4.0.0" - -ssri@^9.0.0, ssri@^9.0.1: - 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" - -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", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - -stream-combiner2@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - integrity sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw== - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -streamroller@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.4.tgz#844a18e795d39c1089a8216e66a1cf1151271df0" - integrity sha512-Ha1Ccw2/N5C/IF8Do6zgNe8F3jQo8MPBnMBGvX0QjNv/I97BcNRzK6/mzOpZHHK7DjMLTI3c7Xw7Y1KvdChkvw== - dependencies: - date-format "^4.0.14" - debug "^4.3.4" - fs-extra "^8.1.0" - -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== - -"string-width@^1.0.2 || 2 || 3 || 4", 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_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@~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@^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-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@~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== - -stylis@4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" - integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== - -supports-color@^5.3.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-color@^8.0.0: - 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-hyperlinks@^2.2.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== - -symbol-observable@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" - integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== - -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@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.1.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" - integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^4.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -tempy@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-1.0.1.tgz#30fe901fd869cfb36ee2bd999805aa72fbb035de" - integrity sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w== - dependencies: - del "^6.0.0" - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" - -terser-webpack-plugin@^5.1.3: - version "5.3.6" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" - integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== - dependencies: - "@jridgewell/trace-mapping" "^0.3.14" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.14.1" - -terser@5.16.1: - version "5.16.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880" - integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - -terser@^5.14.1: - version "5.16.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.2.tgz#8f495819439e8b5c150e7530fc434a6e70ea18b2" - integrity sha512-JKuM+KvvWVqT7muHVyrwv7FVRPnmHDwF6XwoIxdbF5Witi0vu99RYpxDexpJndXt3jbZZmmWr2/mQa6HvSNdSg== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - 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-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== - -text-table@0.2.0, 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== - -thread-stream@^0.15.1: - version "0.15.2" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-0.15.2.tgz#fb95ad87d2f1e28f07116eb23d85aba3bc0425f4" - integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== - dependencies: - real-require "^0.1.0" - -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -through2@~2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@2, "through@>=2.2.7 <3", through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -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-relative-date@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" - integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== - -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.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -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-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" - -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== - -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.6.6: - version "0.6.7" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe" - integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg== - -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== - -treeverse@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" - integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== - -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== - -tslib@1.14.1, tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== - -tslib@^2.1.0, tslib@^2.3.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== - -tslib@^2.3.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -type-fest@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - -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-fest@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -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-assert@^1.0.8: - version "1.0.9" - resolved "https://registry.yarnpkg.com/typed-assert/-/typed-assert-1.0.9.tgz#8af9d4f93432c4970ec717e3006f33f135b06213" - integrity sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg== - -typescript@~4.9.4: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -ua-parser-js@^0.7.30: - version "0.7.33" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.33.tgz#1d04acb4ccef9293df6f70f2c3d22f3030d8b532" - integrity sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw== - -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - -uint8arrays@^3.0.0, uint8arrays@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" - integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== - dependencies: - multiformats "^9.4.2" - -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== - -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-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== - dependencies: - unique-slug "^4.0.0" - -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" - -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -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@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -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== - -unraw@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unraw/-/unraw-3.0.0.tgz#73443ed70d2ab09ccbac2b00525602d5991fbbe3" - integrity sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg== - -update-browserslist-db@^1.0.10, update-browserslist-db@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - 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" - -url-join@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" - integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== - -use-sync-external-store@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - -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== - -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.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - 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" - -validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== - dependencies: - builtins "^5.0.0" - -validate-npm-package-name@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" - integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== - dependencies: - builtins "^5.0.0" - -valtio@1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/valtio/-/valtio-1.11.2.tgz#b8049c02dfe65620635d23ebae9121a741bb6530" - integrity sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw== - dependencies: - proxy-compare "2.5.1" - use-sync-external-store "1.2.0" - -vary@^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== - -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== - -walk-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" - integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== - -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - 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.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== - -webpack-dev-middleware@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-6.0.1.tgz#fd585127ed44dab3f253daf0d98f4d58a5088cc2" - integrity sha512-PZPZ6jFinmqVPJZbisfggDiC+2EeGZ1ZByyMP5sOFJcPPWSexalISz+cvm+j+oYPT7FIJyxT76esjnw9DhE5sw== - dependencies: - colorette "^2.0.10" - memfs "^3.4.12" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== - 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.11.1: - version "4.11.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz#ae07f0d71ca0438cf88446f09029b92ce81380b5" - integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== - 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.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.4.2" - -webpack-merge@5.8.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-sources@^3.0.0, webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack-subresource-integrity@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz#8b7606b033c6ccac14e684267cb7fb1f5c2a132a" - integrity sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q== - dependencies: - typed-assert "^1.0.8" - -webpack@5.75.0: - version "5.75.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.75.0.tgz#1e440468647b2505860e94c9ff3e44d5b582c152" - integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.1.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -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-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" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== - -which@^1.2.1: - 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" - -which@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-3.0.0.tgz#a9efd016db59728758a390d23f1687b6e8f59f8e" - integrity sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ== - 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" - -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -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@^4.0.0, write-file-atomic@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -ws@^7.5.1: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^8.4.2: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.0.tgz#485074cc392689da78e1828a9ff23585e06cddd8" - integrity sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig== - -ws@~8.2.3: - version "8.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" - integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== - -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@^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@17.6.2, yargs@^17.2.1: - version "17.6.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" - integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== - 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" - -yargs@^15.3.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@^16.1.1, 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" - -zone.js@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.12.0.tgz#a4a6e5fab6d34bd37d89c77e89ac2e6f4a3d2c30" - integrity sha512-XtC+I5dXU14HrzidAKBNMqneIVUykLEAA1x+v4KVrd6AUPWlwYORF8KgsVqvgdHiKZ4BkxxjvYi/ksEixTPR0Q== - dependencies: - tslib "^2.3.0" - -zustand@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.0.tgz#13b3e8ca959dd53d536034440aec382ff91b65c3" - integrity sha512-2dq6wq4dSxbiPTamGar0NlIG/av0wpyWZJGeQYtUOLegIUvhM2Bf86ekPlmgpUtS5uR7HyetSiktYrGsdsyZgQ== - dependencies: - use-sync-external-store "1.2.0" - -zustand@^4.3.5: - version "4.4.1" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.1.tgz#0cd3a3e4756f21811bd956418fdc686877e8b3b0" - integrity sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw== - dependencies: - use-sync-external-store "1.2.0" diff --git a/example/js-app/README.md b/example/js-app/README.md deleted file mode 100644 index 4a40652e..00000000 --- a/example/js-app/README.md +++ /dev/null @@ -1,101 +0,0 @@ -# JS App Example - -

- - DODO - -

- -

-npm version -

- -To demonstrate how to use the [@dodoex/widgets](https://github.com/DODOEX/widgets) package in js projects. - -## dodoex-widgets - -To start the demo: - -```bash -yarn # install dependencies -yarn start # run the development server -# or -npm # install dependencies -npm run start # run the development server -``` - -Navigate to [http://localhost:8080/](http://localhost:8080/) to see the widget. - ---- - -html: add container element with `dodo-swap-widget` id in your html. - -```html -

-``` - ---- - -js: init dodo widget in your js. - -```js -import { InitSwapWidget } from '@dodoex/widgets'; - -function initDodoWidget() { - InitSwapWidget({ - colorMode: 'dark', - // other props - }); -} - -initDodoWidget(); -``` - ---- - -Supported [API](https://docs.dodoex.io/english/developers/swap-widget/api) from the `SwapWidget`: - -- `provider`: EIP-1193 provider -- `jsonRpcUrlMap`: Specify nodes of different chains -- `defaultChainId`: Default Chain ID - -- `tokenList`: a TokenList; in this case [Token List Example](https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json) -- `popularTokenList`: Selectable List of Popular Tokens - -- `onTxFail`: Triggered if transaction fails -- `onTxSubmit`: Triggered after transaction is submitted -- `onTxSuccess`: Triggered if transaction executes successfully -- `onTxReverted`: Triggered if transaction executes reverted - -- `theme`: Can override theme, text, and style. Refer to the Instructions page for more information. -- `colorMode`: Light or dark mode -- `apikey`: Passed onto the apikey provided by DODO -- `width`: Widget width -- `height`: Widget height -- `feeRate`: Transaction fee rate. Unit: 1e18 -- `rebateTo`: Profit sharing address -- `defaultFromToken`: Default Origin Token -- `defaultToToken`: Default Destination Token -- `crossChain`: Enable cross-chain -- `swapSlippage`: Default swap slippage -- `bridgeSlippage`: Default cross-chain slippage -- `apiServices`: Custom api service - -For all available props (including theming), please refer to the up-to-date [documentation](https://docs.dodoex.io/english/developers/swap-widget). - -### Additional documentation - -- [DODO App](https://app.dodoex.io/) - Trade tokens, deposit tokens in liquidity pools, & create Crowdpooling campaigns with DODO! Decentralized exchange with market-leading liquidity. - -- [About DODO](https://docs.dodoex.io/english/) - An Innovative Algorithm-Driven and Decentralized Trading Platform. - -- [Swap Widget Docs](https://docs.dodoex.io/english/)-to be continue - Explore the Swap Widget's features and API. - -- [Discord](https://discord.com/invite/tyKReUK) - Hop into #widgets for help. - -- [GitHub](https://github.com/DODOEX/widgets) - View the Swap Widget's source. diff --git a/example/js-app/express.js b/example/js-app/express.js deleted file mode 100644 index 482e4b5c..00000000 --- a/example/js-app/express.js +++ /dev/null @@ -1,12 +0,0 @@ -const express = require('express'); - -const app = express(); -const portNumber = 3000; -const sourceDir = 'dist'; - -app.use(express.static(sourceDir)); - -app.listen(portNumber, () => { - console.log(`Express web server started: http://localhost:${portNumber}`); - console.log(`Serving content from /${sourceDir}`); -}); diff --git a/example/js-app/package.json b/example/js-app/package.json deleted file mode 100644 index a14ebe14..00000000 --- a/example/js-app/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "js-app", - "version": "0.1.0", - "private": true, - "scripts": { - "start": "webpack serve --node-env development --config=webpack/dev.js --progress", - "build": "webpack --node-env production --config=webpack/prod.js --progress", - "start:prod": "yarn run build && node express.js" - }, - "dependencies": { - "@dodoex/widgets": "^2.6.4" - }, - "devDependencies": { - "express": "^4.18.1", - "html-webpack-plugin": "^5.5.0", - "webpack": "^5.74.0", - "webpack-cli": "^5.0.1", - "webpack-dev-server": "^4.11.0" - } -} \ No newline at end of file diff --git a/example/js-app/src/index.html b/example/js-app/src/index.html deleted file mode 100644 index e374627d..00000000 --- a/example/js-app/src/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - DODO Widgets - JS App - - - - -
-
-
- - \ No newline at end of file diff --git a/example/js-app/src/main.js b/example/js-app/src/main.js deleted file mode 100644 index 27d1c5e8..00000000 --- a/example/js-app/src/main.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; -import { InitSwapWidget } from '@dodoex/widgets'; - -function initDodoWidget() { - InitSwapWidget({ - crossChain: true, - colorMode: 'dark', - apikey: 'ef9apopzq9qrgntjubojbxe7hy4z5eez', // for default test - }); -} - -initDodoWidget(); diff --git a/example/js-app/webpack/dev.js b/example/js-app/webpack/dev.js deleted file mode 100644 index ec35698c..00000000 --- a/example/js-app/webpack/dev.js +++ /dev/null @@ -1,28 +0,0 @@ -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const { resolve, join } = require('path'); - -module.exports = { - entry: './src/main.js', - mode: 'development', - output: { - path: __dirname + '/dist', - filename: 'bundle.js', - }, - devServer: { - hot: true, - historyApiFallback: true, - client: { - overlay: { - errors: true, - warnings: false, - }, - }, - open: true, - }, - plugins: [ - new HtmlWebpackPlugin({ - template: resolve(__dirname, '../src/index.html'), - filename: 'index.html', - }), - ], -}; diff --git a/example/js-app/webpack/prod.js b/example/js-app/webpack/prod.js deleted file mode 100644 index 39632a7c..00000000 --- a/example/js-app/webpack/prod.js +++ /dev/null @@ -1,17 +0,0 @@ -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const { resolve, join } = require('path'); - -module.exports = { - entry: './src/main.js', - mode: 'production', - output: { - path: resolve(__dirname, '../dist'), - filename: 'bundle.js', - }, - plugins: [ - new HtmlWebpackPlugin({ - template: resolve(__dirname, '../src/index.html'), - filename: 'index.html', - }), - ], -}; diff --git a/example/js-app/yarn.lock b/example/js-app/yarn.lock deleted file mode 100644 index d8d3630b..00000000 --- a/example/js-app/yarn.lock +++ /dev/null @@ -1,7171 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/helper-module-imports@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-plugin-utils@^7.18.6": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf" - integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== - -"@babel/helper-string-parser@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" - integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.18.6": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-identifier@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz#601fa28e4cc06786c18912dca138cec73b882044" - integrity sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ== - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/plugin-syntax-jsx@^7.17.12": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" - integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.0", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.9.2": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" - integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.20.13", "@babel/runtime@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" - integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/types@^7.18.6": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600" - integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA== - dependencies: - "@babel/helper-string-parser" "^7.18.10" - "@babel/helper-validator-identifier" "^7.18.6" - to-fast-properties "^2.0.0" - -"@babel/types@^7.20.7": - version "7.22.17" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.17.tgz#f753352c4610ffddf9c8bc6823f9ff03e2303eee" - integrity sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.15" - to-fast-properties "^2.0.0" - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@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== - -"@dodoex/components@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@dodoex/components/-/components-2.0.1.tgz#6e3f41775bf0d416b92b5d40a2a96e2b11b8d994" - integrity sha512-CZ8ZFcFkctDFdw88gSzBt0XgAsIruy7CV3CCtJ3QZ8zuUJ7zmwUX4nK7eAKeQCwbN9H0bR9Wx3RVrfMjdLN0+g== - dependencies: - "@babel/runtime" "^7.17.0" - "@dodoex/icons" "^2.0.0" - "@mui/base" "^5.0.0-beta.5" - "@mui/system" "5.8.4" - "@szhsin/react-accordion" "^1.2.1" - clsx "^1.2.1" - -"@dodoex/icons@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@dodoex/icons/-/icons-2.0.0.tgz#7cbc8425f2c0d9a314bc1a65571438dc1d9793ba" - integrity sha512-u09YHl32MyHeD5K3vt4njNCOGqNFsFXwZX1Xr//grvWg0JLCZ43iizCQRgPdyIkKqhJprQCuEJwvBMM4jtFJiA== - dependencies: - "@babel/runtime" "^7.17.2" - -"@dodoex/icons@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@dodoex/icons/-/icons-2.0.1.tgz#f241c1812bf32d13d51a948ccb3c585de311b008" - integrity sha512-4E0L5jtaZ+Ya48KAH1ODBk2oX1kWsBKa5nscal8MhlrZkqynbB52TJFI+t95SL6j1iwQen12U/iAHazUuycFTA== - dependencies: - "@babel/runtime" "^7.17.2" - -"@dodoex/widgets@^2.6.4": - version "2.6.4" - resolved "https://registry.yarnpkg.com/@dodoex/widgets/-/widgets-2.6.4.tgz#b67cb5cc7bfd774c4847e840d73e08a4f29ef00a" - integrity sha512-g5PdNobkAcnCtImgaQkNVZONuxGJWswhI6aooW212K5GY31dP6x6PL3YZ4euZAmim8UsX7J0HVcjD5I1IdTHUg== - dependencies: - "@babel/runtime" "^7.17.0" - "@dodoex/components" "^2.0.1" - "@dodoex/icons" "^2.0.1" - "@emotion/react" "^11.10.0" - "@emotion/styled" "^11.10.0" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/contracts" "^5.7.0" - "@lingui/core" "^4.3.0" - "@lingui/macro" "^4.3.0" - "@lingui/react" "^4.3.0" - "@reduxjs/toolkit" "^1.6.1" - "@semantic-release/changelog" "^6.0.1" - "@semantic-release/git" "^10.0.1" - "@web3-react/core" "8.2.0" - "@web3-react/eip1193" "8.2.0" - "@web3-react/metamask" "8.2.1" - "@web3-react/types" "8.2.0" - "@web3-react/walletconnect-v2" "8.3.6" - axios "^0.27.2" - bignumber.js "^9.0.2" - identicon.js "^2.3.3" - lodash "^4.17.21" - make-plural "^7.0.0" - react-window "^1.8.8" - semantic-release "^19.0.2" - -"@emotion/babel-plugin@^11.10.0": - version "11.10.2" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.2.tgz#879db80ba622b3f6076917a1e6f648b1c7d008c7" - integrity sha512-xNQ57njWTFVfPAc3cjfuaPdsgLp5QOSuRsj9MA6ndEhH/AzuZM86qIQzt6rq+aGBwj3n5/TkLmU5lhAfdRmogA== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/plugin-syntax-jsx" "^7.17.12" - "@babel/runtime" "^7.18.3" - "@emotion/hash" "^0.9.0" - "@emotion/memoize" "^0.8.0" - "@emotion/serialize" "^1.1.0" - 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.0.13" - -"@emotion/cache@^11.10.0", "@emotion/cache@^11.10.3": - version "11.10.3" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.3.tgz#c4f67904fad10c945fea5165c3a5a0583c164b87" - integrity sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ== - dependencies: - "@emotion/memoize" "^0.8.0" - "@emotion/sheet" "^1.2.0" - "@emotion/utils" "^1.2.0" - "@emotion/weak-memoize" "^0.3.0" - stylis "4.0.13" - -"@emotion/hash@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" - integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== - -"@emotion/is-prop-valid@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" - integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg== - dependencies: - "@emotion/memoize" "^0.8.0" - -"@emotion/memoize@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" - integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== - -"@emotion/react@^11.10.0": - version "11.10.4" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.4.tgz#9dc6bccbda5d70ff68fdb204746c0e8b13a79199" - integrity sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.10.0" - "@emotion/cache" "^11.10.0" - "@emotion/serialize" "^1.1.0" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@emotion/utils" "^1.2.0" - "@emotion/weak-memoize" "^0.3.0" - hoist-non-react-statics "^3.3.1" - -"@emotion/serialize@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.0.tgz#b1f97b1011b09346a40e9796c37a3397b4ea8ea8" - integrity sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA== - dependencies: - "@emotion/hash" "^0.9.0" - "@emotion/memoize" "^0.8.0" - "@emotion/unitless" "^0.8.0" - "@emotion/utils" "^1.2.0" - csstype "^3.0.2" - -"@emotion/sheet@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.0.tgz#771b1987855839e214fc1741bde43089397f7be5" - integrity sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w== - -"@emotion/styled@^11.10.0": - version "11.10.4" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.10.4.tgz#e93f84a4d54003c2acbde178c3f97b421fce1cd4" - integrity sha512-pRl4R8Ez3UXvOPfc2bzIoV8u9P97UedgHS4FPX594ntwEuAMA114wlaHvOK24HB48uqfXiGlYIZYCxVJ1R1ttQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.10.0" - "@emotion/is-prop-valid" "^1.2.0" - "@emotion/serialize" "^1.1.0" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@emotion/utils" "^1.2.0" - -"@emotion/unitless@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" - integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== - -"@emotion/use-insertion-effect-with-fallbacks@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz#ffadaec35dbb7885bd54de3fa267ab2f860294df" - integrity sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A== - -"@emotion/utils@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561" - integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw== - -"@emotion/weak-memoize@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" - integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== - -"@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@^5", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@^5.6.2", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/contracts@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@^5": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.1.tgz#b0799b616d5579cd1067a8ebf1fc1ec74c1e122c" - integrity sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@floating-ui/core@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.4.1.tgz#0d633f4b76052668afb932492ac452f7ebe97f17" - integrity sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ== - dependencies: - "@floating-ui/utils" "^0.1.1" - -"@floating-ui/dom@^1.5.1": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.2.tgz#6812e89d1d4d4ea32f10d15c3b81feb7f9836d89" - integrity sha512-6ArmenS6qJEWmwzczWyhvrXRdI/rI78poBcW0h/456+onlabit+2G+QxHx5xTOX60NBJQXjsCLFbW2CmsXpUog== - dependencies: - "@floating-ui/core" "^1.4.1" - "@floating-ui/utils" "^0.1.1" - -"@floating-ui/react-dom@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.2.tgz#fab244d64db08e6bed7be4b5fcce65315ef44d20" - integrity sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ== - dependencies: - "@floating-ui/dom" "^1.5.1" - -"@floating-ui/utils@^0.1.1": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.2.tgz#b7e9309ccce5a0a40ac482cb894f120dba2b357f" - integrity sha512-ou3elfqG/hZsbmF4bxeJhPHIf3G2pm0ujc39hYEZrfVqt7Vk/Zji6CXc3W0pmYM8BW1g40U+akTl9DKZhFhInQ== - -"@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== - -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.15" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" - integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== - -"@lingui/conf@4.5.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@lingui/conf/-/conf-4.5.0.tgz#09b39de3a03a9017cd8299b1d8df923c78447ebf" - integrity sha512-OBm4RQQtbpvmuazLWVpvpaOpt/xvu1PBv8WUX8QoW1vsROe/3P5BpRHRYFyMeZz5mhORJgis9lQtDTq145Ruug== - dependencies: - "@babel/runtime" "^7.20.13" - chalk "^4.1.0" - cosmiconfig "^8.0.0" - jest-validate "^29.4.3" - jiti "^1.17.1" - lodash.get "^4.4.2" - -"@lingui/core@4.5.0", "@lingui/core@^4.3.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@lingui/core/-/core-4.5.0.tgz#8b907238bd0b420b372272d0a757c56bed3aed14" - integrity sha512-8zTuIXJo5Qvjato7LWE6Q4RHiO4LjTBVOoRlqfOGYDp8VZ9w9P7Z7IJgxI7UP5Z1wiuEvnMdVF9I1C4acqXGlQ== - dependencies: - "@babel/runtime" "^7.20.13" - "@lingui/message-utils" "4.5.0" - unraw "^3.0.0" - -"@lingui/macro@^4.3.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@lingui/macro/-/macro-4.5.0.tgz#4e779f4652200b7ecc6f3364fda840ae365fb996" - integrity sha512-6qha9YXuNnta4HCR+g6J6UPaAuAFlM1duqgznh4X7hHSsFG+m6oX7/srAMfU41Z8lbDmgXc3raqHLXFSdUNbYQ== - dependencies: - "@babel/runtime" "^7.20.13" - "@babel/types" "^7.20.7" - "@lingui/conf" "4.5.0" - "@lingui/core" "4.5.0" - "@lingui/message-utils" "4.5.0" - -"@lingui/message-utils@4.5.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@lingui/message-utils/-/message-utils-4.5.0.tgz#7ae9dc6cb65cbb5e2dc1b8cdcc4c8b92d5c7189f" - integrity sha512-iRqh2wvNtzJO3NStB77nEXEfeI53aVVjzD7/mBrEm/P0lC7sqPHk0WBQCfzE0N9xm6a+XHmHu3J+x2nnQ2OjcA== - dependencies: - "@messageformat/parser" "^5.0.0" - -"@lingui/react@^4.3.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@lingui/react/-/react-4.5.0.tgz#1cae72e89890f8d270b37cdde051a3c69df97727" - integrity sha512-dv/oxBshyaVJ3XzbPDnWn3abhwtaS1sx8cEO2qDjs+OhW0AeWD9hyVDrduf5SBIuXFJfJQNNA8+2P2nO0lxRbQ== - dependencies: - "@babel/runtime" "^7.20.13" - "@lingui/core" "4.5.0" - -"@lit-labs/ssr-dom-shim@^1.0.0", "@lit-labs/ssr-dom-shim@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.1.tgz#64df34e2f12e68e78ac57e571d25ec07fa460ca9" - integrity sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ== - -"@lit/reactive-element@^1.3.0", "@lit/reactive-element@^1.6.0": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@lit/reactive-element/-/reactive-element-1.6.3.tgz#25b4eece2592132845d303e091bad9b04cdcfe03" - integrity sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ== - dependencies: - "@lit-labs/ssr-dom-shim" "^1.0.0" - -"@messageformat/parser@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@messageformat/parser/-/parser-5.1.0.tgz#05e4851c782d633ad735791dd0a68ee65d2a7201" - integrity sha512-jKlkls3Gewgw6qMjKZ9SFfHUpdzEVdovKFtW1qRhJ3WI4FW5R/NnGDqr8SDGz+krWDO3ki94boMmQvGke1HwUQ== - dependencies: - moo "^0.5.1" - -"@metamask/detect-provider@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@metamask/detect-provider/-/detect-provider-1.2.0.tgz#3667a7531f2a682e3c3a43eaf3a1958bdb42a696" - integrity sha512-ocA76vt+8D0thgXZ7LxFPyqw3H7988qblgzddTDA6B8a/yU0uKV42QR/DhA+Jh11rJjxW0jKvwb5htA6krNZDQ== - -"@motionone/animation@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.15.1.tgz#4a85596c31cbc5100ae8eb8b34c459fb0ccf6807" - integrity sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ== - dependencies: - "@motionone/easing" "^10.15.1" - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - tslib "^2.3.1" - -"@motionone/dom@^10.16.2": - version "10.16.2" - resolved "https://registry.yarnpkg.com/@motionone/dom/-/dom-10.16.2.tgz#0c44df8ee3d1cfc50ee11d27050b27824355a61a" - integrity sha512-bnuHdNbge1FutZXv+k7xub9oPWcF0hsu8y1HTH/qg6av58YI0VufZ3ngfC7p2xhMJMnoh0LXFma2EGTgPeCkeg== - dependencies: - "@motionone/animation" "^10.15.1" - "@motionone/generators" "^10.15.1" - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - hey-listen "^1.0.8" - tslib "^2.3.1" - -"@motionone/easing@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.15.1.tgz#95cf3adaef34da6deebb83940d8143ede3deb693" - integrity sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw== - dependencies: - "@motionone/utils" "^10.15.1" - tslib "^2.3.1" - -"@motionone/generators@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.15.1.tgz#dc6abb11139d1bafe758a41c134d4c753a9b871c" - integrity sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ== - dependencies: - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - tslib "^2.3.1" - -"@motionone/svelte@^10.16.2": - version "10.16.2" - resolved "https://registry.yarnpkg.com/@motionone/svelte/-/svelte-10.16.2.tgz#0b37c3b12927814d31d24941d1ca0ff49981b444" - integrity sha512-38xsroKrfK+aHYhuQlE6eFcGy0EwrB43Q7RGjF73j/kRUTcLNu/LAaKiLLsN5lyqVzCgTBVt4TMT/ShWbTbc5Q== - dependencies: - "@motionone/dom" "^10.16.2" - tslib "^2.3.1" - -"@motionone/types@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.15.1.tgz#89441b54285012795cbba8612cbaa0fa420db3eb" - integrity sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA== - -"@motionone/utils@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.15.1.tgz#6b5f51bde75be88b5411e084310299050368a438" - integrity sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw== - dependencies: - "@motionone/types" "^10.15.1" - hey-listen "^1.0.8" - tslib "^2.3.1" - -"@motionone/vue@^10.16.2": - version "10.16.2" - resolved "https://registry.yarnpkg.com/@motionone/vue/-/vue-10.16.2.tgz#faf13afc27620a2df870c71c58a04ee8de8dea65" - integrity sha512-7/dEK/nWQXOkJ70bqb2KyNfSWbNvWqKKq1C8juj+0Mg/AorgD8O5wE3naddK0G+aXuNMqRuc4jlsYHHWHtIzVw== - dependencies: - "@motionone/dom" "^10.16.2" - tslib "^2.3.1" - -"@mui/base@^5.0.0-beta.5": - version "5.0.0-beta.15" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.15.tgz#76bebd377cc3b7fdc80924759a4100e5319ed0f9" - integrity sha512-Xtom3YSdi0iwYPtyVRFUEGoRwi6IHWixPwifDKaK+4PkEPtUWMU5YOIJfTsmC59ri+dFvA3oBNSiTPUGGrklZw== - dependencies: - "@babel/runtime" "^7.22.15" - "@floating-ui/react-dom" "^2.0.2" - "@mui/types" "^7.2.4" - "@mui/utils" "^5.14.9" - "@popperjs/core" "^2.11.8" - clsx "^2.0.0" - prop-types "^15.8.1" - -"@mui/private-theming@^5.8.4": - version "5.10.3" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.10.3.tgz#7325eef3e480caaaa2d866b9057943ec4fbcb8ce" - integrity sha512-LCYIKlkGz2BTSng2BFzzwSJBRZbChIUri2x2Nh8ryk2B1Ho7zpvE7ex6y39LlStG2Frf92NFC/V4YQbmMAjD5A== - dependencies: - "@babel/runtime" "^7.18.9" - "@mui/utils" "^5.10.3" - prop-types "^15.8.1" - -"@mui/styled-engine@^5.8.0": - version "5.10.5" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.10.5.tgz#8ce4197e887a69119aea056320aad5812025ceb4" - integrity sha512-6U6tTdf+H1OsjgcFoY12gYPR+qqZ1WHGGIahK5V7JhMkMUgH7ozyiNi8s1LzmwrUlAz1hAAhuO5nBYXku3wWvw== - dependencies: - "@babel/runtime" "^7.18.9" - "@emotion/cache" "^11.10.3" - csstype "^3.1.0" - prop-types "^15.8.1" - -"@mui/system@5.8.4": - version "5.8.4" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.8.4.tgz#88306aefcc3a60528f69dcd2d66516831859c328" - integrity sha512-eeYZXlOn4p+tYwqqDlci6wW4knJ68aGx5A24YU9ubYZ5o0IwveoNP3LC9sHAMxigk/mUTqL4bpSMJ2HbTn2aQg== - dependencies: - "@babel/runtime" "^7.17.2" - "@mui/private-theming" "^5.8.4" - "@mui/styled-engine" "^5.8.0" - "@mui/types" "^7.1.4" - "@mui/utils" "^5.8.4" - clsx "^1.1.1" - csstype "^3.1.0" - prop-types "^15.8.1" - -"@mui/types@^7.1.4": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.0.tgz#91380c2d42420f51f404120f7a9270eadd6f5c23" - integrity sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA== - -"@mui/types@^7.2.4": - version "7.2.4" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.4.tgz#b6fade19323b754c5c6de679a38f068fd50b9328" - integrity sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA== - -"@mui/utils@^5.10.3", "@mui/utils@^5.8.4": - version "5.10.3" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.10.3.tgz#ce2a96f31de2a5e717f507b5383dbabbddbc4dfc" - integrity sha512-4jXMDPfx6bpMVuheLaOpKTjpzw39ogAZLeaLj5+RJec3E37/hAZMYjURfblLfTWMMoGoqkY03mNsZaEwNobBow== - dependencies: - "@babel/runtime" "^7.18.9" - "@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" - -"@mui/utils@^5.14.9": - version "5.14.9" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.14.9.tgz#eeefef88dbee687ac90e8972c63f0d41f19348a3" - integrity sha512-9ysB5e+RwS7ofn0n3nwAg1/3c81vBTmSvauD3EuK9LmqMzhmF//BFDaC44U4yITvB/0m1kWyDqg924Ll3VHCcg== - dependencies: - "@babel/runtime" "^7.22.15" - prop-types "^15.8.1" - react-is "^18.2.0" - -"@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/arborist@^5.6.3": - version "5.6.3" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.6.3.tgz#40810080272e097b4a7a4f56108f4a31638a9874" - integrity sha512-/7hbqEM6YuRjwTcQXkK1+xKslEblY5kFQe0tZ7jKyMlIR6x4iOmhLErIkBBGtTKvYxRKdpcxnFXjCobg3UqmsA== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^2.0.3" - "@npmcli/metavuln-calculator" "^3.0.1" - "@npmcli/move-file" "^2.0.0" - "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/package-json" "^2.0.0" - "@npmcli/query" "^1.2.0" - "@npmcli/run-script" "^4.1.3" - bin-links "^3.0.3" - cacache "^16.1.3" - common-ancestor-path "^1.0.1" - hosted-git-info "^5.2.1" - json-parse-even-better-errors "^2.3.1" - json-stringify-nice "^1.1.4" - minimatch "^5.1.0" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - nopt "^6.0.0" - npm-install-checks "^5.0.0" - npm-package-arg "^9.0.0" - npm-pick-manifest "^7.0.2" - npm-registry-fetch "^13.0.0" - npmlog "^6.0.2" - pacote "^13.6.1" - parse-conflict-json "^2.0.1" - proc-log "^2.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^2.0.2" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.7" - ssri "^9.0.0" - treeverse "^2.0.0" - walk-up-path "^1.0.0" - -"@npmcli/ci-detect@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-2.0.0.tgz#e63c91bcd4185ac1e85720a34fc48e164ece5b89" - integrity sha512-8yQtQ9ArHh/TzdUDKQwEvwCgpDuhSWTDAbiKMl3854PcT+Dk4UmWaiawuFTLy9n5twzXOBXVflWe+90/ffXQrA== - -"@npmcli/config@^4.2.1": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-4.2.2.tgz#2e3334dda84f48d059309c53d152e66b05ca24b7" - integrity sha512-5GNcLd+0c4bYBnFop53+26CO5GQP0R9YcxlernohpHDWdIgzUg9I0+GEMk3sNHnLntATVU39d283A4OO+W402w== - dependencies: - "@npmcli/map-workspaces" "^2.0.2" - ini "^3.0.0" - mkdirp-infer-owner "^2.0.0" - nopt "^6.0.0" - proc-log "^2.0.0" - read-package-json-fast "^2.0.3" - semver "^7.3.5" - walk-up-path "^1.0.0" - -"@npmcli/disparity-colors@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-2.0.0.tgz#cb518166ee21573b96241a3613fef70acb2a60ba" - integrity sha512-FFXGrIjhvd2qSZ8iS0yDvbI7nbjdyT2VNO7wotosjYZM2p2r8PN3B7Om3M5NO9KqW/OVzfzLB3L0V5Vo5QXC7A== - dependencies: - ansi-styles "^4.3.0" - -"@npmcli/fs@^2.1.0", "@npmcli/fs@^2.1.1": - 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/git@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.2.tgz#5c5de6b4d70474cf2d09af149ce42e4e1dacb931" - integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== - dependencies: - "@npmcli/promise-spawn" "^3.0.0" - lru-cache "^7.4.4" - mkdirp "^1.0.4" - npm-pick-manifest "^7.0.0" - proc-log "^2.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^2.0.2" - -"@npmcli/installed-package-contents@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== - dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -"@npmcli/map-workspaces@^2.0.2", "@npmcli/map-workspaces@^2.0.3": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc" - integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== - dependencies: - "@npmcli/name-from-folder" "^1.0.1" - glob "^8.0.1" - minimatch "^5.0.1" - read-package-json-fast "^2.0.3" - -"@npmcli/metavuln-calculator@^3.0.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" - integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== - dependencies: - cacache "^16.0.0" - json-parse-even-better-errors "^2.3.1" - pacote "^13.0.3" - semver "^7.3.5" - -"@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" - -"@npmcli/name-from-folder@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" - integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== - -"@npmcli/node-gyp@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" - integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== - -"@npmcli/package-json@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" - integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== - dependencies: - json-parse-even-better-errors "^2.3.1" - -"@npmcli/promise-spawn@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" - integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== - dependencies: - infer-owner "^1.0.4" - -"@npmcli/query@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-1.2.0.tgz#46468d583cf013aa92102970700f9555314aabe4" - integrity sha512-uWglsUM3PjBLgTSmZ3/vygeGdvWEIZ3wTUnzGFbprC/RtvQSaT+GAXu1DXmSFj2bD3oOZdcRm1xdzsV2z1YWdw== - dependencies: - npm-package-arg "^9.1.0" - postcss-selector-parser "^6.0.10" - semver "^7.3.7" - -"@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.2.0", "@npmcli/run-script@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946" - integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== - dependencies: - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/promise-spawn" "^3.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^2.0.3" - which "^2.0.2" - -"@octokit/auth-token@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.3.tgz#ce7e48a3166731f26068d7a7a7996b5da58cbe0c" - integrity sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA== - dependencies: - "@octokit/types" "^9.0.0" - -"@octokit/core@^4.1.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.0.tgz#8c253ba9605aca605bc46187c34fcccae6a96648" - integrity sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg== - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^7.0.0": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.5.tgz#2bb2a911c12c50f10014183f5d596ce30ac67dd1" - integrity sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA== - dependencies: - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^5.0.0": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.5.tgz#a4cb3ea73f83b861893a6370ee82abb36e81afd2" - integrity sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ== - dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^16.0.0": - version "16.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-16.0.0.tgz#d92838a6cd9fb4639ca875ddb3437f1045cc625e" - integrity sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA== - -"@octokit/plugin-paginate-rest@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz#f34b5a7d9416019126042cd7d7b811e006c0d561" - integrity sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw== - dependencies: - "@octokit/types" "^9.0.0" - -"@octokit/plugin-request-log@^1.0.4": - 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@^7.0.0": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz#f7ebe18144fd89460f98f35a587b056646e84502" - integrity sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.3.1" - -"@octokit/request-error@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" - integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^6.0.0": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.3.tgz#76d5d6d44da5c8d406620a4c285d280ae310bdb4" - integrity sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA== - dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/rest@^19.0.0": - version "19.0.7" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.7.tgz#d2e21b4995ab96ae5bfae50b4969da7e04e0bb70" - integrity sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA== - dependencies: - "@octokit/core" "^4.1.0" - "@octokit/plugin-paginate-rest" "^6.0.0" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^7.0.0" - -"@octokit/types@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.0.0.tgz#6050db04ddf4188ec92d60e4da1a2ce0633ff635" - integrity sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw== - dependencies: - "@octokit/openapi-types" "^16.0.0" - -"@pnpm/network.ca-file@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" - integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== - dependencies: - graceful-fs "4.2.10" - -"@pnpm/npm-conf@^1.0.4": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz#3475541fb71d7b6ce68acaaa3392eae9fedf3276" - integrity sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A== - dependencies: - "@pnpm/network.ca-file" "^1.0.1" - config-chain "^1.1.11" - -"@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== - -"@reduxjs/toolkit@^1.6.1": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.8.5.tgz#c14bece03ee08be88467f22dc0ecf9cf875527cd" - integrity sha512-f4D5EXO7A7Xq35T0zRbWq5kJQyXzzscnHKmjnu2+37B3rwHU6mX9PYlbfXdnxcY6P/7zfmjhgan0Z+yuOfeBmA== - dependencies: - immer "^9.0.7" - redux "^4.1.2" - redux-thunk "^2.4.1" - reselect "^4.1.5" - -"@semantic-release/changelog@^6.0.1": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@semantic-release/changelog/-/changelog-6.0.2.tgz#fdcdbd368788c8fcc69c4af29bf2064f4afb45f4" - integrity sha512-jHqfTkoPbDEOAgAP18mGP53IxeMwxTISN+GwTRy9uLu58UjARoZU8ScCgWGeO2WPkEsm57H8AkyY02W2ntIlIw== - dependencies: - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - fs-extra "^11.0.0" - lodash "^4.17.4" - -"@semantic-release/commit-analyzer@^9.0.2": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz#a78e54f9834193b55f1073fa6258eecc9a545e03" - integrity sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g== - dependencies: - conventional-changelog-angular "^5.0.0" - conventional-commits-filter "^2.0.0" - conventional-commits-parser "^3.2.3" - debug "^4.0.0" - import-from "^4.0.0" - lodash "^4.17.4" - micromatch "^4.0.2" - -"@semantic-release/error@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-3.0.0.tgz#30a3b97bbb5844d695eb22f9d3aa40f6a92770c2" - integrity sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw== - -"@semantic-release/git@^10.0.1": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/git/-/git-10.0.1.tgz#c646e55d67fae623875bf3a06a634dd434904498" - integrity sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w== - dependencies: - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - debug "^4.0.0" - dir-glob "^3.0.0" - execa "^5.0.0" - lodash "^4.17.4" - micromatch "^4.0.0" - p-reduce "^2.0.0" - -"@semantic-release/github@^8.0.0": - version "8.0.7" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.7.tgz#643aee7a5cdd2acd3ae643bb90ad4ac796901de6" - integrity sha512-VtgicRIKGvmTHwm//iqTh/5NGQwsncOMR5vQK9pMT92Aem7dv37JFKKRuulUsAnUOIlO4G8wH3gPiBAA0iW0ww== - dependencies: - "@octokit/rest" "^19.0.0" - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - bottleneck "^2.18.1" - debug "^4.0.0" - dir-glob "^3.0.0" - fs-extra "^11.0.0" - globby "^11.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - issue-parser "^6.0.0" - lodash "^4.17.4" - mime "^3.0.0" - p-filter "^2.0.0" - p-retry "^4.0.0" - url-join "^4.0.0" - -"@semantic-release/npm@^9.0.0": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-9.0.2.tgz#0f0903b4df6e93ef237372146bc376087fed4e1d" - integrity sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g== - dependencies: - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - execa "^5.0.0" - fs-extra "^11.0.0" - lodash "^4.17.15" - nerf-dart "^1.0.0" - normalize-url "^6.0.0" - npm "^8.3.0" - rc "^1.2.8" - read-pkg "^5.0.0" - registry-auth-token "^5.0.0" - semver "^7.1.2" - tempy "^1.0.0" - -"@semantic-release/release-notes-generator@^10.0.0": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz#85f7ca78bfa6b01fb5fda0ac48112855d69171dc" - integrity sha512-k4x4VhIKneOWoBGHkx0qZogNjCldLPRiAjnIpMnlUh6PtaWXp/T+C9U7/TaNDDtgDa5HMbHl4WlREdxHio6/3w== - dependencies: - conventional-changelog-angular "^5.0.0" - conventional-changelog-writer "^5.0.0" - conventional-commits-filter "^2.0.0" - conventional-commits-parser "^3.2.3" - debug "^4.0.0" - get-stream "^6.0.0" - import-from "^4.0.0" - into-stream "^6.0.0" - lodash "^4.17.4" - read-pkg-up "^7.0.0" - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@stablelib/aead@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/aead/-/aead-1.0.1.tgz#c4b1106df9c23d1b867eb9b276d8f42d5fc4c0c3" - integrity sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg== - -"@stablelib/binary@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.1.tgz#c5900b94368baf00f811da5bdb1610963dfddf7f" - integrity sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== - dependencies: - "@stablelib/int" "^1.0.1" - -"@stablelib/bytes@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/bytes/-/bytes-1.0.1.tgz#0f4aa7b03df3080b878c7dea927d01f42d6a20d8" - integrity sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ== - -"@stablelib/chacha20poly1305@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz#de6b18e283a9cb9b7530d8767f99cde1fec4c2ee" - integrity sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA== - dependencies: - "@stablelib/aead" "^1.0.1" - "@stablelib/binary" "^1.0.1" - "@stablelib/chacha" "^1.0.1" - "@stablelib/constant-time" "^1.0.1" - "@stablelib/poly1305" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/chacha@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/chacha/-/chacha-1.0.1.tgz#deccfac95083e30600c3f92803a3a1a4fa761371" - integrity sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/constant-time@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/constant-time/-/constant-time-1.0.1.tgz#bde361465e1cf7b9753061b77e376b0ca4c77e35" - integrity sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg== - -"@stablelib/ed25519@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@stablelib/ed25519/-/ed25519-1.0.3.tgz#f8fdeb6f77114897c887bb6a3138d659d3f35996" - integrity sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg== - dependencies: - "@stablelib/random" "^1.0.2" - "@stablelib/sha512" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/hash@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/hash/-/hash-1.0.1.tgz#3c944403ff2239fad8ebb9015e33e98444058bc5" - integrity sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg== - -"@stablelib/hkdf@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/hkdf/-/hkdf-1.0.1.tgz#b4efd47fd56fb43c6a13e8775a54b354f028d98d" - integrity sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g== - dependencies: - "@stablelib/hash" "^1.0.1" - "@stablelib/hmac" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/hmac@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/hmac/-/hmac-1.0.1.tgz#3d4c1b8cf194cb05d28155f0eed8a299620a07ec" - integrity sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA== - dependencies: - "@stablelib/constant-time" "^1.0.1" - "@stablelib/hash" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/int@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/int/-/int-1.0.1.tgz#75928cc25d59d73d75ae361f02128588c15fd008" - integrity sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w== - -"@stablelib/keyagreement@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz#4612efb0a30989deb437cd352cee637ca41fc50f" - integrity sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg== - dependencies: - "@stablelib/bytes" "^1.0.1" - -"@stablelib/poly1305@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/poly1305/-/poly1305-1.0.1.tgz#93bfb836c9384685d33d70080718deae4ddef1dc" - integrity sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA== - dependencies: - "@stablelib/constant-time" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/random@^1.0.1", "@stablelib/random@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.2.tgz#2dece393636489bf7e19c51229dd7900eddf742c" - integrity sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/sha256@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/sha256/-/sha256-1.0.1.tgz#77b6675b67f9b0ea081d2e31bda4866297a3ae4f" - integrity sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/hash" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/sha512@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/sha512/-/sha512-1.0.1.tgz#6da700c901c2c0ceacbd3ae122a38ac57c72145f" - integrity sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/hash" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/wipe@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" - integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== - -"@stablelib/x25519@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@stablelib/x25519/-/x25519-1.0.3.tgz#13c8174f774ea9f3e5e42213cbf9fc68a3c7b7fd" - integrity sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw== - dependencies: - "@stablelib/keyagreement" "^1.0.1" - "@stablelib/random" "^1.0.2" - "@stablelib/wipe" "^1.0.1" - -"@szhsin/react-accordion@^1.2.1": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@szhsin/react-accordion/-/react-accordion-1.2.3.tgz#ee4d83c66a89748bfe2a2b23dd14bbb3d4f63fbf" - integrity sha512-KsDmaYsv4+Rnla+fSdZMIMonzuvXlDRPaFeIa7Je0dnwY4iFry5eiw27GQ6276+tYkVRgUyfS/mEcL48efSivA== - dependencies: - react-transition-state "^2.1.1" - -"@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== - -"@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/bonjour@^3.5.9": - version "3.5.10" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" - integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== - dependencies: - "@types/node" "*" - -"@types/connect-history-api-fallback@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" - integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== - dependencies: - "@types/node" "*" - -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.4.6" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.6.tgz#7976f054c1bccfcf514bff0564c0c41df5c08207" - integrity sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": - version "4.17.31" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz#a1139efeab4e7323834bb0226e62ac019f474b2f" - integrity sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - -"@types/express@*", "@types/express@^4.17.13": - version "4.17.14" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.14.tgz#143ea0557249bc1b3b54f15db4c81c3d4eb3569c" - integrity sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.18" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - -"@types/http-proxy@^1.17.8": - version "1.17.9" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" - integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/mime@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" - integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== - -"@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== - -"@types/node@*": - version "18.7.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.18.tgz#633184f55c322e4fb08612307c274ee6d5ed3154" - integrity sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/prop-types@*", "@types/prop-types@^15.7.5": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - -"@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== - -"@types/react-is@^16.7.1 || ^17.0.0": - version "17.0.3" - resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-17.0.3.tgz#2d855ba575f2fc8d17ef9861f084acc4b90a137a" - integrity sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "18.0.20" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.20.tgz#e4c36be3a55eb5b456ecf501bd4a00fd4fd0c9ab" - integrity sha512-MWul1teSPxujEHVwZl4a5HxQ9vVNsjTchVA+xRqv/VYGCuKGAU6UhfrTdF5aBefwD1BHUD8i/zq+O/vyCm/FrA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@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/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== - -"@types/serve-index@^1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" - integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== - dependencies: - "@types/express" "*" - -"@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" - integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== - dependencies: - "@types/mime" "*" - "@types/node" "*" - -"@types/sockjs@^0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" - integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== - dependencies: - "@types/node" "*" - -"@types/trusted-types@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.4.tgz#2b38784cd16957d3782e8e2b31c03bc1d13b4d65" - integrity sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ== - -"@types/ws@^8.5.1": - version "8.5.3" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" - integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^17.0.8": - version "17.0.24" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" - integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== - dependencies: - "@types/yargs-parser" "*" - -"@walletconnect/core@2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.10.1.tgz#d1fb442bd77424666bacdb0f5a07f7708fb3d984" - integrity sha512-WAoXfmj+Zy5q48TnrKUjmHXJCBahzKwbul+noepRZf7JDtUAZ9IOWpUjg+UPRbfK5EiWZ0TF42S6SXidf7EHoQ== - dependencies: - "@walletconnect/heartbeat" "1.2.1" - "@walletconnect/jsonrpc-provider" "1.0.13" - "@walletconnect/jsonrpc-types" "1.0.3" - "@walletconnect/jsonrpc-utils" "1.0.8" - "@walletconnect/jsonrpc-ws-connection" "1.0.13" - "@walletconnect/keyvaluestorage" "^1.0.2" - "@walletconnect/logger" "^2.0.1" - "@walletconnect/relay-api" "^1.0.9" - "@walletconnect/relay-auth" "^1.0.4" - "@walletconnect/safe-json" "^1.0.2" - "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.10.1" - "@walletconnect/utils" "2.10.1" - events "^3.3.0" - lodash.isequal "4.5.0" - uint8arrays "^3.1.0" - -"@walletconnect/environment@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.1.tgz#1d7f82f0009ab821a2ba5ad5e5a7b8ae3b214cd7" - integrity sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg== - dependencies: - tslib "1.14.1" - -"@walletconnect/ethereum-provider@^2.8.4": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/ethereum-provider/-/ethereum-provider-2.10.1.tgz#4733a98f0b388cf5ae6c2b269f50da87da432ee5" - integrity sha512-Yhoz8EXkKzxOlBT6G+elphqCx/gkH6RxD9/ZAiy9lLc8Ng5p1gvKCVVP5zsGNE9FbkKmHd+J9JJRzn2Bw2yqtQ== - dependencies: - "@walletconnect/jsonrpc-http-connection" "^1.0.7" - "@walletconnect/jsonrpc-provider" "^1.0.13" - "@walletconnect/jsonrpc-types" "^1.0.3" - "@walletconnect/jsonrpc-utils" "^1.0.8" - "@walletconnect/sign-client" "2.10.1" - "@walletconnect/types" "2.10.1" - "@walletconnect/universal-provider" "2.10.1" - "@walletconnect/utils" "2.10.1" - events "^3.3.0" - -"@walletconnect/events@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/events/-/events-1.0.1.tgz#2b5f9c7202019e229d7ccae1369a9e86bda7816c" - integrity sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ== - dependencies: - keyvaluestorage-interface "^1.0.0" - tslib "1.14.1" - -"@walletconnect/heartbeat@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@walletconnect/heartbeat/-/heartbeat-1.2.1.tgz#afaa3a53232ae182d7c9cff41c1084472d8f32e9" - integrity sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q== - dependencies: - "@walletconnect/events" "^1.0.1" - "@walletconnect/time" "^1.0.2" - tslib "1.14.1" - -"@walletconnect/jsonrpc-http-connection@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.7.tgz#a6973569b8854c22da707a759d241e4f5c2d5a98" - integrity sha512-qlfh8fCfu8LOM9JRR9KE0s0wxP6ZG9/Jom8M0qsoIQeKF3Ni0FyV4V1qy/cc7nfI46SLQLSl4tgWSfLiE1swyQ== - dependencies: - "@walletconnect/jsonrpc-utils" "^1.0.6" - "@walletconnect/safe-json" "^1.0.1" - cross-fetch "^3.1.4" - tslib "1.14.1" - -"@walletconnect/jsonrpc-provider@1.0.13", "@walletconnect/jsonrpc-provider@^1.0.13": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.13.tgz#9a74da648d015e1fffc745f0c7d629457f53648b" - integrity sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g== - dependencies: - "@walletconnect/jsonrpc-utils" "^1.0.8" - "@walletconnect/safe-json" "^1.0.2" - tslib "1.14.1" - -"@walletconnect/jsonrpc-types@1.0.3", "@walletconnect/jsonrpc-types@^1.0.2", "@walletconnect/jsonrpc-types@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.3.tgz#65e3b77046f1a7fa8347ae02bc1b841abe6f290c" - integrity sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw== - dependencies: - keyvaluestorage-interface "^1.0.0" - tslib "1.14.1" - -"@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.7", "@walletconnect/jsonrpc-utils@^1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz#82d0cc6a5d6ff0ecc277cb35f71402c91ad48d72" - integrity sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw== - dependencies: - "@walletconnect/environment" "^1.0.1" - "@walletconnect/jsonrpc-types" "^1.0.3" - tslib "1.14.1" - -"@walletconnect/jsonrpc-ws-connection@1.0.13": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.13.tgz#23b0cdd899801bfbb44a6556936ec2b93ef2adf4" - integrity sha512-mfOM7uFH4lGtQxG+XklYuFBj6dwVvseTt5/ahOkkmpcAEgz2umuzu7fTR+h5EmjQBdrmYyEBOWADbeaFNxdySg== - dependencies: - "@walletconnect/jsonrpc-utils" "^1.0.6" - "@walletconnect/safe-json" "^1.0.2" - events "^3.3.0" - tslib "1.14.1" - ws "^7.5.1" - -"@walletconnect/keyvaluestorage@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.0.2.tgz#92f5ca0f54c1a88a093778842ce0c874d86369c8" - integrity sha512-U/nNG+VLWoPFdwwKx0oliT4ziKQCEoQ27L5Hhw8YOFGA2Po9A9pULUYNWhDgHkrb0gYDNt//X7wABcEWWBd3FQ== - dependencies: - safe-json-utils "^1.1.1" - tslib "1.14.1" - -"@walletconnect/logger@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.0.1.tgz#7f489b96e9a1ff6bf3e58f0fbd6d69718bf844a8" - integrity sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ== - dependencies: - pino "7.11.0" - tslib "1.14.1" - -"@walletconnect/modal-core@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@walletconnect/modal-core/-/modal-core-2.6.2.tgz#d73e45d96668764e0c8668ea07a45bb8b81119e9" - integrity sha512-cv8ibvdOJQv2B+nyxP9IIFdxvQznMz8OOr/oR/AaUZym4hjXNL/l1a2UlSQBXrVjo3xxbouMxLb3kBsHoYP2CA== - dependencies: - valtio "1.11.2" - -"@walletconnect/modal-ui@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@walletconnect/modal-ui/-/modal-ui-2.6.2.tgz#fa57c087c57b7f76aaae93deab0f84bb68b59cf9" - integrity sha512-rbdstM1HPGvr7jprQkyPggX7rP4XiCG85ZA+zWBEX0dVQg8PpAgRUqpeub4xQKDgY7pY/xLRXSiCVdWGqvG2HA== - dependencies: - "@walletconnect/modal-core" "2.6.2" - lit "2.8.0" - motion "10.16.2" - qrcode "1.5.3" - -"@walletconnect/modal@^2.4.5": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@walletconnect/modal/-/modal-2.6.2.tgz#4b534a836f5039eeb3268b80be7217a94dd12651" - integrity sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA== - dependencies: - "@walletconnect/modal-core" "2.6.2" - "@walletconnect/modal-ui" "2.6.2" - -"@walletconnect/relay-api@^1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.9.tgz#f8c2c3993dddaa9f33ed42197fc9bfebd790ecaf" - integrity sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg== - dependencies: - "@walletconnect/jsonrpc-types" "^1.0.2" - tslib "1.14.1" - -"@walletconnect/relay-auth@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz#0b5c55c9aa3b0ef61f526ce679f3ff8a5c4c2c7c" - integrity sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ== - dependencies: - "@stablelib/ed25519" "^1.0.2" - "@stablelib/random" "^1.0.1" - "@walletconnect/safe-json" "^1.0.1" - "@walletconnect/time" "^1.0.2" - tslib "1.14.1" - uint8arrays "^3.0.0" - -"@walletconnect/safe-json@^1.0.1", "@walletconnect/safe-json@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.2.tgz#7237e5ca48046e4476154e503c6d3c914126fa77" - integrity sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA== - dependencies: - tslib "1.14.1" - -"@walletconnect/sign-client@2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.10.1.tgz#db60bc9400cd79f0cb2380067343512b21ee4749" - integrity sha512-iG3eJGi1yXeG3xGeVSSMf8wDFyx239B0prLQfy1uYDtYFb2ynnH/09oqAZyKn96W5nfQzUgM2Mz157PVdloH3Q== - dependencies: - "@walletconnect/core" "2.10.1" - "@walletconnect/events" "^1.0.1" - "@walletconnect/heartbeat" "1.2.1" - "@walletconnect/jsonrpc-utils" "1.0.8" - "@walletconnect/logger" "^2.0.1" - "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.10.1" - "@walletconnect/utils" "2.10.1" - events "^3.3.0" - -"@walletconnect/time@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@walletconnect/time/-/time-1.0.2.tgz#6c5888b835750ecb4299d28eecc5e72c6d336523" - integrity sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g== - dependencies: - tslib "1.14.1" - -"@walletconnect/types@2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.10.1.tgz#1355bce236f3eef575716ea3efe4beed98a873ef" - integrity sha512-7pccAhajQdiH2kYywjE1XI64IqRI+4ioyGy0wvz8d0UFQ/DSG3MLKR8jHf5aTOafQQ/HRLz6xvlzN4a7gIVkUQ== - dependencies: - "@walletconnect/events" "^1.0.1" - "@walletconnect/heartbeat" "1.2.1" - "@walletconnect/jsonrpc-types" "1.0.3" - "@walletconnect/keyvaluestorage" "^1.0.2" - "@walletconnect/logger" "^2.0.1" - events "^3.3.0" - -"@walletconnect/universal-provider@2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/universal-provider/-/universal-provider-2.10.1.tgz#c4a77bd2eed1a335edae5b2b298636092fff63ef" - integrity sha512-81QxTH/X4dRoYCz0U9iOrBYOcj7N897ONcB57wsGhEkV7Rc9htmWJq2CzeOuxvVZ+pNZkE+/aw9LrhizO1Ltxg== - dependencies: - "@walletconnect/jsonrpc-http-connection" "^1.0.7" - "@walletconnect/jsonrpc-provider" "1.0.13" - "@walletconnect/jsonrpc-types" "^1.0.2" - "@walletconnect/jsonrpc-utils" "^1.0.7" - "@walletconnect/logger" "^2.0.1" - "@walletconnect/sign-client" "2.10.1" - "@walletconnect/types" "2.10.1" - "@walletconnect/utils" "2.10.1" - events "^3.3.0" - -"@walletconnect/utils@2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.10.1.tgz#65b37c9800eb0e80a08385b6987471fb46e1e22e" - integrity sha512-DM0dKgm9O58l7VqJEyV2OVv16XRePhDAReI23let6WdW1dSpw/Y/A89Lp99ZJOjLm2FxyblMRF3YRaZtHwBffw== - dependencies: - "@stablelib/chacha20poly1305" "1.0.1" - "@stablelib/hkdf" "1.0.1" - "@stablelib/random" "^1.0.2" - "@stablelib/sha256" "1.0.1" - "@stablelib/x25519" "^1.0.3" - "@walletconnect/relay-api" "^1.0.9" - "@walletconnect/safe-json" "^1.0.2" - "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.10.1" - "@walletconnect/window-getters" "^1.0.1" - "@walletconnect/window-metadata" "^1.0.1" - detect-browser "5.3.0" - query-string "7.1.3" - uint8arrays "^3.1.0" - -"@walletconnect/window-getters@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.1.tgz#f36d1c72558a7f6b87ecc4451fc8bd44f63cbbdc" - integrity sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q== - dependencies: - tslib "1.14.1" - -"@walletconnect/window-metadata@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz#2124f75447b7e989e4e4e1581d55d25bc75f7be5" - integrity sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA== - dependencies: - "@walletconnect/window-getters" "^1.0.1" - tslib "1.14.1" - -"@web3-react/core@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@web3-react/core/-/core-8.2.0.tgz#95fb615bb283be520e6f61b5e48cfb0047943808" - integrity sha512-r7dmK2E8Jrpvm/DF93hGMB+8lECHSI3Oo0NrHbhxkisK6in6rdgAXeYFhZtM48LBAm9py6fQvLzjCM6Qx9q0oQ== - dependencies: - "@web3-react/store" "^8.2.0" - "@web3-react/types" "^8.2.0" - zustand "^4.3.5" - optionalDependencies: - "@ethersproject/providers" "^5" - -"@web3-react/eip1193@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@web3-react/eip1193/-/eip1193-8.2.0.tgz#a7953769f9d0bec54472aceb01f72c889458378f" - integrity sha512-Ugbt+FisHO8aLD5o5B4AZdtgSVpjrbmtC5MgHrOEBw+IwFqr20EJreh052u8ExI2OrPjARIVOkNcp50Xxs7oUw== - dependencies: - "@web3-react/types" "^8.2.0" - eventemitter3 "^4.0.7" - -"@web3-react/metamask@8.2.1": - version "8.2.1" - resolved "https://registry.yarnpkg.com/@web3-react/metamask/-/metamask-8.2.1.tgz#7ffac16e2a55ff8f1195e2831a9f9f99fa0bfba9" - integrity sha512-JysxkAImIygkD95Bimrj7HwcTq79tq4ZSlphZt24LBMrEVY5K8k+e5mCAuJuDZ7Fu+aBxqpS0lgPjaBGKdNu/A== - dependencies: - "@metamask/detect-provider" "^1.2.0" - "@web3-react/types" "^8.2.0" - -"@web3-react/store@^8.2.0": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@web3-react/store/-/store-8.2.2.tgz#d85a560e2655919030d237e2e0e6e2529ff038e0" - integrity sha512-ITMkLzyw8tSTTEf8NcjIdewphbCpWHwK4EmwRxPCZMMRs+apZwoj3R/YNflMBoPMC+ybWKnVVpDd6CprF1TU9A== - dependencies: - "@ethersproject/address" "^5" - "@web3-react/types" "^8.2.2" - zustand "4.4.0" - -"@web3-react/types@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@web3-react/types/-/types-8.2.0.tgz#195464ebb94cb417e6dc3c16951573f9b6b3832a" - integrity sha512-TBYTFlqJZaEpVbuAAKRJFX5PZc3lI1TqDZzY94zwCrCh4GBepwwK7+PxmRAppMFuNa5x0vFX/ghLEC44e6TCFg== - dependencies: - zustand "^4.3.5" - -"@web3-react/types@^8.2.0", "@web3-react/types@^8.2.2": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@web3-react/types/-/types-8.2.2.tgz#1ae7f11069d9a9c711aa4152f95331747fb1e551" - integrity sha512-PrPrJNjJhUX3lL/365llAZwY0bpUm9N52OjGMFyzCIX7IR13f7WLUk/LyQa9ALneCBu3cJUVTZANuFdqdREuvw== - dependencies: - zustand "4.4.0" - -"@web3-react/walletconnect-v2@8.3.6": - version "8.3.6" - resolved "https://registry.yarnpkg.com/@web3-react/walletconnect-v2/-/walletconnect-v2-8.3.6.tgz#8f9e561ba3fa7dd15c56bec7ee1de066857f07b1" - integrity sha512-8N01Rns+Ey203D60TAj0iN4LOPsllvdY+8fl8ev+1NaPlgOtF3KrasPrFJ/5ZmVF31jBQYo2kC/X3OITBBnHDA== - dependencies: - "@walletconnect/ethereum-provider" "^2.8.4" - "@walletconnect/modal" "^2.4.5" - "@web3-react/types" "^8.2.0" - eventemitter3 "^4.0.7" - -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== - -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== - -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== - -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== - -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - -"@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" - -"@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - -"@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.0.1.tgz#a69720f6c9bad6aef54a8fa6ba9c3533e7ef4c7f" - integrity sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A== - -"@webpack-cli/info@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.1.tgz#eed745799c910d20081e06e5177c2b2569f166c0" - integrity sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA== - -"@webpack-cli/serve@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.1.tgz#34bdc31727a1889198855913db2f270ace6d7bf8" - integrity sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw== - -"@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== - -JSONStream@^1.0.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abbrev@^1.0.0, abbrev@~1.1.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-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== - -acorn@^8.5.0, acorn@^8.7.1: - version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== - -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.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - 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.0.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.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.8.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-escapes@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" - integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== - dependencies: - type-fest "^1.0.2" - -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-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.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.3.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" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -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== - -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -"aproba@^1.0.3 || ^2.0.0", aproba@^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== - -archy@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== - -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@^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== - -argv-formatter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" - integrity sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw== - -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-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== - -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== - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -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== - -atomic-sleep@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" - integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== - -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" - -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" - -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== - -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== - -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.2.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== - -bignumber.js@^9.0.2: - version "9.1.0" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.0.tgz#8d340146107fe3a6cb8d40699643c302e8773b62" - integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== - -bin-links@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.3.tgz#3842711ef3db2cd9f16a5f404a996a12db355a6e" - integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== - dependencies: - cmd-shim "^5.0.0" - mkdirp-infer-owner "^2.0.0" - npm-normalize-package-bin "^2.0.0" - read-cmd-shim "^3.0.0" - rimraf "^3.0.0" - write-file-atomic "^4.0.0" - -binary-extensions@^2.0.0, binary-extensions@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -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.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.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== - 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" - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - 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.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -bonjour-service@^1.0.11: - version "1.0.14" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.14.tgz#c346f5bc84e87802d08f8d5a60b93f758e514ee7" - integrity sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ== - dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" - fast-deep-equal "^3.1.3" - multicast-dns "^7.2.5" - -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== - -bottleneck@^2.18.1: - version "2.19.5" - resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" - integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== - -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@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -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== - -browserslist@^4.14.5: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== - dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" - -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== - -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -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@^16.0.0, cacache@^16.1.0, cacache@^16.1.3: - 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" - -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -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.2: - 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.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.30001400: - version "1.0.30001401" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001401.tgz#d8b2434b376266ce48274ff70d1094250636776c" - integrity sha512-fmC/D1YCOvs5uWFP3FNVJGTdE0QFQLs1dJ7W94wP0p46lXrDl3BNgZArKPm6+XdIVtczMN1dPNVOFsJd/HRnGQ== - -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" - -chalk@^2.0.0, chalk@^2.3.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@^4.0.0, chalk@^4.1.0, 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" - -chalk@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" - integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== - -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" - -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.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -cidr-regex@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d" - integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw== - dependencies: - ip-regex "^4.1.0" - -clean-css@^5.2.2: - version "5.3.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.1.tgz#d0610b0b90d125196a2894d35366f734e5d7aa32" - integrity sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg== - 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== - -cli-columns@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" - integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== - dependencies: - string-width "^4.2.3" - strip-ansi "^6.0.1" - -cli-table3@^0.6.1, cli-table3@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.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" - -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@^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.1.1, 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.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" - integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== - -cmd-shim@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" - integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== - dependencies: - mkdirp-infer-owner "^2.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: - 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@^2.0.10, colorette@^2.0.14: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== - -columnify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" - integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== - dependencies: - strip-ansi "^6.0.1" - wcwidth "^1.0.0" - -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@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -commander@^9.4.1: - version "9.5.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -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" - -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== - -config-chain@^1.1.11: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -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== - -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: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -conventional-changelog-angular@^5.0.0: - version "5.0.13" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" - integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-writer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" - integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== - dependencies: - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" - handlebars "^4.7.7" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" - -conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" - integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -convert-source-map@^1.5.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -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.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -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.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - 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" - -cosmiconfig@^8.0.0: - version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== - dependencies: - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - path-type "^4.0.0" - -cross-fetch@^3.1.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - -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" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -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-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== - -csstype@^3.0.2, csstype@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" - integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== - -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -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.1.0, debug@^4.3.3: - 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" - -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== - -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== - -decode-uri-component@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -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== - -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" - -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== - -del@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - -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, 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== - -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-browser@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.3.0.tgz#9705ef2bddf46072d0f7265a1fe300e36fe7ceca" - integrity sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w== - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -dezalgo@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" - integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== - dependencies: - asap "^2.0.0" - wrappy "1" - -diff@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== - -dijkstrajs@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz#2e48c0d3b825462afe75ab4ad5e829c8ece36257" - integrity sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg== - -dir-glob@^3.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-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - -dns-packet@^5.2.2: - version "5.4.0" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" - integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -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-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" - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -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" - -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" - -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.1.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" - -duplexer2@~0.1.0: - 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" - -duplexify@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" - integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== - dependencies: - end-of-stream "^1.4.1" - inherits "^2.0.3" - readable-stream "^3.1.1" - stream-shift "^1.0.0" - -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.251: - version "1.4.253" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.253.tgz#3402fd2159530fc6d94237f1b9535fa7bebaf399" - integrity sha512-1pezJ2E1UyBTGbA7fUlHdPSXQw1k+82VhTFLG5G0AUqLGvsZqFzleOblceqegZzxYX4kC7hGEEdzIQI9RZ1Cuw== - -elliptic@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - 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" - -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== - -encode-utf8@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" - integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== - -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.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.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.10.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" - integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -env-ci@^5.0.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.5.0.tgz#43364e3554d261a586dec707bc32be81112b545f" - integrity sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A== - dependencies: - execa "^5.0.0" - fromentries "^1.3.2" - java-properties "^1.0.0" - -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.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== - -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.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" - -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -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@^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@^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== - -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" - -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== - -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.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -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, eventemitter3@^4.0.7: - 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== - -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" - -express@^4.17.3: - version "4.18.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" - integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== - 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" - -express@^4.18.1: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - 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.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" - -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-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - 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-redact@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" - integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== - -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.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - 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" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== - dependencies: - escape-string-regexp "^1.0.5" - -figures@^3.0.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" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -filter-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" - integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== - -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-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@^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@^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" - -find-versions@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" - integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ== - dependencies: - semver-regex "^3.1.2" - -follow-redirects@^1.0.0, follow-redirects@^1.14.9: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -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== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -from2@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fromentries@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" - integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== - -fs-extra@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.0.tgz#5784b102104433bb0e090f48bfc4a30742c357ed" - integrity sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw== - dependencies: - 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.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" - integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== - -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.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -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" - -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-intrinsic@^1.0.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -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== - -git-log-parser@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/git-log-parser/-/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" - integrity sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA== - dependencies: - argv-formatter "~1.0.0" - spawn-error-forwarder "~1.0.0" - split2 "~1.0.0" - stream-combiner2 "~1.1.1" - through2 "~2.0.0" - traverse "~0.6.6" - -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@^7.1.3, glob@^7.1.4: - 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@^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" - -globby@^11.0.0, globby@^11.0.1: - 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" - -graceful-fs@4.2.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -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== - -handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -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-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-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-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@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash.js@1.1.7, 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" - -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== - -hey-listen@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" - integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== - -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.3.1: - 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" - -hook-std@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" - integrity sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g== - -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.0, 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" - -hosted-git-info@^5.0.0, hosted-git-info@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz#0ba1c97178ef91f3ab30842ae63d6a272341156f" - integrity sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw== - dependencies: - lru-cache "^7.5.1" - -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-entities@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" - integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== - -html-minifier-terser@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -html-webpack-plugin@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" - integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - 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" - -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-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@^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" - -https-proxy-agent@^5.0.0: - 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@^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" - -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" - -identicon.js@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/identicon.js/-/identicon.js-2.3.3.tgz#c505b8d60ecc6ea13bbd991a33964c44c1ad60a1" - integrity sha512-/qgOkXKZ7YbeCYbawJ9uQQ3XJ3uBg9VDpvHjabCAPp6aRMhjLaFAxG90+1TxzrhKaj6AYpVGrx6UXQfQA41UEA== - -ignore-walk@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" - integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== - dependencies: - minimatch "^5.0.1" - -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -immer@^9.0.7: - version "9.0.15" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.15.tgz#0b9169e5b1d22137aba7d43f8a81a495dd1b62dc" - integrity sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ== - -import-fresh@^3.2.1, import-fresh@^3.3.0: - 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-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" - integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== - -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.3: - 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.4, 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== - -ini@^3.0.0, ini@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.1.tgz#c76ec81007875bc44d544ff7a11a55d12294102d" - integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== - -init-package-json@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" - integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== - dependencies: - npm-package-arg "^9.0.1" - promzard "^0.3.0" - read "^1.0.7" - read-package-json "^5.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" - -interpret@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" - integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== - -into-stream@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702" - integrity sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA== - dependencies: - from2 "^2.3.0" - p-is-promise "^3.0.0" - -ip-regex@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" - integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -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.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== - -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-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-cidr@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" - integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== - dependencies: - cidr-regex "^3.1.1" - -is-core-module@^2.5.0, is-core-module@^2.8.1: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - -is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== - dependencies: - has "^1.0.3" - -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-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@^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-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-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-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-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -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@^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.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-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-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== - dependencies: - text-extensions "^1.0.0" - -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@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -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@^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== - -issue-parser@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-6.0.0.tgz#b1edd06315d4f2044a9755daf85fdafde9b4014a" - integrity sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA== - dependencies: - lodash.capitalize "^4.2.1" - lodash.escaperegexp "^4.1.2" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.uniqby "^4.7.0" - -java-properties@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" - integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-validate@^29.4.3: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.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" - -jiti@^1.17.1: - version "1.20.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.20.0.tgz#2d823b5852ee8963585c8dd8b7992ffc1ae83b42" - integrity sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA== - -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" - -json-parse-better-errors@^1.0.1: - 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, json-parse-even-better-errors@^2.3.1: - 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-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -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" - -jsonparse@^1.2.0, jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -just-diff-apply@^5.2.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" - integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== - -just-diff@^5.0.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.2.0.tgz#60dca55891cf24cd4a094e33504660692348a241" - integrity sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw== - -keyvaluestorage-interface@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" - integrity sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g== - -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== - -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== - -libnpmaccess@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.4.tgz#2dd158bd8a071817e2207d3b201d37cf1ad6ae6b" - integrity sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag== - dependencies: - aproba "^2.0.0" - minipass "^3.1.1" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" - -libnpmdiff@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-4.0.5.tgz#ffaf93fa9440ea759444b8830fdb5c661b09a7c0" - integrity sha512-9fICQIzmH892UwHHPmb+Seup50UIBWcMIK2FdxvlXm9b4kc1nSH0b/BuY1mORJQtB6ydPMnn+BLzOTmd/SKJmw== - dependencies: - "@npmcli/disparity-colors" "^2.0.0" - "@npmcli/installed-package-contents" "^1.0.7" - binary-extensions "^2.2.0" - diff "^5.1.0" - minimatch "^5.0.1" - npm-package-arg "^9.0.1" - pacote "^13.6.1" - tar "^6.1.0" - -libnpmexec@^4.0.14: - version "4.0.14" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-4.0.14.tgz#9ad44232434b374e477eb2c2e4548baaf698f773" - integrity sha512-dwmzv2K29SdoAHBOa7QR6CfQbFG/PiZDRF6HZrlI6C4DLt2hNgOHTFaUGOpqE2C+YGu0ZwYTDywxRe0eOnf0ZA== - dependencies: - "@npmcli/arborist" "^5.6.3" - "@npmcli/ci-detect" "^2.0.0" - "@npmcli/fs" "^2.1.1" - "@npmcli/run-script" "^4.2.0" - chalk "^4.1.0" - mkdirp-infer-owner "^2.0.0" - npm-package-arg "^9.0.1" - npmlog "^6.0.2" - pacote "^13.6.1" - proc-log "^2.0.0" - read "^1.0.7" - read-package-json-fast "^2.0.2" - semver "^7.3.7" - walk-up-path "^1.0.0" - -libnpmfund@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-3.0.5.tgz#817f9e2120889beb483d9ba8eda142bb84293e4e" - integrity sha512-KdeRoG/dem8H3PcEU2/0SKi3ip7AWwczgS72y/3PE+PBrz/s/G52FNIA9jeLnBirkLC0sOyQHfeM3b7e24ZM+g== - dependencies: - "@npmcli/arborist" "^5.6.3" - -libnpmhook@^8.0.4: - version "8.0.4" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-8.0.4.tgz#6c58e5fe763ff5d600ae9c20457ea9a69d1f7d87" - integrity sha512-nuD6e+Nx0OprjEi0wOeqASMl6QIH235th/Du2/8upK3evByFhzIgdfOeP1OhstavW4xtsl0hk5Vw4fAWWuSUgA== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^13.0.0" - -libnpmorg@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-4.0.4.tgz#2a01d49372cf0df90d79a61e69bddaf2ed704311" - integrity sha512-1bTpD7iub1rDCsgiBguhJhiDufLQuc8DEti20euqsXz9O0ncXVpCYqf2SMmHR4GEdmAvAj2r7FMiyA9zGdaTpA== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^13.0.0" - -libnpmpack@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-4.1.3.tgz#025cfe39829acd8260662bf259e3a9331fc1e4b2" - integrity sha512-rYP4X++ME3ZiFO+2iN3YnXJ4LB4Gsd0z5cgszWJZxaEpDN4lRIXirSyynGNsN/hn4taqnlxD+3DPlFDShvRM8w== - dependencies: - "@npmcli/run-script" "^4.1.3" - npm-package-arg "^9.0.1" - pacote "^13.6.1" - -libnpmpublish@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.5.tgz#5a894f3de2e267d62f86be2a508e362599b5a4b1" - integrity sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg== - dependencies: - normalize-package-data "^4.0.0" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" - semver "^7.3.7" - ssri "^9.0.0" - -libnpmsearch@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-5.0.4.tgz#b32aa2b23051c00cdcc0912274d0d416e6655d81" - integrity sha512-XHDmsvpN5+pufvGnfLRqpy218gcGGbbbXR6wPrDJyd1em6agKdYByzU5ccskDHH9iVm2UeLydpDsW1ksYuU0cg== - dependencies: - npm-registry-fetch "^13.0.0" - -libnpmteam@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-4.0.4.tgz#ac26068808d93b1051d926457db14e4b3ff669ef" - integrity sha512-rzKSwi6MLzwwevbM/vl+BBQTErgn24tCfgPUdzBlszrw3j5necOu7WnTzgvZMDv6maGUwec6Ut1rxszOgH0l+Q== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^13.0.0" - -libnpmversion@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-3.0.7.tgz#e4c6c07ee28cf351ce1e2293a5ac9922b09ea94d" - integrity sha512-O0L4eNMUIMQ+effi1HsZPKp2N6wecwqGqB8PvkvmLPWN7EsdabdzAVG48nv0p/OjlbIai5KQg/L+qMMfCA4ZjA== - dependencies: - "@npmcli/git" "^3.0.0" - "@npmcli/run-script" "^4.1.3" - json-parse-even-better-errors "^2.3.1" - proc-log "^2.0.0" - semver "^7.3.7" - -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== - -lit-element@^3.3.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-3.3.3.tgz#10bc19702b96ef5416cf7a70177255bfb17b3209" - integrity sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA== - dependencies: - "@lit-labs/ssr-dom-shim" "^1.1.0" - "@lit/reactive-element" "^1.3.0" - lit-html "^2.8.0" - -lit-html@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-2.8.0.tgz#96456a4bb4ee717b9a7d2f94562a16509d39bffa" - integrity sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q== - dependencies: - "@types/trusted-types" "^2.0.2" - -lit@2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/lit/-/lit-2.8.0.tgz#4d838ae03059bf9cafa06e5c61d8acc0081e974e" - integrity sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA== - dependencies: - "@lit/reactive-element" "^1.6.0" - lit-element "^3.3.0" - lit-html "^2.8.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.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== - -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@^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" - -lodash.capitalize@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" - integrity sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw== - -lodash.escaperegexp@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" - integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== - -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.isequal@4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== - -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.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== - -lodash.uniqby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" - integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== - -lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -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" - -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" - -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.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: - version "7.14.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea" - integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA== - -make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6, make-fetch-happen@^10.2.0: - 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-plural@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-7.1.0.tgz#8a0381ff8c9be4f074e0acdc42ec97639c2344f9" - integrity sha512-PKkwVlAxYVo98NrbclaQIT4F5Oy+X58PZM5r2IwUSCe3syya6PXkIRCn2XCdz7p58Scgpp50PBeHmepXVDG3hg== - -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== - -marked-terminal@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.1.1.tgz#d2edc2991841d893ee943b44b40b2ee9518b4d9f" - integrity sha512-+cKTOx9P4l7HwINYhzbrBSyzgxO2HaHKGZGuB1orZsMIgXYaJyfidT81VXRdpelW/PcHEWxywscePVgI/oUF6g== - dependencies: - ansi-escapes "^5.0.0" - cardinal "^2.1.1" - chalk "^5.0.0" - cli-table3 "^0.6.1" - node-emoji "^1.11.0" - supports-hyperlinks "^2.2.0" - -marked@^4.0.10: - version "4.2.12" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.12.tgz#d69a64e21d71b06250da995dcd065c11083bebb5" - integrity sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw== - -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== - -memfs@^3.4.3: - version "3.4.7" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.7.tgz#e5252ad2242a724f938cb937e3c4f7ceb1f70e5a" - integrity sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw== - dependencies: - fs-monkey "^1.0.3" - -"memoize-one@>=3.1.1 <6": - 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@^8.0.0: - version "8.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - 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-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.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== - -micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.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.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== - -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - -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== - -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== - -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@^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, minimatch@^5.1.0: - 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" - -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.0, minimist@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -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@^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-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== - dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" - -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.1, 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@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.0.1.tgz#2b9408c6e81bb8b338d600fb3685e375a370a057" - integrity sha512-V9esFpNbK0arbN3fm2sxDKqMYgIp7XtVdE4Esj+PE4Qaaxdg1wIw48ITQIOn1sc8xXSmUviVL3cyjMqPlrVkiA== - -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" - -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== - dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" - -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== - -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -moo@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" - integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== - -motion@10.16.2: - version "10.16.2" - resolved "https://registry.yarnpkg.com/motion/-/motion-10.16.2.tgz#7dc173c6ad62210a7e9916caeeaf22c51e598d21" - integrity sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ== - dependencies: - "@motionone/animation" "^10.15.1" - "@motionone/dom" "^10.16.2" - "@motionone/svelte" "^10.16.2" - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - "@motionone/vue" "^10.16.2" - -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.2: - 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" - -multiformats@^9.4.2: - version "9.9.0" - resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" - integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== - -mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -negotiator@0.6.3, 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.0, 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== - -nerf-dart@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/nerf-dart/-/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" - integrity sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g== - -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-emoji@^1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" - integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== - dependencies: - lodash "^4.17.21" - -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.7: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== - 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@^9.0.0, node-gyp@^9.1.0: - version "9.3.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4" - integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^10.0.3" - nopt "^6.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== - -nopt@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" - integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== - dependencies: - abbrev "^1.0.0" - -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-package-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz#b46b24e0616d06cadf9d5718b29b6d445a82a62c" - integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== - dependencies: - hosted-git-info "^5.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -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-url@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-audit-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-3.0.0.tgz#1bf3e531208b5f77347c8d00c3d9badf5be30cd6" - integrity sha512-tWQzfbwz1sc4244Bx2BVELw0EmZlCsCF0X93RDcmmwhonCsPMoEviYsi+32R+mdRvOWXolPce9zo64n2xgPESw== - dependencies: - chalk "^4.0.0" - -npm-bundled@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" - integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-bundled@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-2.0.1.tgz#94113f7eb342cd7a67de1e789f896b04d2c600f4" - integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== - dependencies: - npm-normalize-package-bin "^2.0.0" - -npm-install-checks@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" - integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-normalize-package-bin@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" - integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== - -npm-package-arg@^9.0.0, npm-package-arg@^9.0.1, npm-package-arg@^9.1.0: - version "9.1.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz#fc8acecb00235f42270dda446f36926ddd9ac2bc" - integrity sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg== - dependencies: - hosted-git-info "^5.0.0" - proc-log "^2.0.1" - semver "^7.3.5" - validate-npm-package-name "^4.0.0" - -npm-packlist@^5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" - integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== - dependencies: - glob "^8.0.1" - ignore-walk "^5.0.1" - npm-bundled "^2.0.0" - npm-normalize-package-bin "^2.0.0" - -npm-pick-manifest@^7.0.0, npm-pick-manifest@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz#1d372b4e7ea7c6712316c0e99388a73ed3496e84" - integrity sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw== - dependencies: - npm-install-checks "^5.0.0" - npm-normalize-package-bin "^2.0.0" - npm-package-arg "^9.0.0" - semver "^7.3.5" - -npm-profile@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-6.2.1.tgz#975c31ec75a6ae029ab5b8820ffdcbae3a1e3d5e" - integrity sha512-Tlu13duByHyDd4Xy0PgroxzxnBYWbGGL5aZifNp8cx2DxUrHSoETXtPKg38aRPsBWMRfDtvcvVfJNasj7oImQQ== - dependencies: - npm-registry-fetch "^13.0.1" - proc-log "^2.0.0" - -npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.1: - version "13.3.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e" - integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== - dependencies: - make-fetch-happen "^10.0.6" - minipass "^3.1.6" - minipass-fetch "^2.0.3" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^9.0.1" - proc-log "^2.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" - -npm-user-validate@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" - integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== - -npm@^8.3.0: - version "8.19.3" - resolved "https://registry.yarnpkg.com/npm/-/npm-8.19.3.tgz#adb51bf8886d519dd4df162726d0ad157ecfa272" - integrity sha512-0QjmyPtDxSyMWWD8I91QGbrgx9KzbV6C9FK1liEb/K0zppiZkr5KxXc990G+LzPwBHDfRjUBlO9T1qZ08vl9mA== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^5.6.3" - "@npmcli/ci-detect" "^2.0.0" - "@npmcli/config" "^4.2.1" - "@npmcli/fs" "^2.1.0" - "@npmcli/map-workspaces" "^2.0.3" - "@npmcli/package-json" "^2.0.0" - "@npmcli/run-script" "^4.2.1" - abbrev "~1.1.1" - archy "~1.0.0" - cacache "^16.1.3" - chalk "^4.1.2" - chownr "^2.0.0" - cli-columns "^4.0.0" - cli-table3 "^0.6.2" - columnify "^1.6.0" - fastest-levenshtein "^1.0.12" - fs-minipass "^2.1.0" - glob "^8.0.1" - graceful-fs "^4.2.10" - hosted-git-info "^5.2.1" - ini "^3.0.1" - init-package-json "^3.0.2" - is-cidr "^4.0.2" - json-parse-even-better-errors "^2.3.1" - libnpmaccess "^6.0.4" - libnpmdiff "^4.0.5" - libnpmexec "^4.0.14" - libnpmfund "^3.0.5" - libnpmhook "^8.0.4" - libnpmorg "^4.0.4" - libnpmpack "^4.1.3" - libnpmpublish "^6.0.5" - libnpmsearch "^5.0.4" - libnpmteam "^4.0.4" - libnpmversion "^3.0.7" - make-fetch-happen "^10.2.0" - minimatch "^5.1.0" - minipass "^3.1.6" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - ms "^2.1.2" - node-gyp "^9.1.0" - nopt "^6.0.0" - npm-audit-report "^3.0.0" - npm-install-checks "^5.0.0" - npm-package-arg "^9.1.0" - npm-pick-manifest "^7.0.2" - npm-profile "^6.2.0" - npm-registry-fetch "^13.3.1" - npm-user-validate "^1.0.1" - npmlog "^6.0.2" - opener "^1.5.2" - p-map "^4.0.0" - pacote "^13.6.2" - parse-conflict-json "^2.0.2" - proc-log "^2.0.1" - qrcode-terminal "^0.12.0" - read "~1.0.7" - read-package-json "^5.0.2" - read-package-json-fast "^2.0.3" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.7" - ssri "^9.0.1" - tar "^6.1.11" - text-table "~0.2.0" - tiny-relative-date "^1.3.0" - treeverse "^2.0.0" - validate-npm-package-name "^4.0.0" - which "^2.0.2" - write-file-atomic "^4.0.1" - -npmlog@^6.0.0, npmlog@^6.0.2: - 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@^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" - -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-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -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== - -on-exit-leak-free@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" - integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== - -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.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.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@^8.0.9: - version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -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-filter@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" - integrity sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw== - dependencies: - p-map "^2.0.0" - -p-is-promise@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" - integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== - -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.2.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-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@^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-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -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-reduce@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" - integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== - -p-retry@^4.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-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== - -pacote@^13.0.3, pacote@^13.6.1, pacote@^13.6.2: - version "13.6.2" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a" - integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== - dependencies: - "@npmcli/git" "^3.0.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/promise-spawn" "^3.0.0" - "@npmcli/run-script" "^4.1.0" - cacache "^16.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.6" - mkdirp "^1.0.4" - npm-package-arg "^9.0.0" - npm-packlist "^5.1.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.1" - proc-log "^2.0.0" - promise-retry "^2.0.1" - read-package-json "^5.0.0" - read-package-json-fast "^2.0.3" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - -param-case@^3.0.4: - 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-conflict-json@^2.0.1, parse-conflict-json@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" - integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== - dependencies: - json-parse-even-better-errors "^2.3.1" - just-diff "^5.0.1" - just-diff-apply "^5.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, parse-json@^5.2.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" - -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" - -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@^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-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== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pino-abstract-transport@v0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz#4b54348d8f73713bfd14e3dc44228739aa13d9c0" - integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== - dependencies: - duplexify "^4.1.2" - split2 "^4.0.0" - -pino-std-serializers@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1791ccd2539c091ae49ce9993205e2cd5dbba1e2" - integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== - -pino@7.11.0: - version "7.11.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-7.11.0.tgz#0f0ea5c4683dc91388081d44bff10c83125066f6" - integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== - dependencies: - atomic-sleep "^1.0.0" - fast-redact "^3.0.0" - on-exit-leak-free "^0.2.0" - pino-abstract-transport v0.5.0 - pino-std-serializers "^4.0.0" - process-warning "^1.0.0" - quick-format-unescaped "^4.0.3" - real-require "^0.1.0" - safe-stable-stringify "^2.1.0" - sonic-boom "^2.2.1" - thread-stream "^0.15.1" - -pkg-conf@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" - integrity sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g== - dependencies: - find-up "^2.0.0" - load-json-file "^4.0.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" - -pngjs@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" - integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== - -postcss-selector-parser@^6.0.10: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" - integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - -pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -proc-log@^2.0.0, proc-log@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" - integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== - -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-warning@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" - integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== - -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" - integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== - -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" - -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== - dependencies: - read "1" - -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" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -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-compare@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.5.1.tgz#17818e33d1653fbac8c2ec31406bce8a2966f600" - integrity sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA== - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - -qrcode-terminal@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" - integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== - -qrcode@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.3.tgz#03afa80912c0dccf12bc93f615a535aad1066170" - integrity sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg== - dependencies: - dijkstrajs "^1.0.1" - encode-utf8 "^1.0.3" - pngjs "^5.0.0" - yargs "^15.3.1" - -qs@6.10.3: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== - dependencies: - side-channel "^1.0.4" - -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" - -query-string@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" - integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg== - dependencies: - decode-uri-component "^0.2.2" - filter-obj "^1.1.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - -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-format-unescaped@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" - integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== - -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== - -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" - -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.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.2.8: - 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-is@^16.13.1, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^18.0.0, react-is@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -react-transition-state@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/react-transition-state/-/react-transition-state-2.1.1.tgz#1601a6177926b647041b7d598bf124321ab8d25b" - integrity sha512-kQx5g1FVu9knoz1T1WkapjUgFz08qQ/g1OmuWGi3/AoEFfS0kStxrPlZx81urjCXdz2d+1DqLpU6TyLW/Ro04Q== - -react-window@^1.8.8: - version "1.8.9" - resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.9.tgz#24bc346be73d0468cdf91998aac94e32bc7fa6a8" - integrity sha512-+Eqx/fj1Aa5WnhRfj9dJg4VYATGwIUP2ItwItiJ6zboKWA6EX3lYDAXfGF2hyNqplEprhbtjbipiADEcwQ823Q== - dependencies: - "@babel/runtime" "^7.0.0" - memoize-one ">=3.1.1 <6" - -read-cmd-shim@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" - integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== - -read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" - -read-package-json@^5.0.0, read-package-json@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.2.tgz#b8779ccfd169f523b67208a89cc912e3f663f3fa" - integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== - dependencies: - glob "^8.0.1" - json-parse-even-better-errors "^2.3.1" - normalize-package-data "^4.0.0" - npm-normalize-package-bin "^2.0.0" - -read-pkg-up@^7.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@^5.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" - -read@1, read@^1.0.7, read@~1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== - dependencies: - mute-stream "~0.0.4" - -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - 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.1.1: - 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" - -readdir-scoped-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - -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" - -real-require@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381" - integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== - -rechoir@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" - integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== - dependencies: - resolve "^1.20.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" - -redux-thunk@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714" - integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== - -redux@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13" - integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA== - dependencies: - "@babel/runtime" "^7.9.2" - -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -registry-auth-token@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.1.tgz#5e6cd106e6c251135a046650c58476fc03e92833" - integrity sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA== - dependencies: - "@pnpm/npm-conf" "^1.0.4" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - -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== - -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.1.5: - version "4.1.6" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.6.tgz#19ca2d3d0b35373a74dc1c98692cdaffb6602656" - integrity sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ== - -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@^1.10.0, resolve@^1.19.0, resolve@^1.20.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -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== - -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" - -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" - -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.1.0, 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-json-utils@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/safe-json-utils/-/safe-json-utils-1.1.1.tgz#0e883874467d95ab914c3f511096b89bfb3e63b1" - integrity sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ== - -safe-stable-stringify@^2.1.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -schema-utils@^3.1.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.8.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" - -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.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== - dependencies: - node-forge "^1" - -semantic-release@^19.0.2: - version "19.0.5" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-19.0.5.tgz#d7fab4b33fc20f1288eafd6c441e5d0938e5e174" - integrity sha512-NMPKdfpXTnPn49FDogMBi36SiBfXkSOJqCkk0E4iWOY1tusvvgBwqUmxTX1kmlT6kIYed9YwNKD1sfPpqa5yaA== - dependencies: - "@semantic-release/commit-analyzer" "^9.0.2" - "@semantic-release/error" "^3.0.0" - "@semantic-release/github" "^8.0.0" - "@semantic-release/npm" "^9.0.0" - "@semantic-release/release-notes-generator" "^10.0.0" - aggregate-error "^3.0.0" - cosmiconfig "^7.0.0" - debug "^4.0.0" - env-ci "^5.0.0" - execa "^5.0.0" - figures "^3.0.0" - find-versions "^4.0.0" - get-stream "^6.0.0" - git-log-parser "^1.2.0" - hook-std "^2.0.0" - hosted-git-info "^4.0.0" - lodash "^4.17.21" - marked "^4.0.10" - marked-terminal "^5.0.0" - micromatch "^4.0.2" - p-each-series "^2.1.0" - p-reduce "^2.0.0" - read-pkg-up "^7.0.0" - resolve-from "^5.0.0" - semver "^7.3.2" - semver-diff "^3.1.1" - signale "^1.2.1" - yargs "^16.2.0" - -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - -semver-regex@^3.1.2: - version "3.1.4" - resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.4.tgz#13053c0d4aa11d070a2f2872b6b1e3ae1e1971b4" - integrity sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA== - -"semver@2 || 3 || 4 || 5": - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -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" - -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" - -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== - -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== - -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@^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@^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== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -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== - -signale@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" - integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== - dependencies: - chalk "^2.3.2" - figures "^2.0.0" - pkg-conf "^2.1.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -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== - -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@^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.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -sonic-boom@^2.2.1: - version "2.8.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" - integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== - dependencies: - atomic-sleep "^1.0.0" - -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@^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: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spawn-error-forwarder@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" - integrity sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -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.12" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== - -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-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== - -split2@^3.0.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split2@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -split2@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" - integrity sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg== - dependencies: - through2 "~2.0.0" - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -ssri@^9.0.0, ssri@^9.0.1: - 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" - -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== - -stream-combiner2@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - integrity sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw== - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== - -"string-width@^1.0.2 || 2 || 3 || 4", 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_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@~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@^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-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@~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== - -stylis@4.0.13: - version "4.0.13" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" - integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== - -supports-color@^5.3.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-color@^8.0.0: - 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-hyperlinks@^2.2.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== - -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@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.1.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" - integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^4.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -tempy@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-1.0.1.tgz#30fe901fd869cfb36ee2bd999805aa72fbb035de" - integrity sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w== - dependencies: - del "^6.0.0" - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" - -terser-webpack-plugin@^5.1.3: - version "5.3.6" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" - integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== - dependencies: - "@jridgewell/trace-mapping" "^0.3.14" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.14.1" - -terser@^5.10.0, terser@^5.14.1: - version "5.15.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.0.tgz#e16967894eeba6e1091509ec83f0c60e179f2425" - integrity sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== - -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== - -thread-stream@^0.15.1: - version "0.15.2" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-0.15.2.tgz#fb95ad87d2f1e28f07116eb23d85aba3bc0425f4" - integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== - dependencies: - real-require "^0.1.0" - -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -through2@~2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@2, "through@>=2.2.7 <3": - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -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-relative-date@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" - integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== - -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-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" - -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== - -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.6.6: - version "0.6.7" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe" - integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg== - -treeverse@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" - integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== - -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== - -tslib@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tslib@^2.3.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -type-fest@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - -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.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-fest@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -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" - -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - -uint8arrays@^3.0.0, uint8arrays@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" - integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== - dependencies: - multiformats "^9.4.2" - -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@^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" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -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== - -unraw@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unraw/-/unraw-3.0.0.tgz#73443ed70d2ab09ccbac2b00525602d5991fbbe3" - integrity sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg== - -update-browserslist-db@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz#2924d3927367a38d5c555413a7ce138fc95fcb18" - integrity sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - 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" - -url-join@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" - integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== - -use-sync-external-store@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - -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== - -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.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - 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" - -validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== - dependencies: - builtins "^5.0.0" - -valtio@1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/valtio/-/valtio-1.11.2.tgz#b8049c02dfe65620635d23ebae9121a741bb6530" - integrity sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw== - dependencies: - proxy-compare "2.5.1" - use-sync-external-store "1.2.0" - -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== - -walk-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" - integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== - -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - 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.0: - 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== - -webpack-cli@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.0.1.tgz#95fc0495ac4065e9423a722dec9175560b6f2d9a" - integrity sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^2.0.1" - "@webpack-cli/info" "^2.0.1" - "@webpack-cli/serve" "^2.0.1" - colorette "^2.0.14" - commander "^9.4.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" - -webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== - 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.11.0: - version "4.11.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.11.0.tgz#290ee594765cd8260adfe83b2d18115ea04484e7" - integrity sha512-L5S4Q2zT57SK7tazgzjMiSMBdsw+rGYIX27MgPgx7LDhWO0lViPrHKoLS7jo5In06PWYAhlYu3PbyoC6yAThbw== - 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" - -webpack-merge@^5.7.3: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.74.0: - version "5.74.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.74.0.tgz#02a5dac19a17e0bb47093f2be67c695102a55980" - integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.1.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -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-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" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== - -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" - -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -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@^4.0.0, write-file-atomic@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -ws@^7.5.1: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^8.4.2: - version "8.8.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" - integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== - -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@^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@^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@^15.3.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@^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" - -zustand@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.0.tgz#13b3e8ca959dd53d536034440aec382ff91b65c3" - integrity sha512-2dq6wq4dSxbiPTamGar0NlIG/av0wpyWZJGeQYtUOLegIUvhM2Bf86ekPlmgpUtS5uR7HyetSiktYrGsdsyZgQ== - dependencies: - use-sync-external-store "1.2.0" - -zustand@^4.3.5: - version "4.4.1" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.1.tgz#0cd3a3e4756f21811bd956418fdc686877e8b3b0" - integrity sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw== - dependencies: - use-sync-external-store "1.2.0" diff --git a/example/react-app/.gitignore b/example/react-app/.gitignore deleted file mode 100644 index 33071c6b..00000000 --- a/example/react-app/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build - -# misc -.DS_Store - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/example/react-app/README.md b/example/react-app/README.md deleted file mode 100644 index 3cfa45b8..00000000 --- a/example/react-app/README.md +++ /dev/null @@ -1,80 +0,0 @@ -# React App Example - -

- - DODO - -

- -

-npm version -

- -To demonstrate how to use the [@dodoex/widgets](https://github.com/DODOEX/widgets) package in your react projects, a [Create React App](https://create-react-app.dev/) project has been created by [`create-react-app`](https://create-react-app.dev/docs/getting-started). - -## dodoex-widgets - -To start the demo: - -```bash -yarn # install dependencies -yarn start # run the development server -# or -npm # install dependencies -npm run start # run the development server -``` - -Navigate to [http://localhost:3000](http://localhost:3000) to see the widget. - ---- - -Supported [API](https://docs.dodoex.io/english/developers/swap-widget/api) from the `SwapWidget`: - -- `provider`: EIP-1193 provider -- `jsonRpcUrlMap`: Specify nodes of different chains -- `defaultChainId`: Default Chain ID - -- `tokenList`: a TokenList; in this case [Token List Example](https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json) -- `popularTokenList`: Selectable List of Popular Tokens - -- `onTxFail`: Triggered if transaction fails -- `onTxSubmit`: Triggered after transaction is submitted -- `onTxSuccess`: Triggered if transaction executes successfully -- `onTxReverted`: Triggered if transaction executes reverted - -- `theme`: Can override theme, text, and style. Refer to the Instructions page for more information. -- `colorMode`: Light or dark mode -- `apikey`: Passed onto the apikey provided by DODO -- `width`: Widget width -- `height`: Widget height -- `feeRate`: Transaction fee rate. Unit: 1e18 -- `rebateTo`: Profit sharing address -- `defaultFromToken`: Default Origin Token -- `defaultToToken`: Default Destination Token -- `crossChain`: Enable cross-chain -- `swapSlippage`: Default swap slippage -- `bridgeSlippage`: Default cross-chain slippage -- `apiServices`: Custom api service - -For all available props (including theming), please refer to the up-to-date [documentation](https://docs.dodoex.io/english/developers/swap-widget). - -### Known issues with Create React App - -- If your react version is >=18.0.0, please make sure your react-redux is updated to >=8.0.0 - -### Additional documentation - -- [DODO App](https://app.dodoex.io/) - Trade tokens, deposit tokens in liquidity pools, & create Crowdpooling campaigns with DODO! Decentralized exchange with market-leading liquidity. - -- [About DODO](https://docs.dodoex.io/english/) - An Innovative Algorithm-Driven and Decentralized Trading Platform. - -- [Swap Widget Docs](https://docs.dodoex.io/english/)-to be continue - Explore the Swap Widget's features and API. - -- [Discord](https://discord.com/invite/tyKReUK) - Hop into #widgets for help. - -- [GitHub](https://github.com/DODOEX/widgets) - View the Swap Widget's source. diff --git a/example/react-app/package.json b/example/react-app/package.json deleted file mode 100644 index 3daf5b7b..00000000 --- a/example/react-app/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "react-app", - "version": "0.1.0", - "private": true, - "dependencies": { - "@dodoex/widgets": "^2.6.4", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", - "@types/jest": "^27.5.2", - "@types/node": "^16.11.57", - "@types/react": "^18.0.18", - "@types/react-dom": "^18.0.6", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-redux": "^8.0.2", - "react-scripts": "5.0.1", - "typescript": "^5.6.3", - "web-vitals": "^2.1.4" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - } -} \ No newline at end of file diff --git a/example/react-app/public/favicon.ico b/example/react-app/public/favicon.ico deleted file mode 100644 index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 zcma);c{J4h9>;%nil|2-o+rCuEF-(I%-F}ijC~o(k~HKAkr0)!FCj~d>`RtpD?8b; zXOC1OD!V*IsqUwzbMF1)-gEDD=A573Z-&G7^LoAC9|WO7Xc0Cx1g^Zu0u_SjAPB3vGa^W|sj)80f#V0@M_CAZTIO(t--xg= z!sii`1giyH7EKL_+Wi0ab<)&E_0KD!3Rp2^HNB*K2@PHCs4PWSA32*-^7d{9nH2_E zmC{C*N*)(vEF1_aMamw2A{ZH5aIDqiabnFdJ|y0%aS|64E$`s2ccV~3lR!u<){eS` z#^Mx6o(iP1Ix%4dv`t@!&Za-K@mTm#vadc{0aWDV*_%EiGK7qMC_(`exc>-$Gb9~W!w_^{*pYRm~G zBN{nA;cm^w$VWg1O^^<6vY`1XCD|s_zv*g*5&V#wv&s#h$xlUilPe4U@I&UXZbL z0)%9Uj&@yd03n;!7do+bfixH^FeZ-Ema}s;DQX2gY+7g0s(9;`8GyvPY1*vxiF&|w z>!vA~GA<~JUqH}d;DfBSi^IT*#lrzXl$fNpq0_T1tA+`A$1?(gLb?e#0>UELvljtQ zK+*74m0jn&)5yk8mLBv;=@}c{t0ztT<v;Avck$S6D`Z)^c0(jiwKhQsn|LDRY&w(Fmi91I7H6S;b0XM{e zXp0~(T@k_r-!jkLwd1_Vre^v$G4|kh4}=Gi?$AaJ)3I+^m|Zyj#*?Kp@w(lQdJZf4 z#|IJW5z+S^e9@(6hW6N~{pj8|NO*>1)E=%?nNUAkmv~OY&ZV;m-%?pQ_11)hAr0oAwILrlsGawpxx4D43J&K=n+p3WLnlDsQ$b(9+4 z?mO^hmV^F8MV{4Lx>(Q=aHhQ1){0d*(e&s%G=i5rq3;t{JC zmgbn5Nkl)t@fPH$v;af26lyhH!k+#}_&aBK4baYPbZy$5aFx4}ka&qxl z$=Rh$W;U)>-=S-0=?7FH9dUAd2(q#4TCAHky!$^~;Dz^j|8_wuKc*YzfdAht@Q&ror?91Dm!N03=4=O!a)I*0q~p0g$Fm$pmr$ zb;wD;STDIi$@M%y1>p&_>%?UP($15gou_ue1u0!4(%81;qcIW8NyxFEvXpiJ|H4wz z*mFT(qVx1FKufG11hByuX%lPk4t#WZ{>8ka2efjY`~;AL6vWyQKpJun2nRiZYDij$ zP>4jQXPaP$UC$yIVgGa)jDV;F0l^n(V=HMRB5)20V7&r$jmk{UUIe zVjKroK}JAbD>B`2cwNQ&GDLx8{pg`7hbA~grk|W6LgiZ`8y`{Iq0i>t!3p2}MS6S+ zO_ruKyAElt)rdS>CtF7j{&6rP-#c=7evGMt7B6`7HG|-(WL`bDUAjyn+k$mx$CH;q2Dz4x;cPP$hW=`pFfLO)!jaCL@V2+F)So3}vg|%O*^T1j>C2lx zsURO-zIJC$^$g2byVbRIo^w>UxK}74^TqUiRR#7s_X$e)$6iYG1(PcW7un-va-S&u zHk9-6Zn&>T==A)lM^D~bk{&rFzCi35>UR!ZjQkdSiNX*-;l4z9j*7|q`TBl~Au`5& z+c)*8?#-tgUR$Zd%Q3bs96w6k7q@#tUn`5rj+r@_sAVVLqco|6O{ILX&U-&-cbVa3 zY?ngHR@%l{;`ri%H*0EhBWrGjv!LE4db?HEWb5mu*t@{kv|XwK8?npOshmzf=vZA@ zVSN9sL~!sn?r(AK)Q7Jk2(|M67Uy3I{eRy z_l&Y@A>;vjkWN5I2xvFFTLX0i+`{qz7C_@bo`ZUzDugfq4+>a3?1v%)O+YTd6@Ul7 zAfLfm=nhZ`)P~&v90$&UcF+yXm9sq!qCx3^9gzIcO|Y(js^Fj)Rvq>nQAHI92ap=P z10A4@prk+AGWCb`2)dQYFuR$|H6iDE8p}9a?#nV2}LBCoCf(Xi2@szia7#gY>b|l!-U`c}@ zLdhvQjc!BdLJvYvzzzngnw51yRYCqh4}$oRCy-z|v3Hc*d|?^Wj=l~18*E~*cR_kU z{XsxM1i{V*4GujHQ3DBpl2w4FgFR48Nma@HPgnyKoIEY-MqmMeY=I<%oG~l!f<+FN z1ZY^;10j4M4#HYXP zw5eJpA_y(>uLQ~OucgxDLuf}fVs272FaMxhn4xnDGIyLXnw>Xsd^J8XhcWIwIoQ9} z%FoSJTAGW(SRGwJwb=@pY7r$uQRK3Zd~XbxU)ts!4XsJrCycrWSI?e!IqwqIR8+Jh zlRjZ`UO1I!BtJR_2~7AbkbSm%XQqxEPkz6BTGWx8e}nQ=w7bZ|eVP4?*Tb!$(R)iC z9)&%bS*u(lXqzitAN)Oo=&Ytn>%Hzjc<5liuPi>zC_nw;Z0AE3Y$Jao_Q90R-gl~5 z_xAb2J%eArrC1CN4G$}-zVvCqF1;H;abAu6G*+PDHSYFx@Tdbfox*uEd3}BUyYY-l zTfEsOqsi#f9^FoLO;ChK<554qkri&Av~SIM*{fEYRE?vH7pTAOmu2pz3X?Wn*!ROX ztd54huAk&mFBemMooL33RV-*1f0Q3_(7hl$<#*|WF9P!;r;4_+X~k~uKEqdzZ$5Al zV63XN@)j$FN#cCD;ek1R#l zv%pGrhB~KWgoCj%GT?%{@@o(AJGt*PG#l3i>lhmb_twKH^EYvacVY-6bsCl5*^~L0 zonm@lk2UvvTKr2RS%}T>^~EYqdL1q4nD%0n&Xqr^cK^`J5W;lRRB^R-O8b&HENO||mo0xaD+S=I8RTlIfVgqN@SXDr2&-)we--K7w= zJVU8?Z+7k9dy;s;^gDkQa`0nz6N{T?(A&Iz)2!DEecLyRa&FI!id#5Z7B*O2=PsR0 zEvc|8{NS^)!d)MDX(97Xw}m&kEO@5jqRaDZ!+%`wYOI<23q|&js`&o4xvjP7D_xv@ z5hEwpsp{HezI9!~6O{~)lLR@oF7?J7i>1|5a~UuoN=q&6N}EJPV_GD`&M*v8Y`^2j zKII*d_@Fi$+i*YEW+Hbzn{iQk~yP z>7N{S4)r*!NwQ`(qcN#8SRQsNK6>{)X12nbF`*7#ecO7I)Q$uZsV+xS4E7aUn+U(K baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/example/react-app/public/index.html b/example/react-app/public/index.html deleted file mode 100644 index aa069f27..00000000 --- a/example/react-app/public/index.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - React App - - - -

- - - diff --git a/example/react-app/public/logo192.png b/example/react-app/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 zcmZWtbyO6NvR-oO24RV%BvuJ&=?+<7=`LvyB&A_#M7mSDYw1v6DJkiYl9XjT!%$dLEBTQ8R9|wd3008in6lFF3GV-6mLi?MoP_y~}QUnaDCHI#t z7w^m$@6DI)|C8_jrT?q=f8D?0AM?L)Z}xAo^e^W>t$*Y0KlT5=@bBjT9kxb%-KNdk zeOS1tKO#ChhG7%{ApNBzE2ZVNcxbrin#E1TiAw#BlUhXllzhN$qWez5l;h+t^q#Eav8PhR2|T}y5kkflaK`ba-eoE+Z2q@o6P$)=&` z+(8}+-McnNO>e#$Rr{32ngsZIAX>GH??tqgwUuUz6kjns|LjsB37zUEWd|(&O!)DY zQLrq%Y>)Y8G`yYbYCx&aVHi@-vZ3|ebG!f$sTQqMgi0hWRJ^Wc+Ibv!udh_r%2|U) zPi|E^PK?UE!>_4`f`1k4hqqj_$+d!EB_#IYt;f9)fBOumGNyglU(ofY`yHq4Y?B%- zp&G!MRY<~ajTgIHErMe(Z8JG*;D-PJhd@RX@QatggM7+G(Lz8eZ;73)72Hfx5KDOE zkT(m}i2;@X2AT5fW?qVp?@WgN$aT+f_6eo?IsLh;jscNRp|8H}Z9p_UBO^SJXpZew zEK8fz|0Th%(Wr|KZBGTM4yxkA5CFdAj8=QSrT$fKW#tweUFqr0TZ9D~a5lF{)%-tTGMK^2tz(y2v$i%V8XAxIywrZCp=)83p(zIk6@S5AWl|Oa2hF`~~^W zI;KeOSkw1O#TiQ8;U7OPXjZM|KrnN}9arP)m0v$c|L)lF`j_rpG(zW1Qjv$=^|p*f z>)Na{D&>n`jOWMwB^TM}slgTEcjxTlUby89j1)|6ydRfWERn3|7Zd2&e7?!K&5G$x z`5U3uFtn4~SZq|LjFVrz$3iln-+ucY4q$BC{CSm7Xe5c1J<=%Oagztj{ifpaZk_bQ z9Sb-LaQMKp-qJA*bP6DzgE3`}*i1o3GKmo2pn@dj0;He}F=BgINo};6gQF8!n0ULZ zL>kC0nPSFzlcB7p41doao2F7%6IUTi_+!L`MM4o*#Y#0v~WiO8uSeAUNp=vA2KaR&=jNR2iVwG>7t%sG2x_~yXzY)7K& zk3p+O0AFZ1eu^T3s};B%6TpJ6h-Y%B^*zT&SN7C=N;g|#dGIVMSOru3iv^SvO>h4M=t-N1GSLLDqVTcgurco6)3&XpU!FP6Hlrmj}f$ zp95;b)>M~`kxuZF3r~a!rMf4|&1=uMG$;h^g=Kl;H&Np-(pFT9FF@++MMEx3RBsK?AU0fPk-#mdR)Wdkj)`>ZMl#^<80kM87VvsI3r_c@_vX=fdQ`_9-d(xiI z4K;1y1TiPj_RPh*SpDI7U~^QQ?%0&!$Sh#?x_@;ag)P}ZkAik{_WPB4rHyW#%>|Gs zdbhyt=qQPA7`?h2_8T;-E6HI#im9K>au*(j4;kzwMSLgo6u*}-K`$_Gzgu&XE)udQ zmQ72^eZd|vzI)~!20JV-v-T|<4@7ruqrj|o4=JJPlybwMg;M$Ud7>h6g()CT@wXm` zbq=A(t;RJ^{Xxi*Ff~!|3!-l_PS{AyNAU~t{h;(N(PXMEf^R(B+ZVX3 z8y0;0A8hJYp@g+c*`>eTA|3Tgv9U8#BDTO9@a@gVMDxr(fVaEqL1tl?md{v^j8aUv zm&%PX4^|rX|?E4^CkplWWNv*OKM>DxPa z!RJ)U^0-WJMi)Ksc!^ixOtw^egoAZZ2Cg;X7(5xZG7yL_;UJ#yp*ZD-;I^Z9qkP`} zwCTs0*%rIVF1sgLervtnUo&brwz?6?PXRuOCS*JI-WL6GKy7-~yi0giTEMmDs_-UX zo=+nFrW_EfTg>oY72_4Z0*uG>MnXP=c0VpT&*|rvv1iStW;*^={rP1y?Hv+6R6bxFMkxpWkJ>m7Ba{>zc_q zEefC3jsXdyS5??Mz7IET$Kft|EMNJIv7Ny8ZOcKnzf`K5Cd)&`-fTY#W&jnV0l2vt z?Gqhic}l}mCv1yUEy$%DP}4AN;36$=7aNI^*AzV(eYGeJ(Px-j<^gSDp5dBAv2#?; zcMXv#aj>%;MiG^q^$0MSg-(uTl!xm49dH!{X0){Ew7ThWV~Gtj7h%ZD zVN-R-^7Cf0VH!8O)uUHPL2mO2tmE*cecwQv_5CzWeh)ykX8r5Hi`ehYo)d{Jnh&3p z9ndXT$OW51#H5cFKa76c<%nNkP~FU93b5h-|Cb}ScHs@4Q#|}byWg;KDMJ#|l zE=MKD*F@HDBcX@~QJH%56eh~jfPO-uKm}~t7VkHxHT;)4sd+?Wc4* z>CyR*{w@4(gnYRdFq=^(#-ytb^5ESD?x<0Skhb%Pt?npNW1m+Nv`tr9+qN<3H1f<% zZvNEqyK5FgPsQ`QIu9P0x_}wJR~^CotL|n zk?dn;tLRw9jJTur4uWoX6iMm914f0AJfB@C74a;_qRrAP4E7l890P&{v<}>_&GLrW z)klculcg`?zJO~4;BBAa=POU%aN|pmZJn2{hA!d!*lwO%YSIzv8bTJ}=nhC^n}g(ld^rn#kq9Z3)z`k9lvV>y#!F4e{5c$tnr9M{V)0m(Z< z#88vX6-AW7T2UUwW`g<;8I$Jb!R%z@rCcGT)-2k7&x9kZZT66}Ztid~6t0jKb&9mm zpa}LCb`bz`{MzpZR#E*QuBiZXI#<`5qxx=&LMr-UUf~@dRk}YI2hbMsAMWOmDzYtm zjof16D=mc`^B$+_bCG$$@R0t;e?~UkF?7<(vkb70*EQB1rfUWXh$j)R2)+dNAH5%R zEBs^?N;UMdy}V};59Gu#0$q53$}|+q7CIGg_w_WlvE}AdqoS<7DY1LWS9?TrfmcvT zaypmplwn=P4;a8-%l^e?f`OpGb}%(_mFsL&GywhyN(-VROj`4~V~9bGv%UhcA|YW% zs{;nh@aDX11y^HOFXB$a7#Sr3cEtNd4eLm@Y#fc&j)TGvbbMwze zXtekX_wJqxe4NhuW$r}cNy|L{V=t#$%SuWEW)YZTH|!iT79k#?632OFse{+BT_gau zJwQcbH{b}dzKO?^dV&3nTILYlGw{27UJ72ZN){BILd_HV_s$WfI2DC<9LIHFmtyw? zQ;?MuK7g%Ym+4e^W#5}WDLpko%jPOC=aN)3!=8)s#Rnercak&b3ESRX3z{xfKBF8L z5%CGkFmGO@x?_mPGlpEej!3!AMddChabyf~nJNZxx!D&{@xEb!TDyvqSj%Y5@A{}9 zRzoBn0?x}=krh{ok3Nn%e)#~uh;6jpezhA)ySb^b#E>73e*frBFu6IZ^D7Ii&rsiU z%jzygxT-n*joJpY4o&8UXr2s%j^Q{?e-voloX`4DQyEK+DmrZh8A$)iWL#NO9+Y@!sO2f@rI!@jN@>HOA< z?q2l{^%mY*PNx2FoX+A7X3N}(RV$B`g&N=e0uvAvEN1W^{*W?zT1i#fxuw10%~))J zjx#gxoVlXREWZf4hRkgdHx5V_S*;p-y%JtGgQ4}lnA~MBz-AFdxUxU1RIT$`sal|X zPB6sEVRjGbXIP0U+?rT|y5+ev&OMX*5C$n2SBPZr`jqzrmpVrNciR0e*Wm?fK6DY& zl(XQZ60yWXV-|Ps!A{EF;=_z(YAF=T(-MkJXUoX zI{UMQDAV2}Ya?EisdEW;@pE6dt;j0fg5oT2dxCi{wqWJ<)|SR6fxX~5CzblPGr8cb zUBVJ2CQd~3L?7yfTpLNbt)He1D>*KXI^GK%<`bq^cUq$Q@uJifG>p3LU(!H=C)aEL zenk7pVg}0{dKU}&l)Y2Y2eFMdS(JS0}oZUuVaf2+K*YFNGHB`^YGcIpnBlMhO7d4@vV zv(@N}(k#REdul8~fP+^F@ky*wt@~&|(&&meNO>rKDEnB{ykAZ}k>e@lad7to>Ao$B zz<1(L=#J*u4_LB=8w+*{KFK^u00NAmeNN7pr+Pf+N*Zl^dO{LM-hMHyP6N!~`24jd zXYP|Ze;dRXKdF2iJG$U{k=S86l@pytLx}$JFFs8e)*Vi?aVBtGJ3JZUj!~c{(rw5>vuRF$`^p!P8w1B=O!skwkO5yd4_XuG^QVF z`-r5K7(IPSiKQ2|U9+`@Js!g6sfJwAHVd|s?|mnC*q zp|B|z)(8+mxXyxQ{8Pg3F4|tdpgZZSoU4P&9I8)nHo1@)9_9u&NcT^FI)6|hsAZFk zZ+arl&@*>RXBf-OZxhZerOr&dN5LW9@gV=oGFbK*J+m#R-|e6(Loz(;g@T^*oO)0R zN`N=X46b{7yk5FZGr#5&n1!-@j@g02g|X>MOpF3#IjZ_4wg{dX+G9eqS+Es9@6nC7 zD9$NuVJI}6ZlwtUm5cCAiYv0(Yi{%eH+}t)!E^>^KxB5^L~a`4%1~5q6h>d;paC9c zTj0wTCKrhWf+F#5>EgX`sl%POl?oyCq0(w0xoL?L%)|Q7d|Hl92rUYAU#lc**I&^6p=4lNQPa0 znQ|A~i0ip@`B=FW-Q;zh?-wF;Wl5!+q3GXDu-x&}$gUO)NoO7^$BeEIrd~1Dh{Tr` z8s<(Bn@gZ(mkIGnmYh_ehXnq78QL$pNDi)|QcT*|GtS%nz1uKE+E{7jdEBp%h0}%r zD2|KmYGiPa4;md-t_m5YDz#c*oV_FqXd85d@eub?9N61QuYcb3CnVWpM(D-^|CmkL z(F}L&N7qhL2PCq)fRh}XO@U`Yn<?TNGR4L(mF7#4u29{i~@k;pLsgl({YW5`Mo+p=zZn3L*4{JU;++dG9 X@eDJUQo;Ye2mwlRs?y0|+_a0zY+Zo%Dkae}+MySoIppb75o?vUW_?)>@g{U2`ERQIXV zeY$JrWnMZ$QC<=ii4X|@0H8`si75jB(ElJb00HAB%>SlLR{!zO|C9P3zxw_U8?1d8uRZ=({Ga4shyN}3 zAK}WA(ds|``G4jA)9}Bt2Hy0+f3rV1E6b|@?hpGA=PI&r8)ah|)I2s(P5Ic*Ndhn^ z*T&j@gbCTv7+8rpYbR^Ty}1AY)YH;p!m948r#%7x^Z@_-w{pDl|1S4`EM3n_PaXvK z1JF)E3qy$qTj5Xs{jU9k=y%SQ0>8E$;x?p9ayU0bZZeo{5Z@&FKX>}s!0+^>C^D#z z>xsCPvxD3Z=dP}TTOSJhNTPyVt14VCQ9MQFN`rn!c&_p?&4<5_PGm4a;WS&1(!qKE z_H$;dDdiPQ!F_gsN`2>`X}$I=B;={R8%L~`>RyKcS$72ai$!2>d(YkciA^J0@X%G4 z4cu!%Ps~2JuJ8ex`&;Fa0NQOq_nDZ&X;^A=oc1&f#3P1(!5il>6?uK4QpEG8z0Rhu zvBJ+A9RV?z%v?!$=(vcH?*;vRs*+PPbOQ3cdPr5=tOcLqmfx@#hOqX0iN)wTTO21jH<>jpmwRIAGw7`a|sl?9y9zRBh>(_%| zF?h|P7}~RKj?HR+q|4U`CjRmV-$mLW>MScKnNXiv{vD3&2@*u)-6P@h0A`eeZ7}71 zK(w%@R<4lLt`O7fs1E)$5iGb~fPfJ?WxhY7c3Q>T-w#wT&zW522pH-B%r5v#5y^CF zcC30Se|`D2mY$hAlIULL%-PNXgbbpRHgn<&X3N9W!@BUk@9g*P5mz-YnZBb*-$zMM z7Qq}ic0mR8n{^L|=+diODdV}Q!gwr?y+2m=3HWwMq4z)DqYVg0J~^}-%7rMR@S1;9 z7GFj6K}i32X;3*$SmzB&HW{PJ55kT+EI#SsZf}bD7nW^Haf}_gXciYKX{QBxIPSx2Ma? zHQqgzZq!_{&zg{yxqv3xq8YV+`S}F6A>Gtl39_m;K4dA{pP$BW0oIXJ>jEQ!2V3A2 zdpoTxG&V=(?^q?ZTj2ZUpDUdMb)T?E$}CI>r@}PFPWD9@*%V6;4Ag>D#h>!s)=$0R zRXvdkZ%|c}ubej`jl?cS$onl9Tw52rBKT)kgyw~Xy%z62Lr%V6Y=f?2)J|bZJ5(Wx zmji`O;_B+*X@qe-#~`HFP<{8$w@z4@&`q^Q-Zk8JG3>WalhnW1cvnoVw>*R@c&|o8 zZ%w!{Z+MHeZ*OE4v*otkZqz11*s!#s^Gq>+o`8Z5 z^i-qzJLJh9!W-;SmFkR8HEZJWiXk$40i6)7 zZpr=k2lp}SasbM*Nbn3j$sn0;rUI;%EDbi7T1ZI4qL6PNNM2Y%6{LMIKW+FY_yF3) zSKQ2QSujzNMSL2r&bYs`|i2Dnn z=>}c0>a}>|uT!IiMOA~pVT~R@bGlm}Edf}Kq0?*Af6#mW9f9!}RjW7om0c9Qlp;yK z)=XQs(|6GCadQbWIhYF=rf{Y)sj%^Id-ARO0=O^Ad;Ph+ z0?$eE1xhH?{T$QI>0JP75`r)U_$#%K1^BQ8z#uciKf(C701&RyLQWBUp*Q7eyn76} z6JHpC9}R$J#(R0cDCkXoFSp;j6{x{b&0yE@P7{;pCEpKjS(+1RQy38`=&Yxo%F=3y zCPeefABp34U-s?WmU#JJw23dcC{sPPFc2#J$ZgEN%zod}J~8dLm*fx9f6SpO zn^Ww3bt9-r0XaT2a@Wpw;C23XM}7_14#%QpubrIw5aZtP+CqIFmsG4`Cm6rfxl9n5 z7=r2C-+lM2AB9X0T_`?EW&Byv&K?HS4QLoylJ|OAF z`8atBNTzJ&AQ!>sOo$?^0xj~D(;kS$`9zbEGd>f6r`NC3X`tX)sWgWUUOQ7w=$TO&*j;=u%25ay-%>3@81tGe^_z*C7pb9y*Ed^H3t$BIKH2o+olp#$q;)_ zfpjCb_^VFg5fU~K)nf*d*r@BCC>UZ!0&b?AGk_jTPXaSnCuW110wjHPPe^9R^;jo3 zwvzTl)C`Zl5}O2}3lec=hZ*$JnkW#7enKKc)(pM${_$9Hc=Sr_A9Biwe*Y=T?~1CK z6eZ9uPICjy-sMGbZl$yQmpB&`ouS8v{58__t0$JP%i3R&%QR3ianbZqDs<2#5FdN@n5bCn^ZtH992~5k(eA|8|@G9u`wdn7bnpg|@{m z^d6Y`*$Zf2Xr&|g%sai#5}Syvv(>Jnx&EM7-|Jr7!M~zdAyjt*xl;OLhvW-a%H1m0 z*x5*nb=R5u><7lyVpNAR?q@1U59 zO+)QWwL8t zyip?u_nI+K$uh{y)~}qj?(w0&=SE^8`_WMM zTybjG=999h38Yes7}-4*LJ7H)UE8{mE(6;8voE+TYY%33A>S6`G_95^5QHNTo_;Ao ztIQIZ_}49%{8|=O;isBZ?=7kfdF8_@azfoTd+hEJKWE!)$)N%HIe2cplaK`ry#=pV z0q{9w-`i0h@!R8K3GC{ivt{70IWG`EP|(1g7i_Q<>aEAT{5(yD z=!O?kq61VegV+st@XCw475j6vS)_z@efuqQgHQR1T4;|-#OLZNQJPV4k$AX1Uk8Lm z{N*b*ia=I+MB}kWpupJ~>!C@xEN#Wa7V+7{m4j8c?)ChV=D?o~sjT?0C_AQ7B-vxqX30s0I_`2$in86#`mAsT-w?j{&AL@B3$;P z31G4(lV|b}uSDCIrjk+M1R!X7s4Aabn<)zpgT}#gE|mIvV38^ODy@<&yflpCwS#fRf9ZX3lPV_?8@C5)A;T zqmouFLFk;qIs4rA=hh=GL~sCFsXHsqO6_y~*AFt939UYVBSx1s(=Kb&5;j7cSowdE;7()CC2|-i9Zz+_BIw8#ll~-tyH?F3{%`QCsYa*b#s*9iCc`1P1oC26?`g<9))EJ3%xz+O!B3 zZ7$j~To)C@PquR>a1+Dh>-a%IvH_Y7^ys|4o?E%3`I&ADXfC8++hAdZfzIT#%C+Jz z1lU~K_vAm0m8Qk}K$F>|>RPK%<1SI0(G+8q~H zAsjezyP+u!Se4q3GW)`h`NPSRlMoBjCzNPesWJwVTY!o@G8=(6I%4XHGaSiS3MEBK zhgGFv6Jc>L$4jVE!I?TQuwvz_%CyO!bLh94nqK11C2W$*aa2ueGopG8DnBICVUORP zgytv#)49fVXDaR$SukloYC3u7#5H)}1K21=?DKj^U)8G;MS)&Op)g^zR2($<>C*zW z;X7`hLxiIO#J`ANdyAOJle4V%ppa*(+0i3w;8i*BA_;u8gOO6)MY`ueq7stBMJTB; z-a0R>hT*}>z|Gg}@^zDL1MrH+2hsR8 zHc}*9IvuQC^Ju)^#Y{fOr(96rQNPNhxc;mH@W*m206>Lo<*SaaH?~8zg&f&%YiOEG zGiz?*CP>Bci}!WiS=zj#K5I}>DtpregpP_tfZtPa(N<%vo^#WCQ5BTv0vr%Z{)0q+ z)RbfHktUm|lg&U3YM%lMUM(fu}i#kjX9h>GYctkx9Mt_8{@s%!K_EI zScgwy6%_fR?CGJQtmgNAj^h9B#zmaMDWgH55pGuY1Gv7D z;8Psm(vEPiwn#MgJYu4Ty9D|h!?Rj0ddE|&L3S{IP%H4^N!m`60ZwZw^;eg4sk6K{ ziA^`Sbl_4~f&Oo%n;8Ye(tiAdlZKI!Z=|j$5hS|D$bDJ}p{gh$KN&JZYLUjv4h{NY zBJ>X9z!xfDGY z+oh_Z&_e#Q(-}>ssZfm=j$D&4W4FNy&-kAO1~#3Im;F)Nwe{(*75(p=P^VI?X0GFakfh+X-px4a%Uw@fSbmp9hM1_~R>?Z8+ ziy|e9>8V*`OP}4x5JjdWp}7eX;lVxp5qS}0YZek;SNmm7tEeSF*-dI)6U-A%m6YvCgM(}_=k#a6o^%-K4{`B1+}O4x zztDT%hVb;v#?j`lTvlFQ3aV#zkX=7;YFLS$uIzb0E3lozs5`Xy zi~vF+%{z9uLjKvKPhP%x5f~7-Gj+%5N`%^=yk*Qn{`> z;xj&ROY6g`iy2a@{O)V(jk&8#hHACVDXey5a+KDod_Z&}kHM}xt7}Md@pil{2x7E~ zL$k^d2@Ec2XskjrN+IILw;#7((abu;OJii&v3?60x>d_Ma(onIPtcVnX@ELF0aL?T zSmWiL3(dOFkt!x=1O!_0n(cAzZW+3nHJ{2S>tgSK?~cFha^y(l@-Mr2W$%MN{#af8J;V*>hdq!gx=d0h$T7l}>91Wh07)9CTX zh2_ZdQCyFOQ)l(}gft0UZG`Sh2`x-w`5vC2UD}lZs*5 zG76$akzn}Xi))L3oGJ75#pcN=cX3!=57$Ha=hQ2^lwdyU#a}4JJOz6ddR%zae%#4& za)bFj)z=YQela(F#Y|Q#dp}PJghITwXouVaMq$BM?K%cXn9^Y@g43$=O)F&ZlOUom zJiad#dea;-eywBA@e&D6Pdso1?2^(pXiN91?jvcaUyYoKUmvl5G9e$W!okWe*@a<^ z8cQQ6cNSf+UPDx%?_G4aIiybZHHagF{;IcD(dPO!#=u zWfqLcPc^+7Uu#l(Bpxft{*4lv#*u7X9AOzDO z1D9?^jIo}?%iz(_dwLa{ex#T}76ZfN_Z-hwpus9y+4xaUu9cX}&P{XrZVWE{1^0yw zO;YhLEW!pJcbCt3L8~a7>jsaN{V3>tz6_7`&pi%GxZ=V3?3K^U+*ryLSb)8^IblJ0 zSRLNDvIxt)S}g30?s_3NX>F?NKIGrG_zB9@Z>uSW3k2es_H2kU;Rnn%j5qP)!XHKE zPB2mHP~tLCg4K_vH$xv`HbRsJwbZMUV(t=ez;Ec(vyHH)FbfLg`c61I$W_uBB>i^r z&{_P;369-&>23R%qNIULe=1~T$(DA`ev*EWZ6j(B$(te}x1WvmIll21zvygkS%vwG zzkR6Z#RKA2!z!C%M!O>!=Gr0(J0FP=-MN=5t-Ir)of50y10W}j`GtRCsXBakrKtG& zazmITDJMA0C51&BnLY)SY9r)NVTMs);1<=oosS9g31l{4ztjD3#+2H7u_|66b|_*O z;Qk6nalpqdHOjx|K&vUS_6ITgGll;TdaN*ta=M_YtyC)I9Tmr~VaPrH2qb6sd~=AcIxV+%z{E&0@y=DPArw zdV7z(G1hBx7hd{>(cr43^WF%4Y@PXZ?wPpj{OQ#tvc$pABJbvPGvdR`cAtHn)cSEV zrpu}1tJwQ3y!mSmH*uz*x0o|CS<^w%&KJzsj~DU0cLQUxk5B!hWE>aBkjJle8z~;s z-!A=($+}Jq_BTK5^B!`R>!MulZN)F=iXXeUd0w5lUsE5VP*H*oCy(;?S$p*TVvTxwAeWFB$jHyb0593)$zqalVlDX=GcCN1gU0 zlgU)I$LcXZ8Oyc2TZYTPu@-;7<4YYB-``Qa;IDcvydIA$%kHhJKV^m*-zxcvU4viy&Kr5GVM{IT>WRywKQ9;>SEiQD*NqplK-KK4YR`p0@JW)n_{TU3bt0 zim%;(m1=#v2}zTps=?fU5w^(*y)xT%1vtQH&}50ZF!9YxW=&7*W($2kgKyz1mUgfs zfV<*XVVIFnohW=|j+@Kfo!#liQR^x>2yQdrG;2o8WZR+XzU_nG=Ed2rK?ntA;K5B{ z>M8+*A4!Jm^Bg}aW?R?6;@QG@uQ8&oJ{hFixcfEnJ4QH?A4>P=q29oDGW;L;= z9-a0;g%c`C+Ai!UmK$NC*4#;Jp<1=TioL=t^YM)<<%u#hnnfSS`nq63QKGO1L8RzX z@MFDqs1z ztYmxDl@LU)5acvHk)~Z`RW7=aJ_nGD!mOSYD>5Odjn@TK#LY{jf?+piB5AM-CAoT_ z?S-*q7}wyLJzK>N%eMPuFgN)Q_otKP;aqy=D5f!7<=n(lNkYRXVpkB{TAYLYg{|(jtRqYmg$xH zjmq?B(RE4 zQx^~Pt}gxC2~l=K$$-sYy_r$CO(d=+b3H1MB*y_5g6WLaWTXn+TKQ|hNY^>Mp6k*$ zwkovomhu776vQATqT4blf~g;TY(MWCrf^^yfWJvSAB$p5l;jm@o#=!lqw+Lqfq>X= z$6~kxfm7`3q4zUEB;u4qa#BdJxO!;xGm)wwuisj{0y2x{R(IGMrsIzDY9LW>m!Y`= z04sx3IjnYvL<4JqxQ8f7qYd0s2Ig%`ytYPEMKI)s(LD}D@EY>x`VFtqvnADNBdeao zC96X+MxnwKmjpg{U&gP3HE}1=s!lv&D{6(g_lzyF3A`7Jn*&d_kL<;dAFx!UZ>hB8 z5A*%LsAn;VLp>3${0>M?PSQ)9s3}|h2e?TG4_F{}{Cs>#3Q*t$(CUc}M)I}8cPF6% z=+h(Kh^8)}gj(0}#e7O^FQ6`~fd1#8#!}LMuo3A0bN`o}PYsm!Y}sdOz$+Tegc=qT z8x`PH$7lvnhJp{kHWb22l;@7B7|4yL4UOOVM0MP_>P%S1Lnid)+k9{+3D+JFa#Pyf zhVc#&df87APl4W9X)F3pGS>@etfl=_E5tBcVoOfrD4hmVeTY-cj((pkn%n@EgN{0f zwb_^Rk0I#iZuHK!l*lN`ceJn(sI{$Fq6nN& zE<-=0_2WN}m+*ivmIOxB@#~Q-cZ>l136w{#TIJe478`KE7@=a{>SzPHsKLzYAyBQO zAtuuF$-JSDy_S@6GW0MOE~R)b;+0f%_NMrW(+V#c_d&U8Z9+ec4=HmOHw?gdjF(Lu zzra83M_BoO-1b3;9`%&DHfuUY)6YDV21P$C!Rc?mv&{lx#f8oc6?0?x zK08{WP65?#>(vPfA-c=MCY|%*1_<3D4NX zeVTi-JGl2uP_2@0F{G({pxQOXt_d{g_CV6b?jNpfUG9;8yle-^4KHRvZs-_2siata zt+d_T@U$&t*xaD22(fH(W1r$Mo?3dc%Tncm=C6{V9y{v&VT#^1L04vDrLM9qBoZ4@ z6DBN#m57hX7$C(=#$Y5$bJmwA$T8jKD8+6A!-IJwA{WOfs%s}yxUw^?MRZjF$n_KN z6`_bGXcmE#5e4Ym)aQJ)xg3Pg0@k`iGuHe?f(5LtuzSq=nS^5z>vqU0EuZ&75V%Z{ zYyhRLN^)$c6Ds{f7*FBpE;n5iglx5PkHfWrj3`x^j^t z7ntuV`g!9Xg#^3!x)l*}IW=(Tz3>Y5l4uGaB&lz{GDjm2D5S$CExLT`I1#n^lBH7Y zDgpMag@`iETKAI=p<5E#LTkwzVR@=yY|uBVI1HG|8h+d;G-qfuj}-ZR6fN>EfCCW z9~wRQoAPEa#aO?3h?x{YvV*d+NtPkf&4V0k4|L=uj!U{L+oLa(z#&iuhJr3-PjO3R z5s?=nn_5^*^Rawr>>Nr@K(jwkB#JK-=+HqwfdO<+P5byeim)wvqGlP-P|~Nse8=XF zz`?RYB|D6SwS}C+YQv+;}k6$-%D(@+t14BL@vM z2q%q?f6D-A5s$_WY3{^G0F131bbh|g!}#BKw=HQ7mx;Dzg4Z*bTLQSfo{ed{4}NZW zfrRm^Ca$rlE{Ue~uYv>R9{3smwATcdM_6+yWIO z*ZRH~uXE@#p$XTbCt5j7j2=86e{9>HIB6xDzV+vAo&B?KUiMP|ttOElepnl%|DPqL b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/example/react-app/public/manifest.json b/example/react-app/public/manifest.json deleted file mode 100644 index 080d6c77..00000000 --- a/example/react-app/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/example/react-app/public/robots.txt b/example/react-app/public/robots.txt deleted file mode 100644 index e9e57dc4..00000000 --- a/example/react-app/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/example/react-app/src/App.css b/example/react-app/src/App.css deleted file mode 100644 index 3541f02a..00000000 --- a/example/react-app/src/App.css +++ /dev/null @@ -1,44 +0,0 @@ -.App { - text-align: center; - background-color: rgb(249, 246, 232); - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/example/react-app/src/App.test.tsx b/example/react-app/src/App.test.tsx deleted file mode 100644 index 2a68616d..00000000 --- a/example/react-app/src/App.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; -import { render, screen } from '@testing-library/react'; -import App from './App'; - -test('renders learn react link', () => { - render(); - const linkElement = screen.getByText(/learn react/i); - expect(linkElement).toBeInTheDocument(); -}); diff --git a/example/react-app/src/App.tsx b/example/react-app/src/App.tsx deleted file mode 100644 index 4986ea6e..00000000 --- a/example/react-app/src/App.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import './App.css'; -import { SwapWidget } from '@dodoex/widgets'; - -function App() { - return ( -
- -
- ); -} - -export default App; diff --git a/example/react-app/src/index.css b/example/react-app/src/index.css deleted file mode 100644 index 9784ca2b..00000000 --- a/example/react-app/src/index.css +++ /dev/null @@ -1,18 +0,0 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -html, body, #root { - width: 100%; - height: 100%; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; -} diff --git a/example/react-app/src/index.tsx b/example/react-app/src/index.tsx deleted file mode 100644 index 032464fb..00000000 --- a/example/react-app/src/index.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import './index.css'; -import App from './App'; -import reportWebVitals from './reportWebVitals'; - -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement -); -root.render( - - - -); - -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); diff --git a/example/react-app/src/logo.svg b/example/react-app/src/logo.svg deleted file mode 100644 index 9dfc1c05..00000000 --- a/example/react-app/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/example/react-app/src/react-app-env.d.ts b/example/react-app/src/react-app-env.d.ts deleted file mode 100644 index 6431bc5f..00000000 --- a/example/react-app/src/react-app-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/example/react-app/src/reportWebVitals.ts b/example/react-app/src/reportWebVitals.ts deleted file mode 100644 index 49a2a16e..00000000 --- a/example/react-app/src/reportWebVitals.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ReportHandler } from 'web-vitals'; - -const reportWebVitals = (onPerfEntry?: ReportHandler) => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/example/react-app/src/setupTests.ts b/example/react-app/src/setupTests.ts deleted file mode 100644 index 8f2609b7..00000000 --- a/example/react-app/src/setupTests.ts +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom'; diff --git a/example/react-app/tsconfig.json b/example/react-app/tsconfig.json deleted file mode 100644 index 9b9062e7..00000000 --- a/example/react-app/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "allowJs": true, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx" - }, - "include": ["src", "babel.config.js"] -} diff --git a/example/react-app/yarn.lock b/example/react-app/yarn.lock deleted file mode 100644 index 4d267d1c..00000000 --- a/example/react-app/yarn.lock +++ /dev/null @@ -1,13161 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@adobe/css-tools@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.0.1.tgz#b38b444ad3aa5fedbb15f2f746dcd934226a12dd" - integrity sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g== - -"@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@apideck/better-ajv-errors@^0.3.1": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097" - integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== - dependencies: - json-schema "^0.4.0" - jsonpointer "^5.0.0" - leven "^3.1.0" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.8.3": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.0.tgz#2a592fd89bacb1fcde68de31bee4f2f2dacb0e86" - integrity sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw== - -"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.0.tgz#d2f5f4f2033c00de8096be3c9f45772563e150c3" - integrity sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.0" - "@babel/helper-compilation-targets" "^7.19.0" - "@babel/helper-module-transforms" "^7.19.0" - "@babel/helpers" "^7.19.0" - "@babel/parser" "^7.19.0" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - -"@babel/eslint-parser@^7.16.3": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz#255a63796819a97b7578751bb08ab9f2a375a031" - integrity sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ== - dependencies: - eslint-scope "^5.1.1" - eslint-visitor-keys "^2.1.0" - semver "^6.3.0" - -"@babel/generator@^7.19.0", "@babel/generator@^7.7.2": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.0.tgz#785596c06425e59334df2ccee63ab166b738419a" - integrity sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg== - dependencies: - "@babel/types" "^7.19.0" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" - integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.18.6" - "@babel/types" "^7.18.9" - -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz#537ec8339d53e806ed422f1e06c8f17d55b96bb0" - integrity sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA== - dependencies: - "@babel/compat-data" "^7.19.0" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.20.2" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz#bfd6904620df4e46470bae4850d66be1054c404b" - integrity sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-member-expression-to-functions" "^7.18.9" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.9" - "@babel/helper-split-export-declaration" "^7.18.6" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz#7976aca61c0984202baca73d84e2337a5424a41b" - integrity sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - regexpu-core "^5.1.0" - -"@babel/helper-define-polyfill-provider@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073" - integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg== - dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-explode-assignable-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" - integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== - dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" - -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-member-expression-to-functions@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" - integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== - dependencies: - "@babel/types" "^7.18.9" - -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz#309b230f04e22c58c6a2c0c0c7e50b216d350c30" - integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.18.6" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" - -"@babel/helper-optimise-call-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" - integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== - dependencies: - "@babel/types" "^7.18.6" - -"@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.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf" - integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== - -"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" - integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-wrap-function" "^7.18.9" - "@babel/types" "^7.18.9" - -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" - integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.18.9" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" - -"@babel/helper-simple-access@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" - integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" - integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== - dependencies: - "@babel/types" "^7.18.9" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" - integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" - integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== - -"@babel/helper-validator-identifier@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz#601fa28e4cc06786c18912dca138cec73b882044" - integrity sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ== - -"@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== - -"@babel/helper-wrap-function@^7.18.9": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz#89f18335cff1152373222f76a4b37799636ae8b1" - integrity sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg== - dependencies: - "@babel/helper-function-name" "^7.19.0" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" - -"@babel/helpers@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.19.0.tgz#f30534657faf246ae96551d88dd31e9d1fa1fc18" - integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg== - dependencies: - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.0.tgz#497fcafb1d5b61376959c1c338745ef0577aa02c" - integrity sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": - version "7.18.6" - 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.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" - integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" - integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" - -"@babel/plugin-proposal-async-generator-functions@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.0.tgz#cf5740194f170467df20581712400487efc79ff1" - integrity sha512-nhEByMUTx3uZueJ/QkJuSlCfN4FGg+xy+vRsfGQGzSauq5ks2Deid2+05Q3KhfaUjvec1IGhw/Zm3cFm8JigTQ== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.18.6": - 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-class-static-block@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" - integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-decorators@^7.16.4": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.19.0.tgz#5a3bc0699ee34117c73c960a5396ffce104c4eaa" - integrity sha512-Bo5nOSjiJccjv00+BrDkmfeBLBi2B0qe8ygj24KdL8VdwtZz+710NCwehF+x/Ng+0mkHx5za2eAofmvVFLF4Fg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-replace-supers" "^7.18.9" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/plugin-syntax-decorators" "^7.19.0" - -"@babel/plugin-proposal-dynamic-import@^7.18.6": - 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-namespace-from@^7.18.9": - 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.18.6": - 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.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" - integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": - 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.16.0", "@babel/plugin-proposal-numeric-separator@^7.18.6": - 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.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" - integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== - dependencies: - "@babel/compat-data" "^7.18.8" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.18.8" - -"@babel/plugin-proposal-optional-catch-binding@^7.18.6": - 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.16.0", "@babel/plugin-proposal-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" - integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.16.0", "@babel/plugin-proposal-private-methods@^7.18.6": - 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.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" - integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@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.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.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz#5f13d1d8fce96951bea01a10424463c9a5b3a599" - integrity sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ== - dependencies: - "@babel/helper-plugin-utils" "^7.19.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-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.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz#774d825256f2379d06139be0c723c4dd444f3ca1" - integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-syntax-import-assertions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4" - integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@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.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.17.12", "@babel/plugin-syntax-jsx@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" - integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@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.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.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.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.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.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.18.6", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" - integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" - integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-async-to-generator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" - integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== - dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" - -"@babel/plugin-transform-block-scoped-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" - integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-block-scoping@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d" - integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-classes@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz#0e61ec257fba409c41372175e7c1e606dc79bb20" - integrity sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.19.0" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-replace-supers" "^7.18.9" - "@babel/helper-split-export-declaration" "^7.18.6" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" - integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-destructuring@^7.18.13": - version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz#9e03bc4a94475d62b7f4114938e6c5c33372cbf5" - integrity sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" - integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-duplicate-keys@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" - integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-exponentiation-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" - integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-flow-strip-types@^7.16.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz#e9e8606633287488216028719638cbbb2f2dde8f" - integrity sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg== - dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/plugin-syntax-flow" "^7.18.6" - -"@babel/plugin-transform-for-of@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" - integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-function-name@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" - integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== - dependencies: - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" - integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-member-expression-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" - integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-modules-amd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" - integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== - dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883" - integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== - dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz#5f20b471284430f02d9c5059d9b9a16d4b085a1f" - integrity sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A== - dependencies: - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-validator-identifier" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" - integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== - dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.0.tgz#58c52422e4f91a381727faed7d513c89d7f41ada" - integrity sha512-HDSuqOQzkU//kfGdiHBt71/hkDTApw4U/cMVgKgX7PqfB3LOaK+2GtCEsBu1dL9CkswDm0Gwehht1dCr421ULQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - -"@babel/plugin-transform-new-target@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" - integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-object-super@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" - integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" - -"@babel/plugin-transform-parameters@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" - integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-property-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" - integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-react-constant-elements@^7.12.1": - version "7.18.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.12.tgz#edf3bec47eb98f14e84fa0af137fcc6aad8e0443" - integrity sha512-Q99U9/ttiu+LMnRU8psd23HhvwXmKWDQIpocm0JKaICcZHnw+mdQbHm6xnSy7dOl8I5PELakYtNBubNQlBXbZw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" - integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-react-jsx-development@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" - integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.18.6" - -"@babel/plugin-transform-react-jsx@^7.18.6": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz#b3cbb7c3a00b92ec8ae1027910e331ba5c500eb9" - integrity sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/plugin-syntax-jsx" "^7.18.6" - "@babel/types" "^7.19.0" - -"@babel/plugin-transform-react-pure-annotations@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" - integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-regenerator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" - integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - regenerator-transform "^0.15.0" - -"@babel/plugin-transform-reserved-words@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" - integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-runtime@^7.16.4": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz#37d14d1fa810a368fd635d4d1476c0154144a96f" - integrity sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ== - dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.9" - babel-plugin-polyfill-corejs2 "^0.3.2" - babel-plugin-polyfill-corejs3 "^0.5.3" - babel-plugin-polyfill-regenerator "^0.4.0" - semver "^6.3.0" - -"@babel/plugin-transform-shorthand-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" - integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-spread@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz#dd60b4620c2fec806d60cfaae364ec2188d593b6" - integrity sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w== - dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - -"@babel/plugin-transform-sticky-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" - integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-template-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" - integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-typeof-symbol@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" - integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-typescript@^7.18.6": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.0.tgz#50c3a68ec8efd5e040bde2cd764e8e16bc0cbeaf" - integrity sha512-DOOIywxPpkQHXijXv+s9MDAyZcLp12oYRl3CMWZ6u7TjSoCBq/KqHR/nNFR3+i2xqheZxoF0H2XyL7B6xeSRuA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/plugin-syntax-typescript" "^7.18.6" - -"@babel/plugin-transform-unicode-escapes@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" - integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - -"@babel/plugin-transform-unicode-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" - integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.19.0.tgz#fd18caf499a67d6411b9ded68dc70d01ed1e5da7" - integrity sha512-1YUju1TAFuzjIQqNM9WsF4U6VbD/8t3wEAlw3LFYuuEr+ywqLRcSXxFKz4DCEj+sN94l/XTDiUXYRrsvMpz9WQ== - dependencies: - "@babel/compat-data" "^7.19.0" - "@babel/helper-compilation-targets" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.19.0" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.18.6" - "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" - "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.18.9" - "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.18.6" - "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" - "@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.18.6" - "@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.18.6" - "@babel/plugin-transform-async-to-generator" "^7.18.6" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.18.9" - "@babel/plugin-transform-classes" "^7.19.0" - "@babel/plugin-transform-computed-properties" "^7.18.9" - "@babel/plugin-transform-destructuring" "^7.18.13" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.18.8" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.18.6" - "@babel/plugin-transform-modules-commonjs" "^7.18.6" - "@babel/plugin-transform-modules-systemjs" "^7.19.0" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.0" - "@babel/plugin-transform-new-target" "^7.18.6" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.18.8" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.18.6" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.19.0" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.10" - "@babel/plugin-transform-unicode-regex" "^7.18.6" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.19.0" - babel-plugin-polyfill-corejs2 "^0.3.2" - babel-plugin-polyfill-corejs3 "^0.5.3" - babel-plugin-polyfill-regenerator "^0.4.0" - core-js-compat "^3.22.1" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - 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" - -"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" - integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-transform-react-display-name" "^7.18.6" - "@babel/plugin-transform-react-jsx" "^7.18.6" - "@babel/plugin-transform-react-jsx-development" "^7.18.6" - "@babel/plugin-transform-react-pure-annotations" "^7.18.6" - -"@babel/preset-typescript@^7.16.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" - integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-transform-typescript" "^7.18.6" - -"@babel/runtime-corejs3@^7.10.2": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.19.0.tgz#0df75cb8e5ecba3ca9e658898694e5326d52397f" - integrity sha512-JyXXoCu1N8GLuKc2ii8y5RGma5FMpFeO2nAQIe0Yzrbq+rQnN+sFj47auLblR5ka6aHNGPDgv8G/iI2Grb0ldQ== - dependencies: - core-js-pure "^3.20.2" - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.0", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" - integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.20.13", "@babel/runtime@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" - integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.18.10", "@babel/template@^7.3.3": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" - integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.10" - "@babel/types" "^7.18.10" - -"@babel/traverse@^7.18.9", "@babel/traverse@^7.19.0", "@babel/traverse@^7.7.2": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.0.tgz#eb9c561c7360005c592cc645abafe0c3c4548eed" - integrity sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.0" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.19.0" - "@babel/types" "^7.19.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600" - integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA== - dependencies: - "@babel/helper-string-parser" "^7.18.10" - "@babel/helper-validator-identifier" "^7.18.6" - to-fast-properties "^2.0.0" - -"@babel/types@^7.20.7": - version "7.22.17" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.17.tgz#f753352c4610ffddf9c8bc6823f9ff03e2303eee" - integrity sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.15" - 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== - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@csstools/normalize.css@*": - version "12.0.0" - resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.0.0.tgz#a9583a75c3f150667771f30b60d9f059473e62c4" - integrity sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg== - -"@csstools/postcss-cascade-layers@^1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.6.tgz#a52da13b91fc184a52337b4e938c3d3188e537b0" - integrity sha512-ei4Vh4AJwTCXTNj7uzwduoZDO7nLPksQ0TI7OzUlyFq4P4Uhu6hU7R4AlLimDP/s6D3PQdHmRL4f7UOy370UHA== - dependencies: - "@csstools/selector-specificity" "^2.0.2" - postcss-selector-parser "^6.0.10" - -"@csstools/postcss-color-function@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz#2bd36ab34f82d0497cfacdc9b18d34b5e6f64b6b" - integrity sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-font-format-keywords@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz#677b34e9e88ae997a67283311657973150e8b16a" - integrity sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-hwb-function@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz#ab54a9fce0ac102c754854769962f2422ae8aa8b" - integrity sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-ic-unit@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz#28237d812a124d1a16a5acc5c3832b040b303e58" - integrity sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-is-pseudo-class@^2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz#846ae6c0d5a1eaa878fce352c544f9c295509cd1" - integrity sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA== - dependencies: - "@csstools/selector-specificity" "^2.0.0" - postcss-selector-parser "^6.0.10" - -"@csstools/postcss-nested-calc@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz#d7e9d1d0d3d15cf5ac891b16028af2a1044d0c26" - integrity sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-normalize-display-values@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz#15da54a36e867b3ac5163ee12c1d7f82d4d612c3" - integrity sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-oklab-function@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz#88cee0fbc8d6df27079ebd2fa016ee261eecf844" - integrity sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-progressive-custom-properties@^1.1.0", "@csstools/postcss-progressive-custom-properties@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz#542292558384361776b45c85226b9a3a34f276fa" - integrity sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-stepped-value-functions@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz#f8772c3681cc2befed695e2b0b1d68e22f08c4f4" - integrity sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-text-decoration-shorthand@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz#ea96cfbc87d921eca914d3ad29340d9bcc4c953f" - integrity sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-trigonometric-functions@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz#94d3e4774c36d35dcdc88ce091336cb770d32756" - integrity sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-unset-value@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz#c99bb70e2cdc7312948d1eb41df2412330b81f77" - integrity sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g== - -"@csstools/selector-specificity@^2.0.0", "@csstools/selector-specificity@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz#1bfafe4b7ed0f3e4105837e056e0a89b108ebe36" - integrity sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg== - -"@dodoex/components@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@dodoex/components/-/components-2.0.1.tgz#6e3f41775bf0d416b92b5d40a2a96e2b11b8d994" - integrity sha512-CZ8ZFcFkctDFdw88gSzBt0XgAsIruy7CV3CCtJ3QZ8zuUJ7zmwUX4nK7eAKeQCwbN9H0bR9Wx3RVrfMjdLN0+g== - dependencies: - "@babel/runtime" "^7.17.0" - "@dodoex/icons" "^2.0.0" - "@mui/base" "^5.0.0-beta.5" - "@mui/system" "5.8.4" - "@szhsin/react-accordion" "^1.2.1" - clsx "^1.2.1" - -"@dodoex/icons@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@dodoex/icons/-/icons-2.0.0.tgz#7cbc8425f2c0d9a314bc1a65571438dc1d9793ba" - integrity sha512-u09YHl32MyHeD5K3vt4njNCOGqNFsFXwZX1Xr//grvWg0JLCZ43iizCQRgPdyIkKqhJprQCuEJwvBMM4jtFJiA== - dependencies: - "@babel/runtime" "^7.17.2" - -"@dodoex/icons@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@dodoex/icons/-/icons-2.0.1.tgz#f241c1812bf32d13d51a948ccb3c585de311b008" - integrity sha512-4E0L5jtaZ+Ya48KAH1ODBk2oX1kWsBKa5nscal8MhlrZkqynbB52TJFI+t95SL6j1iwQen12U/iAHazUuycFTA== - dependencies: - "@babel/runtime" "^7.17.2" - -"@dodoex/widgets@^2.6.4": - version "2.6.4" - resolved "https://registry.yarnpkg.com/@dodoex/widgets/-/widgets-2.6.4.tgz#b67cb5cc7bfd774c4847e840d73e08a4f29ef00a" - integrity sha512-g5PdNobkAcnCtImgaQkNVZONuxGJWswhI6aooW212K5GY31dP6x6PL3YZ4euZAmim8UsX7J0HVcjD5I1IdTHUg== - dependencies: - "@babel/runtime" "^7.17.0" - "@dodoex/components" "^2.0.1" - "@dodoex/icons" "^2.0.1" - "@emotion/react" "^11.10.0" - "@emotion/styled" "^11.10.0" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/contracts" "^5.7.0" - "@lingui/core" "^4.3.0" - "@lingui/macro" "^4.3.0" - "@lingui/react" "^4.3.0" - "@reduxjs/toolkit" "^1.6.1" - "@semantic-release/changelog" "^6.0.1" - "@semantic-release/git" "^10.0.1" - "@web3-react/core" "8.2.0" - "@web3-react/eip1193" "8.2.0" - "@web3-react/metamask" "8.2.1" - "@web3-react/types" "8.2.0" - "@web3-react/walletconnect-v2" "8.3.6" - axios "^0.27.2" - bignumber.js "^9.0.2" - identicon.js "^2.3.3" - lodash "^4.17.21" - make-plural "^7.0.0" - react-window "^1.8.8" - semantic-release "^19.0.2" - -"@emotion/babel-plugin@^11.10.0": - version "11.10.2" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.2.tgz#879db80ba622b3f6076917a1e6f648b1c7d008c7" - integrity sha512-xNQ57njWTFVfPAc3cjfuaPdsgLp5QOSuRsj9MA6ndEhH/AzuZM86qIQzt6rq+aGBwj3n5/TkLmU5lhAfdRmogA== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/plugin-syntax-jsx" "^7.17.12" - "@babel/runtime" "^7.18.3" - "@emotion/hash" "^0.9.0" - "@emotion/memoize" "^0.8.0" - "@emotion/serialize" "^1.1.0" - 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.0.13" - -"@emotion/cache@^11.10.0", "@emotion/cache@^11.10.3": - version "11.10.3" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.3.tgz#c4f67904fad10c945fea5165c3a5a0583c164b87" - integrity sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ== - dependencies: - "@emotion/memoize" "^0.8.0" - "@emotion/sheet" "^1.2.0" - "@emotion/utils" "^1.2.0" - "@emotion/weak-memoize" "^0.3.0" - stylis "4.0.13" - -"@emotion/hash@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" - integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== - -"@emotion/is-prop-valid@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" - integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg== - dependencies: - "@emotion/memoize" "^0.8.0" - -"@emotion/memoize@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" - integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== - -"@emotion/react@^11.10.0": - version "11.10.4" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.4.tgz#9dc6bccbda5d70ff68fdb204746c0e8b13a79199" - integrity sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.10.0" - "@emotion/cache" "^11.10.0" - "@emotion/serialize" "^1.1.0" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@emotion/utils" "^1.2.0" - "@emotion/weak-memoize" "^0.3.0" - hoist-non-react-statics "^3.3.1" - -"@emotion/serialize@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.0.tgz#b1f97b1011b09346a40e9796c37a3397b4ea8ea8" - integrity sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA== - dependencies: - "@emotion/hash" "^0.9.0" - "@emotion/memoize" "^0.8.0" - "@emotion/unitless" "^0.8.0" - "@emotion/utils" "^1.2.0" - csstype "^3.0.2" - -"@emotion/sheet@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.0.tgz#771b1987855839e214fc1741bde43089397f7be5" - integrity sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w== - -"@emotion/styled@^11.10.0": - version "11.10.4" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.10.4.tgz#e93f84a4d54003c2acbde178c3f97b421fce1cd4" - integrity sha512-pRl4R8Ez3UXvOPfc2bzIoV8u9P97UedgHS4FPX594ntwEuAMA114wlaHvOK24HB48uqfXiGlYIZYCxVJ1R1ttQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.10.0" - "@emotion/is-prop-valid" "^1.2.0" - "@emotion/serialize" "^1.1.0" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@emotion/utils" "^1.2.0" - -"@emotion/unitless@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" - integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== - -"@emotion/use-insertion-effect-with-fallbacks@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz#ffadaec35dbb7885bd54de3fa267ab2f860294df" - integrity sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A== - -"@emotion/utils@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561" - integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw== - -"@emotion/weak-memoize@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" - integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== - -"@eslint/eslintrc@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.1.tgz#de0807bfeffc37b964a7d0400e0c348ce5a2543d" - integrity sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.0" - globals "^13.15.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@^5", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@^5.6.2", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/contracts@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.0.tgz#df72a392f1a63a57f87210515695a31a245845ad" - integrity sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@^5": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.0.tgz#a885cfc7650a64385e7b03ac86fe9c2d4a9c2c63" - integrity sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/web@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.0.tgz#40850c05260edad8b54827923bbad23d96aac0bc" - integrity sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@floating-ui/core@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.4.1.tgz#0d633f4b76052668afb932492ac452f7ebe97f17" - integrity sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ== - dependencies: - "@floating-ui/utils" "^0.1.1" - -"@floating-ui/dom@^1.5.1": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.2.tgz#6812e89d1d4d4ea32f10d15c3b81feb7f9836d89" - integrity sha512-6ArmenS6qJEWmwzczWyhvrXRdI/rI78poBcW0h/456+onlabit+2G+QxHx5xTOX60NBJQXjsCLFbW2CmsXpUog== - dependencies: - "@floating-ui/core" "^1.4.1" - "@floating-ui/utils" "^0.1.1" - -"@floating-ui/react-dom@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.2.tgz#fab244d64db08e6bed7be4b5fcce65315ef44d20" - integrity sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ== - dependencies: - "@floating-ui/dom" "^1.5.1" - -"@floating-ui/utils@^0.1.1": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.2.tgz#b7e9309ccce5a0a40ac482cb894f120dba2b357f" - integrity sha512-ou3elfqG/hZsbmF4bxeJhPHIf3G2pm0ujc39hYEZrfVqt7Vk/Zji6CXc3W0pmYM8BW1g40U+akTl9DKZhFhInQ== - -"@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== - -"@humanwhocodes/config-array@^0.10.4": - version "0.10.4" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" - integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/gitignore-to-minimatch@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" - integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== - -"@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@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" - slash "^3.0.0" - -"@jest/console@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" - integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== - dependencies: - "@jest/types" "^28.1.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - slash "^3.0.0" - -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== - dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.8.1" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" - micromatch "^4.0.4" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== - dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - -"@jest/expect-utils@^29.0.2": - version "29.0.2" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.0.2.tgz#00dfcb9e6fe99160c326ba39f7734b984543dea8" - integrity sha512-+wcQF9khXKvAEi8VwROnCWWmHfsJYCZAs5dmuMlJBKk57S6ZN2/FQMIlo01F29fJyT8kV/xblE7g3vkIdTLOjw== - dependencies: - jest-get-type "^29.0.0" - -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== - dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" - "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" - -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" - -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" - -"@jest/schemas@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" - integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== - dependencies: - "@sinclair/typebox" "^0.24.1" - -"@jest/schemas@^29.0.0": - version "29.0.0" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" - integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== - dependencies: - "@sinclair/typebox" "^0.24.1" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.9" - source-map "^0.6.0" - -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== - dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-result@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" - integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== - dependencies: - "@jest/console" "^28.1.3" - "@jest/types" "^28.1.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== - dependencies: - "@jest/test-result" "^27.5.1" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" - -"@jest/transform@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" - integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.5.1" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-regex-util "^27.5.1" - jest-util "^27.5.1" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" - chalk "^4.0.0" - -"@jest/types@^28.1.3": - version "28.1.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" - integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== - dependencies: - "@jest/schemas" "^28.1.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jest/types@^29.0.2": - version "29.0.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.0.2.tgz#5a5391fa7f7f41bf4b201d6d2da30e874f95b6c1" - integrity sha512-5WNMesBLmlkt1+fVkoCjHa0X3i3q8zc4QLTDkdHgCa2gyPZc7rdlZBWgVLqwS1860ZW5xJuCDwAzqbGaXIr/ew== - dependencies: - "@jest/schemas" "^29.0.0" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.15" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" - integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== - -"@lingui/conf@4.5.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@lingui/conf/-/conf-4.5.0.tgz#09b39de3a03a9017cd8299b1d8df923c78447ebf" - integrity sha512-OBm4RQQtbpvmuazLWVpvpaOpt/xvu1PBv8WUX8QoW1vsROe/3P5BpRHRYFyMeZz5mhORJgis9lQtDTq145Ruug== - dependencies: - "@babel/runtime" "^7.20.13" - chalk "^4.1.0" - cosmiconfig "^8.0.0" - jest-validate "^29.4.3" - jiti "^1.17.1" - lodash.get "^4.4.2" - -"@lingui/core@4.5.0", "@lingui/core@^4.3.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@lingui/core/-/core-4.5.0.tgz#8b907238bd0b420b372272d0a757c56bed3aed14" - integrity sha512-8zTuIXJo5Qvjato7LWE6Q4RHiO4LjTBVOoRlqfOGYDp8VZ9w9P7Z7IJgxI7UP5Z1wiuEvnMdVF9I1C4acqXGlQ== - dependencies: - "@babel/runtime" "^7.20.13" - "@lingui/message-utils" "4.5.0" - unraw "^3.0.0" - -"@lingui/macro@^4.3.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@lingui/macro/-/macro-4.5.0.tgz#4e779f4652200b7ecc6f3364fda840ae365fb996" - integrity sha512-6qha9YXuNnta4HCR+g6J6UPaAuAFlM1duqgznh4X7hHSsFG+m6oX7/srAMfU41Z8lbDmgXc3raqHLXFSdUNbYQ== - dependencies: - "@babel/runtime" "^7.20.13" - "@babel/types" "^7.20.7" - "@lingui/conf" "4.5.0" - "@lingui/core" "4.5.0" - "@lingui/message-utils" "4.5.0" - -"@lingui/message-utils@4.5.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@lingui/message-utils/-/message-utils-4.5.0.tgz#7ae9dc6cb65cbb5e2dc1b8cdcc4c8b92d5c7189f" - integrity sha512-iRqh2wvNtzJO3NStB77nEXEfeI53aVVjzD7/mBrEm/P0lC7sqPHk0WBQCfzE0N9xm6a+XHmHu3J+x2nnQ2OjcA== - dependencies: - "@messageformat/parser" "^5.0.0" - -"@lingui/react@^4.3.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@lingui/react/-/react-4.5.0.tgz#1cae72e89890f8d270b37cdde051a3c69df97727" - integrity sha512-dv/oxBshyaVJ3XzbPDnWn3abhwtaS1sx8cEO2qDjs+OhW0AeWD9hyVDrduf5SBIuXFJfJQNNA8+2P2nO0lxRbQ== - dependencies: - "@babel/runtime" "^7.20.13" - "@lingui/core" "4.5.0" - -"@lit-labs/ssr-dom-shim@^1.0.0", "@lit-labs/ssr-dom-shim@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.1.tgz#64df34e2f12e68e78ac57e571d25ec07fa460ca9" - integrity sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ== - -"@lit/reactive-element@^1.3.0", "@lit/reactive-element@^1.6.0": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@lit/reactive-element/-/reactive-element-1.6.3.tgz#25b4eece2592132845d303e091bad9b04cdcfe03" - integrity sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ== - dependencies: - "@lit-labs/ssr-dom-shim" "^1.0.0" - -"@messageformat/parser@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@messageformat/parser/-/parser-5.1.0.tgz#05e4851c782d633ad735791dd0a68ee65d2a7201" - integrity sha512-jKlkls3Gewgw6qMjKZ9SFfHUpdzEVdovKFtW1qRhJ3WI4FW5R/NnGDqr8SDGz+krWDO3ki94boMmQvGke1HwUQ== - dependencies: - moo "^0.5.1" - -"@metamask/detect-provider@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@metamask/detect-provider/-/detect-provider-1.2.0.tgz#3667a7531f2a682e3c3a43eaf3a1958bdb42a696" - integrity sha512-ocA76vt+8D0thgXZ7LxFPyqw3H7988qblgzddTDA6B8a/yU0uKV42QR/DhA+Jh11rJjxW0jKvwb5htA6krNZDQ== - -"@motionone/animation@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.15.1.tgz#4a85596c31cbc5100ae8eb8b34c459fb0ccf6807" - integrity sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ== - dependencies: - "@motionone/easing" "^10.15.1" - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - tslib "^2.3.1" - -"@motionone/dom@^10.16.2": - version "10.16.2" - resolved "https://registry.yarnpkg.com/@motionone/dom/-/dom-10.16.2.tgz#0c44df8ee3d1cfc50ee11d27050b27824355a61a" - integrity sha512-bnuHdNbge1FutZXv+k7xub9oPWcF0hsu8y1HTH/qg6av58YI0VufZ3ngfC7p2xhMJMnoh0LXFma2EGTgPeCkeg== - dependencies: - "@motionone/animation" "^10.15.1" - "@motionone/generators" "^10.15.1" - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - hey-listen "^1.0.8" - tslib "^2.3.1" - -"@motionone/easing@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.15.1.tgz#95cf3adaef34da6deebb83940d8143ede3deb693" - integrity sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw== - dependencies: - "@motionone/utils" "^10.15.1" - tslib "^2.3.1" - -"@motionone/generators@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.15.1.tgz#dc6abb11139d1bafe758a41c134d4c753a9b871c" - integrity sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ== - dependencies: - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - tslib "^2.3.1" - -"@motionone/svelte@^10.16.2": - version "10.16.2" - resolved "https://registry.yarnpkg.com/@motionone/svelte/-/svelte-10.16.2.tgz#0b37c3b12927814d31d24941d1ca0ff49981b444" - integrity sha512-38xsroKrfK+aHYhuQlE6eFcGy0EwrB43Q7RGjF73j/kRUTcLNu/LAaKiLLsN5lyqVzCgTBVt4TMT/ShWbTbc5Q== - dependencies: - "@motionone/dom" "^10.16.2" - tslib "^2.3.1" - -"@motionone/types@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.15.1.tgz#89441b54285012795cbba8612cbaa0fa420db3eb" - integrity sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA== - -"@motionone/utils@^10.15.1": - version "10.15.1" - resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.15.1.tgz#6b5f51bde75be88b5411e084310299050368a438" - integrity sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw== - dependencies: - "@motionone/types" "^10.15.1" - hey-listen "^1.0.8" - tslib "^2.3.1" - -"@motionone/vue@^10.16.2": - version "10.16.2" - resolved "https://registry.yarnpkg.com/@motionone/vue/-/vue-10.16.2.tgz#faf13afc27620a2df870c71c58a04ee8de8dea65" - integrity sha512-7/dEK/nWQXOkJ70bqb2KyNfSWbNvWqKKq1C8juj+0Mg/AorgD8O5wE3naddK0G+aXuNMqRuc4jlsYHHWHtIzVw== - dependencies: - "@motionone/dom" "^10.16.2" - tslib "^2.3.1" - -"@mui/base@^5.0.0-beta.5": - version "5.0.0-beta.15" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.15.tgz#76bebd377cc3b7fdc80924759a4100e5319ed0f9" - integrity sha512-Xtom3YSdi0iwYPtyVRFUEGoRwi6IHWixPwifDKaK+4PkEPtUWMU5YOIJfTsmC59ri+dFvA3oBNSiTPUGGrklZw== - dependencies: - "@babel/runtime" "^7.22.15" - "@floating-ui/react-dom" "^2.0.2" - "@mui/types" "^7.2.4" - "@mui/utils" "^5.14.9" - "@popperjs/core" "^2.11.8" - clsx "^2.0.0" - prop-types "^15.8.1" - -"@mui/private-theming@^5.8.4": - version "5.10.3" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.10.3.tgz#7325eef3e480caaaa2d866b9057943ec4fbcb8ce" - integrity sha512-LCYIKlkGz2BTSng2BFzzwSJBRZbChIUri2x2Nh8ryk2B1Ho7zpvE7ex6y39LlStG2Frf92NFC/V4YQbmMAjD5A== - dependencies: - "@babel/runtime" "^7.18.9" - "@mui/utils" "^5.10.3" - prop-types "^15.8.1" - -"@mui/styled-engine@^5.8.0": - version "5.10.4" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.10.4.tgz#21b3ff3c18a748548b061bccff337a275e1f4861" - integrity sha512-y29qlonPj4wndTjbePk9O6uWp/FBRNXjiMwI64oiYQ+v3E0EkLnADfDn49GAqOJAfN/r7nHbVZBlvLNIcMbgDg== - dependencies: - "@babel/runtime" "^7.18.9" - "@emotion/cache" "^11.10.3" - csstype "^3.1.0" - prop-types "^15.8.1" - -"@mui/system@5.8.4": - version "5.8.4" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.8.4.tgz#88306aefcc3a60528f69dcd2d66516831859c328" - integrity sha512-eeYZXlOn4p+tYwqqDlci6wW4knJ68aGx5A24YU9ubYZ5o0IwveoNP3LC9sHAMxigk/mUTqL4bpSMJ2HbTn2aQg== - dependencies: - "@babel/runtime" "^7.17.2" - "@mui/private-theming" "^5.8.4" - "@mui/styled-engine" "^5.8.0" - "@mui/types" "^7.1.4" - "@mui/utils" "^5.8.4" - clsx "^1.1.1" - csstype "^3.1.0" - prop-types "^15.8.1" - -"@mui/types@^7.1.4": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.0.tgz#91380c2d42420f51f404120f7a9270eadd6f5c23" - integrity sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA== - -"@mui/types@^7.2.4": - version "7.2.4" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.4.tgz#b6fade19323b754c5c6de679a38f068fd50b9328" - integrity sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA== - -"@mui/utils@^5.10.3", "@mui/utils@^5.8.4": - version "5.10.3" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.10.3.tgz#ce2a96f31de2a5e717f507b5383dbabbddbc4dfc" - integrity sha512-4jXMDPfx6bpMVuheLaOpKTjpzw39ogAZLeaLj5+RJec3E37/hAZMYjURfblLfTWMMoGoqkY03mNsZaEwNobBow== - dependencies: - "@babel/runtime" "^7.18.9" - "@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" - -"@mui/utils@^5.14.9": - version "5.14.9" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.14.9.tgz#eeefef88dbee687ac90e8972c63f0d41f19348a3" - integrity sha512-9ysB5e+RwS7ofn0n3nwAg1/3c81vBTmSvauD3EuK9LmqMzhmF//BFDaC44U4yITvB/0m1kWyDqg924Ll3VHCcg== - dependencies: - "@babel/runtime" "^7.22.15" - prop-types "^15.8.1" - react-is "^18.2.0" - -"@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/arborist@^5.6.3": - version "5.6.3" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.6.3.tgz#40810080272e097b4a7a4f56108f4a31638a9874" - integrity sha512-/7hbqEM6YuRjwTcQXkK1+xKslEblY5kFQe0tZ7jKyMlIR6x4iOmhLErIkBBGtTKvYxRKdpcxnFXjCobg3UqmsA== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^2.0.3" - "@npmcli/metavuln-calculator" "^3.0.1" - "@npmcli/move-file" "^2.0.0" - "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/package-json" "^2.0.0" - "@npmcli/query" "^1.2.0" - "@npmcli/run-script" "^4.1.3" - bin-links "^3.0.3" - cacache "^16.1.3" - common-ancestor-path "^1.0.1" - hosted-git-info "^5.2.1" - json-parse-even-better-errors "^2.3.1" - json-stringify-nice "^1.1.4" - minimatch "^5.1.0" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - nopt "^6.0.0" - npm-install-checks "^5.0.0" - npm-package-arg "^9.0.0" - npm-pick-manifest "^7.0.2" - npm-registry-fetch "^13.0.0" - npmlog "^6.0.2" - pacote "^13.6.1" - parse-conflict-json "^2.0.1" - proc-log "^2.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^2.0.2" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.7" - ssri "^9.0.0" - treeverse "^2.0.0" - walk-up-path "^1.0.0" - -"@npmcli/ci-detect@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-2.0.0.tgz#e63c91bcd4185ac1e85720a34fc48e164ece5b89" - integrity sha512-8yQtQ9ArHh/TzdUDKQwEvwCgpDuhSWTDAbiKMl3854PcT+Dk4UmWaiawuFTLy9n5twzXOBXVflWe+90/ffXQrA== - -"@npmcli/config@^4.2.1": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-4.2.2.tgz#2e3334dda84f48d059309c53d152e66b05ca24b7" - integrity sha512-5GNcLd+0c4bYBnFop53+26CO5GQP0R9YcxlernohpHDWdIgzUg9I0+GEMk3sNHnLntATVU39d283A4OO+W402w== - dependencies: - "@npmcli/map-workspaces" "^2.0.2" - ini "^3.0.0" - mkdirp-infer-owner "^2.0.0" - nopt "^6.0.0" - proc-log "^2.0.0" - read-package-json-fast "^2.0.3" - semver "^7.3.5" - walk-up-path "^1.0.0" - -"@npmcli/disparity-colors@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-2.0.0.tgz#cb518166ee21573b96241a3613fef70acb2a60ba" - integrity sha512-FFXGrIjhvd2qSZ8iS0yDvbI7nbjdyT2VNO7wotosjYZM2p2r8PN3B7Om3M5NO9KqW/OVzfzLB3L0V5Vo5QXC7A== - dependencies: - ansi-styles "^4.3.0" - -"@npmcli/fs@^2.1.0", "@npmcli/fs@^2.1.1": - 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/git@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.2.tgz#5c5de6b4d70474cf2d09af149ce42e4e1dacb931" - integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== - dependencies: - "@npmcli/promise-spawn" "^3.0.0" - lru-cache "^7.4.4" - mkdirp "^1.0.4" - npm-pick-manifest "^7.0.0" - proc-log "^2.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^2.0.2" - -"@npmcli/installed-package-contents@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== - dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -"@npmcli/map-workspaces@^2.0.2", "@npmcli/map-workspaces@^2.0.3": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc" - integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== - dependencies: - "@npmcli/name-from-folder" "^1.0.1" - glob "^8.0.1" - minimatch "^5.0.1" - read-package-json-fast "^2.0.3" - -"@npmcli/metavuln-calculator@^3.0.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" - integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== - dependencies: - cacache "^16.0.0" - json-parse-even-better-errors "^2.3.1" - pacote "^13.0.3" - semver "^7.3.5" - -"@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" - -"@npmcli/name-from-folder@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" - integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== - -"@npmcli/node-gyp@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" - integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== - -"@npmcli/package-json@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" - integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== - dependencies: - json-parse-even-better-errors "^2.3.1" - -"@npmcli/promise-spawn@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" - integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== - dependencies: - infer-owner "^1.0.4" - -"@npmcli/query@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-1.2.0.tgz#46468d583cf013aa92102970700f9555314aabe4" - integrity sha512-uWglsUM3PjBLgTSmZ3/vygeGdvWEIZ3wTUnzGFbprC/RtvQSaT+GAXu1DXmSFj2bD3oOZdcRm1xdzsV2z1YWdw== - dependencies: - npm-package-arg "^9.1.0" - postcss-selector-parser "^6.0.10" - semver "^7.3.7" - -"@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.2.0", "@npmcli/run-script@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946" - integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== - dependencies: - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/promise-spawn" "^3.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^2.0.3" - which "^2.0.2" - -"@octokit/auth-token@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.3.tgz#ce7e48a3166731f26068d7a7a7996b5da58cbe0c" - integrity sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA== - dependencies: - "@octokit/types" "^9.0.0" - -"@octokit/core@^4.1.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.0.tgz#8c253ba9605aca605bc46187c34fcccae6a96648" - integrity sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg== - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^7.0.0": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.5.tgz#2bb2a911c12c50f10014183f5d596ce30ac67dd1" - integrity sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA== - dependencies: - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^5.0.0": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.5.tgz#a4cb3ea73f83b861893a6370ee82abb36e81afd2" - integrity sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ== - dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^16.0.0": - version "16.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-16.0.0.tgz#d92838a6cd9fb4639ca875ddb3437f1045cc625e" - integrity sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA== - -"@octokit/plugin-paginate-rest@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz#f34b5a7d9416019126042cd7d7b811e006c0d561" - integrity sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw== - dependencies: - "@octokit/types" "^9.0.0" - -"@octokit/plugin-request-log@^1.0.4": - 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@^7.0.0": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz#f7ebe18144fd89460f98f35a587b056646e84502" - integrity sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.3.1" - -"@octokit/request-error@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" - integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^6.0.0": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.3.tgz#76d5d6d44da5c8d406620a4c285d280ae310bdb4" - integrity sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA== - dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/rest@^19.0.0": - version "19.0.7" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.7.tgz#d2e21b4995ab96ae5bfae50b4969da7e04e0bb70" - integrity sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA== - dependencies: - "@octokit/core" "^4.1.0" - "@octokit/plugin-paginate-rest" "^6.0.0" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^7.0.0" - -"@octokit/types@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.0.0.tgz#6050db04ddf4188ec92d60e4da1a2ce0633ff635" - integrity sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw== - dependencies: - "@octokit/openapi-types" "^16.0.0" - -"@pmmmwh/react-refresh-webpack-plugin@^0.5.3": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz#58f8217ba70069cc6a73f5d7e05e85b458c150e2" - integrity sha512-bcKCAzF0DV2IIROp9ZHkRJa6O4jy7NlnHdWL3GmcUxYWNjLXkK5kfELELwEfSP5hXPfVL/qOGMAROuMQb9GG8Q== - dependencies: - ansi-html-community "^0.0.8" - common-path-prefix "^3.0.0" - core-js-pure "^3.8.1" - error-stack-parser "^2.0.6" - find-up "^5.0.0" - html-entities "^2.1.0" - loader-utils "^2.0.0" - schema-utils "^3.0.0" - source-map "^0.7.3" - -"@pnpm/network.ca-file@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" - integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== - dependencies: - graceful-fs "4.2.10" - -"@pnpm/npm-conf@^1.0.4": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz#3475541fb71d7b6ce68acaaa3392eae9fedf3276" - integrity sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A== - dependencies: - "@pnpm/network.ca-file" "^1.0.1" - config-chain "^1.1.11" - -"@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== - -"@reduxjs/toolkit@^1.6.1": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.8.5.tgz#c14bece03ee08be88467f22dc0ecf9cf875527cd" - integrity sha512-f4D5EXO7A7Xq35T0zRbWq5kJQyXzzscnHKmjnu2+37B3rwHU6mX9PYlbfXdnxcY6P/7zfmjhgan0Z+yuOfeBmA== - dependencies: - immer "^9.0.7" - redux "^4.1.2" - redux-thunk "^2.4.1" - reselect "^4.1.5" - -"@rollup/plugin-babel@^5.2.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" - integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@rollup/pluginutils" "^3.1.0" - -"@rollup/plugin-node-resolve@^11.2.1": - version "11.2.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" - integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.19.0" - -"@rollup/plugin-replace@^2.4.1": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" - integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - magic-string "^0.25.7" - -"@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@rushstack/eslint-patch@^1.1.0": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz#0c8b74c50f29ee44f423f7416829c0bf8bb5eb27" - integrity sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA== - -"@semantic-release/changelog@^6.0.1": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@semantic-release/changelog/-/changelog-6.0.2.tgz#fdcdbd368788c8fcc69c4af29bf2064f4afb45f4" - integrity sha512-jHqfTkoPbDEOAgAP18mGP53IxeMwxTISN+GwTRy9uLu58UjARoZU8ScCgWGeO2WPkEsm57H8AkyY02W2ntIlIw== - dependencies: - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - fs-extra "^11.0.0" - lodash "^4.17.4" - -"@semantic-release/commit-analyzer@^9.0.2": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz#a78e54f9834193b55f1073fa6258eecc9a545e03" - integrity sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g== - dependencies: - conventional-changelog-angular "^5.0.0" - conventional-commits-filter "^2.0.0" - conventional-commits-parser "^3.2.3" - debug "^4.0.0" - import-from "^4.0.0" - lodash "^4.17.4" - micromatch "^4.0.2" - -"@semantic-release/error@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-3.0.0.tgz#30a3b97bbb5844d695eb22f9d3aa40f6a92770c2" - integrity sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw== - -"@semantic-release/git@^10.0.1": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/git/-/git-10.0.1.tgz#c646e55d67fae623875bf3a06a634dd434904498" - integrity sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w== - dependencies: - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - debug "^4.0.0" - dir-glob "^3.0.0" - execa "^5.0.0" - lodash "^4.17.4" - micromatch "^4.0.0" - p-reduce "^2.0.0" - -"@semantic-release/github@^8.0.0": - version "8.0.7" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.7.tgz#643aee7a5cdd2acd3ae643bb90ad4ac796901de6" - integrity sha512-VtgicRIKGvmTHwm//iqTh/5NGQwsncOMR5vQK9pMT92Aem7dv37JFKKRuulUsAnUOIlO4G8wH3gPiBAA0iW0ww== - dependencies: - "@octokit/rest" "^19.0.0" - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - bottleneck "^2.18.1" - debug "^4.0.0" - dir-glob "^3.0.0" - fs-extra "^11.0.0" - globby "^11.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - issue-parser "^6.0.0" - lodash "^4.17.4" - mime "^3.0.0" - p-filter "^2.0.0" - p-retry "^4.0.0" - url-join "^4.0.0" - -"@semantic-release/npm@^9.0.0": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-9.0.2.tgz#0f0903b4df6e93ef237372146bc376087fed4e1d" - integrity sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g== - dependencies: - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - execa "^5.0.0" - fs-extra "^11.0.0" - lodash "^4.17.15" - nerf-dart "^1.0.0" - normalize-url "^6.0.0" - npm "^8.3.0" - rc "^1.2.8" - read-pkg "^5.0.0" - registry-auth-token "^5.0.0" - semver "^7.1.2" - tempy "^1.0.0" - -"@semantic-release/release-notes-generator@^10.0.0": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz#85f7ca78bfa6b01fb5fda0ac48112855d69171dc" - integrity sha512-k4x4VhIKneOWoBGHkx0qZogNjCldLPRiAjnIpMnlUh6PtaWXp/T+C9U7/TaNDDtgDa5HMbHl4WlREdxHio6/3w== - dependencies: - conventional-changelog-angular "^5.0.0" - conventional-changelog-writer "^5.0.0" - conventional-commits-filter "^2.0.0" - conventional-commits-parser "^3.2.3" - debug "^4.0.0" - get-stream "^6.0.0" - import-from "^4.0.0" - into-stream "^6.0.0" - lodash "^4.17.4" - read-pkg-up "^7.0.0" - -"@sinclair/typebox@^0.24.1": - version "0.24.38" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.38.tgz#7f68d9c5775c4c2cec0524b3b990263dd009c968" - integrity sha512-IbYB6vdhLFmzGEyXXEdFAJKyq7S4/RsivkgxNzs/LzwYuUJHmeNQ0cHkjG/Yqm6VgUzzZDLMZAf0XgeeaZAocA== - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@stablelib/aead@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/aead/-/aead-1.0.1.tgz#c4b1106df9c23d1b867eb9b276d8f42d5fc4c0c3" - integrity sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg== - -"@stablelib/binary@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.1.tgz#c5900b94368baf00f811da5bdb1610963dfddf7f" - integrity sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== - dependencies: - "@stablelib/int" "^1.0.1" - -"@stablelib/bytes@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/bytes/-/bytes-1.0.1.tgz#0f4aa7b03df3080b878c7dea927d01f42d6a20d8" - integrity sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ== - -"@stablelib/chacha20poly1305@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz#de6b18e283a9cb9b7530d8767f99cde1fec4c2ee" - integrity sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA== - dependencies: - "@stablelib/aead" "^1.0.1" - "@stablelib/binary" "^1.0.1" - "@stablelib/chacha" "^1.0.1" - "@stablelib/constant-time" "^1.0.1" - "@stablelib/poly1305" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/chacha@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/chacha/-/chacha-1.0.1.tgz#deccfac95083e30600c3f92803a3a1a4fa761371" - integrity sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/constant-time@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/constant-time/-/constant-time-1.0.1.tgz#bde361465e1cf7b9753061b77e376b0ca4c77e35" - integrity sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg== - -"@stablelib/ed25519@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@stablelib/ed25519/-/ed25519-1.0.3.tgz#f8fdeb6f77114897c887bb6a3138d659d3f35996" - integrity sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg== - dependencies: - "@stablelib/random" "^1.0.2" - "@stablelib/sha512" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/hash@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/hash/-/hash-1.0.1.tgz#3c944403ff2239fad8ebb9015e33e98444058bc5" - integrity sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg== - -"@stablelib/hkdf@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/hkdf/-/hkdf-1.0.1.tgz#b4efd47fd56fb43c6a13e8775a54b354f028d98d" - integrity sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g== - dependencies: - "@stablelib/hash" "^1.0.1" - "@stablelib/hmac" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/hmac@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/hmac/-/hmac-1.0.1.tgz#3d4c1b8cf194cb05d28155f0eed8a299620a07ec" - integrity sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA== - dependencies: - "@stablelib/constant-time" "^1.0.1" - "@stablelib/hash" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/int@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/int/-/int-1.0.1.tgz#75928cc25d59d73d75ae361f02128588c15fd008" - integrity sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w== - -"@stablelib/keyagreement@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz#4612efb0a30989deb437cd352cee637ca41fc50f" - integrity sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg== - dependencies: - "@stablelib/bytes" "^1.0.1" - -"@stablelib/poly1305@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/poly1305/-/poly1305-1.0.1.tgz#93bfb836c9384685d33d70080718deae4ddef1dc" - integrity sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA== - dependencies: - "@stablelib/constant-time" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/random@^1.0.1", "@stablelib/random@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.2.tgz#2dece393636489bf7e19c51229dd7900eddf742c" - integrity sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/sha256@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/sha256/-/sha256-1.0.1.tgz#77b6675b67f9b0ea081d2e31bda4866297a3ae4f" - integrity sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/hash" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/sha512@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/sha512/-/sha512-1.0.1.tgz#6da700c901c2c0ceacbd3ae122a38ac57c72145f" - integrity sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/hash" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/wipe@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" - integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== - -"@stablelib/x25519@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@stablelib/x25519/-/x25519-1.0.3.tgz#13c8174f774ea9f3e5e42213cbf9fc68a3c7b7fd" - integrity sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw== - dependencies: - "@stablelib/keyagreement" "^1.0.1" - "@stablelib/random" "^1.0.2" - "@stablelib/wipe" "^1.0.1" - -"@surma/rollup-plugin-off-main-thread@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" - integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== - dependencies: - ejs "^3.1.6" - json5 "^2.2.0" - magic-string "^0.25.0" - string.prototype.matchall "^4.0.6" - -"@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" - -"@szhsin/react-accordion@^1.2.1": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@szhsin/react-accordion/-/react-accordion-1.2.3.tgz#ee4d83c66a89748bfe2a2b23dd14bbb3d4f63fbf" - integrity sha512-KsDmaYsv4+Rnla+fSdZMIMonzuvXlDRPaFeIa7Je0dnwY4iFry5eiw27GQ6276+tYkVRgUyfS/mEcL48efSivA== - dependencies: - react-transition-state "^2.1.1" - -"@testing-library/dom@^8.5.0": - version "8.17.1" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.17.1.tgz#2d7af4ff6dad8d837630fecd08835aee08320ad7" - integrity sha512-KnH2MnJUzmFNPW6RIKfd+zf2Wue8mEKX0M3cpX6aKl5ZXrJM1/c/Pc8c2xDNYQCnJO48Sm5ITbMXgqTr3h4jxQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^4.2.0" - aria-query "^5.0.0" - chalk "^4.1.0" - dom-accessibility-api "^0.5.9" - lz-string "^1.4.4" - pretty-format "^27.0.2" - -"@testing-library/jest-dom@^5.16.5": - version "5.16.5" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e" - integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA== - dependencies: - "@adobe/css-tools" "^4.0.1" - "@babel/runtime" "^7.9.2" - "@types/testing-library__jest-dom" "^5.9.1" - aria-query "^5.0.0" - chalk "^3.0.0" - css.escape "^1.5.1" - dom-accessibility-api "^0.5.6" - lodash "^4.17.15" - redent "^3.0.0" - -"@testing-library/react@^13.4.0": - version "13.4.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.4.0.tgz#6a31e3bf5951615593ad984e96b9e5e2d9380966" - integrity sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw== - dependencies: - "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^8.5.0" - "@types/react-dom" "^18.0.0" - -"@testing-library/user-event@^13.5.0": - version "13.5.0" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-13.5.0.tgz#69d77007f1e124d55314a2b73fd204b333b13295" - integrity sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg== - dependencies: - "@babel/runtime" "^7.12.5" - -"@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== - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@types/aria-query@^4.2.0": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" - integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.1.19" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" - integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== - 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.18.1" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.1.tgz#ce5e2c8c272b99b7a9fd69fa39f0b4cd85028bd9" - integrity sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA== - dependencies: - "@babel/types" "^7.3.0" - -"@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/bonjour@^3.5.9": - version "3.5.10" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" - integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== - dependencies: - "@types/node" "*" - -"@types/connect-history-api-fallback@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" - integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== - dependencies: - "@types/node" "*" - -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1": - version "8.4.6" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.6.tgz#7976f054c1bccfcf514bff0564c0c41df5c08207" - integrity sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": - version "4.17.30" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz#0f2f99617fa8f9696170c46152ccf7500b34ac04" - integrity sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - -"@types/express@*", "@types/express@^4.17.13": - version "4.17.13" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" - integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.18" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/graceful-fs@^4.1.2": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== - dependencies: - "@types/node" "*" - -"@types/hoist-non-react-statics@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" - integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - -"@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - -"@types/http-proxy@^1.17.8": - version "1.17.9" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" - integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@*": - version "29.0.0" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.0.0.tgz#bc66835bf6b09d6a47e22c21d7f5b82692e60e72" - integrity sha512-X6Zjz3WO4cT39Gkl0lZ2baFRaEMqJl5NC1OjElkwtNzAlbkr2K/WJXkBkH5VP0zx4Hgsd2TZYdOEfvp2Dxia+Q== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - -"@types/jest@^27.5.2": - version "27.5.2" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.5.2.tgz#ec49d29d926500ffb9fd22b84262e862049c026c" - integrity sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA== - dependencies: - jest-matcher-utils "^27.0.0" - pretty-format "^27.0.0" - -"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@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/mime@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" - integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== - -"@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== - -"@types/node@*": - version "18.7.16" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.16.tgz#0eb3cce1e37c79619943d2fd903919fc30850601" - integrity sha512-EQHhixfu+mkqHMZl1R2Ovuvn47PUw18azMJOTwSZr9/fhzHNGXAJ0ma0dayRVchprpCj0Kc1K1xKoWaATWF1qg== - -"@types/node@^16.11.57": - version "16.11.58" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.58.tgz#0a3698dee3492617a8d5fe7998d18d7520b63026" - integrity sha512-uMVxJ111wpHzkx/vshZFb6Qni3BOMnlWLq7q9jrwej7Yw/KvjsEbpxCCxw+hLKxexFMc8YmpG8J9tnEe/rKsIg== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/prettier@^2.1.5": - version "2.7.0" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc" - integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A== - -"@types/prop-types@*", "@types/prop-types@^15.7.5": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - -"@types/q@^1.5.1": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" - integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== - -"@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== - -"@types/react-dom@^18.0.0", "@types/react-dom@^18.0.6": - version "18.0.6" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.6.tgz#36652900024842b74607a17786b6662dd1e103a1" - integrity sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA== - dependencies: - "@types/react" "*" - -"@types/react-is@^16.7.1 || ^17.0.0": - version "17.0.3" - resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-17.0.3.tgz#2d855ba575f2fc8d17ef9861f084acc4b90a137a" - integrity sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw== - dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@^18.0.18": - version "18.0.18" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.18.tgz#9f16f33d57bc5d9dca848d12c3572110ff9429ac" - integrity sha512-6hI08umYs6NaiHFEEGioXnxJ+oEhY3eRz8VCUaudZmGdtvPviCJB8mgaMxaDWAdPSYd4eFavrPk2QIolwbLYrg== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - 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/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== - -"@types/serve-index@^1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" - integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== - dependencies: - "@types/express" "*" - -"@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" - integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== - dependencies: - "@types/mime" "*" - "@types/node" "*" - -"@types/sockjs@^0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" - integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== - dependencies: - "@types/node" "*" - -"@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== - -"@types/testing-library__jest-dom@^5.9.1": - version "5.14.5" - resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz#d113709c90b3c75fdb127ec338dad7d5f86c974f" - integrity sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ== - dependencies: - "@types/jest" "*" - -"@types/trusted-types@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" - integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== - -"@types/use-sync-external-store@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" - integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== - -"@types/ws@^8.5.1": - version "8.5.3" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" - integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^16.0.0": - version "16.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" - integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^17.0.8": - version "17.0.12" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.12.tgz#0745ff3e4872b4ace98616d4b7e37ccbd75f9526" - integrity sha512-Nz4MPhecOFArtm81gFQvQqdV7XYCrWKx5uUt6GNHredFHn1i2mtWqXTON7EPXMtNi1qjtjEM/VCHDhcHsAMLXQ== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^5.5.0": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.36.2.tgz#6df092a20e0f9ec748b27f293a12cb39d0c1fe4d" - integrity sha512-OwwR8LRwSnI98tdc2z7mJYgY60gf7I9ZfGjN5EjCwwns9bdTuQfAXcsjSB2wSQ/TVNYSGKf4kzVXbNGaZvwiXw== - dependencies: - "@typescript-eslint/scope-manager" "5.36.2" - "@typescript-eslint/type-utils" "5.36.2" - "@typescript-eslint/utils" "5.36.2" - debug "^4.3.4" - functional-red-black-tree "^1.0.1" - ignore "^5.2.0" - regexpp "^3.2.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/experimental-utils@^5.0.0": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.36.2.tgz#66a2b07f69595c55e718bf5a0a70a73413daa8e9" - integrity sha512-JtRmWb31KQoxGV6CHz8cI+9ki6cC7ciZepXYpCLxsdAtQlBrRBxh5Qpe/ZHyJFOT9j7gyXE+W0shWzRLPfuAFQ== - dependencies: - "@typescript-eslint/utils" "5.36.2" - -"@typescript-eslint/parser@^5.5.0": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.36.2.tgz#3ddf323d3ac85a25295a55fcb9c7a49ab4680ddd" - integrity sha512-qS/Kb0yzy8sR0idFspI9Z6+t7mqk/oRjnAYfewG+VN73opAUvmYL3oPIMmgOX6CnQS6gmVIXGshlb5RY/R22pA== - dependencies: - "@typescript-eslint/scope-manager" "5.36.2" - "@typescript-eslint/types" "5.36.2" - "@typescript-eslint/typescript-estree" "5.36.2" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.36.2": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.36.2.tgz#a75eb588a3879ae659514780831370642505d1cd" - integrity sha512-cNNP51L8SkIFSfce8B1NSUBTJTu2Ts4nWeWbFrdaqjmn9yKrAaJUBHkyTZc0cL06OFHpb+JZq5AUHROS398Orw== - dependencies: - "@typescript-eslint/types" "5.36.2" - "@typescript-eslint/visitor-keys" "5.36.2" - -"@typescript-eslint/type-utils@5.36.2": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.36.2.tgz#752373f4babf05e993adf2cd543a763632826391" - integrity sha512-rPQtS5rfijUWLouhy6UmyNquKDPhQjKsaKH0WnY6hl/07lasj8gPaH2UD8xWkePn6SC+jW2i9c2DZVDnL+Dokw== - dependencies: - "@typescript-eslint/typescript-estree" "5.36.2" - "@typescript-eslint/utils" "5.36.2" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.36.2": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.36.2.tgz#a5066e500ebcfcee36694186ccc57b955c05faf9" - integrity sha512-9OJSvvwuF1L5eS2EQgFUbECb99F0mwq501w0H0EkYULkhFa19Qq7WFbycdw1PexAc929asupbZcgjVIe6OK/XQ== - -"@typescript-eslint/typescript-estree@5.36.2": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.2.tgz#0c93418b36c53ba0bc34c61fe9405c4d1d8fe560" - integrity sha512-8fyH+RfbKc0mTspfuEjlfqA4YywcwQK2Amcf6TDOwaRLg7Vwdu4bZzyvBZp4bjt1RRjQ5MDnOZahxMrt2l5v9w== - dependencies: - "@typescript-eslint/types" "5.36.2" - "@typescript-eslint/visitor-keys" "5.36.2" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.36.2", "@typescript-eslint/utils@^5.13.0": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.36.2.tgz#b01a76f0ab244404c7aefc340c5015d5ce6da74c" - integrity sha512-uNcopWonEITX96v9pefk9DC1bWMdkweeSsewJ6GeC7L6j2t0SJywisgkr9wUTtXk90fi2Eljj90HSHm3OGdGRg== - dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.36.2" - "@typescript-eslint/types" "5.36.2" - "@typescript-eslint/typescript-estree" "5.36.2" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/visitor-keys@5.36.2": - version "5.36.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.2.tgz#2f8f78da0a3bad3320d2ac24965791ac39dace5a" - integrity sha512-BtRvSR6dEdrNt7Net2/XDjbYKU5Ml6GqJgVfXT0CxTCJlnIqK7rAGreuWKMT2t8cFUT2Msv5oxw0GMRD7T5J7A== - dependencies: - "@typescript-eslint/types" "5.36.2" - eslint-visitor-keys "^3.3.0" - -"@walletconnect/core@2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.10.1.tgz#d1fb442bd77424666bacdb0f5a07f7708fb3d984" - integrity sha512-WAoXfmj+Zy5q48TnrKUjmHXJCBahzKwbul+noepRZf7JDtUAZ9IOWpUjg+UPRbfK5EiWZ0TF42S6SXidf7EHoQ== - dependencies: - "@walletconnect/heartbeat" "1.2.1" - "@walletconnect/jsonrpc-provider" "1.0.13" - "@walletconnect/jsonrpc-types" "1.0.3" - "@walletconnect/jsonrpc-utils" "1.0.8" - "@walletconnect/jsonrpc-ws-connection" "1.0.13" - "@walletconnect/keyvaluestorage" "^1.0.2" - "@walletconnect/logger" "^2.0.1" - "@walletconnect/relay-api" "^1.0.9" - "@walletconnect/relay-auth" "^1.0.4" - "@walletconnect/safe-json" "^1.0.2" - "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.10.1" - "@walletconnect/utils" "2.10.1" - events "^3.3.0" - lodash.isequal "4.5.0" - uint8arrays "^3.1.0" - -"@walletconnect/environment@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.1.tgz#1d7f82f0009ab821a2ba5ad5e5a7b8ae3b214cd7" - integrity sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg== - dependencies: - tslib "1.14.1" - -"@walletconnect/ethereum-provider@^2.8.4": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/ethereum-provider/-/ethereum-provider-2.10.1.tgz#4733a98f0b388cf5ae6c2b269f50da87da432ee5" - integrity sha512-Yhoz8EXkKzxOlBT6G+elphqCx/gkH6RxD9/ZAiy9lLc8Ng5p1gvKCVVP5zsGNE9FbkKmHd+J9JJRzn2Bw2yqtQ== - dependencies: - "@walletconnect/jsonrpc-http-connection" "^1.0.7" - "@walletconnect/jsonrpc-provider" "^1.0.13" - "@walletconnect/jsonrpc-types" "^1.0.3" - "@walletconnect/jsonrpc-utils" "^1.0.8" - "@walletconnect/sign-client" "2.10.1" - "@walletconnect/types" "2.10.1" - "@walletconnect/universal-provider" "2.10.1" - "@walletconnect/utils" "2.10.1" - events "^3.3.0" - -"@walletconnect/events@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/events/-/events-1.0.1.tgz#2b5f9c7202019e229d7ccae1369a9e86bda7816c" - integrity sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ== - dependencies: - keyvaluestorage-interface "^1.0.0" - tslib "1.14.1" - -"@walletconnect/heartbeat@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@walletconnect/heartbeat/-/heartbeat-1.2.1.tgz#afaa3a53232ae182d7c9cff41c1084472d8f32e9" - integrity sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q== - dependencies: - "@walletconnect/events" "^1.0.1" - "@walletconnect/time" "^1.0.2" - tslib "1.14.1" - -"@walletconnect/jsonrpc-http-connection@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.7.tgz#a6973569b8854c22da707a759d241e4f5c2d5a98" - integrity sha512-qlfh8fCfu8LOM9JRR9KE0s0wxP6ZG9/Jom8M0qsoIQeKF3Ni0FyV4V1qy/cc7nfI46SLQLSl4tgWSfLiE1swyQ== - dependencies: - "@walletconnect/jsonrpc-utils" "^1.0.6" - "@walletconnect/safe-json" "^1.0.1" - cross-fetch "^3.1.4" - tslib "1.14.1" - -"@walletconnect/jsonrpc-provider@1.0.13", "@walletconnect/jsonrpc-provider@^1.0.13": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.13.tgz#9a74da648d015e1fffc745f0c7d629457f53648b" - integrity sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g== - dependencies: - "@walletconnect/jsonrpc-utils" "^1.0.8" - "@walletconnect/safe-json" "^1.0.2" - tslib "1.14.1" - -"@walletconnect/jsonrpc-types@1.0.3", "@walletconnect/jsonrpc-types@^1.0.2", "@walletconnect/jsonrpc-types@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.3.tgz#65e3b77046f1a7fa8347ae02bc1b841abe6f290c" - integrity sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw== - dependencies: - keyvaluestorage-interface "^1.0.0" - tslib "1.14.1" - -"@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.7", "@walletconnect/jsonrpc-utils@^1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz#82d0cc6a5d6ff0ecc277cb35f71402c91ad48d72" - integrity sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw== - dependencies: - "@walletconnect/environment" "^1.0.1" - "@walletconnect/jsonrpc-types" "^1.0.3" - tslib "1.14.1" - -"@walletconnect/jsonrpc-ws-connection@1.0.13": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.13.tgz#23b0cdd899801bfbb44a6556936ec2b93ef2adf4" - integrity sha512-mfOM7uFH4lGtQxG+XklYuFBj6dwVvseTt5/ahOkkmpcAEgz2umuzu7fTR+h5EmjQBdrmYyEBOWADbeaFNxdySg== - dependencies: - "@walletconnect/jsonrpc-utils" "^1.0.6" - "@walletconnect/safe-json" "^1.0.2" - events "^3.3.0" - tslib "1.14.1" - ws "^7.5.1" - -"@walletconnect/keyvaluestorage@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.0.2.tgz#92f5ca0f54c1a88a093778842ce0c874d86369c8" - integrity sha512-U/nNG+VLWoPFdwwKx0oliT4ziKQCEoQ27L5Hhw8YOFGA2Po9A9pULUYNWhDgHkrb0gYDNt//X7wABcEWWBd3FQ== - dependencies: - safe-json-utils "^1.1.1" - tslib "1.14.1" - -"@walletconnect/logger@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.0.1.tgz#7f489b96e9a1ff6bf3e58f0fbd6d69718bf844a8" - integrity sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ== - dependencies: - pino "7.11.0" - tslib "1.14.1" - -"@walletconnect/modal-core@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@walletconnect/modal-core/-/modal-core-2.6.2.tgz#d73e45d96668764e0c8668ea07a45bb8b81119e9" - integrity sha512-cv8ibvdOJQv2B+nyxP9IIFdxvQznMz8OOr/oR/AaUZym4hjXNL/l1a2UlSQBXrVjo3xxbouMxLb3kBsHoYP2CA== - dependencies: - valtio "1.11.2" - -"@walletconnect/modal-ui@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@walletconnect/modal-ui/-/modal-ui-2.6.2.tgz#fa57c087c57b7f76aaae93deab0f84bb68b59cf9" - integrity sha512-rbdstM1HPGvr7jprQkyPggX7rP4XiCG85ZA+zWBEX0dVQg8PpAgRUqpeub4xQKDgY7pY/xLRXSiCVdWGqvG2HA== - dependencies: - "@walletconnect/modal-core" "2.6.2" - lit "2.8.0" - motion "10.16.2" - qrcode "1.5.3" - -"@walletconnect/modal@^2.4.5": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@walletconnect/modal/-/modal-2.6.2.tgz#4b534a836f5039eeb3268b80be7217a94dd12651" - integrity sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA== - dependencies: - "@walletconnect/modal-core" "2.6.2" - "@walletconnect/modal-ui" "2.6.2" - -"@walletconnect/relay-api@^1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.9.tgz#f8c2c3993dddaa9f33ed42197fc9bfebd790ecaf" - integrity sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg== - dependencies: - "@walletconnect/jsonrpc-types" "^1.0.2" - tslib "1.14.1" - -"@walletconnect/relay-auth@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz#0b5c55c9aa3b0ef61f526ce679f3ff8a5c4c2c7c" - integrity sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ== - dependencies: - "@stablelib/ed25519" "^1.0.2" - "@stablelib/random" "^1.0.1" - "@walletconnect/safe-json" "^1.0.1" - "@walletconnect/time" "^1.0.2" - tslib "1.14.1" - uint8arrays "^3.0.0" - -"@walletconnect/safe-json@^1.0.1", "@walletconnect/safe-json@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.2.tgz#7237e5ca48046e4476154e503c6d3c914126fa77" - integrity sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA== - dependencies: - tslib "1.14.1" - -"@walletconnect/sign-client@2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.10.1.tgz#db60bc9400cd79f0cb2380067343512b21ee4749" - integrity sha512-iG3eJGi1yXeG3xGeVSSMf8wDFyx239B0prLQfy1uYDtYFb2ynnH/09oqAZyKn96W5nfQzUgM2Mz157PVdloH3Q== - dependencies: - "@walletconnect/core" "2.10.1" - "@walletconnect/events" "^1.0.1" - "@walletconnect/heartbeat" "1.2.1" - "@walletconnect/jsonrpc-utils" "1.0.8" - "@walletconnect/logger" "^2.0.1" - "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.10.1" - "@walletconnect/utils" "2.10.1" - events "^3.3.0" - -"@walletconnect/time@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@walletconnect/time/-/time-1.0.2.tgz#6c5888b835750ecb4299d28eecc5e72c6d336523" - integrity sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g== - dependencies: - tslib "1.14.1" - -"@walletconnect/types@2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.10.1.tgz#1355bce236f3eef575716ea3efe4beed98a873ef" - integrity sha512-7pccAhajQdiH2kYywjE1XI64IqRI+4ioyGy0wvz8d0UFQ/DSG3MLKR8jHf5aTOafQQ/HRLz6xvlzN4a7gIVkUQ== - dependencies: - "@walletconnect/events" "^1.0.1" - "@walletconnect/heartbeat" "1.2.1" - "@walletconnect/jsonrpc-types" "1.0.3" - "@walletconnect/keyvaluestorage" "^1.0.2" - "@walletconnect/logger" "^2.0.1" - events "^3.3.0" - -"@walletconnect/universal-provider@2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/universal-provider/-/universal-provider-2.10.1.tgz#c4a77bd2eed1a335edae5b2b298636092fff63ef" - integrity sha512-81QxTH/X4dRoYCz0U9iOrBYOcj7N897ONcB57wsGhEkV7Rc9htmWJq2CzeOuxvVZ+pNZkE+/aw9LrhizO1Ltxg== - dependencies: - "@walletconnect/jsonrpc-http-connection" "^1.0.7" - "@walletconnect/jsonrpc-provider" "1.0.13" - "@walletconnect/jsonrpc-types" "^1.0.2" - "@walletconnect/jsonrpc-utils" "^1.0.7" - "@walletconnect/logger" "^2.0.1" - "@walletconnect/sign-client" "2.10.1" - "@walletconnect/types" "2.10.1" - "@walletconnect/utils" "2.10.1" - events "^3.3.0" - -"@walletconnect/utils@2.10.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.10.1.tgz#65b37c9800eb0e80a08385b6987471fb46e1e22e" - integrity sha512-DM0dKgm9O58l7VqJEyV2OVv16XRePhDAReI23let6WdW1dSpw/Y/A89Lp99ZJOjLm2FxyblMRF3YRaZtHwBffw== - dependencies: - "@stablelib/chacha20poly1305" "1.0.1" - "@stablelib/hkdf" "1.0.1" - "@stablelib/random" "^1.0.2" - "@stablelib/sha256" "1.0.1" - "@stablelib/x25519" "^1.0.3" - "@walletconnect/relay-api" "^1.0.9" - "@walletconnect/safe-json" "^1.0.2" - "@walletconnect/time" "^1.0.2" - "@walletconnect/types" "2.10.1" - "@walletconnect/window-getters" "^1.0.1" - "@walletconnect/window-metadata" "^1.0.1" - detect-browser "5.3.0" - query-string "7.1.3" - uint8arrays "^3.1.0" - -"@walletconnect/window-getters@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.1.tgz#f36d1c72558a7f6b87ecc4451fc8bd44f63cbbdc" - integrity sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q== - dependencies: - tslib "1.14.1" - -"@walletconnect/window-metadata@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz#2124f75447b7e989e4e4e1581d55d25bc75f7be5" - integrity sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA== - dependencies: - "@walletconnect/window-getters" "^1.0.1" - tslib "1.14.1" - -"@web3-react/core@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@web3-react/core/-/core-8.2.0.tgz#95fb615bb283be520e6f61b5e48cfb0047943808" - integrity sha512-r7dmK2E8Jrpvm/DF93hGMB+8lECHSI3Oo0NrHbhxkisK6in6rdgAXeYFhZtM48LBAm9py6fQvLzjCM6Qx9q0oQ== - dependencies: - "@web3-react/store" "^8.2.0" - "@web3-react/types" "^8.2.0" - zustand "^4.3.5" - optionalDependencies: - "@ethersproject/providers" "^5" - -"@web3-react/eip1193@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@web3-react/eip1193/-/eip1193-8.2.0.tgz#a7953769f9d0bec54472aceb01f72c889458378f" - integrity sha512-Ugbt+FisHO8aLD5o5B4AZdtgSVpjrbmtC5MgHrOEBw+IwFqr20EJreh052u8ExI2OrPjARIVOkNcp50Xxs7oUw== - dependencies: - "@web3-react/types" "^8.2.0" - eventemitter3 "^4.0.7" - -"@web3-react/metamask@8.2.1": - version "8.2.1" - resolved "https://registry.yarnpkg.com/@web3-react/metamask/-/metamask-8.2.1.tgz#7ffac16e2a55ff8f1195e2831a9f9f99fa0bfba9" - integrity sha512-JysxkAImIygkD95Bimrj7HwcTq79tq4ZSlphZt24LBMrEVY5K8k+e5mCAuJuDZ7Fu+aBxqpS0lgPjaBGKdNu/A== - dependencies: - "@metamask/detect-provider" "^1.2.0" - "@web3-react/types" "^8.2.0" - -"@web3-react/store@^8.2.0": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@web3-react/store/-/store-8.2.2.tgz#d85a560e2655919030d237e2e0e6e2529ff038e0" - integrity sha512-ITMkLzyw8tSTTEf8NcjIdewphbCpWHwK4EmwRxPCZMMRs+apZwoj3R/YNflMBoPMC+ybWKnVVpDd6CprF1TU9A== - dependencies: - "@ethersproject/address" "^5" - "@web3-react/types" "^8.2.2" - zustand "4.4.0" - -"@web3-react/types@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@web3-react/types/-/types-8.2.0.tgz#195464ebb94cb417e6dc3c16951573f9b6b3832a" - integrity sha512-TBYTFlqJZaEpVbuAAKRJFX5PZc3lI1TqDZzY94zwCrCh4GBepwwK7+PxmRAppMFuNa5x0vFX/ghLEC44e6TCFg== - dependencies: - zustand "^4.3.5" - -"@web3-react/types@^8.2.0", "@web3-react/types@^8.2.2": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@web3-react/types/-/types-8.2.2.tgz#1ae7f11069d9a9c711aa4152f95331747fb1e551" - integrity sha512-PrPrJNjJhUX3lL/365llAZwY0bpUm9N52OjGMFyzCIX7IR13f7WLUk/LyQa9ALneCBu3cJUVTZANuFdqdREuvw== - dependencies: - zustand "4.4.0" - -"@web3-react/walletconnect-v2@8.3.6": - version "8.3.6" - resolved "https://registry.yarnpkg.com/@web3-react/walletconnect-v2/-/walletconnect-v2-8.3.6.tgz#8f9e561ba3fa7dd15c56bec7ee1de066857f07b1" - integrity sha512-8N01Rns+Ey203D60TAj0iN4LOPsllvdY+8fl8ev+1NaPlgOtF3KrasPrFJ/5ZmVF31jBQYo2kC/X3OITBBnHDA== - dependencies: - "@walletconnect/ethereum-provider" "^2.8.4" - "@walletconnect/modal" "^2.4.5" - "@web3-react/types" "^8.2.0" - eventemitter3 "^4.0.7" - -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== - -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== - -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== - -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== - -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - -"@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" - -"@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - -"@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@xtuc/long" "4.2.2" - -"@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== - -JSONStream@^1.0.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -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.0.0, abbrev@~1.1.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-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-node@^1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" - integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== - dependencies: - acorn "^7.0.0" - acorn-walk "^7.0.0" - xtend "^4.0.2" - -acorn-walk@^7.0.0, 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.0.0, acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== - -address@^1.0.1, address@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/address/-/address-1.2.0.tgz#d352a62c92fee90f89a693eccd2a8b2139ab02d9" - integrity sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig== - -adjust-sourcemap-loader@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz#fc4a0fd080f7d10471f30a7320f25560ade28c99" - integrity sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A== - dependencies: - loader-utils "^2.0.0" - regex-parser "^2.2.11" - -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.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - 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.4.1, 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.0.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.12.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.6.0, ajv@^8.8.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: - 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-escapes@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" - integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== - dependencies: - type-fest "^1.0.2" - -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-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-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -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.3.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" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -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== - -anymatch@^3.0.3, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -"aproba@^1.0.3 || ^2.0.0", aproba@^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== - -archy@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== - -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" - -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - -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== - -argv-formatter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" - integrity sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw== - -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" - -aria-query@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.2.tgz#0b8a744295271861e1d933f8feca13f9b70cfdc1" - integrity sha512-eigU3vhqSO+Z8BKDnVLN/ompjhf3pYzecKXz8+whRy+9gZu8n1TCGfwzQUUPnqdHl9ax1Hr9031orZ+UOEYr7Q== - -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-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== - -array-includes@^3.1.4, array-includes@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" - integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - get-intrinsic "^1.1.1" - 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.prototype.flat@^1.2.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" - integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" - integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-shim-unscopables "^1.0.0" - -array.prototype.reduce@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz#8167e80089f78bff70a99e20bd4201d4663b0a6f" - integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -asap@^2.0.0, asap@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -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== - -async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -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== - -atomic-sleep@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" - integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== - -autoprefixer@^10.4.8: - version "10.4.8" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.8.tgz#92c7a0199e1cfb2ad5d9427bd585a3d75895b9e5" - integrity sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw== - dependencies: - browserslist "^4.21.3" - caniuse-lite "^1.0.30001373" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -axe-core@^4.4.3: - version "4.4.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f" - integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w== - -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" - -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== - -babel-jest@^27.4.2, babel-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" - integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== - dependencies: - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.5.1" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-loader@^8.2.3: - version "8.2.5" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" - integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== - dependencies: - find-cache-dir "^3.3.1" - loader-utils "^2.0.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - -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.1.1: - 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@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" - integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== - 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-named-asset-import@^0.3.8: - version "0.3.8" - resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" - integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== - -babel-plugin-polyfill-corejs2@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" - integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q== - dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.2" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" - integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.2" - core-js-compat "^3.21.0" - -babel-plugin-polyfill-regenerator@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe" - integrity sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.2" - -babel-plugin-transform-react-remove-prop-types@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" - integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== - -babel-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@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" - integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== - dependencies: - babel-plugin-jest-hoist "^27.5.1" - babel-preset-current-node-syntax "^1.0.0" - -babel-preset-react-app@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz#ed6005a20a24f2c88521809fa9aea99903751584" - integrity sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg== - dependencies: - "@babel/core" "^7.16.0" - "@babel/plugin-proposal-class-properties" "^7.16.0" - "@babel/plugin-proposal-decorators" "^7.16.4" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0" - "@babel/plugin-proposal-numeric-separator" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.0" - "@babel/plugin-proposal-private-methods" "^7.16.0" - "@babel/plugin-transform-flow-strip-types" "^7.16.0" - "@babel/plugin-transform-react-display-name" "^7.16.0" - "@babel/plugin-transform-runtime" "^7.16.4" - "@babel/preset-env" "^7.16.4" - "@babel/preset-react" "^7.16.0" - "@babel/preset-typescript" "^7.16.0" - "@babel/runtime" "^7.16.3" - babel-plugin-macros "^3.1.0" - babel-plugin-transform-react-remove-prop-types "^0.4.24" - -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== - -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== - -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.2.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== - -bfj@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" - integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw== - dependencies: - bluebird "^3.5.5" - check-types "^11.1.1" - hoopy "^0.1.4" - tryer "^1.0.1" - -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.0.2: - version "9.1.0" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.0.tgz#8d340146107fe3a6cb8d40699643c302e8773b62" - integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== - -bin-links@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.3.tgz#3842711ef3db2cd9f16a5f404a996a12db355a6e" - integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== - dependencies: - cmd-shim "^5.0.0" - mkdirp-infer-owner "^2.0.0" - npm-normalize-package-bin "^2.0.0" - read-cmd-shim "^3.0.0" - rimraf "^3.0.0" - write-file-atomic "^4.0.0" - -binary-extensions@^2.0.0, binary-extensions@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -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.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.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== - 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" - -bonjour-service@^1.0.11: - version "1.0.14" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.14.tgz#c346f5bc84e87802d08f8d5a60b93f758e514ee7" - integrity sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ== - dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" - 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== - -bottleneck@^2.18.1: - version "2.19.5" - resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" - integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== - -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@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -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== - -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.21.3: - version "4.21.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" - integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== - dependencies: - caniuse-lite "^1.0.30001370" - electron-to-chromium "^1.4.202" - node-releases "^2.0.6" - update-browserslist-db "^1.0.5" - -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" - -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== - -builtin-modules@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -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@^16.0.0, cacache@^16.1.0, cacache@^16.1.3: - 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" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -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.2: - 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-css@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - -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.2.0, camelcase@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001373: - version "1.0.30001393" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001393.tgz#1aa161e24fe6af2e2ccda000fc2b94be0b0db356" - integrity sha512-N/od11RX+Gsk+1qY/jbPa0R6zJupEa0lxeBG598EbrtblxVCTJsQwbRBm6+V+rxpc5lHKdsXb9RY83cZIPLseA== - -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" - -case-sensitive-paths-webpack-plugin@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" - integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== - -chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1: - 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.0.2, chalk@^4.1.0, 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" - -chalk@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" - integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== - -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== - -char-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e" - integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== - -check-types@^11.1.1: - version "11.1.2" - resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" - integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== - -chokidar@^3.4.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" - -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.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^3.2.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" - integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== - -cidr-regex@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d" - integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw== - dependencies: - ip-regex "^4.1.0" - -cjs-module-lexer@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" - integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== - -clean-css@^5.2.2: - version "5.3.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.1.tgz#d0610b0b90d125196a2894d35366f734e5d7aa32" - integrity sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg== - 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== - -cli-columns@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" - integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== - dependencies: - string-width "^4.2.3" - strip-ansi "^6.0.1" - -cli-table3@^0.6.1, cli-table3@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.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" - -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.1.1, 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.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" - integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== - -cmd-shim@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" - integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== - dependencies: - mkdirp-infer-owner "^2.0.0" - -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.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - -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== - -colord@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -colorette@^2.0.10: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== - -columnify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" - integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== - dependencies: - strip-ansi "^6.0.1" - wcwidth "^1.0.0" - -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@^7.2.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== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - -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== - -common-tags@^1.8.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" - integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== - -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== - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -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" - -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== - -config-chain@^1.1.11: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -confusing-browser-globals@^1.0.11: - 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== - -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: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -conventional-changelog-angular@^5.0.0: - version "5.0.13" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" - integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-writer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" - integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== - dependencies: - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" - handlebars "^4.7.7" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" - -conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" - integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -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.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -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.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -core-js-compat@^3.21.0, core-js-compat@^3.22.1: - version "3.25.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.25.1.tgz#6f13a90de52f89bbe6267e5620a412c7f7ff7e42" - integrity sha512-pOHS7O0i8Qt4zlPW/eIFjwp+NrTPx+wTL0ctgI2fHn31sZOq89rDsmtc/A2vAX7r6shl+bmVI+678He46jgBlw== - dependencies: - browserslist "^4.21.3" - -core-js-pure@^3.20.2, core-js-pure@^3.8.1: - version "3.25.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.25.1.tgz#79546518ae87cc362c991d9c2d211f45107991ee" - integrity sha512-7Fr74bliUDdeJCBMxkkIuQ4xfxn/SwrVg+HkJUAoNEXVqYLv55l6Af0dJ5Lq2YBUW9yKqSkLXaS5SYPK6MGa/A== - -core-js@^3.19.2: - version "3.25.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.25.1.tgz#5818e09de0db8956e16bf10e2a7141e931b7c69c" - integrity sha512-sr0FY4lnO1hkQ4gLDr24K0DGnweGO1QwSj5BpfQjpSJPdqWalja4cTps29Y/PJVG/P7FYlPDkH3hO+Tr0CvDgQ== - -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@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - -cosmiconfig@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - 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" - -cosmiconfig@^8.0.0: - version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== - dependencies: - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - path-type "^4.0.0" - -cross-fetch@^3.1.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - -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" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -css-blank-pseudo@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz#36523b01c12a25d812df343a32c322d2a2324561" - integrity sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ== - dependencies: - postcss-selector-parser "^6.0.9" - -css-declaration-sorter@^6.3.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz#be5e1d71b7a992433fb1c542c7a1b835e45682ec" - integrity sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w== - -css-has-pseudo@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz#57f6be91ca242d5c9020ee3e51bbb5b89fc7af73" - integrity sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw== - dependencies: - postcss-selector-parser "^6.0.9" - -css-loader@^6.5.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.1.tgz#e98106f154f6e1baf3fc3bc455cb9981c1d5fd2e" - integrity sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw== - dependencies: - icss-utils "^5.1.0" - postcss "^8.4.7" - 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.2.0" - semver "^7.3.5" - -css-minimizer-webpack-plugin@^3.2.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz#ab78f781ced9181992fe7b6e4f3422e76429878f" - integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q== - dependencies: - cssnano "^5.0.6" - jest-worker "^27.0.2" - postcss "^8.3.5" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - source-map "^0.6.1" - -css-prefers-color-scheme@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349" - integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA== - -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, css-tree@^1.1.3: - 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== - -css.escape@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" - integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== - -cssdb@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.0.1.tgz#3810a0c67ae06362982dfe965dbedf57a0f26617" - integrity sha512-pT3nzyGM78poCKLAEy2zWIVX2hikq6dIrjuZzLV98MumBg+xMTNYfHx7paUlfiRTgg91O/vR889CIf+qiv79Rw== - -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== - -cssnano-preset-default@^5.2.12: - version "5.2.12" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz#ebe6596ec7030e62c3eb2b3c09f533c0644a9a97" - integrity sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew== - dependencies: - css-declaration-sorter "^6.3.0" - cssnano-utils "^3.1.0" - postcss-calc "^8.2.3" - postcss-colormin "^5.3.0" - postcss-convert-values "^5.1.2" - postcss-discard-comments "^5.1.2" - postcss-discard-duplicates "^5.1.0" - postcss-discard-empty "^5.1.1" - postcss-discard-overridden "^5.1.0" - postcss-merge-longhand "^5.1.6" - postcss-merge-rules "^5.1.2" - postcss-minify-font-values "^5.1.0" - postcss-minify-gradients "^5.1.1" - postcss-minify-params "^5.1.3" - postcss-minify-selectors "^5.2.1" - postcss-normalize-charset "^5.1.0" - postcss-normalize-display-values "^5.1.0" - postcss-normalize-positions "^5.1.1" - postcss-normalize-repeat-style "^5.1.1" - postcss-normalize-string "^5.1.0" - postcss-normalize-timing-functions "^5.1.0" - postcss-normalize-unicode "^5.1.0" - postcss-normalize-url "^5.1.0" - postcss-normalize-whitespace "^5.1.1" - postcss-ordered-values "^5.1.3" - postcss-reduce-initial "^5.1.0" - postcss-reduce-transforms "^5.1.0" - postcss-svgo "^5.1.0" - postcss-unique-selectors "^5.1.1" - -cssnano-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" - integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== - -cssnano@^5.0.6: - version "5.1.13" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.13.tgz#83d0926e72955332dc4802a7070296e6258efc0a" - integrity sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ== - dependencies: - cssnano-preset-default "^5.2.12" - lilconfig "^2.0.3" - yaml "^1.10.2" - -csso@^4.0.2, csso@^4.2.0: - 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.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" - integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== - -damerau-levenshtein@^1.0.8: - 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" - -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -debug@2.6.9, debug@^2.6.0, 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.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, 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" - -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== - -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== - -decimal.js@^10.2.1: - version "10.4.0" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.0.tgz#97a7448873b01e92e5ff9117d89a7bca8e63e0fe" - integrity sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg== - -decode-uri-component@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== - -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, 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.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -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" - -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.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ== - -del@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - -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, 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== - -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-browser@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.3.0.tgz#9705ef2bddf46072d0f7265a1fe300e36fe7ceca" - integrity sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w== - -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: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -detect-port-alt@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" - integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== - dependencies: - address "^1.0.1" - debug "^2.6.0" - -detective@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" - integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== - dependencies: - acorn-node "^1.8.2" - defined "^1.0.0" - minimist "^1.2.6" - -dezalgo@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" - integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== - dependencies: - asap "^2.0.0" - wrappy "1" - -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - -diff-sequences@^29.0.0: - version "29.0.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.0.0.tgz#bae49972ef3933556bcb0800b72e8579d19d9e4f" - integrity sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA== - -diff@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== - -dijkstrajs@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz#2e48c0d3b825462afe75ab4ad5e829c8ece36257" - integrity sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg== - -dir-glob@^3.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" - -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - -dns-packet@^5.2.2: - version "5.4.0" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" - integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -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-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: - version "0.5.14" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz#56082f71b1dc7aac69d83c4285eef39c15d93f56" - integrity sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg== - -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-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" - -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: - 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" - -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" - -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.1.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-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== - -dotenv@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - -duplexer2@~0.1.0: - 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" - -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -duplexify@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" - integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== - dependencies: - end-of-stream "^1.4.1" - inherits "^2.0.3" - readable-stream "^3.1.1" - stream-shift "^1.0.0" - -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== - -ejs@^3.1.6: - version "3.1.8" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" - integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.4.202: - version "1.4.244" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.244.tgz#ae9b56ed4ae2107e3a860dad80ed662c936e369e" - integrity sha512-E21saXLt2eTDaTxgUtiJtBUqanF9A32wZasAwDZ8gvrqXoxrBrbwtDCx7c/PQTLp81wj4X0OLDeoGQg7eMo3+w== - -elliptic@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - 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" - -emittery@^0.10.2: - version "0.10.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" - integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== - -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== - -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.2.2: - 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== - -encode-utf8@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" - integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== - -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.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.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.10.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" - integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -env-ci@^5.0.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.5.0.tgz#43364e3554d261a586dec707bc32be81112b545f" - integrity sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A== - dependencies: - execa "^5.0.0" - fromentries "^1.3.2" - java-properties "^1.0.0" - -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== - -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.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.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.1: - version "1.20.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.2.tgz#8495a07bc56d342a3b8ea3ab01bd986700c2ccb3" - integrity sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.2" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.2" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - -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-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== - -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -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@^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== - -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== - -escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-react-app@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz#73ba3929978001c5c86274c017ea57eb5fa644b4" - integrity sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA== - dependencies: - "@babel/core" "^7.16.0" - "@babel/eslint-parser" "^7.16.3" - "@rushstack/eslint-patch" "^1.1.0" - "@typescript-eslint/eslint-plugin" "^5.5.0" - "@typescript-eslint/parser" "^5.5.0" - babel-preset-react-app "^10.0.1" - confusing-browser-globals "^1.0.11" - eslint-plugin-flowtype "^8.0.3" - eslint-plugin-import "^2.25.3" - eslint-plugin-jest "^25.3.0" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "^7.27.1" - eslint-plugin-react-hooks "^4.3.0" - eslint-plugin-testing-library "^5.0.1" - -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== - dependencies: - debug "^3.2.7" - resolve "^1.20.0" - -eslint-module-utils@^2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" - integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== - dependencies: - debug "^3.2.7" - -eslint-plugin-flowtype@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz#e1557e37118f24734aa3122e7536a038d34a4912" - integrity sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ== - dependencies: - lodash "^4.17.21" - string-natural-compare "^3.0.1" - -eslint-plugin-import@^2.25.3: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== - dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" - has "^1.0.3" - is-core-module "^2.8.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" - tsconfig-paths "^3.14.1" - -eslint-plugin-jest@^25.3.0: - version "25.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a" - integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ== - dependencies: - "@typescript-eslint/experimental-utils" "^5.0.0" - -eslint-plugin-jsx-a11y@^6.5.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" - integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== - dependencies: - "@babel/runtime" "^7.18.9" - aria-query "^4.2.2" - array-includes "^3.1.5" - ast-types-flow "^0.0.7" - axe-core "^4.4.3" - axobject-query "^2.2.0" - damerau-levenshtein "^1.0.8" - emoji-regex "^9.2.2" - has "^1.0.3" - jsx-ast-utils "^3.3.2" - language-tags "^1.0.5" - minimatch "^3.1.2" - semver "^6.3.0" - -eslint-plugin-react-hooks@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== - -eslint-plugin-react@^7.27.1: - version "7.31.7" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.7.tgz#36fb1c611a7db5f757fce09cbbcc01682f8b0fbb" - integrity sha512-8NldBTeYp/kQoTV1uT0XF6HcmDqbgZ0lNPkN0wlRw8DJKXEnaWu+oh/6gt3xIhzvQ35wB2Y545fJhIbJSZ2NNw== - dependencies: - array-includes "^3.1.5" - array.prototype.flatmap "^1.3.0" - doctrine "^2.1.0" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.5" - object.fromentries "^2.0.5" - object.hasown "^1.1.1" - object.values "^1.1.5" - prop-types "^15.8.1" - resolve "^2.0.0-next.3" - semver "^6.3.0" - string.prototype.matchall "^4.0.7" - -eslint-plugin-testing-library@^5.0.1: - version "5.6.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.6.2.tgz#9c420e1e367094fd8b3bc32dbf91fa2c2955b686" - integrity sha512-imakD/MY+8Rp3r69G7Pt1egmLZscSWoIhrxgdVR3kr2nlHImRRh7LeFcoqfAA5CK1rzFFV6rBEp3GTfOEYMpNw== - dependencies: - "@typescript-eslint/utils" "^5.13.0" - -eslint-scope@5.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-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.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-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint-webpack-plugin@^3.1.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz#1978cdb9edc461e4b0195a20da950cf57988347c" - integrity sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w== - dependencies: - "@types/eslint" "^7.29.0 || ^8.4.1" - jest-worker "^28.0.2" - micromatch "^4.0.5" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - -eslint@^8.3.0: - version "8.23.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.23.0.tgz#a184918d288820179c6041bb3ddcc99ce6eea040" - integrity sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA== - dependencies: - "@eslint/eslintrc" "^1.3.1" - "@humanwhocodes/config-array" "^0.10.4" - "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" - "@humanwhocodes/module-importer" "^1.0.1" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.15.0" - globby "^11.1.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -espree@^9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" - integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== - dependencies: - acorn "^8.8.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.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== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.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, estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -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, eventemitter3@^4.0.7: - 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== - -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== - -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== - dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - -expect@^29.0.0: - version "29.0.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.0.2.tgz#22c7132400f60444b427211f1d6bb604a9ab2420" - integrity sha512-JeJlAiLKn4aApT4pzUXBVxl3NaZidWIOdg//smaIlP9ZMBDkHZGFd9ubphUZP9pUyDEo7bC6M0IIZR51o75qQw== - dependencies: - "@jest/expect-utils" "^29.0.2" - jest-get-type "^29.0.0" - jest-matcher-utils "^29.0.2" - jest-message-util "^29.0.2" - jest-util "^29.0.2" - -express@^4.17.3: - version "4.18.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" - integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== - 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" - -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-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - 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, fast-json-stable-stringify@^2.1.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, 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== - -fast-redact@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" - integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== - -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.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - 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.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== - dependencies: - escape-string-regexp "^1.0.5" - -figures@^3.0.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.1: - 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" - -filelist@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -filesize@^8.0.6: - version "8.0.7" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" - integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -filter-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" - integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== - -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-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.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@^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" - -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-versions@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" - integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ== - dependencies: - semver-regex "^3.1.2" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -follow-redirects@^1.0.0, follow-redirects@^1.14.9: - version "1.15.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== - -fork-ts-checker-webpack-plugin@^6.5.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340" - integrity sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA== - dependencies: - "@babel/code-frame" "^7.8.3" - "@types/json-schema" "^7.0.5" - chalk "^4.1.0" - chokidar "^3.4.2" - cosmiconfig "^6.0.0" - deepmerge "^4.2.2" - fs-extra "^9.0.0" - glob "^7.1.6" - memfs "^3.1.2" - minimatch "^3.0.4" - schema-utils "2.7.0" - semver "^7.3.2" - tapable "^1.0.0" - -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.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" - integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -from2@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fromentries@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" - integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== - -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.0.tgz#5784b102104433bb0e090f48bfc4a30742c357ed" - integrity sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^9.0.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.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" - integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== - -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.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -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.2: - 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" - -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-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" - integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - -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-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.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -git-log-parser@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/git-log-parser/-/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" - integrity sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA== - dependencies: - argv-formatter "~1.0.0" - spawn-error-forwarder "~1.0.0" - split2 "~1.0.0" - stream-combiner2 "~1.1.1" - through2 "~2.0.0" - traverse "~0.6.6" - -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-parent@^6.0.1, glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -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@^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@^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" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -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@^13.15.0: - version "13.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== - dependencies: - type-fest "^0.20.2" - -globby@^11.0.0, globby@^11.0.1, globby@^11.0.4, 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" - -graceful-fs@4.2.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - -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== - -handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -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== - -harmony-reflect@^1.4.6: - version "1.6.2" - resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" - integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== - -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: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -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: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -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@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash.js@1.1.7, 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" - -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== - -hey-listen@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" - integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== - -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.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" - -hook-std@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" - integrity sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g== - -hoopy@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" - integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== - -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.0, 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" - -hosted-git-info@^5.0.0, hosted-git-info@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz#0ba1c97178ef91f3ab30842ae63d6a272341156f" - integrity sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw== - dependencies: - lru-cache "^7.5.1" - -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@^2.1.0, html-entities@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" - integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== - -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-minifier-terser@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -html-webpack-plugin@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" - integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - 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" - -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-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" - -https-proxy-agent@^5.0.0: - 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@^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" - -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, iconv-lite@^0.6.3: - 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== - -idb@^7.0.1: - version "7.0.2" - resolved "https://registry.yarnpkg.com/idb/-/idb-7.0.2.tgz#7a067e20dd16539938e456814b7d714ba8db3892" - integrity sha512-jjKrT1EnyZewQ/gCBb/eyiYrhGzws2FeY92Yx8qT9S9GeQAmo4JFVIiWRIfKW/6Ob9A+UDAOW9j9jn58fy2HIg== - -identicon.js@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/identicon.js/-/identicon.js-2.3.3.tgz#c505b8d60ecc6ea13bbd991a33964c44c1ad60a1" - integrity sha512-/qgOkXKZ7YbeCYbawJ9uQQ3XJ3uBg9VDpvHjabCAPp6aRMhjLaFAxG90+1TxzrhKaj6AYpVGrx6UXQfQA41UEA== - -identity-obj-proxy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" - integrity sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA== - dependencies: - harmony-reflect "^1.4.6" - -ignore-walk@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" - integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== - dependencies: - minimatch "^5.0.1" - -ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -immer@^9.0.7: - version "9.0.15" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.15.tgz#0b9169e5b1d22137aba7d43f8a81a495dd1b62dc" - integrity sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ== - -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: - 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-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" - integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== - -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.3: - 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.4, ini@^1.3.5, 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== - -ini@^3.0.0, ini@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.1.tgz#c76ec81007875bc44d544ff7a11a55d12294102d" - integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== - -init-package-json@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" - integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== - dependencies: - npm-package-arg "^9.0.1" - promzard "^0.3.0" - read "^1.0.7" - read-package-json "^5.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -into-stream@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702" - integrity sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA== - dependencies: - from2 "^2.3.0" - p-is-promise "^3.0.0" - -ip-regex@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" - integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -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.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== - -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-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== - -is-cidr@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" - integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== - dependencies: - cidr-regex "^3.1.1" - -is-core-module@^2.5.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - -is-core-module@^2.8.1, is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== - dependencies: - has "^1.0.3" - -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-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-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@^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-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, 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-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-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -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@^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@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== - -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-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -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@^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@^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-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== - -is-root@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" - integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-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-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== - dependencies: - text-extensions "^1.0.0" - -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-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-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@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -issue-parser@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-6.0.0.tgz#b1edd06315d4f2044a9755daf85fdafde9b4014a" - integrity sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA== - dependencies: - lodash.capitalize "^4.2.1" - lodash.escaperegexp "^4.1.2" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.uniqby "^4.7.0" - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f" - integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== - 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.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.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.1.3: - version "3.1.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jake@^10.8.5: - version "10.8.5" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" - integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.1" - minimatch "^3.0.4" - -java-properties@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" - integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== - -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== - dependencies: - "@jest/types" "^27.5.1" - execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - slash "^3.0.0" - stack-utils "^2.0.3" - throat "^6.0.1" - -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== - dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^27.5.1" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== - dependencies: - chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-diff@^29.0.2: - version "29.0.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.0.2.tgz#1a99419efda66f9ee72f91e580e774df95de5ddc" - integrity sha512-b9l9970sa1rMXH1owp2Woprmy42qIwwll/htsw4Gf7+WuSp5bZxNhkKHDuCGKL+HoHn1KhcC+tNEeAPYBkD2Jg== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.0.0" - jest-get-type "^29.0.0" - pretty-format "^29.0.2" - -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== - dependencies: - detect-newline "^3.0.0" - -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== - dependencies: - "@jest/types" "^27.5.1" - chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" - -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== - -jest-get-type@^29.0.0: - version "29.0.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.0.0.tgz#843f6c50a1b778f7325df1129a0fd7aa713aef80" - integrity sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw== - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-haste-map@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== - dependencies: - "@jest/types" "^27.5.1" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - micromatch "^4.0.4" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.3.2" - -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" - -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== - dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== - dependencies: - chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-matcher-utils@^29.0.2: - version "29.0.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.0.2.tgz#0ffdcaec340a9810caee6c73ff90fb029b446e10" - integrity sha512-s62YkHFBfAx0JLA2QX1BlnCRFwHRobwAv2KP1+YhjzF6ZCbCVrf1sG8UJyn62ZUsDaQKpoo86XMTjkUyO5aWmQ== - dependencies: - chalk "^4.0.0" - jest-diff "^29.0.2" - jest-get-type "^29.0.0" - pretty-format "^29.0.2" - -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^27.5.1" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-message-util@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" - integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^28.1.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^28.1.3" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-message-util@^29.0.2: - version "29.0.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.0.2.tgz#b2781dfb6a2d1c63830d9684c5148ae3155c6154" - integrity sha512-kcJAgms3ckJV0wUoLsAM40xAhY+pb9FVSZwicjFU9PFkaTNmqh9xd99/CzKse48wPM1ANUQKmp03/DpkY+lGrA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.0.2" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.0.2" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - -jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== - -jest-regex-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== - -jest-regex-util@^28.0.0: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" - integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== - -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== - dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" - -jest-resolve@^27.4.2, jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== - dependencies: - "@jest/types" "^27.5.1" - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" - resolve "^1.20.0" - resolve.exports "^1.1.0" - slash "^3.0.0" - -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== - dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.8.1" - graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - execa "^5.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-serializer@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" - integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.9" - -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== - dependencies: - "@babel/core" "^7.7.2" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/traverse" "^7.7.2" - "@babel/types" "^7.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^27.5.1" - graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" - natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" - -jest-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-util@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" - integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== - dependencies: - "@jest/types" "^28.1.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-util@^29.0.2: - version "29.0.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.0.2.tgz#c75c5cab7f3b410782f9570a60c5558b5dfb6e3a" - integrity sha512-ozk8ruEEEACxqpz0hN9UOgtPZS0aN+NffwQduR5dVlhN+eN47vxurtvgZkYZYMpYrsmlAEx1XabkB3BnN0GfKQ== - dependencies: - "@jest/types" "^29.0.2" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== - dependencies: - "@jest/types" "^27.5.1" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^27.5.1" - leven "^3.1.0" - pretty-format "^27.5.1" - -jest-validate@^29.4.3: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.0" - -jest-watch-typeahead@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz#b4a6826dfb9c9420da2f7bc900de59dad11266a9" - integrity sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw== - dependencies: - ansi-escapes "^4.3.1" - chalk "^4.0.0" - jest-regex-util "^28.0.0" - jest-watcher "^28.0.0" - slash "^4.0.0" - string-length "^5.0.1" - strip-ansi "^7.0.1" - -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== - dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^27.5.1" - string-length "^4.0.1" - -jest-watcher@^28.0.0: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" - integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== - dependencies: - "@jest/test-result" "^28.1.3" - "@jest/types" "^28.1.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.10.2" - jest-util "^28.1.3" - string-length "^4.0.1" - -jest-worker@^26.2.1: - 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.0.2, jest-worker@^27.4.5, jest-worker@^27.5.1: - 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-worker@^28.0.2: - version "28.1.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" - integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^27.4.3: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== - dependencies: - "@jest/core" "^27.5.1" - import-local "^3.0.2" - jest-cli "^27.5.1" - -jiti@^1.17.1: - version "1.20.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.20.0.tgz#2d823b5852ee8963585c8dd8b7992ffc1ae83b42" - integrity sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA== - -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@^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@^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" - -jsdom@^16.6.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-parse-better-errors@^1.0.1: - 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, json-parse-even-better-errors@^2.3.1: - 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@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -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-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2, json5@^2.2.0, json5@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== - -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" - -jsonparse@^1.2.0, jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -jsonpointer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" - integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== - -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" - integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== - dependencies: - array-includes "^3.1.5" - object.assign "^4.1.3" - -just-diff-apply@^5.2.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" - integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== - -just-diff@^5.0.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.2.0.tgz#60dca55891cf24cd4a094e33504660692348a241" - integrity sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw== - -keyvaluestorage-interface@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" - integrity sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g== - -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, klona@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" - integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== - -language-subtag-registry@~0.3.2: - version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== - -language-tags@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== - dependencies: - language-subtag-registry "~0.3.2" - -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" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -libnpmaccess@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.4.tgz#2dd158bd8a071817e2207d3b201d37cf1ad6ae6b" - integrity sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag== - dependencies: - aproba "^2.0.0" - minipass "^3.1.1" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" - -libnpmdiff@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-4.0.5.tgz#ffaf93fa9440ea759444b8830fdb5c661b09a7c0" - integrity sha512-9fICQIzmH892UwHHPmb+Seup50UIBWcMIK2FdxvlXm9b4kc1nSH0b/BuY1mORJQtB6ydPMnn+BLzOTmd/SKJmw== - dependencies: - "@npmcli/disparity-colors" "^2.0.0" - "@npmcli/installed-package-contents" "^1.0.7" - binary-extensions "^2.2.0" - diff "^5.1.0" - minimatch "^5.0.1" - npm-package-arg "^9.0.1" - pacote "^13.6.1" - tar "^6.1.0" - -libnpmexec@^4.0.14: - version "4.0.14" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-4.0.14.tgz#9ad44232434b374e477eb2c2e4548baaf698f773" - integrity sha512-dwmzv2K29SdoAHBOa7QR6CfQbFG/PiZDRF6HZrlI6C4DLt2hNgOHTFaUGOpqE2C+YGu0ZwYTDywxRe0eOnf0ZA== - dependencies: - "@npmcli/arborist" "^5.6.3" - "@npmcli/ci-detect" "^2.0.0" - "@npmcli/fs" "^2.1.1" - "@npmcli/run-script" "^4.2.0" - chalk "^4.1.0" - mkdirp-infer-owner "^2.0.0" - npm-package-arg "^9.0.1" - npmlog "^6.0.2" - pacote "^13.6.1" - proc-log "^2.0.0" - read "^1.0.7" - read-package-json-fast "^2.0.2" - semver "^7.3.7" - walk-up-path "^1.0.0" - -libnpmfund@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-3.0.5.tgz#817f9e2120889beb483d9ba8eda142bb84293e4e" - integrity sha512-KdeRoG/dem8H3PcEU2/0SKi3ip7AWwczgS72y/3PE+PBrz/s/G52FNIA9jeLnBirkLC0sOyQHfeM3b7e24ZM+g== - dependencies: - "@npmcli/arborist" "^5.6.3" - -libnpmhook@^8.0.4: - version "8.0.4" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-8.0.4.tgz#6c58e5fe763ff5d600ae9c20457ea9a69d1f7d87" - integrity sha512-nuD6e+Nx0OprjEi0wOeqASMl6QIH235th/Du2/8upK3evByFhzIgdfOeP1OhstavW4xtsl0hk5Vw4fAWWuSUgA== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^13.0.0" - -libnpmorg@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-4.0.4.tgz#2a01d49372cf0df90d79a61e69bddaf2ed704311" - integrity sha512-1bTpD7iub1rDCsgiBguhJhiDufLQuc8DEti20euqsXz9O0ncXVpCYqf2SMmHR4GEdmAvAj2r7FMiyA9zGdaTpA== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^13.0.0" - -libnpmpack@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-4.1.3.tgz#025cfe39829acd8260662bf259e3a9331fc1e4b2" - integrity sha512-rYP4X++ME3ZiFO+2iN3YnXJ4LB4Gsd0z5cgszWJZxaEpDN4lRIXirSyynGNsN/hn4taqnlxD+3DPlFDShvRM8w== - dependencies: - "@npmcli/run-script" "^4.1.3" - npm-package-arg "^9.0.1" - pacote "^13.6.1" - -libnpmpublish@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.5.tgz#5a894f3de2e267d62f86be2a508e362599b5a4b1" - integrity sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg== - dependencies: - normalize-package-data "^4.0.0" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" - semver "^7.3.7" - ssri "^9.0.0" - -libnpmsearch@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-5.0.4.tgz#b32aa2b23051c00cdcc0912274d0d416e6655d81" - integrity sha512-XHDmsvpN5+pufvGnfLRqpy218gcGGbbbXR6wPrDJyd1em6agKdYByzU5ccskDHH9iVm2UeLydpDsW1ksYuU0cg== - dependencies: - npm-registry-fetch "^13.0.0" - -libnpmteam@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-4.0.4.tgz#ac26068808d93b1051d926457db14e4b3ff669ef" - integrity sha512-rzKSwi6MLzwwevbM/vl+BBQTErgn24tCfgPUdzBlszrw3j5necOu7WnTzgvZMDv6maGUwec6Ut1rxszOgH0l+Q== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^13.0.0" - -libnpmversion@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-3.0.7.tgz#e4c6c07ee28cf351ce1e2293a5ac9922b09ea94d" - integrity sha512-O0L4eNMUIMQ+effi1HsZPKp2N6wecwqGqB8PvkvmLPWN7EsdabdzAVG48nv0p/OjlbIai5KQg/L+qMMfCA4ZjA== - dependencies: - "@npmcli/git" "^3.0.0" - "@npmcli/run-script" "^4.1.3" - json-parse-even-better-errors "^2.3.1" - proc-log "^2.0.0" - semver "^7.3.7" - -lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" - integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== - -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== - -lit-element@^3.3.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-3.3.3.tgz#10bc19702b96ef5416cf7a70177255bfb17b3209" - integrity sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA== - dependencies: - "@lit-labs/ssr-dom-shim" "^1.1.0" - "@lit/reactive-element" "^1.3.0" - lit-html "^2.8.0" - -lit-html@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-2.8.0.tgz#96456a4bb4ee717b9a7d2f94562a16509d39bffa" - integrity sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q== - dependencies: - "@types/trusted-types" "^2.0.2" - -lit@2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/lit/-/lit-2.8.0.tgz#4d838ae03059bf9cafa06e5c61d8acc0081e974e" - integrity sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA== - dependencies: - "@lit/reactive-element" "^1.6.0" - lit-element "^3.3.0" - lit-html "^2.8.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.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@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" - integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -loader-utils@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.0.tgz#bcecc51a7898bee7473d4bc6b845b23af8304d4f" - integrity sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ== - -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.capitalize@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" - integrity sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw== - -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.escaperegexp@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" - integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== - -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.isequal@4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== - -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.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== - -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.uniqby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" - integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== - -lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -loose-envify@^1.1.0, 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" - -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" - -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.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: - version "7.14.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea" - integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA== - -lz-string@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ== - -magic-string@^0.25.0, magic-string@^0.25.7: - version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - -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-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6, make-fetch-happen@^10.2.0: - 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-plural@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-7.1.0.tgz#8a0381ff8c9be4f074e0acdc42ec97639c2344f9" - integrity sha512-PKkwVlAxYVo98NrbclaQIT4F5Oy+X58PZM5r2IwUSCe3syya6PXkIRCn2XCdz7p58Scgpp50PBeHmepXVDG3hg== - -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-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== - -marked-terminal@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.1.1.tgz#d2edc2991841d893ee943b44b40b2ee9518b4d9f" - integrity sha512-+cKTOx9P4l7HwINYhzbrBSyzgxO2HaHKGZGuB1orZsMIgXYaJyfidT81VXRdpelW/PcHEWxywscePVgI/oUF6g== - dependencies: - ansi-escapes "^5.0.0" - cardinal "^2.1.1" - chalk "^5.0.0" - cli-table3 "^0.6.1" - node-emoji "^1.11.0" - supports-hyperlinks "^2.2.0" - -marked@^4.0.10: - version "4.2.12" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.12.tgz#d69a64e21d71b06250da995dcd065c11083bebb5" - integrity sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw== - -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== - -memfs@^3.1.2, memfs@^3.4.3: - version "3.4.7" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.7.tgz#e5252ad2242a724f938cb937e3c4f7ceb1f70e5a" - integrity sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw== - dependencies: - fs-monkey "^1.0.3" - -"memoize-one@>=3.1.1 <6": - 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@^8.0.0: - version "8.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - 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-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.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== - -micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.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.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== - -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - -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== - -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-css-extract-plugin@^2.4.5: - version "2.6.1" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz#9a1251d15f2035c342d99a468ab9da7a0451b71e" - integrity sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg== - dependencies: - schema-utils "^4.0.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - 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@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: - 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.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^5.1.0: - 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" - -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.0, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -minimist@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -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@^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-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== - dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" - -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.1, 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@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.0.1.tgz#2b9408c6e81bb8b338d600fb3685e375a370a057" - integrity sha512-V9esFpNbK0arbN3fm2sxDKqMYgIp7XtVdE4Esj+PE4Qaaxdg1wIw48ITQIOn1sc8xXSmUviVL3cyjMqPlrVkiA== - -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" - -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== - dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" - -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== - -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" - -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -moo@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" - integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== - -motion@10.16.2: - version "10.16.2" - resolved "https://registry.yarnpkg.com/motion/-/motion-10.16.2.tgz#7dc173c6ad62210a7e9916caeeaf22c51e598d21" - integrity sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ== - dependencies: - "@motionone/animation" "^10.15.1" - "@motionone/dom" "^10.16.2" - "@motionone/svelte" "^10.16.2" - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - "@motionone/vue" "^10.16.2" - -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, ms@^2.1.2: - 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" - -multiformats@^9.4.2: - version "9.9.0" - resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" - integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== - -mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== - -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== - -negotiator@0.6.3, 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.0, 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== - -nerf-dart@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/nerf-dart/-/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" - integrity sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g== - -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-emoji@^1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" - integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== - dependencies: - lodash "^4.17.21" - -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.7: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== - 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@^9.0.0, node-gyp@^9.1.0: - version "9.3.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4" - integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^10.0.3" - nopt "^6.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -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-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== - -nopt@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" - integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== - dependencies: - abbrev "^1.0.0" - -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-package-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz#b46b24e0616d06cadf9d5718b29b6d445a82a62c" - integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== - dependencies: - hosted-git-info "^5.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -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.0, 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-audit-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-3.0.0.tgz#1bf3e531208b5f77347c8d00c3d9badf5be30cd6" - integrity sha512-tWQzfbwz1sc4244Bx2BVELw0EmZlCsCF0X93RDcmmwhonCsPMoEviYsi+32R+mdRvOWXolPce9zo64n2xgPESw== - dependencies: - chalk "^4.0.0" - -npm-bundled@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" - integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-bundled@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-2.0.1.tgz#94113f7eb342cd7a67de1e789f896b04d2c600f4" - integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== - dependencies: - npm-normalize-package-bin "^2.0.0" - -npm-install-checks@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" - integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-normalize-package-bin@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" - integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== - -npm-package-arg@^9.0.0, npm-package-arg@^9.0.1, npm-package-arg@^9.1.0: - version "9.1.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz#fc8acecb00235f42270dda446f36926ddd9ac2bc" - integrity sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg== - dependencies: - hosted-git-info "^5.0.0" - proc-log "^2.0.1" - semver "^7.3.5" - validate-npm-package-name "^4.0.0" - -npm-packlist@^5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" - integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== - dependencies: - glob "^8.0.1" - ignore-walk "^5.0.1" - npm-bundled "^2.0.0" - npm-normalize-package-bin "^2.0.0" - -npm-pick-manifest@^7.0.0, npm-pick-manifest@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz#1d372b4e7ea7c6712316c0e99388a73ed3496e84" - integrity sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw== - dependencies: - npm-install-checks "^5.0.0" - npm-normalize-package-bin "^2.0.0" - npm-package-arg "^9.0.0" - semver "^7.3.5" - -npm-profile@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-6.2.1.tgz#975c31ec75a6ae029ab5b8820ffdcbae3a1e3d5e" - integrity sha512-Tlu13duByHyDd4Xy0PgroxzxnBYWbGGL5aZifNp8cx2DxUrHSoETXtPKg38aRPsBWMRfDtvcvVfJNasj7oImQQ== - dependencies: - npm-registry-fetch "^13.0.1" - proc-log "^2.0.0" - -npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.1: - version "13.3.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e" - integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== - dependencies: - make-fetch-happen "^10.0.6" - minipass "^3.1.6" - minipass-fetch "^2.0.3" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^9.0.1" - proc-log "^2.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" - -npm-user-validate@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" - integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== - -npm@^8.3.0: - version "8.19.3" - resolved "https://registry.yarnpkg.com/npm/-/npm-8.19.3.tgz#adb51bf8886d519dd4df162726d0ad157ecfa272" - integrity sha512-0QjmyPtDxSyMWWD8I91QGbrgx9KzbV6C9FK1liEb/K0zppiZkr5KxXc990G+LzPwBHDfRjUBlO9T1qZ08vl9mA== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^5.6.3" - "@npmcli/ci-detect" "^2.0.0" - "@npmcli/config" "^4.2.1" - "@npmcli/fs" "^2.1.0" - "@npmcli/map-workspaces" "^2.0.3" - "@npmcli/package-json" "^2.0.0" - "@npmcli/run-script" "^4.2.1" - abbrev "~1.1.1" - archy "~1.0.0" - cacache "^16.1.3" - chalk "^4.1.2" - chownr "^2.0.0" - cli-columns "^4.0.0" - cli-table3 "^0.6.2" - columnify "^1.6.0" - fastest-levenshtein "^1.0.12" - fs-minipass "^2.1.0" - glob "^8.0.1" - graceful-fs "^4.2.10" - hosted-git-info "^5.2.1" - ini "^3.0.1" - init-package-json "^3.0.2" - is-cidr "^4.0.2" - json-parse-even-better-errors "^2.3.1" - libnpmaccess "^6.0.4" - libnpmdiff "^4.0.5" - libnpmexec "^4.0.14" - libnpmfund "^3.0.5" - libnpmhook "^8.0.4" - libnpmorg "^4.0.4" - libnpmpack "^4.1.3" - libnpmpublish "^6.0.5" - libnpmsearch "^5.0.4" - libnpmteam "^4.0.4" - libnpmversion "^3.0.7" - make-fetch-happen "^10.2.0" - minimatch "^5.1.0" - minipass "^3.1.6" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - ms "^2.1.2" - node-gyp "^9.1.0" - nopt "^6.0.0" - npm-audit-report "^3.0.0" - npm-install-checks "^5.0.0" - npm-package-arg "^9.1.0" - npm-pick-manifest "^7.0.2" - npm-profile "^6.2.0" - npm-registry-fetch "^13.3.1" - npm-user-validate "^1.0.1" - npmlog "^6.0.2" - opener "^1.5.2" - p-map "^4.0.0" - pacote "^13.6.2" - parse-conflict-json "^2.0.2" - proc-log "^2.0.1" - qrcode-terminal "^0.12.0" - read "~1.0.7" - read-package-json "^5.0.2" - read-package-json-fast "^2.0.3" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.7" - ssri "^9.0.1" - tar "^6.1.11" - text-table "~0.2.0" - tiny-relative-date "^1.3.0" - treeverse "^2.0.0" - validate-npm-package-name "^4.0.0" - which "^2.0.2" - write-file-atomic "^4.0.1" - -npmlog@^6.0.0, npmlog@^6.0.2: - 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.2" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" - integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== - -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-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.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -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.assign@^4.1.0, object.assign@^4.1.3, object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" - integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.fromentries@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" - integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.getownpropertydescriptors@^2.1.0: - version "2.1.4" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz#7965e6437a57278b587383831a9b829455a4bc37" - integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== - dependencies: - array.prototype.reduce "^1.0.4" - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.1" - -object.hasown@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3" - integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== - dependencies: - define-properties "^1.1.4" - es-abstract "^1.19.5" - -object.values@^1.1.0, object.values@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -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== - -on-exit-leak-free@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" - integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== - -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.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.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@^8.0.9, open@^8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - 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" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - 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" - -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-filter@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" - integrity sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw== - dependencies: - p-map "^2.0.0" - -p-is-promise@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" - integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== - -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: - 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@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -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-reduce@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" - integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== - -p-retry@^4.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-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== - -pacote@^13.0.3, pacote@^13.6.1, pacote@^13.6.2: - version "13.6.2" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a" - integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== - dependencies: - "@npmcli/git" "^3.0.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/promise-spawn" "^3.0.0" - "@npmcli/run-script" "^4.1.0" - cacache "^16.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.6" - mkdirp "^1.0.4" - npm-package-arg "^9.0.0" - npm-packlist "^5.1.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.1" - proc-log "^2.0.0" - promise-retry "^2.0.1" - read-package-json "^5.0.0" - read-package-json-fast "^2.0.3" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - -param-case@^3.0.4: - 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-conflict-json@^2.0.1, parse-conflict-json@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" - integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== - dependencies: - json-parse-even-better-errors "^2.3.1" - just-diff "^5.0.1" - just-diff-apply "^5.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, parse-json@^5.2.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" - -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -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" - -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@^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-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== - -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== - -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, 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.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pino-abstract-transport@v0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz#4b54348d8f73713bfd14e3dc44228739aa13d9c0" - integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== - dependencies: - duplexify "^4.1.2" - split2 "^4.0.0" - -pino-std-serializers@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1791ccd2539c091ae49ce9993205e2cd5dbba1e2" - integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== - -pino@7.11.0: - version "7.11.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-7.11.0.tgz#0f0ea5c4683dc91388081d44bff10c83125066f6" - integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== - dependencies: - atomic-sleep "^1.0.0" - fast-redact "^3.0.0" - on-exit-leak-free "^0.2.0" - pino-abstract-transport v0.5.0 - pino-std-serializers "^4.0.0" - process-warning "^1.0.0" - quick-format-unescaped "^4.0.3" - real-require "^0.1.0" - safe-stable-stringify "^2.1.0" - sonic-boom "^2.2.1" - thread-stream "^0.15.1" - -pirates@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== - -pkg-conf@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" - integrity sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g== - dependencies: - find-up "^2.0.0" - load-json-file "^4.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.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" - -pngjs@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" - integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== - -postcss-attribute-case-insensitive@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741" - integrity sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-browser-comments@^4: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz#bcfc86134df5807f5d3c0eefa191d42136b5e72a" - integrity sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg== - -postcss-calc@^8.2.3: - version "8.2.4" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" - integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== - dependencies: - postcss-selector-parser "^6.0.9" - postcss-value-parser "^4.2.0" - -postcss-clamp@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" - integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-functional-notation@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz#21a909e8d7454d3612d1659e471ce4696f28caec" - integrity sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-hex-alpha@^8.0.4: - version "8.0.4" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz#c66e2980f2fbc1a63f5b079663340ce8b55f25a5" - integrity sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-rebeccapurple@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz#63fdab91d878ebc4dd4b7c02619a0c3d6a56ced0" - integrity sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-colormin@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a" - integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg== - dependencies: - browserslist "^4.16.6" - caniuse-api "^3.0.0" - colord "^2.9.1" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz#31586df4e184c2e8890e8b34a0b9355313f503ab" - integrity sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g== - dependencies: - browserslist "^4.20.3" - postcss-value-parser "^4.2.0" - -postcss-custom-media@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz#c8f9637edf45fef761b014c024cee013f80529ea" - integrity sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-custom-properties@^12.1.8: - version "12.1.8" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.8.tgz#aa003e1885c5bd28e2e32496cd597e389ca889e4" - integrity sha512-8rbj8kVu00RQh2fQF81oBqtduiANu4MIxhyf0HbbStgPtnFlWn0yiaYTpLHrPnJbffVY1s9apWsIoVZcc68FxA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-custom-selectors@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz#1ab4684d65f30fed175520f82d223db0337239d9" - integrity sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-dir-pseudo-class@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz#2bf31de5de76added44e0a25ecf60ae9f7c7c26c" - integrity sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-discard-comments@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" - integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== - -postcss-discard-duplicates@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" - integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== - -postcss-discard-empty@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" - integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== - -postcss-discard-overridden@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" - integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== - -postcss-double-position-gradients@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz#b96318fdb477be95997e86edd29c6e3557a49b91" - integrity sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -postcss-env-function@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-4.0.6.tgz#7b2d24c812f540ed6eda4c81f6090416722a8e7a" - integrity sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-flexbugs-fixes@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz#2028e145313074fc9abe276cb7ca14e5401eb49d" - integrity sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ== - -postcss-focus-visible@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz#50c9ea9afa0ee657fb75635fabad25e18d76bf9e" - integrity sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw== - dependencies: - postcss-selector-parser "^6.0.9" - -postcss-focus-within@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz#5b1d2ec603195f3344b716c0b75f61e44e8d2e20" - integrity sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ== - dependencies: - postcss-selector-parser "^6.0.9" - -postcss-font-variant@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" - integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== - -postcss-gap-properties@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz#f7e3cddcf73ee19e94ccf7cb77773f9560aa2fff" - integrity sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg== - -postcss-image-set-function@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz#08353bd756f1cbfb3b6e93182c7829879114481f" - integrity sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-import@^14.1.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" - integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-initial@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" - integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== - -postcss-js@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00" - integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ== - dependencies: - camelcase-css "^2.0.1" - -postcss-lab-function@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz#6fe4c015102ff7cd27d1bd5385582f67ebdbdc98" - integrity sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -postcss-load-config@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" - integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== - dependencies: - lilconfig "^2.0.5" - yaml "^1.10.2" - -postcss-loader@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" - integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.5" - -postcss-logical@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-5.0.4.tgz#ec75b1ee54421acc04d5921576b7d8db6b0e6f73" - integrity sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g== - -postcss-media-minmax@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5" - integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== - -postcss-merge-longhand@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz#f378a8a7e55766b7b644f48e5d8c789ed7ed51ce" - integrity sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^5.1.0" - -postcss-merge-rules@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz#7049a14d4211045412116d79b751def4484473a5" - integrity sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ== - dependencies: - browserslist "^4.16.6" - caniuse-api "^3.0.0" - cssnano-utils "^3.1.0" - postcss-selector-parser "^6.0.5" - -postcss-minify-font-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" - integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" - integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== - dependencies: - colord "^2.9.1" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz#ac41a6465be2db735099bbd1798d85079a6dc1f9" - integrity sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg== - dependencies: - browserslist "^4.16.6" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" - integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== - 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.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - 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-nested@5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.6.tgz#466343f7fc8d3d46af3e7dba3fcd47d052a945bc" - integrity sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA== - dependencies: - postcss-selector-parser "^6.0.6" - -postcss-nesting@^10.1.10: - version "10.1.10" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.1.10.tgz#9c396df3d8232cbedfa95baaac6b765b8fd2a817" - integrity sha512-lqd7LXCq0gWc0wKXtoKDru5wEUNjm3OryLVNRZ8OnW8km6fSNUuFrjEhU3nklxXE2jvd4qrox566acgh+xQt8w== - dependencies: - "@csstools/selector-specificity" "^2.0.0" - postcss-selector-parser "^6.0.10" - -postcss-normalize-charset@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" - integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== - -postcss-normalize-display-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" - integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" - integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" - integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" - integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" - integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz#3d23aede35e160089a285e27bf715de11dc9db75" - integrity sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ== - dependencies: - browserslist "^4.16.6" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" - integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== - dependencies: - normalize-url "^6.0.1" - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" - integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-10.0.1.tgz#464692676b52792a06b06880a176279216540dd7" - integrity sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA== - dependencies: - "@csstools/normalize.css" "*" - postcss-browser-comments "^4" - sanitize.css "*" - -postcss-opacity-percentage@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz#bd698bb3670a0a27f6d657cc16744b3ebf3b1145" - integrity sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w== - -postcss-ordered-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" - integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== - dependencies: - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-overflow-shorthand@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz#7ed6486fec44b76f0eab15aa4866cda5d55d893e" - integrity sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-page-break@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" - integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== - -postcss-place@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-7.0.5.tgz#95dbf85fd9656a3a6e60e832b5809914236986c4" - integrity sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-preset-env@^7.0.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.8.1.tgz#2bfe935736727ab601a5c718bf24fc9f858eceb0" - integrity sha512-8884CHxQaoN1i4iEK+JvzOe8emODb5R4p/0dw4yEdo7QM4RdUk2sBx0fnzFyJt8BLfZSCGeVkKZ4HC564waBpQ== - dependencies: - "@csstools/postcss-cascade-layers" "^1.0.6" - "@csstools/postcss-color-function" "^1.1.1" - "@csstools/postcss-font-format-keywords" "^1.0.1" - "@csstools/postcss-hwb-function" "^1.0.2" - "@csstools/postcss-ic-unit" "^1.0.1" - "@csstools/postcss-is-pseudo-class" "^2.0.7" - "@csstools/postcss-nested-calc" "^1.0.0" - "@csstools/postcss-normalize-display-values" "^1.0.1" - "@csstools/postcss-oklab-function" "^1.1.1" - "@csstools/postcss-progressive-custom-properties" "^1.3.0" - "@csstools/postcss-stepped-value-functions" "^1.0.1" - "@csstools/postcss-text-decoration-shorthand" "^1.0.0" - "@csstools/postcss-trigonometric-functions" "^1.0.2" - "@csstools/postcss-unset-value" "^1.0.2" - autoprefixer "^10.4.8" - browserslist "^4.21.3" - css-blank-pseudo "^3.0.3" - css-has-pseudo "^3.0.4" - css-prefers-color-scheme "^6.0.3" - cssdb "^7.0.1" - postcss-attribute-case-insensitive "^5.0.2" - postcss-clamp "^4.1.0" - postcss-color-functional-notation "^4.2.4" - postcss-color-hex-alpha "^8.0.4" - postcss-color-rebeccapurple "^7.1.1" - postcss-custom-media "^8.0.2" - postcss-custom-properties "^12.1.8" - postcss-custom-selectors "^6.0.3" - postcss-dir-pseudo-class "^6.0.5" - postcss-double-position-gradients "^3.1.2" - postcss-env-function "^4.0.6" - postcss-focus-visible "^6.0.4" - postcss-focus-within "^5.0.4" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^3.0.5" - postcss-image-set-function "^4.0.7" - postcss-initial "^4.0.1" - postcss-lab-function "^4.2.1" - postcss-logical "^5.0.4" - postcss-media-minmax "^5.0.0" - postcss-nesting "^10.1.10" - postcss-opacity-percentage "^1.1.2" - postcss-overflow-shorthand "^3.0.4" - postcss-page-break "^3.0.4" - postcss-place "^7.0.5" - postcss-pseudo-class-any-link "^7.1.6" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^6.0.1" - postcss-value-parser "^4.2.0" - -postcss-pseudo-class-any-link@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz#2693b221902da772c278def85a4d9a64b6e617ab" - integrity sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-reduce-initial@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz#fc31659ea6e85c492fb2a7b545370c215822c5d6" - integrity sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw== - dependencies: - browserslist "^4.16.6" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" - integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-replace-overflow-wrap@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" - integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== - -postcss-selector-not@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz#8f0a709bf7d4b45222793fc34409be407537556d" - integrity sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9: - version "6.0.10" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" - integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" - integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^2.7.0" - -postcss-unique-selectors@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" - integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^7.0.35: - version "7.0.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== - dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - -postcss@^8.3.5, postcss@^8.4.14, postcss@^8.4.4, postcss@^8.4.7: - version "8.4.16" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c" - integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -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== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - -pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - -pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -pretty-format@^28.1.3: - version "28.1.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" - integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== - dependencies: - "@jest/schemas" "^28.1.3" - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -pretty-format@^29.0.0, pretty-format@^29.0.2: - version "29.0.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.0.2.tgz#7f7666a7bf05ba2bcacde61be81c6db64f6f3be6" - integrity sha512-wp3CdtUa3cSJVFn3Miu5a1+pxc1iPIQTenOAn+x5erXeN1+ryTcLesV5pbK/rlW5EKwp27x38MoYfNGaNXDDhg== - dependencies: - "@jest/schemas" "^29.0.0" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -proc-log@^2.0.0, proc-log@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" - integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== - -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-warning@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" - integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== - -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" - integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== - -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" - -promise@^8.1.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.2.0.tgz#a1f6280ab67457fbfc8aad2b198c9497e9e5c806" - integrity sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg== - dependencies: - asap "~2.0.6" - -prompts@^2.0.1, prompts@^2.4.2: - 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" - -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== - dependencies: - read "1" - -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" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -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-compare@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.5.1.tgz#17818e33d1653fbac8c2ec31406bce8a2966f600" - integrity sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA== - -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== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.1.2, q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - -qrcode-terminal@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" - integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== - -qrcode@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.3.tgz#03afa80912c0dccf12bc93f615a535aad1066170" - integrity sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg== - dependencies: - dijkstrajs "^1.0.1" - encode-utf8 "^1.0.3" - pngjs "^5.0.0" - yargs "^15.3.1" - -qs@6.10.3: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== - dependencies: - side-channel "^1.0.4" - -query-string@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" - integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg== - dependencies: - decode-uri-component "^0.2.2" - filter-obj "^1.1.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - -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-format-unescaped@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" - integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== - -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== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -raf@^3.4.1: - 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.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" - -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.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.2.8: - 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-app-polyfill@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz#95221e0a9bd259e5ca6b177c7bb1cb6768f68fd7" - integrity sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w== - dependencies: - core-js "^3.19.2" - object-assign "^4.1.1" - promise "^8.1.0" - raf "^3.4.1" - regenerator-runtime "^0.13.9" - whatwg-fetch "^3.6.2" - -react-dev-utils@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" - integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== - dependencies: - "@babel/code-frame" "^7.16.0" - address "^1.1.2" - browserslist "^4.18.1" - chalk "^4.1.2" - cross-spawn "^7.0.3" - detect-port-alt "^1.1.6" - escape-string-regexp "^4.0.0" - filesize "^8.0.6" - find-up "^5.0.0" - fork-ts-checker-webpack-plugin "^6.5.0" - global-modules "^2.0.0" - globby "^11.0.4" - gzip-size "^6.0.0" - immer "^9.0.7" - is-root "^2.1.0" - loader-utils "^3.2.0" - open "^8.4.0" - pkg-up "^3.1.0" - prompts "^2.4.2" - react-error-overlay "^6.0.11" - recursive-readdir "^2.2.2" - shell-quote "^1.7.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - -react-error-overlay@^6.0.11: - version "6.0.11" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" - integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== - -react-is@^16.13.1, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^17.0.1: - 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.0.0, react-is@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -react-redux@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.0.2.tgz#bc2a304bb21e79c6808e3e47c50fe1caf62f7aad" - integrity sha512-nBwiscMw3NoP59NFCXFf02f8xdo+vSHT/uZ1ldDwF7XaTpzm+Phk97VT4urYBl5TYAPNVaFm12UHAEyzkpNzRA== - dependencies: - "@babel/runtime" "^7.12.1" - "@types/hoist-non-react-statics" "^3.3.1" - "@types/use-sync-external-store" "^0.0.3" - hoist-non-react-statics "^3.3.2" - react-is "^18.0.0" - use-sync-external-store "^1.0.0" - -react-refresh@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" - integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== - -react-scripts@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-5.0.1.tgz#6285dbd65a8ba6e49ca8d651ce30645a6d980003" - integrity sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ== - dependencies: - "@babel/core" "^7.16.0" - "@pmmmwh/react-refresh-webpack-plugin" "^0.5.3" - "@svgr/webpack" "^5.5.0" - babel-jest "^27.4.2" - babel-loader "^8.2.3" - babel-plugin-named-asset-import "^0.3.8" - babel-preset-react-app "^10.0.1" - bfj "^7.0.2" - browserslist "^4.18.1" - camelcase "^6.2.1" - case-sensitive-paths-webpack-plugin "^2.4.0" - css-loader "^6.5.1" - css-minimizer-webpack-plugin "^3.2.0" - dotenv "^10.0.0" - dotenv-expand "^5.1.0" - eslint "^8.3.0" - eslint-config-react-app "^7.0.1" - eslint-webpack-plugin "^3.1.1" - file-loader "^6.2.0" - fs-extra "^10.0.0" - html-webpack-plugin "^5.5.0" - identity-obj-proxy "^3.0.0" - jest "^27.4.3" - jest-resolve "^27.4.2" - jest-watch-typeahead "^1.0.0" - mini-css-extract-plugin "^2.4.5" - postcss "^8.4.4" - postcss-flexbugs-fixes "^5.0.2" - postcss-loader "^6.2.1" - postcss-normalize "^10.0.1" - postcss-preset-env "^7.0.1" - prompts "^2.4.2" - react-app-polyfill "^3.0.0" - react-dev-utils "^12.0.1" - react-refresh "^0.11.0" - resolve "^1.20.0" - resolve-url-loader "^4.0.0" - sass-loader "^12.3.0" - semver "^7.3.5" - source-map-loader "^3.0.0" - style-loader "^3.3.1" - tailwindcss "^3.0.2" - terser-webpack-plugin "^5.2.5" - webpack "^5.64.4" - webpack-dev-server "^4.6.0" - webpack-manifest-plugin "^4.0.2" - workbox-webpack-plugin "^6.4.1" - optionalDependencies: - fsevents "^2.3.2" - -react-transition-state@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/react-transition-state/-/react-transition-state-2.1.1.tgz#1601a6177926b647041b7d598bf124321ab8d25b" - integrity sha512-kQx5g1FVu9knoz1T1WkapjUgFz08qQ/g1OmuWGi3/AoEFfS0kStxrPlZx81urjCXdz2d+1DqLpU6TyLW/Ro04Q== - -react-window@^1.8.8: - version "1.8.9" - resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.9.tgz#24bc346be73d0468cdf91998aac94e32bc7fa6a8" - integrity sha512-+Eqx/fj1Aa5WnhRfj9dJg4VYATGwIUP2ItwItiJ6zboKWA6EX3lYDAXfGF2hyNqplEprhbtjbipiADEcwQ823Q== - dependencies: - "@babel/runtime" "^7.0.0" - memoize-one ">=3.1.1 <6" - -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - -read-cmd-shim@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" - integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== - -read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" - -read-package-json@^5.0.0, read-package-json@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.2.tgz#b8779ccfd169f523b67208a89cc912e3f663f3fa" - integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== - dependencies: - glob "^8.0.1" - json-parse-even-better-errors "^2.3.1" - normalize-package-data "^4.0.0" - npm-normalize-package-bin "^2.0.0" - -read-pkg-up@^7.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@^5.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" - -read@1, read@^1.0.7, read@~1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== - dependencies: - mute-stream "~0.0.4" - -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - 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.1.1: - 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" - -readdir-scoped-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - -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" - -real-require@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381" - integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== - -recursive-readdir@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== - dependencies: - minimatch "3.0.4" - -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" - -redux-thunk@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714" - integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== - -redux@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13" - integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA== - dependencies: - "@babel/runtime" "^7.9.2" - -regenerate-unicode-properties@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" - integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== - 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.13.4, regenerator-runtime@^0.13.9: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -regenerator-transform@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" - integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== - dependencies: - "@babel/runtime" "^7.8.4" - -regex-parser@^2.2.11: - version "2.2.11" - resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" - integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== - -regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^3.2.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.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d" - integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.0.1" - regjsgen "^0.6.0" - regjsparser "^0.8.2" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - -registry-auth-token@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.1.tgz#5e6cd106e6c251135a046650c58476fc03e92833" - integrity sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA== - dependencies: - "@pnpm/npm-conf" "^1.0.4" - -regjsgen@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" - integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== - -regjsparser@^0.8.2: - version "0.8.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" - integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== - 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== - -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - -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== - -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.1.5: - version "4.1.6" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.6.tgz#19ca2d3d0b35373a74dc1c98692cdaffb6602656" - integrity sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ== - -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-url-loader@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz#d50d4ddc746bb10468443167acf800dcd6c3ad57" - integrity sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA== - dependencies: - adjust-sourcemap-loader "^4.0.0" - convert-source-map "^1.7.0" - loader-utils "^2.0.0" - postcss "^7.0.35" - source-map "0.6.1" - -resolve.exports@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" - integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== - -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.3: - version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -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== - -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" - -rollup-plugin-terser@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" - integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== - dependencies: - "@babel/code-frame" "^7.10.4" - jest-worker "^26.2.1" - serialize-javascript "^4.0.0" - terser "^5.0.0" - -rollup@^2.43.1: - version "2.79.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.0.tgz#9177992c9f09eb58c5e56cbfa641607a12b57ce2" - integrity sha512-x4KsrCgwQ7ZJPcFA/SUu6QVcYlO7uRLfLAy0DSA4NS2eG8japdbpM50ToH7z4iObodRYOJ0soneF0iaQRJ6zhA== - optionalDependencies: - fsevents "~2.3.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" - -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.1.0, 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-json-utils@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/safe-json-utils/-/safe-json-utils-1.1.1.tgz#0e883874467d95ab914c3f511096b89bfb3e63b1" - integrity sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ== - -safe-stable-stringify@^2.1.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sanitize.css@*: - version "13.0.0" - resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-13.0.0.tgz#2675553974b27964c75562ade3bd85d79879f173" - integrity sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA== - -sass-loader@^12.3.0: - version "12.6.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" - integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== - 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.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - -schema-utils@^2.6.5: - 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.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.8.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" - -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.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== - dependencies: - node-forge "^1" - -semantic-release@^19.0.2: - version "19.0.5" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-19.0.5.tgz#d7fab4b33fc20f1288eafd6c441e5d0938e5e174" - integrity sha512-NMPKdfpXTnPn49FDogMBi36SiBfXkSOJqCkk0E4iWOY1tusvvgBwqUmxTX1kmlT6kIYed9YwNKD1sfPpqa5yaA== - dependencies: - "@semantic-release/commit-analyzer" "^9.0.2" - "@semantic-release/error" "^3.0.0" - "@semantic-release/github" "^8.0.0" - "@semantic-release/npm" "^9.0.0" - "@semantic-release/release-notes-generator" "^10.0.0" - aggregate-error "^3.0.0" - cosmiconfig "^7.0.0" - debug "^4.0.0" - env-ci "^5.0.0" - execa "^5.0.0" - figures "^3.0.0" - find-versions "^4.0.0" - get-stream "^6.0.0" - git-log-parser "^1.2.0" - hook-std "^2.0.0" - hosted-git-info "^4.0.0" - lodash "^4.17.21" - marked "^4.0.10" - marked-terminal "^5.0.0" - micromatch "^4.0.2" - p-each-series "^2.1.0" - p-reduce "^2.0.0" - read-pkg-up "^7.0.0" - resolve-from "^5.0.0" - semver "^7.3.2" - semver-diff "^3.1.1" - signale "^1.2.1" - yargs "^16.2.0" - -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - -semver-regex@^3.1.2: - version "3.1.4" - resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.4.tgz#13053c0d4aa11d070a2f2872b6b1e3ae1e1971b4" - integrity sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA== - -"semver@2 || 3 || 4 || 5": - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.4: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.2, semver@^7.3.5, semver@^7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -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@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -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" - -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" - -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== - -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== - -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@^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.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.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== - -signale@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" - integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== - dependencies: - chalk "^2.3.2" - figures "^2.0.0" - pkg-conf "^2.1.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== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -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== - -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@^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.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -sonic-boom@^2.2.1: - version "2.8.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" - integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== - dependencies: - atomic-sleep "^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.1, source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-loader@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.1.tgz#9ae5edc7c2d42570934be4c95d1ccc6352eba52d" - integrity sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA== - dependencies: - abab "^2.0.5" - iconv-lite "^0.6.3" - source-map-js "^1.0.1" - -source-map-support@^0.5.6, 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@0.6.1, 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.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.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -source-map@^0.8.0-beta.0: - version "0.8.0-beta.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" - integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== - dependencies: - whatwg-url "^7.0.0" - -sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -spawn-error-forwarder@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" - integrity sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -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.12" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== - -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-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== - -split2@^3.0.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split2@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -split2@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" - integrity sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg== - dependencies: - through2 "~2.0.0" - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -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@^9.0.0, ssri@^9.0.1: - 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.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== - 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== - -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== - -stream-combiner2@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - integrity sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw== - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== - -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-length@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-5.0.1.tgz#3d647f497b6e8e8d41e422f7e0b23bc536c8381e" - integrity sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow== - dependencies: - char-regex "^2.0.0" - strip-ansi "^7.0.1" - -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.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.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" - integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== - 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.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.1" - side-channel "^1.0.4" - -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -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@~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" - -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.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-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.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-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" - integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== - -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.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@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" - integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== - -stylehacks@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.0.tgz#a40066490ca0caca04e96c6b02153ddc39913520" - integrity sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q== - dependencies: - browserslist "^4.16.6" - postcss-selector-parser "^6.0.4" - -stylis@4.0.13: - version "4.0.13" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" - integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== - -supports-color@^5.3.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-color@^8.0.0: - 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-hyperlinks@^2.0.0, supports-hyperlinks@^2.2.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" - -svgo@^2.7.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" - picocolors "^1.0.0" - stable "^0.1.8" - -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== - -tailwindcss@^3.0.2: - version "3.1.8" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.8.tgz#4f8520550d67a835d32f2f4021580f9fddb7b741" - integrity sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g== - dependencies: - arg "^5.0.2" - chokidar "^3.5.3" - color-name "^1.1.4" - detective "^5.2.1" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.2.11" - glob-parent "^6.0.2" - is-glob "^4.0.3" - lilconfig "^2.0.6" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.14" - postcss-import "^14.1.0" - postcss-js "^4.0.0" - postcss-load-config "^3.1.4" - postcss-nested "5.0.6" - postcss-selector-parser "^6.0.10" - postcss-value-parser "^4.2.0" - quick-lru "^5.1.1" - resolve "^1.22.1" - -tapable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -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@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.1.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" - integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^4.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -tempy@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" - integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== - dependencies: - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" - -tempy@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-1.0.1.tgz#30fe901fd869cfb36ee2bd999805aa72fbb035de" - integrity sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w== - dependencies: - del "^6.0.0" - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.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.3, terser-webpack-plugin@^5.2.5: - version "5.3.6" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" - integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== - dependencies: - "@jridgewell/trace-mapping" "^0.3.14" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.14.1" - -terser@^5.0.0, terser@^5.10.0, terser@^5.14.1: - version "5.15.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.0.tgz#e16967894eeba6e1091509ec83f0c60e179f2425" - integrity sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - 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-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== - -text-table@^0.2.0, 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== - -thread-stream@^0.15.1: - version "0.15.2" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-0.15.2.tgz#fb95ad87d2f1e28f07116eb23d85aba3bc0425f4" - integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== - dependencies: - real-require "^0.1.0" - -throat@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" - integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== - -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -through2@~2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@2, "through@>=2.2.7 <3": - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -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-relative-date@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" - integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== - -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-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" - -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: - version "4.1.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" - integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== - dependencies: - punycode "^2.1.0" - -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.6.6: - version "0.6.7" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe" - integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg== - -treeverse@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" - integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== - -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== - -tryer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" - integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== - -tsconfig-paths@^3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@1.14.1, tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tslib@^2.3.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.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-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== - dependencies: - prelude-ls "~1.1.2" - -type-detect@4.0.8: - 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.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - -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.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -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-fest@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -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" - -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" - -typescript@^4.8.2: - version "4.8.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.2.tgz#e3b33d5ccfb5914e4eeab6699cf208adee3fd790" - integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== - -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - -uint8arrays@^3.0.0, uint8arrays@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" - integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== - dependencies: - multiformats "^9.4.2" - -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" - -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.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== - -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@^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" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -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.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -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== - -unraw@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unraw/-/unraw-3.0.0.tgz#73443ed70d2ab09ccbac2b00525602d5991fbbe3" - integrity sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg== - -upath@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -update-browserslist-db@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz#16279639cff1d0f800b14792de43d97df2d11b7d" - integrity sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - 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" - -url-join@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" - integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== - -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" - -use-sync-external-store@1.2.0, use-sync-external-store@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - -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" - -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.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - 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" - -validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== - dependencies: - builtins "^5.0.0" - -valtio@1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/valtio/-/valtio-1.11.2.tgz#b8049c02dfe65620635d23ebae9121a741bb6530" - integrity sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw== - dependencies: - proxy-compare "2.5.1" - use-sync-external-store "1.2.0" - -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== - -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" - -walk-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" - integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== - -walker@^1.0.7: - 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.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - 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.0: - 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" - -web-vitals@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-2.1.4.tgz#76563175a475a5e835264d373704f9dde718290c" - integrity sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg== - -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@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -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-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== - 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.6.0: - version "4.11.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.11.0.tgz#290ee594765cd8260adfe83b2d18115ea04484e7" - integrity sha512-L5S4Q2zT57SK7tazgzjMiSMBdsw+rGYIX27MgPgx7LDhWO0lViPrHKoLS7jo5In06PWYAhlYu3PbyoC6yAThbw== - 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" - -webpack-manifest-plugin@^4.0.2: - version "4.1.1" - resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz#10f8dbf4714ff93a215d5a45bcc416d80506f94f" - integrity sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow== - dependencies: - tapable "^2.0.0" - webpack-sources "^2.2.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.2.0: - 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-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.64.4: - version "5.74.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.74.0.tgz#02a5dac19a17e0bb47093f2be67c695102a55980" - integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.1.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -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-fetch@^3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== - -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@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -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.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== - -which@^1.3.1: - 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" - -word-wrap@^1.2.3, word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -workbox-background-sync@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz#3141afba3cc8aa2ae14c24d0f6811374ba8ff6a9" - integrity sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g== - dependencies: - idb "^7.0.1" - workbox-core "6.5.4" - -workbox-broadcast-update@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz#8441cff5417cd41f384ba7633ca960a7ffe40f66" - integrity sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw== - dependencies: - workbox-core "6.5.4" - -workbox-build@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.5.4.tgz#7d06d31eb28a878817e1c991c05c5b93409f0389" - integrity sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA== - dependencies: - "@apideck/better-ajv-errors" "^0.3.1" - "@babel/core" "^7.11.1" - "@babel/preset-env" "^7.11.0" - "@babel/runtime" "^7.11.2" - "@rollup/plugin-babel" "^5.2.0" - "@rollup/plugin-node-resolve" "^11.2.1" - "@rollup/plugin-replace" "^2.4.1" - "@surma/rollup-plugin-off-main-thread" "^2.2.3" - ajv "^8.6.0" - common-tags "^1.8.0" - fast-json-stable-stringify "^2.1.0" - fs-extra "^9.0.1" - glob "^7.1.6" - lodash "^4.17.20" - pretty-bytes "^5.3.0" - rollup "^2.43.1" - rollup-plugin-terser "^7.0.0" - source-map "^0.8.0-beta.0" - stringify-object "^3.3.0" - strip-comments "^2.0.1" - tempy "^0.6.0" - upath "^1.2.0" - workbox-background-sync "6.5.4" - workbox-broadcast-update "6.5.4" - workbox-cacheable-response "6.5.4" - workbox-core "6.5.4" - workbox-expiration "6.5.4" - workbox-google-analytics "6.5.4" - workbox-navigation-preload "6.5.4" - workbox-precaching "6.5.4" - workbox-range-requests "6.5.4" - workbox-recipes "6.5.4" - workbox-routing "6.5.4" - workbox-strategies "6.5.4" - workbox-streams "6.5.4" - workbox-sw "6.5.4" - workbox-window "6.5.4" - -workbox-cacheable-response@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz#a5c6ec0c6e2b6f037379198d4ef07d098f7cf137" - integrity sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug== - dependencies: - workbox-core "6.5.4" - -workbox-core@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba" - integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q== - -workbox-expiration@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.4.tgz#501056f81e87e1d296c76570bb483ce5e29b4539" - integrity sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ== - dependencies: - idb "^7.0.1" - workbox-core "6.5.4" - -workbox-google-analytics@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz#c74327f80dfa4c1954cbba93cd7ea640fe7ece7d" - integrity sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg== - dependencies: - workbox-background-sync "6.5.4" - workbox-core "6.5.4" - workbox-routing "6.5.4" - workbox-strategies "6.5.4" - -workbox-navigation-preload@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz#ede56dd5f6fc9e860a7e45b2c1a8f87c1c793212" - integrity sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng== - dependencies: - workbox-core "6.5.4" - -workbox-precaching@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72" - integrity sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg== - dependencies: - workbox-core "6.5.4" - workbox-routing "6.5.4" - workbox-strategies "6.5.4" - -workbox-range-requests@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz#86b3d482e090433dab38d36ae031b2bb0bd74399" - integrity sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg== - dependencies: - workbox-core "6.5.4" - -workbox-recipes@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.5.4.tgz#cca809ee63b98b158b2702dcfb741b5cc3e24acb" - integrity sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA== - dependencies: - workbox-cacheable-response "6.5.4" - workbox-core "6.5.4" - workbox-expiration "6.5.4" - workbox-precaching "6.5.4" - workbox-routing "6.5.4" - workbox-strategies "6.5.4" - -workbox-routing@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da" - integrity sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg== - dependencies: - workbox-core "6.5.4" - -workbox-strategies@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d" - integrity sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw== - dependencies: - workbox-core "6.5.4" - -workbox-streams@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.5.4.tgz#1cb3c168a6101df7b5269d0353c19e36668d7d69" - integrity sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg== - dependencies: - workbox-core "6.5.4" - workbox-routing "6.5.4" - -workbox-sw@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.5.4.tgz#d93e9c67924dd153a61367a4656ff4d2ae2ed736" - integrity sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA== - -workbox-webpack-plugin@^6.4.1: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz#baf2d3f4b8f435f3469887cf4fba2b7fac3d0fd7" - integrity sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg== - dependencies: - fast-json-stable-stringify "^2.1.0" - pretty-bytes "^5.4.1" - upath "^1.2.0" - webpack-sources "^1.4.3" - workbox-build "6.5.4" - -workbox-window@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.4.tgz#d991bc0a94dff3c2dbb6b84558cff155ca878e91" - integrity sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug== - dependencies: - "@types/trusted-types" "^2.0.2" - workbox-core "6.5.4" - -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" - -write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -ws@^7.4.6, ws@^7.5.1: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^8.4.2: - version "8.8.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" - integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== - -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.2, 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@^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, yaml@^1.10.2, yaml@^1.7.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -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@^15.3.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@^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" - -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== - -zustand@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.0.tgz#13b3e8ca959dd53d536034440aec382ff91b65c3" - integrity sha512-2dq6wq4dSxbiPTamGar0NlIG/av0wpyWZJGeQYtUOLegIUvhM2Bf86ekPlmgpUtS5uR7HyetSiktYrGsdsyZgQ== - dependencies: - use-sync-external-store "1.2.0" - -zustand@^4.3.5: - version "4.4.1" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.1.tgz#0cd3a3e4756f21811bd956418fdc686877e8b3b0" - integrity sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw== - dependencies: - use-sync-external-store "1.2.0" diff --git a/packages/doc/src/stories/widgets/Pool.stories.tsx b/packages/doc/src/stories/widgets/Pool.stories.tsx index 705b1b61..cfc2b052 100644 --- a/packages/doc/src/stories/widgets/Pool.stories.tsx +++ b/packages/doc/src/stories/widgets/Pool.stories.tsx @@ -20,51 +20,31 @@ export const Primary = (props: any) => { }); } }, [projectId, apiKey]); + return ( { + const [config, setConfig] = React.useState({}); + const { projectId, apiKey, ...other } = props; + React.useEffect(() => { + if (projectId && apiKey) { + const dodoService = new SwapWidgetApi(); + dodoService + .getConfigSwapWidgetProps(projectId, apiKey) + .then(({ swapWidgetProps }) => { + setConfig(swapWidgetProps); + }); + } + }, [projectId, apiKey]); + + return ( + + ); +}; + +Primary.args = { + projectId: 'project2', + apiKey: 'ee53d6b75b12aceed4', + width: '100%', + height: '100%', + routerPage: undefined, + onlyChainId: 2810, +}; diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index cde6f1d1..e775a426 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.0.4-ve33.2", + "version": "3.0.4-ve33.5", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", @@ -76,10 +76,10 @@ "@tanstack/react-query": "^5.18.1", "@uniswap/sdk-core": "^5.9.0", "@uniswap/v2-sdk": "^4.6.2", - "@web3-react/core": "8.2.0", - "@web3-react/eip1193": "8.2.0", - "@web3-react/metamask": "8.2.1", - "@web3-react/types": "8.2.0", + "@web3-react/core": "^8.2.3", + "@web3-react/eip1193": "^8.2.3", + "@web3-react/metamask": "^8.2.4", + "@web3-react/types": "^8.2.3", "@web3-react/walletconnect-v2": "8.3.6", "axios": "^0.27.2", "bignumber.js": "^9.0.2", @@ -101,7 +101,7 @@ "rmc-date-picker": "^6.0.10", "semantic-release": "^19.0.2", "tiny-invariant": "^1.1.0", - "zustand": "^4.5.5" + "zustand": "4.4.0" }, "peerDependencies": { "@babel/runtime": ">=7.17.0", diff --git a/packages/dodoex-widgets/src/index.tsx b/packages/dodoex-widgets/src/index.tsx index e9bec767..96daee27 100644 --- a/packages/dodoex-widgets/src/index.tsx +++ b/packages/dodoex-widgets/src/index.tsx @@ -2,6 +2,7 @@ import { createRoot } from 'react-dom/client'; import { Swap, SwapProps } from './components/Swap'; import { Widget, WidgetProps } from './components/Widget'; import { Pool } from './widgets/PoolWidget'; +import { Ve33PoolList } from './widgets/Ve33PoolList'; export { PageType, useRouterStore } from './router'; export type { Page } from './router'; @@ -36,6 +37,7 @@ export { PoolOperate, default as PoolOperateDialog, } from './widgets/PoolWidget/PoolOperate'; +export { Ve33PoolList } from './widgets/Ve33PoolList'; export type { PoolOperateProps } from './widgets/PoolWidget/PoolOperate'; export type SwapWidgetProps = WidgetProps & SwapProps; @@ -70,6 +72,13 @@ export function PoolWidget(props: SwapWidgetProps) { ); } +export function Ve33PoolListWidget(props: SwapWidgetProps) { + return ( + + + + ); +} // For none-react project! export function InitSwapWidget(props: SwapWidgetProps) { const rootEl = document.getElementById('dodo-swap-widget'); diff --git a/packages/dodoex-widgets/src/widgets/Ve33PoolList/index.tsx b/packages/dodoex-widgets/src/widgets/Ve33PoolList/index.tsx new file mode 100644 index 00000000..1d218105 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/Ve33PoolList/index.tsx @@ -0,0 +1,5 @@ +export interface Ve33PoolListProps {} + +export const Ve33PoolList = (props: Ve33PoolListProps) => { + return; +}; diff --git a/yarn.lock b/yarn.lock index af0f2b5a..65b0cc32 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7911,48 +7911,48 @@ "@walletconnect/window-getters" "^1.0.1" tslib "1.14.1" -"@web3-react/core@8.2.0": - version "8.2.0" - resolved "https://registry.npmjs.org/@web3-react/core/-/core-8.2.0.tgz" - integrity sha512-r7dmK2E8Jrpvm/DF93hGMB+8lECHSI3Oo0NrHbhxkisK6in6rdgAXeYFhZtM48LBAm9py6fQvLzjCM6Qx9q0oQ== - dependencies: - "@web3-react/store" "^8.2.0" - "@web3-react/types" "^8.2.0" - zustand "^4.3.5" +"@web3-react/core@^8.2.3": + version "8.2.3" + resolved "https://registry.yarnpkg.com/@web3-react/core/-/core-8.2.3.tgz#142899e74401bfd3a481a1b9578b2fd8f9dfde81" + integrity sha512-0ezmRKhqQpoa9ct2/3erg60zBXfC/f/liYR1mfSGKtIroRkLnPARigZSV6pI+fi8bhfGJ0RKtFWyTCCWZzdq1w== + dependencies: + "@web3-react/store" "^8.2.3" + "@web3-react/types" "^8.2.3" + zustand "4.4.0" optionalDependencies: "@ethersproject/providers" "^5" -"@web3-react/eip1193@8.2.0": - version "8.2.0" - resolved "https://registry.npmjs.org/@web3-react/eip1193/-/eip1193-8.2.0.tgz" - integrity sha512-Ugbt+FisHO8aLD5o5B4AZdtgSVpjrbmtC5MgHrOEBw+IwFqr20EJreh052u8ExI2OrPjARIVOkNcp50Xxs7oUw== +"@web3-react/eip1193@^8.2.3": + version "8.2.3" + resolved "https://registry.yarnpkg.com/@web3-react/eip1193/-/eip1193-8.2.3.tgz#d09d5a5ea98719010eb7dd845631acb1f15c51e5" + integrity sha512-PdL8PCv3zgQrnowRlBK7PIO8G7v/nc31PYgarACo8mX+l5Y4+l7+ma/kpkULXp5yLtc4qlQYlCalmXpcbtl2FA== dependencies: - "@web3-react/types" "^8.2.0" + "@web3-react/types" "^8.2.3" eventemitter3 "^4.0.7" -"@web3-react/metamask@8.2.1": - version "8.2.1" - resolved "https://registry.npmjs.org/@web3-react/metamask/-/metamask-8.2.1.tgz" - integrity sha512-JysxkAImIygkD95Bimrj7HwcTq79tq4ZSlphZt24LBMrEVY5K8k+e5mCAuJuDZ7Fu+aBxqpS0lgPjaBGKdNu/A== +"@web3-react/metamask@^8.2.4": + version "8.2.4" + resolved "https://registry.yarnpkg.com/@web3-react/metamask/-/metamask-8.2.4.tgz#26438222c4b17964c011ea359058ba6feb6a2330" + integrity sha512-4yoqDgvcB0QKUGSk00/fUipA3z5rOXcQYAwE0CABPa5lbTRAIm5i8F0Gj8UW7QO0pQus4UtjX0+JxWdclB7UrA== dependencies: "@metamask/detect-provider" "^1.2.0" - "@web3-react/types" "^8.2.0" + "@web3-react/types" "^8.2.3" -"@web3-react/store@^8.2.0": - version "8.2.0" - resolved "https://registry.npmjs.org/@web3-react/store/-/store-8.2.0.tgz" - integrity sha512-cG8nb+tBeRUJu+98ko6YZuAWmoipGMEbR3bhineCNd4x2mXv3GbWSPtE17GeWVshZgDbZu2/Du0okTx+22VWCg== +"@web3-react/store@^8.2.3": + version "8.2.3" + resolved "https://registry.yarnpkg.com/@web3-react/store/-/store-8.2.3.tgz#64a0ddaf49f85c120e07f5089dd4d7df9346f881" + integrity sha512-qUJQ5pDsYYDra+/+glq2BmIS43HYAiEZ22sLLVh6E75WiZKRNOOqUxBDPe33KTIn718DLt51j+wd2FT+oT/kJQ== dependencies: "@ethersproject/address" "^5" - "@web3-react/types" "^8.2.0" - zustand "^4.3.5" + "@web3-react/types" "^8.2.3" + zustand "4.4.0" -"@web3-react/types@8.2.0", "@web3-react/types@^8.2.0": - version "8.2.0" - resolved "https://registry.npmjs.org/@web3-react/types/-/types-8.2.0.tgz" - integrity sha512-TBYTFlqJZaEpVbuAAKRJFX5PZc3lI1TqDZzY94zwCrCh4GBepwwK7+PxmRAppMFuNa5x0vFX/ghLEC44e6TCFg== +"@web3-react/types@^8.2.0", "@web3-react/types@^8.2.3": + version "8.2.3" + resolved "https://registry.yarnpkg.com/@web3-react/types/-/types-8.2.3.tgz#e2ac1eaaa7f96b518a5535fee048bf73470f5c21" + integrity sha512-kSG90QkN+n7IOtp10nQ44oS8J7jzfH9EmqnruwBpCGybh1FM/ohyRvUKWYZNfNE4wsjTSpKsINR0/VdDsZMHyg== dependencies: - zustand "^4.3.5" + zustand "4.4.0" "@web3-react/walletconnect-v2@8.3.6": version "8.3.6" @@ -20984,11 +20984,6 @@ use-sync-external-store@1.2.0, use-sync-external-store@^1.0.0: resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== -use-sync-external-store@1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz" - integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== - utf-8-validate@^5.0.2: version "5.0.10" resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz" @@ -21740,16 +21735,9 @@ zod@3.22.4: resolved "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz" integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== -zustand@^4.3.5: - version "4.3.8" - resolved "https://registry.npmjs.org/zustand/-/zustand-4.3.8.tgz" - integrity sha512-4h28KCkHg5ii/wcFFJ5Fp+k1J3gJoasaIbppdgZFO4BPJnsNxL0mQXBSFgOgAdCdBj35aDTPvdAJReTMntFPGg== +zustand@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.0.tgz#13b3e8ca959dd53d536034440aec382ff91b65c3" + integrity sha512-2dq6wq4dSxbiPTamGar0NlIG/av0wpyWZJGeQYtUOLegIUvhM2Bf86ekPlmgpUtS5uR7HyetSiktYrGsdsyZgQ== dependencies: use-sync-external-store "1.2.0" - -zustand@^4.5.5: - version "4.5.5" - resolved "https://registry.npmjs.org/zustand/-/zustand-4.5.5.tgz" - integrity sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q== - dependencies: - use-sync-external-store "1.2.2" From 856b43c18bbe19e3e70b8bc5cb23a05193c520ff Mon Sep 17 00:00:00 2001 From: yrjkqq Date: Thu, 3 Apr 2025 16:51:29 +0800 Subject: [PATCH 04/18] feat: enhance GraphQL API with Ve33 pool queries, update component imports, and improve theme colors --- packages/doc/.storybook/main.ts | 1 + .../stories/widgets/Ve33PoolList.stories.tsx | 19 +- packages/dodoex-api/src/gql/gql.ts | 8 + packages/dodoex-api/src/gql/graphql.ts | 252 ++++++++++++ .../src/services/pool/graphqlQuery.ts | 28 ++ .../src/Input/SearchInput.tsx | 39 +- .../dodoex-components/src/Switch/index.tsx | 87 +++++ packages/dodoex-components/src/index.ts | 1 + .../dodoex-components/src/theme/config.tsx | 34 +- .../src/components/WidgetContainer.tsx | 2 +- .../src/hooks/useGraphQLRequests.ts | 1 + packages/dodoex-widgets/src/index.tsx | 4 +- .../src/widgets/PoolWidget/utils.ts | 6 + .../src/widgets/Ve33PoolList/index.tsx | 5 - .../widgets/ve33/Ve33PoolList/TableList.tsx | 360 ++++++++++++++++++ .../src/widgets/ve33/Ve33PoolList/index.tsx | 165 ++++++++ .../dodoex-widgets/src/widgets/ve33/types.ts | 5 + tsconfig.json | 10 +- 18 files changed, 975 insertions(+), 52 deletions(-) create mode 100644 packages/dodoex-components/src/Switch/index.tsx delete mode 100644 packages/dodoex-widgets/src/widgets/Ve33PoolList/index.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/types.ts diff --git a/packages/doc/.storybook/main.ts b/packages/doc/.storybook/main.ts index ec67c6d3..530343dd 100644 --- a/packages/doc/.storybook/main.ts +++ b/packages/doc/.storybook/main.ts @@ -50,6 +50,7 @@ const config: StorybookConfig = { '../../dodoex-components', 'src/', ), + '@dodoex/api': path.resolve(__dirname, '../../dodoex-api', 'src/'), '@dodoex/widgets': path.resolve( __dirname, '../../dodoex-widgets', diff --git a/packages/doc/src/stories/widgets/Ve33PoolList.stories.tsx b/packages/doc/src/stories/widgets/Ve33PoolList.stories.tsx index 631ae98f..bdb2ebc4 100644 --- a/packages/doc/src/stories/widgets/Ve33PoolList.stories.tsx +++ b/packages/doc/src/stories/widgets/Ve33PoolList.stories.tsx @@ -1,6 +1,5 @@ -import { SwapWidgetApi } from '@dodoex/api'; -import { PoolWidget, SwapWidgetProps } from '@dodoex/widgets'; -import React from 'react'; +/* eslint-disable import/no-extraneous-dependencies */ +import { Ve33PoolListWidget } from '@dodoex/widgets'; export default { title: 'Widgets/Ve33PoolList', @@ -8,22 +7,10 @@ export default { }; export const Primary = (props: any) => { - const [config, setConfig] = React.useState({}); const { projectId, apiKey, ...other } = props; - React.useEffect(() => { - if (projectId && apiKey) { - const dodoService = new SwapWidgetApi(); - dodoService - .getConfigSwapWidgetProps(projectId, apiKey) - .then(({ swapWidgetProps }) => { - setConfig(swapWidgetProps); - }); - } - }, [projectId, apiKey]); return ( - ; + /** 池子列表 */ + ve33_getPoolList: Array>; + /** 锁仓信息 */ + ve33_getUserLock: Array>; + /** 用户投资列表 */ + ve33_getUserPortfolioList: Array>; + /** 用户veMOMO信息 */ + ve33_getUserVeMOMOInfo: Ve33UserVeMomoInfo; + /** 投票池列表 */ + ve33_getVotePoolList: Array>; ve33_token_list?: Maybe>>; withdrawFundHistories: Array; withdrawFundHistory?: Maybe; @@ -14818,6 +14830,30 @@ export type QueryVdodo_GetStatsArgs = { where?: InputMaybe; }; +export type QueryVe33_GetPoolArgs = { + where?: InputMaybe; +}; + +export type QueryVe33_GetPoolListArgs = { + where?: InputMaybe; +}; + +export type QueryVe33_GetUserLockArgs = { + where: Ve33UserInput; +}; + +export type QueryVe33_GetUserPortfolioListArgs = { + where: Ve33PortfolioInput; +}; + +export type QueryVe33_GetUserVeMomoInfoArgs = { + where: Ve33UserInput; +}; + +export type QueryVe33_GetVotePoolListArgs = { + where?: InputMaybe; +}; + export type QueryVe33_Token_ListArgs = { where?: InputMaybe; }; @@ -20188,6 +20224,160 @@ export type VdodoVdodoServiceChargesResult = { pool_fees_total: Scalars['String']['output']; }; +export type Ve33Incentive = { + amount: Scalars['BigInt']['output']; + token: Scalars['String']['output']; +}; + +export type Ve33Lock = { + id: Scalars['String']['output']; + isPermanent: Scalars['Boolean']['output']; + isVoted: Scalars['Boolean']['output']; + lockedEnd: Scalars['BigInt']['output']; + userAddress: Scalars['String']['output']; + value: Scalars['BigDecimal']['output']; + votingPower: Scalars['BigDecimal']['output']; +}; + +export type Ve33Pool = { + apr: Scalars['BigDecimal']['output']; + feeRate: Scalars['BigDecimal']['output']; + feesToken0: Scalars['BigDecimal']['output']; + feesToken1: Scalars['BigDecimal']['output']; + feesUSD: Scalars['BigDecimal']['output']; + gaugeAddress: Scalars['String']['output']; + id: Scalars['String']['output']; + title: Scalars['String']['output']; + token0Address: Scalars['String']['output']; + token0Decimals: Scalars['Int']['output']; + token0Name: Scalars['String']['output']; + token0Symbol: Scalars['String']['output']; + token1Address: Scalars['String']['output']; + token1Decimals: Scalars['Int']['output']; + token1Name: Scalars['String']['output']; + token1Symbol: Scalars['String']['output']; + totalValueLockedToken0: Scalars['BigDecimal']['output']; + totalValueLockedToken1: Scalars['BigDecimal']['output']; + totalValueLockedUSD: Scalars['BigDecimal']['output']; + volumeToken0: Scalars['BigDecimal']['output']; + volumeToken1: Scalars['BigDecimal']['output']; + volumeUSD: Scalars['BigDecimal']['output']; +}; + +export type Ve33PoolInput = { + pool?: InputMaybe; +}; + +export type Ve33PoolTotalVoted = { + token: Scalars['String']['output']; + weight: Scalars['String']['output']; +}; + +export type Ve33Portfolio = { + apr: Scalars['BigDecimal']['output']; + feeRate: Scalars['BigDecimal']['output']; + feesToken0: Scalars['BigDecimal']['output']; + feesToken1: Scalars['BigDecimal']['output']; + feesUSD: Scalars['BigDecimal']['output']; + gaugeAddress: Scalars['String']['output']; + /** liquidity position id */ + id: Scalars['String']['output']; + incentives: Array>; + liquidityTokenBalance: Scalars['String']['output']; + liquidityTokenBalanceUSD: Scalars['String']['output']; + liquidityTokenInMining: Scalars['String']['output']; + liquidityTokenInMiningUSD: Scalars['String']['output']; + liquidityUSD: Scalars['String']['output']; + locks: Array>; + poolAddress: Scalars['String']['output']; + title: Scalars['String']['output']; + token0Address: Scalars['String']['output']; + token0Amount: Scalars['String']['output']; + token0Decimals: Scalars['Int']['output']; + token0LowerPrice: Scalars['String']['output']; + token0Name: Scalars['String']['output']; + token0Piece: Scalars['String']['output']; + token0Symbol: Scalars['String']['output']; + token0UpperPrice: Scalars['String']['output']; + token1Address: Scalars['String']['output']; + token1Amount: Scalars['String']['output']; + token1Decimals: Scalars['Int']['output']; + token1LowerPrice: Scalars['String']['output']; + token1Name: Scalars['String']['output']; + token1Piece: Scalars['String']['output']; + token1Symbol: Scalars['String']['output']; + token1UpperPrice: Scalars['String']['output']; + type: Scalars['String']['output']; +}; + +export type Ve33PortfolioInput = { + page?: InputMaybe; + size?: InputMaybe; + token_starts_with?: InputMaybe; + type?: InputMaybe; + user: Scalars['String']['input']; +}; + +export type Ve33PortfolioLock = { + id: Scalars['String']['output']; + lockedEnd: Scalars['BigInt']['output']; + totalWeight: Scalars['BigDecimal']['output']; + usd: Scalars['BigDecimal']['output']; + userAddress: Scalars['String']['output']; + value: Scalars['BigInt']['output']; + votingPower: Scalars['BigInt']['output']; + weight: Scalars['BigDecimal']['output']; +}; + +export type Ve33TokenFilterPaginationInput = { + page?: InputMaybe; + size?: InputMaybe; + token_starts_with?: InputMaybe; +}; + +export type Ve33UserInput = { + user: Scalars['String']['input']; +}; + +export type Ve33UserVeMomoInfo = { + totalVeMOMOCount: Scalars['Int']['output']; + votedVeMOMOCount: Scalars['Int']['output']; +}; + +export type Ve33VotePool = { + apr: Scalars['BigDecimal']['output']; + feeRate: Scalars['BigDecimal']['output']; + feesToken0: Scalars['BigDecimal']['output']; + feesToken1: Scalars['BigDecimal']['output']; + feesUSD: Scalars['BigDecimal']['output']; + gaugeAddress: Scalars['String']['output']; + id: Scalars['String']['output']; + incentives: Array>; + title: Scalars['String']['output']; + token0Address: Scalars['String']['output']; + token0Decimals: Scalars['Int']['output']; + token0Name: Scalars['String']['output']; + token0Symbol: Scalars['String']['output']; + token1Address: Scalars['String']['output']; + token1Decimals: Scalars['Int']['output']; + token1Name: Scalars['String']['output']; + token1Symbol: Scalars['String']['output']; + totalValueLockedToken0: Scalars['BigDecimal']['output']; + totalValueLockedToken1: Scalars['BigDecimal']['output']; + totalValueLockedUSD: Scalars['BigDecimal']['output']; + votes: Array>; +}; + +export type Ve33VotePoolInput = { + page?: InputMaybe; + size?: InputMaybe; + token_starts_with?: InputMaybe; + type?: InputMaybe; + user?: InputMaybe; +}; + +export type Ve33VotePoolType = 'All' | 'V2' | 'V3'; + export type Ve33_TokenVe33Token = { address?: Maybe; chainId?: Maybe; @@ -21366,6 +21556,37 @@ export type FetchPoolPairListQuery = { }>; }; +export type Ve33_GetPoolListQueryVariables = Exact<{ + where?: InputMaybe; +}>; + +export type Ve33_GetPoolListQuery = { + ve33_getPoolList: Array<{ + id: string; + title: string; + totalValueLockedUSD: any; + totalValueLockedToken0: any; + totalValueLockedToken1: any; + volumeUSD: any; + volumeToken0: any; + volumeToken1: any; + feesUSD: any; + feesToken0: any; + feesToken1: any; + token0Address: string; + token0Name: string; + token0Symbol: string; + token0Decimals: number; + token1Address: string; + token1Name: string; + token1Symbol: string; + token1Decimals: number; + gaugeAddress: string; + feeRate: any; + apr: any; + } | null>; +}; + export type FetchUserSwapOrderHistoriesQueryVariables = Exact<{ where?: InputMaybe; }>; @@ -22295,6 +22516,37 @@ export const FetchPoolPairListDocument = new TypedDocumentString(` FetchPoolPairListQuery, FetchPoolPairListQueryVariables >; +export const Ve33_GetPoolListDocument = new TypedDocumentString(` + query Ve33_getPoolList($where: Ve33TokenFilterPaginationInput) { + ve33_getPoolList(where: $where) { + id + title + totalValueLockedUSD + totalValueLockedToken0 + totalValueLockedToken1 + volumeUSD + volumeToken0 + volumeToken1 + feesUSD + feesToken0 + feesToken1 + token0Address + token0Name + token0Symbol + token0Decimals + token1Address + token1Name + token1Symbol + token1Decimals + gaugeAddress + feeRate + apr + } +} + `) as unknown as TypedDocumentString< + Ve33_GetPoolListQuery, + Ve33_GetPoolListQueryVariables +>; export const FetchUserSwapOrderHistoriesDocument = new TypedDocumentString(` query FetchUserSwapOrderHistories($where: User_swapswapFilter) { user_swap_orderHistories(where: $where) { diff --git a/packages/dodoex-api/src/services/pool/graphqlQuery.ts b/packages/dodoex-api/src/services/pool/graphqlQuery.ts index 52d0dd93..9daf9408 100644 --- a/packages/dodoex-api/src/services/pool/graphqlQuery.ts +++ b/packages/dodoex-api/src/services/pool/graphqlQuery.ts @@ -492,4 +492,32 @@ export const poolGraphqlQuery = { } } `), + fetchVe33PoolList: graphql(` + query Ve33_getPoolList($where: Ve33TokenFilterPaginationInput) { + ve33_getPoolList(where: $where) { + id + title + totalValueLockedUSD + totalValueLockedToken0 + totalValueLockedToken1 + volumeUSD + volumeToken0 + volumeToken1 + feesUSD + feesToken0 + feesToken1 + token0Address + token0Name + token0Symbol + token0Decimals + token1Address + token1Name + token1Symbol + token1Decimals + gaugeAddress + feeRate + apr + } + } + `), }; diff --git a/packages/dodoex-components/src/Input/SearchInput.tsx b/packages/dodoex-components/src/Input/SearchInput.tsx index 82fa5ced..02a6a8f5 100644 --- a/packages/dodoex-components/src/Input/SearchInput.tsx +++ b/packages/dodoex-components/src/Input/SearchInput.tsx @@ -1,10 +1,10 @@ /* eslint-disable react/jsx-props-no-spreading */ -import { merge } from 'lodash'; -import { default as Input, InputProps } from './Input'; -import { Search, Error } from '@dodoex/icons'; +import { Error } from '@dodoex/icons'; import { useTheme } from '@mui/system'; -import { HoverOpacity } from '../Hover'; +import { merge } from 'lodash'; import { Box } from '../Box'; +import { HoverOpacity } from '../Hover'; +import { default as Input, InputProps } from './Input'; interface Props extends InputProps { hideSearchIcon?: boolean; @@ -25,14 +25,33 @@ export default function SearchInput({ + > + + + + + + + + + + + ) : null } suffix={ diff --git a/packages/dodoex-components/src/Switch/index.tsx b/packages/dodoex-components/src/Switch/index.tsx new file mode 100644 index 00000000..1bee5c6e --- /dev/null +++ b/packages/dodoex-components/src/Switch/index.tsx @@ -0,0 +1,87 @@ +import React from 'react'; +import { Box, BoxProps } from '../Box'; + +type SwitchProps = { + sx?: BoxProps['sx']; + size?: number; + checked?: boolean; + onChange?: ( + evt: React.ChangeEvent, + checked: boolean, + ) => void; +}; + +export const Switch = React.forwardRef( + function Switch({ sx, onChange, size: sizeProps, ...other }, ref) { + const size = sizeProps ?? 12; // 使用高度作为基准尺寸 + const thumbSize = 8; // 滑块大小固定为 8x8 + const trackWidth = 22; // 固定宽度 22px + const trackHeight = size; // 固定高度 12px + const gap = 2; // 2px 间距 + + return ( + + { + onChange?.(evt, evt.target.checked); + }} + sx={{ + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%', + opacity: 0, + cursor: 'pointer', + zIndex: 1, + }} + /> + + + + ); + }, +); diff --git a/packages/dodoex-components/src/index.ts b/packages/dodoex-components/src/index.ts index f122248b..5683f760 100644 --- a/packages/dodoex-components/src/index.ts +++ b/packages/dodoex-components/src/index.ts @@ -45,5 +45,6 @@ export type { SkeletonProps } from './Skeleton'; export { EmptyDataIcon, FailedIcon } from './Lottie'; export { Select } from './Select'; export { Radio } from './Radio'; +export { Switch } from './Switch'; export { Slider } from './Slider'; export type { SliderProps } from './Slider'; diff --git a/packages/dodoex-components/src/theme/config.tsx b/packages/dodoex-components/src/theme/config.tsx index db4d20cb..e528c464 100644 --- a/packages/dodoex-components/src/theme/config.tsx +++ b/packages/dodoex-components/src/theme/config.tsx @@ -152,31 +152,31 @@ export const darkPalette: PaletteOptions = { export const lightPalette: PaletteOptions = { mode: 'light', primary: { - main: '#1A1A1B', - contrastText: '#fff', + main: '#513E2B', + contrastText: '#FFFFFF', }, secondary: { - main: '#FFE804', - contrastText: '#1A1A1B', + main: '#FFEA02', + contrastText: '#513E2B', }, error: { - main: '#EC5A7D', + main: '#FD6057', contrastText: '#FFFFFF', }, warning: { main: '#B15600', - contrastText: '#1A1A1B', + contrastText: '#513E2B', }, success: { main: '#2FBA90', - contrastText: '#1A1A1B', + contrastText: '#513E2B', }, purple: { - main: '#6851B4', - contrastText: '#1A1A1B', + main: '#BC9CFF', + contrastText: '#513E2B', }, background: { - default: '#F9F6E8', + default: '#F7F4ED', paper: '#FFFFFF', paperContrast: '#F6F6F6', paperDarkContrast: alpha('#1A1A1B', 0.1), @@ -185,11 +185,11 @@ export const lightPalette: PaletteOptions = { tag: alpha('#1A1A1B', 0.04), }, text: { - primary: '#1A1A1B', - secondary: alpha('#1A1A1B', 0.5), - disabled: alpha('#1A1A1B', 0.3), - placeholder: alpha('#1A1A1B', 0.3), - link: '#1A1A1B', + primary: '#513E2B', + secondary: alpha('#513E2B', 0.5), + disabled: alpha('#513E2B', 0.3), + placeholder: alpha('#513E2B', 0.3), + link: '#513E2B', }, border: { main: alpha('#454851', 0.1), @@ -200,8 +200,8 @@ export const lightPalette: PaletteOptions = { default: alpha('#1A1A1B', 0.1), }, tabActive: { - main: alpha('#FFE804', 0.2), - contrastText: '#1A1A1B', + main: 'rgba(255, 234, 2, 0.10)', + contrastText: '#513E2B', }, }; diff --git a/packages/dodoex-widgets/src/components/WidgetContainer.tsx b/packages/dodoex-widgets/src/components/WidgetContainer.tsx index 8845ea6d..0fc7786c 100644 --- a/packages/dodoex-widgets/src/components/WidgetContainer.tsx +++ b/packages/dodoex-widgets/src/components/WidgetContainer.tsx @@ -26,7 +26,7 @@ const WidgetContainer = React.forwardRef(function WidgetContainer( overflowX: 'hidden', } : { - padding: theme.spacing(28, 20, 40, 40), + padding: 0, height: 'auto', }), ...sx, diff --git a/packages/dodoex-widgets/src/hooks/useGraphQLRequests.ts b/packages/dodoex-widgets/src/hooks/useGraphQLRequests.ts index 4345a71f..0b1c7382 100644 --- a/packages/dodoex-widgets/src/hooks/useGraphQLRequests.ts +++ b/packages/dodoex-widgets/src/hooks/useGraphQLRequests.ts @@ -3,6 +3,7 @@ import { useUserOptions } from '../components/UserOptionsProvider'; export const graphQLRequestsLocal = new GraphQLRequests({ // url: 'https://api.gcp.dxd.ink/frontend-graphql', + url: 'https://gateway.gcp.dxd.ink/graphql', }); export function useGraphQLRequests() { diff --git a/packages/dodoex-widgets/src/index.tsx b/packages/dodoex-widgets/src/index.tsx index 96daee27..adf954cb 100644 --- a/packages/dodoex-widgets/src/index.tsx +++ b/packages/dodoex-widgets/src/index.tsx @@ -2,7 +2,7 @@ import { createRoot } from 'react-dom/client'; import { Swap, SwapProps } from './components/Swap'; import { Widget, WidgetProps } from './components/Widget'; import { Pool } from './widgets/PoolWidget'; -import { Ve33PoolList } from './widgets/Ve33PoolList'; +import { Ve33PoolList } from './widgets/ve33/Ve33PoolList'; export { PageType, useRouterStore } from './router'; export type { Page } from './router'; @@ -37,7 +37,7 @@ export { PoolOperate, default as PoolOperateDialog, } from './widgets/PoolWidget/PoolOperate'; -export { Ve33PoolList } from './widgets/Ve33PoolList'; +export { Ve33PoolList } from './widgets/ve33/Ve33PoolList'; export type { PoolOperateProps } from './widgets/PoolWidget/PoolOperate'; export type SwapWidgetProps = WidgetProps & SwapProps; diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts b/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts index 529a35d0..2fef837c 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts @@ -45,6 +45,12 @@ export type FetchPoolList = ExcludeNone< >['pairs'] >; +export type FetchVe33PoolList = ExcludeNone< + ReturnType< + Exclude<(typeof PoolApi.graphql.fetchVe33PoolList)['__apiType'], undefined> + >['ve33_getPoolList'] +>; + export function convertLiquidityTokenToTokenInfo( token: | { diff --git a/packages/dodoex-widgets/src/widgets/Ve33PoolList/index.tsx b/packages/dodoex-widgets/src/widgets/Ve33PoolList/index.tsx deleted file mode 100644 index 1d218105..00000000 --- a/packages/dodoex-widgets/src/widgets/Ve33PoolList/index.tsx +++ /dev/null @@ -1,5 +0,0 @@ -export interface Ve33PoolListProps {} - -export const Ve33PoolList = (props: Ve33PoolListProps) => { - return; -}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx new file mode 100644 index 00000000..13df8549 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx @@ -0,0 +1,360 @@ +import { ChainId, PoolApi, PoolType } from '@dodoex/api'; +import { Box, Button, Tooltip, useTheme } from '@dodoex/components'; +import { t, Trans } from '@lingui/macro'; +import BigNumber from 'bignumber.js'; +import { AddressWithLinkAndCopy } from '../../../components/AddressWithLinkAndCopy'; +import LiquidityLpPartnerReward from '../../../components/LiquidityLpPartnerReward'; +import { TokenLogoPair } from '../../../components/TokenLogoPair'; +import { useRouterStore } from '../../../router'; +import { PageType } from '../../../router/types'; +import { + byWei, + formatApy, + formatExponentialNotation, + formatPercentageNumber, + formatReadableNumber, +} from '../../../utils'; +import LiquidityTable from '../../PoolWidget/PoolList/components/LiquidityTable'; +import { FetchVe33PoolList } from '../../PoolWidget/utils'; +import { FEE_AMOUNT_DETAIL } from '../AMMV3/components/shared'; +import { FeeAmount } from '../AMMV3/sdks/v3-sdk'; +import { OperateTab } from '../PoolOperate/hooks/usePoolOperateTabs'; +import { Ve33PoolOperateProps } from '../types'; +import { + convertFetchLiquidityToOperateData, + convertLiquidityTokenToTokenInfo, + getPoolAMMOrPMM, +} from '../utils'; +import AddingOrRemovingBtn from './components/AddingOrRemovingBtn'; +import GoPoolDetailBtn from './components/GoPoolDetailBtn'; +import PoolApyTooltip from './components/PoolApyTooltip'; + +export interface TableListProps { + poolList: FetchVe33PoolList; + operatePool: Ve33PoolOperateProps; + setOperatePool: (operate: Ve33PoolOperateProps) => void; + hasMore?: boolean; + loadMore?: () => void; + loadMoreLoading?: boolean; +} + +export const TableList = ({ + poolList, + operatePool, + setOperatePool, + hasMore, + loadMore, + loadMoreLoading, +}: TableListProps) => { + const theme = useTheme(); + return ( + + + + + Pair + + + APR + + + TVL + + + Volume + + + Fees + + + + + + {poolList?.map((pool) => { + if (!pool?.pair) return null; + const item = pool.pair; + const baseToken = convertLiquidityTokenToTokenInfo( + item.baseToken, + item.chainId, + ); + const quoteToken = convertLiquidityTokenToTokenInfo( + item.quoteToken, + item.chainId, + ); + const baseApy = item.apy + ? formatApy( + new BigNumber(item.apy?.transactionBaseApy) + .plus(item.apy?.miningBaseApy ?? 0) + .plus(item.apy?.metromMiningApy ?? 0), + ) + : undefined; + const quoteApy = + PoolApi.utils.singleSideLp(item.type as PoolType) && item.apy + ? formatApy( + new BigNumber(item.apy.transactionQuoteApy).plus( + item.apy.miningQuoteApy ?? 0, + ), + ) + : undefined; + + let operateBtnText = ''; + if ( + operatePool?.pool?.address === item.id || + operatePool?.address === item.id + ) { + switch (operatePool.operate) { + case OperateTab.Remove: + operateBtnText = t`Removing`; + break; + default: + operateBtnText = t`Adding`; + break; + } + } + + const hasMining = !!item.miningAddress?.[0]; + const hasMetromMining = + !!item.apy?.metromMiningApy && + Number(item.apy?.metromMiningApy) > 0; + + const type = item.type as PoolType; + const poolType = getPoolAMMOrPMM(type); + const isAMMV2 = type === 'AMMV2'; + const isAMMV3 = type === 'AMMV3'; + + const hoverBg = theme.palette.background.tag; + return ( + + + + {baseToken && quoteToken ? ( + + ) : ( + '' + )} + + + {`${baseToken?.symbol}/${quoteToken?.symbol}`} + + + { + useRouterStore.getState().push({ + type: PageType.PoolDetail, + params: { + chainId: item.chainId as ChainId, + address: item.id as string, + }, + }); + }} + /> + + + + {supportAMM && ( + + + + {poolType} + + Fee rate}> + + {isAMMV3 + ? (FEE_AMOUNT_DETAIL[item.lpFeeRate as FeeAmount] + ?.label ?? '-') + : formatPercentageNumber({ + input: new BigNumber(item.lpFeeRate ?? 0).plus( + item.mtFeeRate + ? byWei(item.mtFeeRate, isAMMV2 ? 4 : 18) + : 0, + ), + })} + + + + + )} + + + ${formatExponentialNotation(new BigNumber(item.tvl))} + + + + + {hasMining || hasMetromMining ? ( + + + ✨{' '} + + + ) : ( + '' + )} + + + {baseApy} + {quoteApy ? `/${quoteApy}` : ''} + + + + + {supportAMM && ( + + ${formatReadableNumber({ input: item.volume24H || 0 })} + + )} + + + {supportAMM && poolType === 'PMM' && ( + + )} + {operateBtnText ? ( + setOperatePool(null)} + /> + ) : ( + + )} + + + + ); + })} + + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx new file mode 100644 index 00000000..e3f4b119 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx @@ -0,0 +1,165 @@ +import { PoolApi } from '@dodoex/api'; +import { alpha, Box, SearchInput, Switch, useTheme } from '@dodoex/components'; +import { useInfiniteQuery } from '@tanstack/react-query'; +import { useWeb3React } from '@web3-react/core'; +import { useRef, useState } from 'react'; +import { useUserOptions } from '../../../components/UserOptionsProvider'; +import WidgetContainer from '../../../components/WidgetContainer'; +import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; +import { useGraphQLRequests } from '../../../hooks/useGraphQLRequests'; +import { Ve33PoolOperateProps } from '../types'; +import { CardStatus } from '../../../components/CardWidgets'; +import { TableList } from './TableList'; + +export interface Ve33PoolListProps {} + +export const Ve33PoolList = (props: Ve33PoolListProps) => { + const { account, chainId: currentChainId } = useWeb3React(); + const { onlyChainId: chainId } = useUserOptions(); + const { isMobile } = useWidgetDevice(); + const graphQLRequests = useGraphQLRequests(); + const theme = useTheme(); + + const [filterToken, setFilterToken] = useState(''); + const [usdValueChecked, setUsdValueChecked] = useState(false); + const [operatePool, setOperatePool] = + useState | null>(null); + + const scrollParentRef = useRef(null); + + const query = graphQLRequests.getInfiniteQuery( + PoolApi.graphql.fetchVe33PoolList, + 'page', + { + where: { + token_starts_with: filterToken, + size: isMobile ? 4 : 8, + }, + }, + ); + const fetchResult = useInfiniteQuery({ + ...query, + initialPageParam: 1, + getNextPageParam: (item) => { + const { currentPage, totalCount, pageSize } = item.ve33_getPoolList ?? {}; + if (!currentPage || !totalCount || !pageSize) { + return null; + } + let totalPage = Math.floor(totalCount / pageSize); + if (totalCount % pageSize) { + totalPage += 1; + } + if (currentPage >= totalPage) { + return null; + } + return currentPage + 1; + }, + }); + + const hasMore = fetchResult.hasNextPage; + + return ( + + + + { + setFilterToken(e.target.value); + }} + /> + + + + $VALUE + + { + setUsdValueChecked(checked); + }} + /> + + + + { + if (fetchResult.hasNextPage && !fetchResult.isFetching) { + fetchResult.fetchNextPage(); + } + }} + supportAMM={supportAMMV2 || supportAMMV3} + /> + + + + {operatePool && ( + + {operatePool.poolInfo?.title ?? '-'} + + )} + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/types.ts b/packages/dodoex-widgets/src/widgets/ve33/types.ts new file mode 100644 index 00000000..ff6874d3 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/types.ts @@ -0,0 +1,5 @@ +import { FetchVe33PoolList } from '../PoolWidget/utils'; + +export interface Ve33PoolOperateProps { + poolInfo: FetchVe33PoolList[0]; +} diff --git a/tsconfig.json b/tsconfig.json index 1669f998..fc2da099 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,15 @@ "jsx": "react-jsx", "downlevelIteration": true, "newLine": "CRLF", - "declaration": true + "declaration": true, + "paths": { + "@dodoex/api": ["./packages/dodoex-api/src"], + "@dodoex/api/*": ["./packages/dodoex-api/src/*"], + "@dodoex/components": ["./packages/dodoex-components/src"], + "@dodoex/components/*": ["./packages/dodoex-components/src/*"], + "@dodoex/icons": ["./packages/dodoex-icons/src"], + "@dodoex/icons/*": ["./packages/dodoex-icons/src/*"] + } }, "exclude": ["node_modules"], "include": ["custom.d.ts"] From 2da73d74a9043d088c30f5491b804c7539a69382 Mon Sep 17 00:00:00 2001 From: yrjkqq Date: Thu, 10 Apr 2025 19:33:12 +0800 Subject: [PATCH 05/18] chore: update package versions to 3.0.4-ve33.2, enhance Ve33 pool data structure, and improve widget styling --- packages/doc/package.json | 2 +- packages/dodoex-api/package.json | 2 +- packages/dodoex-api/src/gql/gql.ts | 4 +- packages/dodoex-api/src/gql/graphql.ts | 51 +- .../src/services/pool/graphqlQuery.ts | 11 +- packages/dodoex-components/package.json | 2 +- .../dodoex-components/src/theme/config.tsx | 10 +- packages/dodoex-widgets/package.json | 6 +- .../src/components/AddressWithLinkAndCopy.tsx | 2 + packages/dodoex-widgets/src/locales/en-US.js | 2 +- packages/dodoex-widgets/src/locales/en-US.po | 12 +- packages/dodoex-widgets/src/locales/zh-CN.js | 2 +- packages/dodoex-widgets/src/locales/zh-CN.po | 12 +- .../dodoex-widgets/src/utils/formatter.ts | 36 +- .../PoolList/components/LiquidityTable.tsx | 28 +- .../widgets/ve33/Ve33PoolList/TableList.tsx | 555 ++++--- .../Ve33PoolList/components/PoolTypeTag.tsx | 56 + .../src/widgets/ve33/Ve33PoolList/index.tsx | 46 +- .../ve33/aerodrome-finance/contracts/Pool.sol | 609 ++++++++ .../aerodrome-finance/contracts/PoolFees.sol | 34 + .../contracts/factories/PoolFactory.sol | 173 +++ .../contracts/core/CLFactory.sol | 234 +++ .../contracts/core/CLPool.sol | 1329 +++++++++++++++++ .../contracts/proxy /Clones.sol | 109 ++ .../dodoex-widgets/src/widgets/ve33/config.ts | 74 + .../src/widgets/ve33/constants.ts | 27 + .../src/widgets/ve33/hooks/usePoolColors.ts | 26 + .../dodoex-widgets/src/widgets/ve33/types.ts | 26 +- .../dodoex-widgets/src/widgets/ve33/utils.ts | 10 + 29 files changed, 3204 insertions(+), 286 deletions(-) create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/components/PoolTypeTag.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/Pool.sol create mode 100644 packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/PoolFees.sol create mode 100644 packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/factories/PoolFactory.sol create mode 100644 packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLFactory.sol create mode 100644 packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLPool.sol create mode 100644 packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/lib/openzeppelin-contracts/contracts/proxy /Clones.sol create mode 100644 packages/dodoex-widgets/src/widgets/ve33/config.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/constants.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/hooks/usePoolColors.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/utils.ts diff --git a/packages/doc/package.json b/packages/doc/package.json index b9a86113..5c2a8630 100644 --- a/packages/doc/package.json +++ b/packages/doc/package.json @@ -8,7 +8,7 @@ }, "dependencies": { "@babel/runtime": "^7.17.0", - "@dodoex/components": "^3.0.4-ve33.1", + "@dodoex/components": "^3.0.4-ve33.2", "@emotion/styled": "^11.10.0", "@storybook/addon-docs": "^8.3.5", "@web3modal/ethers5": "^3.5.5", diff --git a/packages/dodoex-api/package.json b/packages/dodoex-api/package.json index 0abeb321..0275e28a 100644 --- a/packages/dodoex-api/package.json +++ b/packages/dodoex-api/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/api", - "version": "3.0.4-ve33.1", + "version": "3.0.4-ve33.2", "description": "DODO API Kit", "source": "src/index.ts", "types": "dist/types/index.d.ts", diff --git a/packages/dodoex-api/src/gql/gql.ts b/packages/dodoex-api/src/gql/gql.ts index 0f8d10f5..9db5a64a 100644 --- a/packages/dodoex-api/src/gql/gql.ts +++ b/packages/dodoex-api/src/gql/gql.ts @@ -46,7 +46,7 @@ const documents = { types.FetchLiquidityPositionsDocument, '\n query FetchPoolPairList(\n $first: Int\n $baseWhere: Pair_filter\n $quoteWhere: Pair_filter\n $orderBy: Pair_orderBy\n $orderDirection: OrderDirection\n ) {\n basePairs: pairs(\n first: $first\n where: $baseWhere\n orderBy: $orderBy\n orderDirection: $orderDirection\n ) {\n id\n type\n creator\n lpFeeRate\n i\n k\n baseReserve\n quoteReserve\n createdAtTimestamp\n lastTradePrice\n volumeUSD\n baseToken {\n id\n symbol\n name\n decimals\n usdPrice\n }\n quoteToken {\n id\n symbol\n name\n decimals\n usdPrice\n }\n }\n quotePairs: pairs(\n first: $first\n where: $quoteWhere\n orderBy: $orderBy\n orderDirection: $orderDirection\n ) {\n id\n type\n creator\n lpFeeRate\n i\n k\n baseReserve\n quoteReserve\n createdAtTimestamp\n lastTradePrice\n volumeUSD\n baseToken {\n id\n symbol\n name\n decimals\n usdPrice\n }\n quoteToken {\n id\n symbol\n name\n decimals\n usdPrice\n }\n }\n }\n ': types.FetchPoolPairListDocument, - '\n query Ve33_getPoolList($where: Ve33TokenFilterPaginationInput) {\n ve33_getPoolList(where: $where) {\n id\n title\n totalValueLockedUSD\n totalValueLockedToken0\n totalValueLockedToken1\n volumeUSD\n volumeToken0\n volumeToken1\n feesUSD\n feesToken0\n feesToken1\n token0Address\n token0Name\n token0Symbol\n token0Decimals\n token1Address\n token1Name\n token1Symbol\n token1Decimals\n gaugeAddress\n feeRate\n apr\n }\n }\n ': + '\n query Ve33_getPoolList($where: Ve33TokenFilterPaginationInput) {\n ve33_getPoolList(where: $where) {\n id\n title\n version\n gaugeAddress\n feeRate\n apr {\n fees\n incentives\n }\n tvl\n totalValueLockedUSD\n totalValueLockedToken0\n totalValueLockedToken1\n volumeUSD\n volumeToken0\n volumeToken1\n feesUSD\n feesToken0\n feesToken1\n token0Address\n token0Name\n token0Symbol\n token0Decimals\n token1Address\n token1Name\n token1Symbol\n token1Decimals\n }\n }\n ': types.Ve33_GetPoolListDocument, '\n query FetchUserSwapOrderHistories($where: User_swapswapFilter) {\n user_swap_orderHistories(where: $where) {\n count\n page\n list {\n chainId\n createdAt\n fromAmount\n fromTokenDecimals\n fromTokenPrice\n fromTokenSymbol\n fromTokenAddress\n fromTokenLogoImg\n hash\n status\n toAmount\n toTokenDecimals\n toTokenPrice\n toTokenSymbol\n toTokenAddress\n toTokenLogoImg\n minAmount\n nonce\n extra\n user\n }\n }\n }\n ': types.FetchUserSwapOrderHistoriesDocument, @@ -164,7 +164,7 @@ export function graphql( * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function graphql( - source: '\n query Ve33_getPoolList($where: Ve33TokenFilterPaginationInput) {\n ve33_getPoolList(where: $where) {\n id\n title\n totalValueLockedUSD\n totalValueLockedToken0\n totalValueLockedToken1\n volumeUSD\n volumeToken0\n volumeToken1\n feesUSD\n feesToken0\n feesToken1\n token0Address\n token0Name\n token0Symbol\n token0Decimals\n token1Address\n token1Name\n token1Symbol\n token1Decimals\n gaugeAddress\n feeRate\n apr\n }\n }\n ', + source: '\n query Ve33_getPoolList($where: Ve33TokenFilterPaginationInput) {\n ve33_getPoolList(where: $where) {\n id\n title\n version\n gaugeAddress\n feeRate\n apr {\n fees\n incentives\n }\n tvl\n totalValueLockedUSD\n totalValueLockedToken0\n totalValueLockedToken1\n volumeUSD\n volumeToken0\n volumeToken1\n feesUSD\n feesToken0\n feesToken1\n token0Address\n token0Name\n token0Symbol\n token0Decimals\n token1Address\n token1Name\n token1Symbol\n token1Decimals\n }\n }\n ', ): typeof import('./graphql').Ve33_GetPoolListDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. diff --git a/packages/dodoex-api/src/gql/graphql.ts b/packages/dodoex-api/src/gql/graphql.ts index 38ff7a79..72e5ef04 100644 --- a/packages/dodoex-api/src/gql/graphql.ts +++ b/packages/dodoex-api/src/gql/graphql.ts @@ -20227,6 +20227,7 @@ export type VdodoVdodoServiceChargesResult = { export type Ve33Incentive = { amount: Scalars['BigInt']['output']; token: Scalars['String']['output']; + usd: Scalars['BigDecimal']['output']; }; export type Ve33Lock = { @@ -20240,7 +20241,7 @@ export type Ve33Lock = { }; export type Ve33Pool = { - apr: Scalars['BigDecimal']['output']; + apr: Ve33PoolApr; feeRate: Scalars['BigDecimal']['output']; feesToken0: Scalars['BigDecimal']['output']; feesToken1: Scalars['BigDecimal']['output']; @@ -20259,11 +20260,19 @@ export type Ve33Pool = { totalValueLockedToken0: Scalars['BigDecimal']['output']; totalValueLockedToken1: Scalars['BigDecimal']['output']; totalValueLockedUSD: Scalars['BigDecimal']['output']; + tvl: Scalars['BigDecimal']['output']; + /** v2 or v3 */ + version: Scalars['String']['output']; volumeToken0: Scalars['BigDecimal']['output']; volumeToken1: Scalars['BigDecimal']['output']; volumeUSD: Scalars['BigDecimal']['output']; }; +export type Ve33PoolApr = { + fees: Scalars['BigDecimal']['output']; + incentives: Scalars['BigDecimal']['output']; +}; + export type Ve33PoolInput = { pool?: InputMaybe; }; @@ -20274,13 +20283,15 @@ export type Ve33PoolTotalVoted = { }; export type Ve33Portfolio = { - apr: Scalars['BigDecimal']['output']; + apr: Ve33PortfolioApr; + emissions: Scalars['BigDecimal']['output']; + emissionsUSD: Scalars['BigDecimal']['output']; feeRate: Scalars['BigDecimal']['output']; feesToken0: Scalars['BigDecimal']['output']; feesToken1: Scalars['BigDecimal']['output']; feesUSD: Scalars['BigDecimal']['output']; gaugeAddress: Scalars['String']['output']; - /** liquidity position id */ + /** liquidity position id, 'Position #1000' */ id: Scalars['String']['output']; incentives: Array>; liquidityTokenBalance: Scalars['String']['output']; @@ -20307,7 +20318,17 @@ export type Ve33Portfolio = { token1Piece: Scalars['String']['output']; token1Symbol: Scalars['String']['output']; token1UpperPrice: Scalars['String']['output']; + tvl: Scalars['BigDecimal']['output']; + /** voting=Voting Rewards, liquidity=LP Rewards */ type: Scalars['String']['output']; + /** v2 or v3 */ + version: Scalars['String']['output']; +}; + +export type Ve33PortfolioApr = { + fees: Scalars['BigDecimal']['output']; + incentives: Scalars['BigDecimal']['output']; + rewards: Scalars['BigDecimal']['output']; }; export type Ve33PortfolioInput = { @@ -20345,7 +20366,7 @@ export type Ve33UserVeMomoInfo = { }; export type Ve33VotePool = { - apr: Scalars['BigDecimal']['output']; + apr: Ve33PoolApr; feeRate: Scalars['BigDecimal']['output']; feesToken0: Scalars['BigDecimal']['output']; feesToken1: Scalars['BigDecimal']['output']; @@ -20365,6 +20386,9 @@ export type Ve33VotePool = { totalValueLockedToken0: Scalars['BigDecimal']['output']; totalValueLockedToken1: Scalars['BigDecimal']['output']; totalValueLockedUSD: Scalars['BigDecimal']['output']; + tvl: Scalars['BigDecimal']['output']; + /** v2 or v3 */ + version: Scalars['String']['output']; votes: Array>; }; @@ -21564,6 +21588,10 @@ export type Ve33_GetPoolListQuery = { ve33_getPoolList: Array<{ id: string; title: string; + version: string; + gaugeAddress: string; + feeRate: any; + tvl: any; totalValueLockedUSD: any; totalValueLockedToken0: any; totalValueLockedToken1: any; @@ -21581,9 +21609,7 @@ export type Ve33_GetPoolListQuery = { token1Name: string; token1Symbol: string; token1Decimals: number; - gaugeAddress: string; - feeRate: any; - apr: any; + apr: { fees: any; incentives: any }; } | null>; }; @@ -22521,6 +22547,14 @@ export const Ve33_GetPoolListDocument = new TypedDocumentString(` ve33_getPoolList(where: $where) { id title + version + gaugeAddress + feeRate + apr { + fees + incentives + } + tvl totalValueLockedUSD totalValueLockedToken0 totalValueLockedToken1 @@ -22538,9 +22572,6 @@ export const Ve33_GetPoolListDocument = new TypedDocumentString(` token1Name token1Symbol token1Decimals - gaugeAddress - feeRate - apr } } `) as unknown as TypedDocumentString< diff --git a/packages/dodoex-api/src/services/pool/graphqlQuery.ts b/packages/dodoex-api/src/services/pool/graphqlQuery.ts index 9daf9408..14bec24b 100644 --- a/packages/dodoex-api/src/services/pool/graphqlQuery.ts +++ b/packages/dodoex-api/src/services/pool/graphqlQuery.ts @@ -497,6 +497,14 @@ export const poolGraphqlQuery = { ve33_getPoolList(where: $where) { id title + version + gaugeAddress + feeRate + apr { + fees + incentives + } + tvl totalValueLockedUSD totalValueLockedToken0 totalValueLockedToken1 @@ -514,9 +522,6 @@ export const poolGraphqlQuery = { token1Name token1Symbol token1Decimals - gaugeAddress - feeRate - apr } } `), diff --git a/packages/dodoex-components/package.json b/packages/dodoex-components/package.json index 9a865eb7..ca131dc8 100644 --- a/packages/dodoex-components/package.json +++ b/packages/dodoex-components/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/components", - "version": "3.0.4-ve33.1", + "version": "3.0.4-ve33.2", "description": "UI component library", "source": "src/index.ts", "types": "dist/types/index.d.ts", diff --git a/packages/dodoex-components/src/theme/config.tsx b/packages/dodoex-components/src/theme/config.tsx index e528c464..53556867 100644 --- a/packages/dodoex-components/src/theme/config.tsx +++ b/packages/dodoex-components/src/theme/config.tsx @@ -179,10 +179,10 @@ export const lightPalette: PaletteOptions = { default: '#F7F4ED', paper: '#FFFFFF', paperContrast: '#F6F6F6', - paperDarkContrast: alpha('#1A1A1B', 0.1), + paperDarkContrast: alpha('#513E2B', 0.1), backdrop: alpha('#000', 0.9), input: '#F0F0F0', - tag: alpha('#1A1A1B', 0.04), + tag: alpha('#513E2B', 0.04), }, text: { primary: '#513E2B', @@ -193,11 +193,11 @@ export const lightPalette: PaletteOptions = { }, border: { main: alpha('#454851', 0.1), - light: alpha('#1A1A1B', 0.3), - disabled: alpha('#1A1A1B', 0.1), + light: alpha('#513E2B', 0.3), + disabled: alpha('#513E2B', 0.1), }, hover: { - default: alpha('#1A1A1B', 0.1), + default: alpha('#513E2B', 0.1), }, tabActive: { main: 'rgba(255, 234, 2, 0.10)', diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index e775a426..e71f06bc 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.0.4-ve33.5", + "version": "3.0.4-ve33.6", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", @@ -58,8 +58,8 @@ }, "dependencies": { "@babel/runtime": "^7.17.0", - "@dodoex/api": "3.0.4-ve33.1", - "@dodoex/components": "3.0.4-ve33.1", + "@dodoex/api": "3.0.4-ve33.2", + "@dodoex/components": "3.0.4-ve33.2", "@dodoex/contract-request": "^1.3.0", "@dodoex/dodo-contract-request": "1.10.0-alpha.3", "@dodoex/icons": "^2.0.2", diff --git a/packages/dodoex-widgets/src/components/AddressWithLinkAndCopy.tsx b/packages/dodoex-widgets/src/components/AddressWithLinkAndCopy.tsx index 3bf2b923..83fe7bb4 100644 --- a/packages/dodoex-widgets/src/components/AddressWithLinkAndCopy.tsx +++ b/packages/dodoex-widgets/src/components/AddressWithLinkAndCopy.tsx @@ -194,6 +194,8 @@ export function AddressWithLinkAndCopy({ component: IconHoverBox, sx: { ml: getIconSpace(isMedium), + display: 'inline-flex', + alignItems: 'center', }, }} /> diff --git a/packages/dodoex-widgets/src/locales/en-US.js b/packages/dodoex-widgets/src/locales/en-US.js index 9ab0ca7e..f1cd492f 100644 --- a/packages/dodoex-widgets/src/locales/en-US.js +++ b/packages/dodoex-widgets/src/locales/en-US.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"Transaction Time:\",\"+uZnU3\":\"Cross Chain\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"The current slippage protection coefficient set exceeds \",[\"maxSlippageWarning\"],\"%, which may result in losses.\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"Opening \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"To\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/nzjSF\":[[\"0\"],\" pending\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"Balance:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"Dismiss\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"Due to the market condition, market price and estimated price may have a slight difference\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" confirmed\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"The current network is inconsistent with the wallet - please switch in wallet\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"Current price impact\",\"6UYTy8\":\"Minute\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"Hour\",\"6lss/t\":\"Pricing Model\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"Enter the token symbol or address\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"Fee includes: Cross Chain fees + Swap fees. Gas fee not included.\",\"7VpPHA\":\"Confirm\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"This token is on\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"Estimated service provider fees\",\"93m8jT\":\"Basic Fee\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"Price impact exceeds the slippage tolerance you set. Try increasing the slippage tolerance.\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"s\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"This CP has been settled by other addrs\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"Max\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"Slippage\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"Insufficient funds - Please retry after depositing more \",[\"EtherTokenSymbol\"],\" into your wallet\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"Are you sure swapping to another chain?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"Destination\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"Unapproved\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"Insufficient cross-chain fees, need at least \",[\"0\"],\" \",[\"1\"]],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"Transaction Pending\",\"Fdp03t\":\"on\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"Day\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HuVZMK\":\"Days\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"Connecting...\",\"J39pAJ\":\"Additional Fee\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"Fetching best price...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"Review Swap\",\"K/PgcA\":\"Select Cross Chain\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"Attention: High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"Select Tokens\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"The setting has been switched to swap mode\",\"NVAuTg\":\"Quote not available\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"Fetching Price...\",\"OfhWJH\":\"Reset\",\"OgKD6h\":\"Best offer\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"Confirming\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"Fee\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"Confirm Cross Chain\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"Estimated Time\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"Swap summary\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"Tx\",\"S8G1qk\":\"Single\",\"SXnevP\":\"Review Cross Chain\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"Price Impact\",\"T0Y2+3\":\"Select a token\",\"TFOxRM\":\"Mins\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"Wallet incompatibility\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"Settings\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"Connect to your \",[\"0\"],\" Wallet\"],\"V+rJKF\":\"Seconds\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"Swap Detail\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"For\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"On\",\"Z7ZXbT\":\"Approve\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"Additional routing fees set by the Widget user\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"Maximum slippage do not exceed 50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"Minutes\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"Cancel\",\"dI46oG\":\"Auto switch network\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"Min\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"Transaction rejected.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"Service update, please wait and try again\",\"gz+9Rb\":\"Gas price is too low, please adjust in your wallet and try again\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC node data exception\",\"h5FVz1\":\"Estimated transaction time\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"Connect to your wallet\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"Enter an amount\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"Approving\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"Something went wrong.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"Second\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"Confirm swap\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"Slippage Tolerance\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"Send to:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"Unable to SETTLE during the cooling-off period\",\"qLkska\":\"The setting has been switched to cross chain mode\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"Connect to a wallet\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"Detail\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"SELECT TOKEN\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"Cross Chain Summary\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20: low-level call failed. Please contact the DODO team.\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"Unsupported network - switch to trade\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"Swap\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"Source\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"User denied transaction signature.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop exception\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"Hours\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"Close\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"Transaction Deadline\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"Insufficient balance\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"Transaction Time:\",\"+uZnU3\":\"Cross Chain\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"The current slippage protection coefficient set exceeds \",[\"maxSlippageWarning\"],\"%, which may result in losses.\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"Opening \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"To\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/mfICu\":\"Fees\",\"/nzjSF\":[[\"0\"],\" pending\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"Balance:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"Dismiss\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"Due to the market condition, market price and estimated price may have a slight difference\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" confirmed\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"The current network is inconsistent with the wallet - please switch in wallet\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"Current price impact\",\"6UYTy8\":\"Minute\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"Hour\",\"6lss/t\":\"Pricing Model\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"Enter the token symbol or address\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"Fee includes: Cross Chain fees + Swap fees. Gas fee not included.\",\"7VpPHA\":\"Confirm\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"This token is on\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"Estimated service provider fees\",\"93m8jT\":\"Basic Fee\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"Price impact exceeds the slippage tolerance you set. Try increasing the slippage tolerance.\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"s\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"This CP has been settled by other addrs\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"Max\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"Slippage\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"Insufficient funds - Please retry after depositing more \",[\"EtherTokenSymbol\"],\" into your wallet\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"Are you sure swapping to another chain?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"Destination\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"Unapproved\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"Insufficient cross-chain fees, need at least \",[\"0\"],\" \",[\"1\"]],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"Transaction Pending\",\"Fdp03t\":\"on\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"Day\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HuVZMK\":\"Days\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"Connecting...\",\"J39pAJ\":\"Additional Fee\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"Fetching best price...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"Review Swap\",\"K/PgcA\":\"Select Cross Chain\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"Attention: High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"Select Tokens\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"The setting has been switched to swap mode\",\"NVAuTg\":\"Quote not available\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"Fetching Price...\",\"OfhWJH\":\"Reset\",\"OgKD6h\":\"Best offer\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"Confirming\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"Fee\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"Confirm Cross Chain\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"Estimated Time\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"Swap summary\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"Tx\",\"S8G1qk\":\"Single\",\"SXnevP\":\"Review Cross Chain\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"Price Impact\",\"T0Y2+3\":\"Select a token\",\"TFOxRM\":\"Mins\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"Wallet incompatibility\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"Settings\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"Connect to your \",[\"0\"],\" Wallet\"],\"V+rJKF\":\"Seconds\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"Swap Detail\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"For\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"On\",\"Z7ZXbT\":\"Approve\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"Additional routing fees set by the Widget user\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"Maximum slippage do not exceed 50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"Minutes\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"Cancel\",\"dI46oG\":\"Auto switch network\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"Min\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"Transaction rejected.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"Service update, please wait and try again\",\"gz+9Rb\":\"Gas price is too low, please adjust in your wallet and try again\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC node data exception\",\"h5FVz1\":\"Estimated transaction time\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"Connect to your wallet\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"Enter an amount\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"Approving\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"Something went wrong.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"Second\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"Confirm swap\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"Slippage Tolerance\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"Send to:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"Unable to SETTLE during the cooling-off period\",\"qLkska\":\"The setting has been switched to cross chain mode\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"Connect to a wallet\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"Detail\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"SELECT TOKEN\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"Cross Chain Summary\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20: low-level call failed. Please contact the DODO team.\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"Unsupported network - switch to trade\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"Swap\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"Source\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"User denied transaction signature.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop exception\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"Hours\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"Close\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"Transaction Deadline\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"Insufficient balance\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file diff --git a/packages/dodoex-widgets/src/locales/en-US.po b/packages/dodoex-widgets/src/locales/en-US.po index 51dca57b..fff557fc 100644 --- a/packages/dodoex-widgets/src/locales/en-US.po +++ b/packages/dodoex-widgets/src/locales/en-US.po @@ -47,6 +47,7 @@ msgid "Total Number of Traders" msgstr "Total Number of Traders" #: src/widgets/PoolWidget/PoolDetail/components/ChartInfo.tsx:43 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:60 msgid "Volume" msgstr "Volume" @@ -58,6 +59,10 @@ msgstr "To" msgid "Receive {0}" msgstr "Receive {0}" +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:63 +msgid "Fees" +msgstr "Fees" + #: src/components/WithExecutionDialog/index.tsx:124 msgid "{0} pending" msgstr "{0} pending" @@ -65,6 +70,7 @@ msgstr "{0} pending" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:449 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:343 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:713 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:101 msgid "Removing" msgstr "Removing" @@ -142,6 +148,7 @@ msgstr "Unstaking" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:452 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:346 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:716 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:104 msgid "Adding" msgstr "Adding" @@ -309,6 +316,7 @@ msgstr "Liquidity" #: src/widgets/MiningWidget/MiningDetail/MiningInfo.tsx:146 #: src/widgets/MiningWidget/MiningDetail/MiningInfo.tsx:213 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:54 msgid "APR" msgstr "APR" @@ -462,6 +470,7 @@ msgstr "No results found" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:388 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:297 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:595 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:51 msgid "Pair" msgstr "Pair" @@ -689,6 +698,7 @@ msgstr "Insufficient cross-chain fees, need at least {0} {1}" #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:300 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:345 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:604 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:57 msgid "TVL" msgstr "TVL" @@ -2291,7 +2301,7 @@ msgstr "ForceStop exception" #: src/components/LoadMore.tsx:50 #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/LiquidityProvidersTable.tsx:222 #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/SwapsTable.tsx:317 -#: src/widgets/PoolWidget/PoolList/components/LiquidityTable.tsx:101 +#: src/widgets/PoolWidget/PoolList/components/LiquidityTable.tsx:121 msgid "Load more" msgstr "Load more" diff --git a/packages/dodoex-widgets/src/locales/zh-CN.js b/packages/dodoex-widgets/src/locales/zh-CN.js index 62247dc3..39b4e838 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.js +++ b/packages/dodoex-widgets/src/locales/zh-CN.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"交易时长:\",\"+uZnU3\":\"跨链桥\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"当前滑点保护系数设置超过\",[\"maxSlippageWarning\"],\"%,可能会造成损失。\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"连接 \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"至\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/nzjSF\":[[\"0\"],\" 等待中\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"余额:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"忽略\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"由于市场情况不同,市场价格与估算价格可能略有差异。\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" 已确认\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"当前网络与钱包不一致,请在钱包中切换\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"当前价格冲击\",\"6UYTy8\":\"分钟\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"小时\",\"6lss/t\":\"Pricing Model\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"输入代币符号或地址\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"费用包括过跨链桥和交易的手续费,不包括 gas 费。\",\"7VpPHA\":\"确认\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"该代币在\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"预计服务供应商费用\",\"93m8jT\":\"基础手续费\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"价格冲击超过了你设置的滑点, 请提高滑点后重试\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"秒\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"此众筹池已被其他地址结算\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"全部\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"滑点\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"余额不足 - 请在钱包充值\",[\"EtherTokenSymbol\"],\"后重试\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"是否确认切换到另一个链?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"目标\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"未授权\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"跨链费用不足,至少需要 \",[\"0\"],\" \",[\"1\"],\" \"],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"交易进行中\",\"Fdp03t\":\"在\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"天\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HuVZMK\":\"天\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"连接中...\",\"J39pAJ\":\"额外手续费\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"获取最优价格中...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"预览交易\",\"K/PgcA\":\"选择跨链桥\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"注意:滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"选择代币\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"设置已切换至闪兑模式\",\"NVAuTg\":\"没有报价\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"获取价格中...\",\"OfhWJH\":\"重置\",\"OgKD6h\":\"最优价格\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"确认中\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"手续费\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"确认跨链交易\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"价格冲击为<0>\",[\"priceImpact\"],\"%, 仍接受此报价\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"预计时间\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"交易预览\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"交易哈希:\",\"S8G1qk\":\"Single\",\"SXnevP\":\"预览跨链交易\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"价格冲击\",\"T0Y2+3\":\"选择代币\",\"TFOxRM\":\"分钟\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"钱包不兼容\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"设置\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"连接你的\",[\"0\"],\"钱包\"],\"V+rJKF\":\"秒\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"交易详情\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"对于\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"在\",\"Z7ZXbT\":\"代币授权\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"由 Widget 设置的额外路由费用\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"最大滑点不能超过50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"分钟\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"取消\",\"dI46oG\":\"自动切换网络\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"分钟\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"交易被拒绝.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"服务升级中, 请等待或重试\",\"gz+9Rb\":\"Gas 价格过低, 请调整后重试\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC节点异常\",\"h5FVz1\":\"预计交易时长\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"连接钱包\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"输入代币数量\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"授权中\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"发生异常错误.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"秒\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"确认交易\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"滑点\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"发送至:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"在冷静期无法进行清算\",\"qLkska\":\"设置已切换到跨链桥交易模式\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"连接钱包\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"详情\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"选择代币\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"跨链桥概览\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20:low-level call failed,请联系DODO团队解决。\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"未支持网络 - 请切换后进行交易\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"交易\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"源\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"用户拒绝交易签名.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop 异常\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"小时\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"关闭\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"交易截止时间\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"余额不足\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"交易时长:\",\"+uZnU3\":\"跨链桥\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"当前滑点保护系数设置超过\",[\"maxSlippageWarning\"],\"%,可能会造成损失。\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"连接 \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"至\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/mfICu\":\"Fees\",\"/nzjSF\":[[\"0\"],\" 等待中\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"余额:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"忽略\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"由于市场情况不同,市场价格与估算价格可能略有差异。\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" 已确认\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"当前网络与钱包不一致,请在钱包中切换\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"当前价格冲击\",\"6UYTy8\":\"分钟\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"小时\",\"6lss/t\":\"Pricing Model\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"输入代币符号或地址\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"费用包括过跨链桥和交易的手续费,不包括 gas 费。\",\"7VpPHA\":\"确认\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"该代币在\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"预计服务供应商费用\",\"93m8jT\":\"基础手续费\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"价格冲击超过了你设置的滑点, 请提高滑点后重试\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"秒\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"此众筹池已被其他地址结算\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"全部\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"滑点\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"余额不足 - 请在钱包充值\",[\"EtherTokenSymbol\"],\"后重试\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"是否确认切换到另一个链?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"目标\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"未授权\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"跨链费用不足,至少需要 \",[\"0\"],\" \",[\"1\"],\" \"],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"交易进行中\",\"Fdp03t\":\"在\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"天\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HuVZMK\":\"天\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"连接中...\",\"J39pAJ\":\"额外手续费\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"获取最优价格中...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"预览交易\",\"K/PgcA\":\"选择跨链桥\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"注意:滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"选择代币\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"设置已切换至闪兑模式\",\"NVAuTg\":\"没有报价\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"获取价格中...\",\"OfhWJH\":\"重置\",\"OgKD6h\":\"最优价格\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"确认中\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"手续费\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"确认跨链交易\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"价格冲击为<0>\",[\"priceImpact\"],\"%, 仍接受此报价\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"预计时间\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"交易预览\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"交易哈希:\",\"S8G1qk\":\"Single\",\"SXnevP\":\"预览跨链交易\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"价格冲击\",\"T0Y2+3\":\"选择代币\",\"TFOxRM\":\"分钟\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"钱包不兼容\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"设置\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"连接你的\",[\"0\"],\"钱包\"],\"V+rJKF\":\"秒\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"交易详情\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"对于\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"在\",\"Z7ZXbT\":\"代币授权\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"由 Widget 设置的额外路由费用\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"最大滑点不能超过50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"分钟\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"取消\",\"dI46oG\":\"自动切换网络\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"分钟\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"交易被拒绝.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"服务升级中, 请等待或重试\",\"gz+9Rb\":\"Gas 价格过低, 请调整后重试\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC节点异常\",\"h5FVz1\":\"预计交易时长\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"连接钱包\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"输入代币数量\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"授权中\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"发生异常错误.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"秒\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"确认交易\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"滑点\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"发送至:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"在冷静期无法进行清算\",\"qLkska\":\"设置已切换到跨链桥交易模式\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"连接钱包\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"详情\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"选择代币\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"跨链桥概览\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20:low-level call failed,请联系DODO团队解决。\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"未支持网络 - 请切换后进行交易\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"交易\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"源\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"用户拒绝交易签名.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop 异常\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"小时\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"关闭\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"交易截止时间\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"余额不足\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file diff --git a/packages/dodoex-widgets/src/locales/zh-CN.po b/packages/dodoex-widgets/src/locales/zh-CN.po index d563bf7b..a0f19497 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.po +++ b/packages/dodoex-widgets/src/locales/zh-CN.po @@ -47,6 +47,7 @@ msgid "Total Number of Traders" msgstr "" #: src/widgets/PoolWidget/PoolDetail/components/ChartInfo.tsx:43 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:60 msgid "Volume" msgstr "" @@ -58,6 +59,10 @@ msgstr "至" msgid "Receive {0}" msgstr "" +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:63 +msgid "Fees" +msgstr "" + #: src/components/WithExecutionDialog/index.tsx:124 msgid "{0} pending" msgstr "{0} 等待中" @@ -65,6 +70,7 @@ msgstr "{0} 等待中" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:449 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:343 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:713 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:101 msgid "Removing" msgstr "" @@ -142,6 +148,7 @@ msgstr "" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:452 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:346 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:716 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:104 msgid "Adding" msgstr "" @@ -309,6 +316,7 @@ msgstr "" #: src/widgets/MiningWidget/MiningDetail/MiningInfo.tsx:146 #: src/widgets/MiningWidget/MiningDetail/MiningInfo.tsx:213 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:54 msgid "APR" msgstr "" @@ -462,6 +470,7 @@ msgstr "" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:388 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:297 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:595 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:51 msgid "Pair" msgstr "" @@ -689,6 +698,7 @@ msgstr "跨链费用不足,至少需要 {0} {1} " #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:300 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:345 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:604 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:57 msgid "TVL" msgstr "" @@ -2291,7 +2301,7 @@ msgstr "ForceStop 异常" #: src/components/LoadMore.tsx:50 #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/LiquidityProvidersTable.tsx:222 #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/SwapsTable.tsx:317 -#: src/widgets/PoolWidget/PoolList/components/LiquidityTable.tsx:101 +#: src/widgets/PoolWidget/PoolList/components/LiquidityTable.tsx:121 msgid "Load more" msgstr "" diff --git a/packages/dodoex-widgets/src/utils/formatter.ts b/packages/dodoex-widgets/src/utils/formatter.ts index 7a2b4a26..20de884e 100644 --- a/packages/dodoex-widgets/src/utils/formatter.ts +++ b/packages/dodoex-widgets/src/utils/formatter.ts @@ -237,27 +237,34 @@ function getNegative(num: number) { * format to short number, like: -0.12 -> 0, 0.0000123->0.000012, 123.234 -> 123.23, 1234.12 -> 1.23K, 1000000.123->1.00M * @param n */ -export function formatShortNumber(n?: BigNumber, showDecimals = 4): string { - if (!n || n.isNaN()) { +export function formatShortNumber( + n?: number | string | BigNumber | null, + showDecimals = 4, +): string { + if (!n || n === null || n === undefined) { + return '-'; + } + const N = new BigNumber(n); + if (!N.isFinite()) { return '-'; } - if (n.eq(0)) { + if (N.eq(0)) { return '0'; } - if (n.lte(0.000001) && n.gte(-0.000001)) { - return n.toExponential(2); + if (N.lte(0.000001) && N.gte(-0.000001)) { + return N.toExponential(2); } - if (n.lt(1) && n.gt(-1)) { - return formatReadableNumber({ input: n, showDecimals }); + if (N.lt(1) && N.gt(-1)) { + return formatReadableNumber({ input: N, showDecimals }); } - if (n.lt(kilo) && n.gt(getNegative(kilo))) { - return formatReadableNumber({ input: n, showDecimals }); + if (N.lt(kilo) && N.gt(getNegative(kilo))) { + return formatReadableNumber({ input: N, showDecimals }); } - if (n.lt(million) && n.gt(getNegative(million))) { - return `${formatReadableNumber({ input: n.div(kilo), showDecimals: 2 })}K`; + if (N.lt(million) && N.gt(getNegative(million))) { + return `${formatReadableNumber({ input: N.div(kilo), showDecimals: 2 })}K`; } return `${formatReadableNumber({ - input: n.div(million), + input: N.div(million), showDecimals: 2, })}M`; } @@ -307,7 +314,10 @@ export function formatPercentageNumber({ })}%`; } -export const formatApy = (amount: BigNumber, showDecimals = 2): string => { +export const formatApy = ( + amount: BigNumber | string | number | null, + showDecimals = 2, +): string => { return formatPercentageNumber({ input: amount, showDecimals, diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/components/LiquidityTable.tsx b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/components/LiquidityTable.tsx index 042c605a..4c6e312e 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/components/LiquidityTable.tsx +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/PoolList/components/LiquidityTable.tsx @@ -38,26 +38,31 @@ export default function LiquidityTable({ width: '100%', borderCollapse: 'collapse', '& th': { - p: 24, - typography: 'body1', + px: 24, + py: 12, + typography: 'h6', + lineHeight: '20px', + fontWeight: 600, textAlign: 'left', color: 'text.secondary', }, '& td': { px: 24, - py: 20, + height: 72, }, '& thead': { position: 'sticky', top: 0, zIndex: 2, + backgroundColor: 'background.paperDarkContrast', + }, + '& tbody': { backgroundColor: 'background.paper', }, '& th:last-child, & td:last-child': { position: 'sticky', right: 0, zIndex: 1, - backgroundColor: 'background.paper', '&::before': { content: '""', position: 'absolute', @@ -71,6 +76,21 @@ export default function LiquidityTable({ )} -2px 0px 4px 0px`, }, }, + '& td:last-child': { + backgroundColor: 'background.paper', + }, + '& th:first-child': { + borderTopLeftRadius: 24, + }, + '& th:last-child': { + borderTopRightRadius: 24, + }, + '& tbody tr:last-child td:first-child': { + borderBottomLeftRadius: 24, + }, + '& tbody tr:last-child td:last-child': { + borderBottomRightRadius: 24, + }, }} > {children} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx index 13df8549..90bfa4b4 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx @@ -1,45 +1,37 @@ -import { ChainId, PoolApi, PoolType } from '@dodoex/api'; -import { Box, Button, Tooltip, useTheme } from '@dodoex/components'; +import { ChainId } from '@dodoex/api'; +import { + Box, + Button, + ButtonBase, + HoverOpacity, + Tooltip, + useTheme, +} from '@dodoex/components'; import { t, Trans } from '@lingui/macro'; -import BigNumber from 'bignumber.js'; import { AddressWithLinkAndCopy } from '../../../components/AddressWithLinkAndCopy'; -import LiquidityLpPartnerReward from '../../../components/LiquidityLpPartnerReward'; import { TokenLogoPair } from '../../../components/TokenLogoPair'; -import { useRouterStore } from '../../../router'; -import { PageType } from '../../../router/types'; -import { - byWei, - formatApy, - formatExponentialNotation, - formatPercentageNumber, - formatReadableNumber, -} from '../../../utils'; +import { WIDGET_CLASS_NAME } from '../../../components/Widget'; +import { TokenInfo } from '../../../hooks/Token/type'; +import { formatApy, formatShortNumber } from '../../../utils'; import LiquidityTable from '../../PoolWidget/PoolList/components/LiquidityTable'; -import { FetchVe33PoolList } from '../../PoolWidget/utils'; -import { FEE_AMOUNT_DETAIL } from '../AMMV3/components/shared'; -import { FeeAmount } from '../AMMV3/sdks/v3-sdk'; -import { OperateTab } from '../PoolOperate/hooks/usePoolOperateTabs'; -import { Ve33PoolOperateProps } from '../types'; -import { - convertFetchLiquidityToOperateData, - convertLiquidityTokenToTokenInfo, - getPoolAMMOrPMM, -} from '../utils'; -import AddingOrRemovingBtn from './components/AddingOrRemovingBtn'; -import GoPoolDetailBtn from './components/GoPoolDetailBtn'; -import PoolApyTooltip from './components/PoolApyTooltip'; +import { OperateTypeE, Ve33PoolInfoI, Ve33PoolOperateProps } from '../types'; +import { PoolTypeTag } from './components/PoolTypeTag'; export interface TableListProps { - poolList: FetchVe33PoolList; - operatePool: Ve33PoolOperateProps; - setOperatePool: (operate: Ve33PoolOperateProps) => void; + chainId: ChainId; + poolList: Ve33PoolInfoI[]; + usdValueChecked: boolean; + operatePool: Ve33PoolOperateProps | null; + setOperatePool: (operate: Ve33PoolOperateProps | null) => void; hasMore?: boolean; loadMore?: () => void; loadMoreLoading?: boolean; } export const TableList = ({ + chainId, poolList, + usdValueChecked, operatePool, setOperatePool, hasMore, @@ -55,64 +47,57 @@ export const TableList = ({ > - + Pair - + APR - + TVL - + Volume - + Fees - {poolList?.map((pool) => { - if (!pool?.pair) return null; - const item = pool.pair; - const baseToken = convertLiquidityTokenToTokenInfo( - item.baseToken, - item.chainId, - ); - const quoteToken = convertLiquidityTokenToTokenInfo( - item.quoteToken, - item.chainId, - ); - const baseApy = item.apy - ? formatApy( - new BigNumber(item.apy?.transactionBaseApy) - .plus(item.apy?.miningBaseApy ?? 0) - .plus(item.apy?.metromMiningApy ?? 0), - ) - : undefined; - const quoteApy = - PoolApi.utils.singleSideLp(item.type as PoolType) && item.apy - ? formatApy( - new BigNumber(item.apy.transactionQuoteApy).plus( - item.apy.miningQuoteApy ?? 0, - ), - ) - : undefined; + {poolList?.map((item) => { + if (!item) { + return null; + } + const baseToken: TokenInfo = { + chainId, + address: item.token0Address, + name: item.token0Name, + decimals: item.token0Decimals, + symbol: item.token0Symbol, + logoURI: undefined, + }; + const quoteToken: TokenInfo = { + chainId, + address: item.token1Address, + name: item.token1Name, + decimals: item.token1Decimals, + symbol: item.token1Symbol, + logoURI: undefined, + }; + const aprText = item.apr ? formatApy(item.apr.fees) : undefined; let operateBtnText = ''; - if ( - operatePool?.pool?.address === item.id || - operatePool?.address === item.id - ) { - switch (operatePool.operate) { - case OperateTab.Remove: + if (operatePool?.poolInfo?.id === item.id) { + switch (operatePool.operateType) { + case OperateTypeE.Remove: operateBtnText = t`Removing`; break; default: @@ -121,21 +106,11 @@ export const TableList = ({ } } - const hasMining = !!item.miningAddress?.[0]; - const hasMetromMining = - !!item.apy?.metromMiningApy && - Number(item.apy?.metromMiningApy) > 0; - - const type = item.type as PoolType; - const poolType = getPoolAMMOrPMM(type); - const isAMMV2 = type === 'AMMV2'; - const isAMMV3 = type === 'AMMV3'; - const hoverBg = theme.palette.background.tag; return ( - {baseToken && quoteToken ? ( - - ) : ( - '' - )} - - - {`${baseToken?.symbol}/${quoteToken?.symbol}`} - - - { - useRouterStore.getState().push({ - type: PageType.PoolDetail, - params: { - chainId: item.chainId as ChainId, - address: item.id as string, - }, - }); - }} - /> - - - - {supportAMM && ( - + - {poolType} - - Fee rate}> - + + + Pool Address + + + + + + Gauge Address + + + + + } + placement="top" + container={document.querySelector( + `.${WIDGET_CLASS_NAME}`, + )} + onlyHover sx={{ - px: 8, - py: 4, - borderRadius: 4, - typography: 'h6', - backgroundColor: 'background.tag', - color: 'text.secondary', + maxWidth: 300, }} > - {isAMMV3 - ? (FEE_AMOUNT_DETAIL[item.lpFeeRate as FeeAmount] - ?.label ?? '-') - : formatPercentageNumber({ - input: new BigNumber(item.lpFeeRate ?? 0).plus( - item.mtFeeRate - ? byWei(item.mtFeeRate, isAMMV2 ? 4 : 18) - : 0, - ), - })} - - + + + + + + + + - )} + - ${formatExponentialNotation(new BigNumber(item.tvl))} + {aprText} - {hasMining || hasMetromMining ? ( - - - ✨{' '} + {usdValueChecked ? ( + `$${formatShortNumber(item.totalValueLockedUSD)}` + ) : ( + <> + + {formatShortNumber(item.totalValueLockedToken0)} +   + + {baseToken.symbol} + - + + {formatShortNumber(item.totalValueLockedToken1)}  + + {quoteToken.symbol} + + + + )} + + + + + {usdValueChecked ? ( + `$${formatShortNumber(item.volumeUSD)}` ) : ( - '' + <> + + {formatShortNumber(item.volumeToken0)} +   + + {baseToken.symbol} + + + + {formatShortNumber(item.volumeToken1)}  + + {quoteToken.symbol} + + + )} - - - {baseApy} - {quoteApy ? `/${quoteApy}` : ''} - - - {supportAMM && ( - - ${formatReadableNumber({ input: item.volume24H || 0 })} + + + {usdValueChecked ? ( + `$${formatShortNumber(item.feesUSD)}` + ) : ( + <> + + {formatShortNumber(item.feesToken0)} +   + + {baseToken.symbol} + + + + {formatShortNumber(item.feesToken1)}  + + {quoteToken.symbol} + + + + )} - )} + - {supportAMM && poolType === 'PMM' && ( - - )} {operateBtnText ? ( - setOperatePool(null)} - /> + { + setOperatePool(null); + }} + > + {operateBtnText} + + + + ) : ( )} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/components/PoolTypeTag.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/components/PoolTypeTag.tsx new file mode 100644 index 00000000..ea99fcb8 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/components/PoolTypeTag.tsx @@ -0,0 +1,56 @@ +import { Box, useTheme } from '@dodoex/components'; +import { PoolTypeE } from '../../types'; +import { usePoolColors } from '../../hooks/usePoolColors'; +import { formatFee } from '../../utils'; + +export interface PoolTypeTagProps { + type: PoolTypeE; + stable: boolean; + fee: number; +} + +export const PoolTypeTag = (props: PoolTypeTagProps) => { + const { type, stable, fee } = props; + const theme = useTheme(); + + const { color, backgroundColor, name } = usePoolColors({ type, stable, fee }); + + return ( + + + {name} + + + {formatFee({ type, fee })} + + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx index e3f4b119..25d7bedd 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx @@ -1,29 +1,28 @@ import { PoolApi } from '@dodoex/api'; -import { alpha, Box, SearchInput, Switch, useTheme } from '@dodoex/components'; +import { Box, SearchInput, Switch, useTheme } from '@dodoex/components'; import { useInfiniteQuery } from '@tanstack/react-query'; -import { useWeb3React } from '@web3-react/core'; -import { useRef, useState } from 'react'; -import { useUserOptions } from '../../../components/UserOptionsProvider'; +import { useMemo, useRef, useState } from 'react'; +import { CardStatus } from '../../../components/CardWidgets'; import WidgetContainer from '../../../components/WidgetContainer'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; import { useGraphQLRequests } from '../../../hooks/useGraphQLRequests'; -import { Ve33PoolOperateProps } from '../types'; -import { CardStatus } from '../../../components/CardWidgets'; +import { PoolTypeE, Ve33PoolInfoI, Ve33PoolOperateProps } from '../types'; import { TableList } from './TableList'; export interface Ve33PoolListProps {} export const Ve33PoolList = (props: Ve33PoolListProps) => { - const { account, chainId: currentChainId } = useWeb3React(); - const { onlyChainId: chainId } = useUserOptions(); + const { chainId } = useWalletInfo(); const { isMobile } = useWidgetDevice(); const graphQLRequests = useGraphQLRequests(); const theme = useTheme(); const [filterToken, setFilterToken] = useState(''); const [usdValueChecked, setUsdValueChecked] = useState(false); - const [operatePool, setOperatePool] = - useState | null>(null); + const [operatePool, setOperatePool] = useState( + null, + ); const scrollParentRef = useRef(null); @@ -57,6 +56,22 @@ export const Ve33PoolList = (props: Ve33PoolListProps) => { }); const hasMore = fetchResult.hasNextPage; + const poolList = useMemo(() => { + const list = [] as Ve33PoolInfoI[]; + fetchResult.data?.pages.forEach((page) => { + page.ve33_getPoolList?.forEach((pool) => { + if (pool) { + list.push({ + ...pool, + stable: false, + fee: pool.feeRate, + type: pool.version === 'v2' ? PoolTypeE.Pool : PoolTypeE.CLPool, + }); + } + }); + }); + return list; + }, [fetchResult.data?.pages]); return ( { { { fetchResult.fetchNextPage(); } }} - supportAMM={supportAMMV2 || supportAMMV3} /> {operatePool && ( diff --git a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/Pool.sol b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/Pool.sol new file mode 100644 index 00000000..08363f40 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/Pool.sol @@ -0,0 +1,609 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity 0.8.19; + +import {Math} from '@openzeppelin/contracts/utils/math/Math.sol'; +import {IPool} from './interfaces/IPool.sol'; +import {IVoter} from './interfaces/IVoter.sol'; +import {IPoolCallee} from './interfaces/IPoolCallee.sol'; +import {IPoolFactory} from './interfaces/factories/IPoolFactory.sol'; +import {PoolFees} from './PoolFees.sol'; +import {SafeERC20} from '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol'; +import {ERC20} from '@openzeppelin/contracts/token/ERC20/ERC20.sol'; +import {IERC20} from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; +import {ERC20Permit} from '@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol'; +import {ReentrancyGuard} from '@openzeppelin/contracts/security/ReentrancyGuard.sol'; + +/// @title Pool +/// @author velodrome.finance, @figs999, @pegahcarter +/// @notice Protocol token pool, either stable or volatile +contract Pool is IPool, ERC20Permit, ReentrancyGuard { + using SafeERC20 for IERC20; + + string private _name; + string private _symbol; + address private _voter; + + /// @inheritdoc IPool + bool public stable; + + uint256 internal constant MINIMUM_LIQUIDITY = 10 ** 3; + uint256 internal constant MINIMUM_K = 10 ** 10; + + /// @inheritdoc IPool + address public token0; + /// @inheritdoc IPool + address public token1; + /// @inheritdoc IPool + address public poolFees; + /// @inheritdoc IPool + address public factory; + + /// @inheritdoc IPool + uint256 public constant periodSize = 1800; + + Observation[] public observations; + + uint256 internal decimals0; + uint256 internal decimals1; + + /// @inheritdoc IPool + uint256 public reserve0; + /// @inheritdoc IPool + uint256 public reserve1; + /// @inheritdoc IPool + uint256 public blockTimestampLast; + + /// @inheritdoc IPool + uint256 public reserve0CumulativeLast; + /// @inheritdoc IPool + uint256 public reserve1CumulativeLast; + + /// @inheritdoc IPool + uint256 public index0 = 0; + /// @inheritdoc IPool + uint256 public index1 = 0; + + /// @inheritdoc IPool + mapping(address => uint256) public supplyIndex0; + /// @inheritdoc IPool + mapping(address => uint256) public supplyIndex1; + + /// @inheritdoc IPool + mapping(address => uint256) public claimable0; + /// @inheritdoc IPool + mapping(address => uint256) public claimable1; + + constructor() ERC20('', '') ERC20Permit('') {} + + /// @inheritdoc IPool + function initialize(address _token0, address _token1, bool _stable) external { + if (factory != address(0)) revert FactoryAlreadySet(); + factory = _msgSender(); + _voter = IPoolFactory(factory).voter(); + (token0, token1, stable) = (_token0, _token1, _stable); + poolFees = address(new PoolFees(_token0, _token1)); + string memory symbol0 = ERC20(_token0).symbol(); + string memory symbol1 = ERC20(_token1).symbol(); + if (_stable) { + _name = string(abi.encodePacked('Stable AMM - ', symbol0, '/', symbol1)); + _symbol = string(abi.encodePacked('sAMM-', symbol0, '/', symbol1)); + } else { + _name = string( + abi.encodePacked('Volatile AMM - ', symbol0, '/', symbol1) + ); + _symbol = string(abi.encodePacked('vAMM-', symbol0, '/', symbol1)); + } + + decimals0 = 10 ** ERC20(_token0).decimals(); + decimals1 = 10 ** ERC20(_token1).decimals(); + + observations.push(Observation(block.timestamp, 0, 0)); + } + + /// @inheritdoc IPool + function setName(string calldata __name) external { + if (msg.sender != IVoter(_voter).emergencyCouncil()) + revert NotEmergencyCouncil(); + _name = __name; + } + + /// @inheritdoc IPool + function setSymbol(string calldata __symbol) external { + if (msg.sender != IVoter(_voter).emergencyCouncil()) + revert NotEmergencyCouncil(); + _symbol = __symbol; + } + + /// @inheritdoc IPool + function observationLength() external view returns (uint256) { + return observations.length; + } + + /// @inheritdoc IPool + function lastObservation() public view returns (Observation memory) { + return observations[observations.length - 1]; + } + + /// @inheritdoc IPool + function metadata() + external + view + returns ( + uint256 dec0, + uint256 dec1, + uint256 r0, + uint256 r1, + bool st, + address t0, + address t1 + ) + { + return (decimals0, decimals1, reserve0, reserve1, stable, token0, token1); + } + + /// @inheritdoc IPool + function tokens() external view returns (address, address) { + return (token0, token1); + } + + /// @inheritdoc IPool + function getK() external nonReentrant returns (uint256) { + return _k(reserve0, reserve1); + } + + /// @inheritdoc IPool + function claimFees() external returns (uint256 claimed0, uint256 claimed1) { + address sender = _msgSender(); + _updateFor(sender); + + claimed0 = claimable0[sender]; + claimed1 = claimable1[sender]; + + if (claimed0 > 0 || claimed1 > 0) { + claimable0[sender] = 0; + claimable1[sender] = 0; + + PoolFees(poolFees).claimFeesFor(sender, claimed0, claimed1); + + emit Claim(sender, sender, claimed0, claimed1); + } + } + + /// @dev Accrue fees on token0 + function _update0(uint256 amount) internal { + // Only update on this pool if there is a fee + if (amount == 0) return; + IERC20(token0).safeTransfer(poolFees, amount); // transfer the fees out to PoolFees + uint256 _ratio = (amount * 1e18) / totalSupply(); // 1e18 adjustment is removed during claim + if (_ratio > 0) { + index0 += _ratio; + } + emit Fees(_msgSender(), amount, 0); + } + + /// @dev Accrue fees on token1 + function _update1(uint256 amount) internal { + // Only update on this pool if there is a fee + if (amount == 0) return; + IERC20(token1).safeTransfer(poolFees, amount); + uint256 _ratio = (amount * 1e18) / totalSupply(); + if (_ratio > 0) { + index1 += _ratio; + } + emit Fees(_msgSender(), 0, amount); + } + + /// @dev This function MUST be called on any balance changes, otherwise can be used to infinitely claim fees + /// Fees are segregated from core funds, so fees can never put liquidity at risk. + function _updateFor(address recipient) internal { + uint256 _supplied = balanceOf(recipient); // get LP balance of `recipient` + if (_supplied > 0) { + uint256 _supplyIndex0 = supplyIndex0[recipient]; // get last adjusted index0 for recipient + uint256 _supplyIndex1 = supplyIndex1[recipient]; + uint256 _index0 = index0; // get global index0 for accumulated fees + uint256 _index1 = index1; + supplyIndex0[recipient] = _index0; // update user current position to global position + supplyIndex1[recipient] = _index1; + uint256 _delta0 = _index0 - _supplyIndex0; // see if there is any difference that need to be accrued + uint256 _delta1 = _index1 - _supplyIndex1; + if (_delta0 > 0) { + uint256 _share = (_supplied * _delta0) / 1e18; // add accrued difference for each supplied token + claimable0[recipient] += _share; + } + if (_delta1 > 0) { + uint256 _share = (_supplied * _delta1) / 1e18; + claimable1[recipient] += _share; + } + } else { + supplyIndex0[recipient] = index0; // new users are set to the default global state + supplyIndex1[recipient] = index1; + } + } + + /// @inheritdoc IPool + function getReserves() + public + view + returns (uint256 _reserve0, uint256 _reserve1, uint256 _blockTimestampLast) + { + _reserve0 = reserve0; + _reserve1 = reserve1; + _blockTimestampLast = blockTimestampLast; + } + + /// @dev update reserves and, on the first call per block, price accumulators + function _update( + uint256 balance0, + uint256 balance1, + uint256 _reserve0, + uint256 _reserve1 + ) internal { + uint256 blockTimestamp = block.timestamp; + uint256 timeElapsed = blockTimestamp - blockTimestampLast; + if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) { + reserve0CumulativeLast += _reserve0 * timeElapsed; + reserve1CumulativeLast += _reserve1 * timeElapsed; + } + + Observation memory _point = lastObservation(); + timeElapsed = blockTimestamp - _point.timestamp; // compare the last observation with current timestamp, if greater than 30 minutes, record a new event + if (timeElapsed > periodSize) { + observations.push( + Observation( + blockTimestamp, + reserve0CumulativeLast, + reserve1CumulativeLast + ) + ); + } + reserve0 = balance0; + reserve1 = balance1; + blockTimestampLast = blockTimestamp; + emit Sync(reserve0, reserve1); + } + + /// @inheritdoc IPool + function currentCumulativePrices() + public + view + returns ( + uint256 reserve0Cumulative, + uint256 reserve1Cumulative, + uint256 blockTimestamp + ) + { + blockTimestamp = block.timestamp; + reserve0Cumulative = reserve0CumulativeLast; + reserve1Cumulative = reserve1CumulativeLast; + + // if time has elapsed since the last update on the pool, mock the accumulated price values + ( + uint256 _reserve0, + uint256 _reserve1, + uint256 _blockTimestampLast + ) = getReserves(); + if (_blockTimestampLast != blockTimestamp) { + // subtraction overflow is desired + uint256 timeElapsed = blockTimestamp - _blockTimestampLast; + reserve0Cumulative += _reserve0 * timeElapsed; + reserve1Cumulative += _reserve1 * timeElapsed; + } + } + + /// @inheritdoc IPool + function quote( + address tokenIn, + uint256 amountIn, + uint256 granularity + ) external view returns (uint256 amountOut) { + uint256[] memory _prices = sample(tokenIn, amountIn, granularity, 1); + uint256 priceAverageCumulative; + uint256 _length = _prices.length; + for (uint256 i = 0; i < _length; i++) { + priceAverageCumulative += _prices[i]; + } + return priceAverageCumulative / granularity; + } + + /// @inheritdoc IPool + function prices( + address tokenIn, + uint256 amountIn, + uint256 points + ) external view returns (uint256[] memory) { + return sample(tokenIn, amountIn, points, 1); + } + + /// @inheritdoc IPool + function sample( + address tokenIn, + uint256 amountIn, + uint256 points, + uint256 window + ) public view returns (uint256[] memory) { + uint256[] memory _prices = new uint256[](points); + + uint256 length = observations.length - 1; + uint256 i = length - (points * window); + uint256 nextIndex = 0; + uint256 index = 0; + + for (; i < length; i += window) { + nextIndex = i + window; + uint256 timeElapsed = observations[nextIndex].timestamp - + observations[i].timestamp; + uint256 _reserve0 = (observations[nextIndex].reserve0Cumulative - + observations[i].reserve0Cumulative) / timeElapsed; + uint256 _reserve1 = (observations[nextIndex].reserve1Cumulative - + observations[i].reserve1Cumulative) / timeElapsed; + _prices[index] = _getAmountOut(amountIn, tokenIn, _reserve0, _reserve1); + // index < length; length cannot overflow + unchecked { + index = index + 1; + } + } + return _prices; + } + + /// @inheritdoc IPool + function mint(address to) external nonReentrant returns (uint256 liquidity) { + (uint256 _reserve0, uint256 _reserve1) = (reserve0, reserve1); + uint256 _balance0 = IERC20(token0).balanceOf(address(this)); + uint256 _balance1 = IERC20(token1).balanceOf(address(this)); + uint256 _amount0 = _balance0 - _reserve0; + uint256 _amount1 = _balance1 - _reserve1; + + uint256 _totalSupply = totalSupply(); // gas savings, must be defined here since totalSupply can update in _mintFee + if (_totalSupply == 0) { + liquidity = Math.sqrt(_amount0 * _amount1) - MINIMUM_LIQUIDITY; + _mint(address(1), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens - cannot be address(0) + if (stable) { + if ((_amount0 * 1e18) / decimals0 != (_amount1 * 1e18) / decimals1) + revert DepositsNotEqual(); + if (_k(_amount0, _amount1) <= MINIMUM_K) revert BelowMinimumK(); + } + } else { + liquidity = Math.min( + (_amount0 * _totalSupply) / _reserve0, + (_amount1 * _totalSupply) / _reserve1 + ); + } + if (liquidity == 0) revert InsufficientLiquidityMinted(); + _mint(to, liquidity); + + _update(_balance0, _balance1, _reserve0, _reserve1); + emit Mint(_msgSender(), _amount0, _amount1); + } + + /// @inheritdoc IPool + function burn( + address to + ) external nonReentrant returns (uint256 amount0, uint256 amount1) { + (uint256 _reserve0, uint256 _reserve1) = (reserve0, reserve1); + (address _token0, address _token1) = (token0, token1); + uint256 _balance0 = IERC20(_token0).balanceOf(address(this)); + uint256 _balance1 = IERC20(_token1).balanceOf(address(this)); + uint256 _liquidity = balanceOf(address(this)); + + uint256 _totalSupply = totalSupply(); // gas savings, must be defined here since totalSupply can update in _mintFee + amount0 = (_liquidity * _balance0) / _totalSupply; // using balances ensures pro-rata distribution + amount1 = (_liquidity * _balance1) / _totalSupply; // using balances ensures pro-rata distribution + if (amount0 == 0 || amount1 == 0) revert InsufficientLiquidityBurned(); + _burn(address(this), _liquidity); + IERC20(_token0).safeTransfer(to, amount0); + IERC20(_token1).safeTransfer(to, amount1); + _balance0 = IERC20(_token0).balanceOf(address(this)); + _balance1 = IERC20(_token1).balanceOf(address(this)); + + _update(_balance0, _balance1, _reserve0, _reserve1); + emit Burn(_msgSender(), to, amount0, amount1); + } + + /// @inheritdoc IPool + function swap( + uint256 amount0Out, + uint256 amount1Out, + address to, + bytes calldata data + ) external nonReentrant { + if (IPoolFactory(factory).isPaused()) revert IsPaused(); + if (amount0Out == 0 && amount1Out == 0) revert InsufficientOutputAmount(); + (uint256 _reserve0, uint256 _reserve1) = (reserve0, reserve1); + if (amount0Out >= _reserve0 || amount1Out >= _reserve1) + revert InsufficientLiquidity(); + + uint256 _balance0; + uint256 _balance1; + { + // scope for _token{0,1}, avoids stack too deep errors + (address _token0, address _token1) = (token0, token1); + if (to == _token0 || to == _token1) revert InvalidTo(); + if (amount0Out > 0) IERC20(_token0).safeTransfer(to, amount0Out); // optimistically transfer tokens + if (amount1Out > 0) IERC20(_token1).safeTransfer(to, amount1Out); // optimistically transfer tokens + if (data.length > 0) + IPoolCallee(to).hook(_msgSender(), amount0Out, amount1Out, data); // callback, used for flash loans + _balance0 = IERC20(_token0).balanceOf(address(this)); + _balance1 = IERC20(_token1).balanceOf(address(this)); + } + uint256 amount0In = _balance0 > _reserve0 - amount0Out + ? _balance0 - (_reserve0 - amount0Out) + : 0; + uint256 amount1In = _balance1 > _reserve1 - amount1Out + ? _balance1 - (_reserve1 - amount1Out) + : 0; + if (amount0In == 0 && amount1In == 0) revert InsufficientInputAmount(); + { + // scope for reserve{0,1}Adjusted, avoids stack too deep errors + (address _token0, address _token1) = (token0, token1); + if (amount0In > 0) + _update0( + (amount0In * IPoolFactory(factory).getFee(address(this), stable)) / + 10000 + ); // accrue fees for token0 and move them out of pool + if (amount1In > 0) + _update1( + (amount1In * IPoolFactory(factory).getFee(address(this), stable)) / + 10000 + ); // accrue fees for token1 and move them out of pool + _balance0 = IERC20(_token0).balanceOf(address(this)); // since we removed tokens, we need to reconfirm balances, can also simply use previous balance - amountIn/ 10000, but doing balanceOf again as safety check + _balance1 = IERC20(_token1).balanceOf(address(this)); + // The curve, either x3y+y3x for stable pools, or x*y for volatile pools + if (_k(_balance0, _balance1) < _k(_reserve0, _reserve1)) revert K(); + } + + _update(_balance0, _balance1, _reserve0, _reserve1); + emit Swap(_msgSender(), to, amount0In, amount1In, amount0Out, amount1Out); + } + + /// @inheritdoc IPool + function skim(address to) external nonReentrant { + (address _token0, address _token1) = (token0, token1); + IERC20(_token0).safeTransfer( + to, + IERC20(_token0).balanceOf(address(this)) - (reserve0) + ); + IERC20(_token1).safeTransfer( + to, + IERC20(_token1).balanceOf(address(this)) - (reserve1) + ); + } + + /// @inheritdoc IPool + function sync() external nonReentrant { + _update( + IERC20(token0).balanceOf(address(this)), + IERC20(token1).balanceOf(address(this)), + reserve0, + reserve1 + ); + } + + function _f(uint256 x0, uint256 y) internal pure returns (uint256) { + uint256 _a = (x0 * y) / 1e18; + uint256 _b = ((x0 * x0) / 1e18 + (y * y) / 1e18); + return (_a * _b) / 1e18; + } + + function _d(uint256 x0, uint256 y) internal pure returns (uint256) { + return + (3 * x0 * ((y * y) / 1e18)) / 1e18 + ((((x0 * x0) / 1e18) * x0) / 1e18); + } + + function _get_y( + uint256 x0, + uint256 xy, + uint256 y + ) internal view returns (uint256) { + for (uint256 i = 0; i < 255; i++) { + uint256 k = _f(x0, y); + if (k < xy) { + // there are two cases where dy == 0 + // case 1: The y is converged and we find the correct answer + // case 2: _d(x0, y) is too large compare to (xy - k) and the rounding error + // screwed us. + // In this case, we need to increase y by 1 + uint256 dy = ((xy - k) * 1e18) / _d(x0, y); + if (dy == 0) { + if (k == xy) { + // We found the correct answer. Return y + return y; + } + if (_k(x0, y + 1) > xy) { + // If _k(x0, y + 1) > xy, then we are close to the correct answer. + // There's no closer answer than y + 1 + return y + 1; + } + dy = 1; + } + y = y + dy; + } else { + uint256 dy = ((k - xy) * 1e18) / _d(x0, y); + if (dy == 0) { + if (k == xy || _f(x0, y - 1) < xy) { + // Likewise, if k == xy, we found the correct answer. + // If _f(x0, y - 1) < xy, then we are close to the correct answer. + // There's no closer answer than "y" + // It's worth mentioning that we need to find y where f(x0, y) >= xy + // As a result, we can't return y - 1 even it's closer to the correct answer + return y; + } + dy = 1; + } + y = y - dy; + } + } + revert('!y'); + } + + /// @inheritdoc IPool + function getAmountOut( + uint256 amountIn, + address tokenIn + ) external view returns (uint256) { + (uint256 _reserve0, uint256 _reserve1) = (reserve0, reserve1); + amountIn -= + (amountIn * IPoolFactory(factory).getFee(address(this), stable)) / + 10000; // remove fee from amount received + return _getAmountOut(amountIn, tokenIn, _reserve0, _reserve1); + } + + function _getAmountOut( + uint256 amountIn, + address tokenIn, + uint256 _reserve0, + uint256 _reserve1 + ) internal view returns (uint256) { + if (stable) { + uint256 xy = _k(_reserve0, _reserve1); + _reserve0 = (_reserve0 * 1e18) / decimals0; + _reserve1 = (_reserve1 * 1e18) / decimals1; + (uint256 reserveA, uint256 reserveB) = tokenIn == token0 + ? (_reserve0, _reserve1) + : (_reserve1, _reserve0); + amountIn = tokenIn == token0 + ? (amountIn * 1e18) / decimals0 + : (amountIn * 1e18) / decimals1; + uint256 y = reserveB - _get_y(amountIn + reserveA, xy, reserveB); + return (y * (tokenIn == token0 ? decimals1 : decimals0)) / 1e18; + } else { + (uint256 reserveA, uint256 reserveB) = tokenIn == token0 + ? (_reserve0, _reserve1) + : (_reserve1, _reserve0); + return (amountIn * reserveB) / (reserveA + amountIn); + } + } + + function _k(uint256 x, uint256 y) internal view returns (uint256) { + if (stable) { + uint256 _x = (x * 1e18) / decimals0; + uint256 _y = (y * 1e18) / decimals1; + uint256 _a = (_x * _y) / 1e18; + uint256 _b = ((_x * _x) / 1e18 + (_y * _y) / 1e18); + return (_a * _b) / 1e18; // x3y+y3x >= k + } else { + return x * y; // xy >= k + } + } + + /* + @dev OZ inheritance overrides + These are needed as _name and _symbol are set privately before + logic is executed within the constructor to set _name and _symbol. + */ + function name() public view override returns (string memory) { + return _name; + } + + function symbol() public view override returns (string memory) { + return _symbol; + } + + function _beforeTokenTransfer( + address from, + address to, + uint256 + ) internal override { + _updateFor(from); + _updateFor(to); + } +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/PoolFees.sol b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/PoolFees.sol new file mode 100644 index 00000000..e266757b --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/PoolFees.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity 0.8.19; + +import {IERC20} from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; +import {SafeERC20} from '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol'; + +/// @title PoolFees +/// @notice Contract used as 1:1 pool relationship to split out fees. +/// @notice Ensures curve does not need to be modified for LP shares. +contract PoolFees { + using SafeERC20 for IERC20; + address internal immutable pool; // The pool it is bonded to + address internal immutable token0; // token0 of pool, saved localy and statically for gas optimization + address internal immutable token1; // Token1 of pool, saved localy and statically for gas optimization + + error NotPool(); + + constructor(address _token0, address _token1) { + pool = msg.sender; + token0 = _token0; + token1 = _token1; + } + + /// @notice Allow the pool to transfer fees to users + function claimFeesFor( + address _recipient, + uint256 _amount0, + uint256 _amount1 + ) external { + if (msg.sender != pool) revert NotPool(); + if (_amount0 > 0) IERC20(token0).safeTransfer(_recipient, _amount0); + if (_amount1 > 0) IERC20(token1).safeTransfer(_recipient, _amount1); + } +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/factories/PoolFactory.sol b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/factories/PoolFactory.sol new file mode 100644 index 00000000..499a4ff2 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/factories/PoolFactory.sol @@ -0,0 +1,173 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity 0.8.19; + +import {IPoolFactory} from '../interfaces/factories/IPoolFactory.sol'; +import {IPool} from '../interfaces/IPool.sol'; +import {Clones} from '@openzeppelin/contracts/proxy/Clones.sol'; + +contract PoolFactory is IPoolFactory { + address public immutable implementation; + + bool public isPaused; + address public pauser; + + uint256 public stableFee; + uint256 public volatileFee; + uint256 public constant MAX_FEE = 300; // 3% + // Override to indicate there is custom 0% fee - as a 0 value in the customFee mapping indicates + // that no custom fee rate has been set + uint256 public constant ZERO_FEE_INDICATOR = 420; + address public feeManager; + + /// @dev used to change the name/symbol of the pool by calling emergencyCouncil + address public voter; + + mapping(address => mapping(address => mapping(bool => address))) + private _getPool; + address[] public allPools; + mapping(address => bool) private _isPool; // simplified check if its a pool, given that `stable` flag might not be available in peripherals + mapping(address => uint256) public customFee; // override for custom fees + + address internal _temp0; + address internal _temp1; + bool internal _temp; + + constructor(address _implementation) { + implementation = _implementation; + voter = msg.sender; + pauser = msg.sender; + feeManager = msg.sender; + isPaused = false; + stableFee = 5; // 0.05% + volatileFee = 30; // 0.3% + } + + /// @inheritdoc IPoolFactory + function allPoolsLength() external view returns (uint256) { + return allPools.length; + } + + /// @inheritdoc IPoolFactory + function getPool( + address tokenA, + address tokenB, + uint24 fee + ) external view returns (address) { + return + fee > 1 + ? address(0) + : fee == 1 + ? _getPool[tokenA][tokenB][true] + : _getPool[tokenA][tokenB][false]; + } + + /// @inheritdoc IPoolFactory + function getPool( + address tokenA, + address tokenB, + bool stable + ) external view returns (address) { + return _getPool[tokenA][tokenB][stable]; + } + + /// @inheritdoc IPoolFactory + function isPool(address pool) external view returns (bool) { + return _isPool[pool]; + } + + /// @inheritdoc IPoolFactory + function setVoter(address _voter) external { + if (msg.sender != voter) revert NotVoter(); + voter = _voter; + emit SetVoter(_voter); + } + + function setPauser(address _pauser) external { + if (msg.sender != pauser) revert NotPauser(); + if (_pauser == address(0)) revert ZeroAddress(); + pauser = _pauser; + emit SetPauser(_pauser); + } + + function setPauseState(bool _state) external { + if (msg.sender != pauser) revert NotPauser(); + isPaused = _state; + emit SetPauseState(_state); + } + + function setFeeManager(address _feeManager) external { + if (msg.sender != feeManager) revert NotFeeManager(); + if (_feeManager == address(0)) revert ZeroAddress(); + feeManager = _feeManager; + emit SetFeeManager(_feeManager); + } + + /// @inheritdoc IPoolFactory + function setFee(bool _stable, uint256 _fee) external { + if (msg.sender != feeManager) revert NotFeeManager(); + if (_fee > MAX_FEE) revert FeeTooHigh(); + if (_fee == 0) revert ZeroFee(); + if (_stable) { + stableFee = _fee; + } else { + volatileFee = _fee; + } + } + + /// @inheritdoc IPoolFactory + function setCustomFee(address pool, uint256 fee) external { + if (msg.sender != feeManager) revert NotFeeManager(); + if (fee > MAX_FEE && fee != ZERO_FEE_INDICATOR) revert FeeTooHigh(); + if (!_isPool[pool]) revert InvalidPool(); + + customFee[pool] = fee; + emit SetCustomFee(pool, fee); + } + + /// @inheritdoc IPoolFactory + function getFee(address pool, bool _stable) public view returns (uint256) { + uint256 fee = customFee[pool]; + return + fee == ZERO_FEE_INDICATOR + ? 0 + : fee != 0 + ? fee + : _stable + ? stableFee + : volatileFee; + } + + /// @inheritdoc IPoolFactory + function createPool( + address tokenA, + address tokenB, + uint24 fee + ) external returns (address pool) { + if (fee > 1) revert FeeInvalid(); + bool stable = fee == 1; + return createPool(tokenA, tokenB, stable); + } + + /// @inheritdoc IPoolFactory + function createPool( + address tokenA, + address tokenB, + bool stable + ) public returns (address pool) { + if (tokenA == tokenB) revert SameAddress(); + (address token0, address token1) = tokenA < tokenB + ? (tokenA, tokenB) + : (tokenB, tokenA); + if (token0 == address(0)) revert ZeroAddress(); + if (_getPool[token0][token1][stable] != address(0)) + revert PoolAlreadyExists(); + bytes32 salt = keccak256(abi.encodePacked(token0, token1, stable)); // salt includes stable as well, 3 parameters + pool = Clones.cloneDeterministic(implementation, salt); + IPool(pool).initialize(token0, token1, stable); + _getPool[token0][token1][stable] = pool; + _getPool[token1][token0][stable] = pool; // populate mapping in the reverse direction + allPools.push(pool); + _isPool[pool] = true; + emit PoolCreated(token0, token1, stable, pool, allPools.length); + } +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLFactory.sol b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLFactory.sol new file mode 100644 index 00000000..eca09f5d --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLFactory.sol @@ -0,0 +1,234 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity =0.7.6; + +import './interfaces/ICLFactory.sol'; +import './interfaces/fees/IFeeModule.sol'; +import './interfaces/IVoter.sol'; +import './interfaces/IFactoryRegistry.sol'; +import '@openzeppelin/contracts/proxy/Clones.sol'; +import '@nomad-xyz/src/ExcessivelySafeCall.sol'; +import './CLPool.sol'; + +/// @title Canonical CL factory +/// @notice Deploys CL pools and manages ownership and control over pool protocol fees +contract CLFactory is ICLFactory { + using ExcessivelySafeCall for address; + + /// @inheritdoc ICLFactory + IVoter public immutable override voter; + /// @inheritdoc ICLFactory + address public immutable override poolImplementation; + /// @inheritdoc ICLFactory + IFactoryRegistry public immutable override factoryRegistry; + /// @inheritdoc ICLFactory + address public override owner; + /// @inheritdoc ICLFactory + address public override swapFeeManager; + /// @inheritdoc ICLFactory + address public override swapFeeModule; + /// @inheritdoc ICLFactory + address public override unstakedFeeManager; + /// @inheritdoc ICLFactory + address public override unstakedFeeModule; + /// @inheritdoc ICLFactory + uint24 public override defaultUnstakedFee; + /// @inheritdoc ICLFactory + mapping(int24 => uint24) public override tickSpacingToFee; + /// @inheritdoc ICLFactory + mapping(address => mapping(address => mapping(int24 => address))) + public + override getPool; + /// @dev Used in VotingEscrow to determine if a contract is a valid pool + mapping(address => bool) private _isPool; + /// @inheritdoc ICLFactory + address[] public override allPools; + + int24[] private _tickSpacings; + + constructor(address _voter, address _poolImplementation) { + owner = msg.sender; + swapFeeManager = msg.sender; + unstakedFeeManager = msg.sender; + voter = IVoter(_voter); + factoryRegistry = IVoter(_voter).factoryRegistry(); + poolImplementation = _poolImplementation; + defaultUnstakedFee = 100_000; + emit OwnerChanged(address(0), msg.sender); + emit SwapFeeManagerChanged(address(0), msg.sender); + emit UnstakedFeeManagerChanged(address(0), msg.sender); + emit DefaultUnstakedFeeChanged(0, 100_000); + + enableTickSpacing(1, 100); + enableTickSpacing(50, 500); + enableTickSpacing(100, 500); + enableTickSpacing(200, 3_000); + enableTickSpacing(2_000, 10_000); + } + + /// @inheritdoc ICLFactory + function createPool( + address tokenA, + address tokenB, + int24 tickSpacing, + uint160 sqrtPriceX96 + ) external override returns (address pool) { + require(tokenA != tokenB); + (address token0, address token1) = tokenA < tokenB + ? (tokenA, tokenB) + : (tokenB, tokenA); + require(token0 != address(0)); + require(tickSpacingToFee[tickSpacing] != 0); + require(getPool[token0][token1][tickSpacing] == address(0)); + pool = Clones.cloneDeterministic({ + master: poolImplementation, + salt: keccak256(abi.encode(token0, token1, tickSpacing)) + }); + CLPool(pool).initialize({ + _factory: address(this), + _token0: token0, + _token1: token1, + _tickSpacing: tickSpacing, + _factoryRegistry: address(factoryRegistry), + _sqrtPriceX96: sqrtPriceX96 + }); + allPools.push(pool); + _isPool[pool] = true; + getPool[token0][token1][tickSpacing] = pool; + // populate mapping in the reverse direction, deliberate choice to avoid the cost of comparing addresses + getPool[token1][token0][tickSpacing] = pool; + emit PoolCreated(token0, token1, tickSpacing, pool); + } + + /// @inheritdoc ICLFactory + function setOwner(address _owner) external override { + address cachedOwner = owner; + require(msg.sender == cachedOwner); + require(_owner != address(0)); + emit OwnerChanged(cachedOwner, _owner); + owner = _owner; + } + + /// @inheritdoc ICLFactory + function setSwapFeeManager(address _swapFeeManager) external override { + address cachedSwapFeeManager = swapFeeManager; + require(msg.sender == cachedSwapFeeManager); + require(_swapFeeManager != address(0)); + swapFeeManager = _swapFeeManager; + emit SwapFeeManagerChanged(cachedSwapFeeManager, _swapFeeManager); + } + + /// @inheritdoc ICLFactory + function setUnstakedFeeManager( + address _unstakedFeeManager + ) external override { + address cachedUnstakedFeeManager = unstakedFeeManager; + require(msg.sender == cachedUnstakedFeeManager); + require(_unstakedFeeManager != address(0)); + unstakedFeeManager = _unstakedFeeManager; + emit UnstakedFeeManagerChanged( + cachedUnstakedFeeManager, + _unstakedFeeManager + ); + } + + /// @inheritdoc ICLFactory + function setSwapFeeModule(address _swapFeeModule) external override { + require(msg.sender == swapFeeManager); + require(_swapFeeModule != address(0)); + address oldFeeModule = swapFeeModule; + swapFeeModule = _swapFeeModule; + emit SwapFeeModuleChanged(oldFeeModule, _swapFeeModule); + } + + /// @inheritdoc ICLFactory + function setUnstakedFeeModule(address _unstakedFeeModule) external override { + require(msg.sender == unstakedFeeManager); + require(_unstakedFeeModule != address(0)); + address oldFeeModule = unstakedFeeModule; + unstakedFeeModule = _unstakedFeeModule; + emit UnstakedFeeModuleChanged(oldFeeModule, _unstakedFeeModule); + } + + /// @inheritdoc ICLFactory + function setDefaultUnstakedFee(uint24 _defaultUnstakedFee) external override { + require(msg.sender == unstakedFeeManager); + require(_defaultUnstakedFee <= 500_000); + uint24 oldUnstakedFee = defaultUnstakedFee; + defaultUnstakedFee = _defaultUnstakedFee; + emit DefaultUnstakedFeeChanged(oldUnstakedFee, _defaultUnstakedFee); + } + + /// @inheritdoc ICLFactory + function getSwapFee(address pool) external view override returns (uint24) { + if (swapFeeModule != address(0)) { + (bool success, bytes memory data) = swapFeeModule + .excessivelySafeStaticCall( + 200_000, + 32, + abi.encodeWithSelector(IFeeModule.getFee.selector, pool) + ); + if (success) { + uint24 fee = abi.decode(data, (uint24)); + if (fee <= 100_000) { + return fee; + } + } + } + return tickSpacingToFee[CLPool(pool).tickSpacing()]; + } + + /// @inheritdoc ICLFactory + function getUnstakedFee( + address pool + ) external view override returns (uint24) { + address gauge = voter.gauges(pool); + if (!voter.isAlive(gauge) || gauge == address(0)) { + return 0; + } + if (unstakedFeeModule != address(0)) { + (bool success, bytes memory data) = unstakedFeeModule + .excessivelySafeStaticCall( + 200_000, + 32, + abi.encodeWithSelector(IFeeModule.getFee.selector, pool) + ); + if (success) { + uint24 fee = abi.decode(data, (uint24)); + if (fee <= 1_000_000) { + return fee; + } + } + } + return defaultUnstakedFee; + } + + /// @inheritdoc ICLFactory + function enableTickSpacing(int24 tickSpacing, uint24 fee) public override { + require(msg.sender == owner); + require(fee > 0 && fee <= 100_000); + // tick spacing is capped at 16384 to prevent the situation where tickSpacing is so large that + // TickBitmap#nextInitializedTickWithinOneWord overflows int24 container from a valid tick + // 16384 ticks represents a >5x price change with ticks of 1 bips + require(tickSpacing > 0 && tickSpacing < 16384); + require(tickSpacingToFee[tickSpacing] == 0); + + tickSpacingToFee[tickSpacing] = fee; + _tickSpacings.push(tickSpacing); + emit TickSpacingEnabled(tickSpacing, fee); + } + + /// @inheritdoc ICLFactory + function tickSpacings() external view override returns (int24[] memory) { + return _tickSpacings; + } + + /// @inheritdoc ICLFactory + function allPoolsLength() external view override returns (uint256) { + return allPools.length; + } + + /// @inheritdoc ICLFactory + function isPool(address pool) external view override returns (bool) { + return _isPool[pool]; + } +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLPool.sol b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLPool.sol new file mode 100644 index 00000000..7d642380 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLPool.sol @@ -0,0 +1,1329 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity =0.7.6; + +import './interfaces/ICLPool.sol'; + +import './libraries/LowGasSafeMath.sol'; +import './libraries/SafeCast.sol'; +import './libraries/Tick.sol'; +import './libraries/TickBitmap.sol'; +import './libraries/Position.sol'; +import './libraries/Oracle.sol'; + +import './libraries/FullMath.sol'; +import './libraries/FixedPoint128.sol'; +import './libraries/TransferHelper.sol'; +import './libraries/TickMath.sol'; +import './libraries/LiquidityMath.sol'; +import './libraries/SqrtPriceMath.sol'; +import './libraries/SwapMath.sol'; + +import './interfaces/ICLFactory.sol'; +import './interfaces/IFactoryRegistry.sol'; +import './interfaces/IERC20Minimal.sol'; +import './interfaces/callback/ICLMintCallback.sol'; +import './interfaces/callback/ICLSwapCallback.sol'; +import './interfaces/callback/ICLFlashCallback.sol'; +import 'contracts/libraries/ProtocolTimeLibrary.sol'; + +contract CLPool is ICLPool { + using LowGasSafeMath for uint256; + using LowGasSafeMath for int256; + using SafeCast for uint256; + using SafeCast for int256; + using Tick for mapping(int24 => Tick.Info); + using TickBitmap for mapping(int16 => uint256); + using Position for mapping(bytes32 => Position.Info); + using Position for Position.Info; + using Oracle for Oracle.Observation[65535]; + + /// @inheritdoc ICLPoolConstants + address public override factory; + /// @inheritdoc ICLPoolConstants + address public override token0; + /// @inheritdoc ICLPoolConstants + address public override token1; + /// @inheritdoc ICLPoolConstants + address public override gauge; + /// @inheritdoc ICLPoolConstants + address public override nft; + /// @inheritdoc ICLPoolConstants + address public override factoryRegistry; + + struct Slot0 { + // the current price + uint160 sqrtPriceX96; + // the current tick + int24 tick; + // the most-recently updated index of the observations array + uint16 observationIndex; + // the current maximum number of observations that are being stored + uint16 observationCardinality; + // the next maximum number of observations to store, triggered in observations.write + uint16 observationCardinalityNext; + // whether the pool is locked + bool unlocked; + } + + /// @inheritdoc ICLPoolState + Slot0 public override slot0; + + /// @inheritdoc ICLPoolState + uint256 public override feeGrowthGlobal0X128; + /// @inheritdoc ICLPoolState + uint256 public override feeGrowthGlobal1X128; + + /// @inheritdoc ICLPoolState + uint256 public override rewardGrowthGlobalX128; + + // accumulated gauge fees in token0/token1 units + struct GaugeFees { + uint128 token0; + uint128 token1; + } + + /// @inheritdoc ICLPoolState + GaugeFees public override gaugeFees; + + /// @inheritdoc ICLPoolState + uint256 public override rewardRate; + /// @inheritdoc ICLPoolState + uint256 public override rewardReserve; + /// @inheritdoc ICLPoolState + uint256 public override periodFinish; + /// @inheritdoc ICLPoolState + uint256 public override rollover; + + /// @inheritdoc ICLPoolState + uint128 public override stakedLiquidity; + /// @inheritdoc ICLPoolState + uint32 public override lastUpdated; + /// @inheritdoc ICLPoolConstants + int24 public override tickSpacing; + + /// @inheritdoc ICLPoolState + uint128 public override liquidity; + /// @inheritdoc ICLPoolConstants + uint128 public override maxLiquidityPerTick; + + /// @inheritdoc ICLPoolState + mapping(int24 => Tick.Info) public override ticks; + /// @inheritdoc ICLPoolState + mapping(int16 => uint256) public override tickBitmap; + /// @inheritdoc ICLPoolState + mapping(bytes32 => Position.Info) public override positions; + /// @inheritdoc ICLPoolState + Oracle.Observation[65535] public override observations; + + /// @dev Mutually exclusive reentrancy protection into the pool to/from a method. This method also prevents entrance + /// to a function before the pool is initialized. The reentrancy guard is required throughout the contract because + /// we use balance checks to determine the payment status of interactions such as mint, swap and flash. + modifier lock() { + require(slot0.unlocked, 'LOK'); + slot0.unlocked = false; + _; + slot0.unlocked = true; + } + + /// @dev Prevents calling a function from anyone except the gauge associated with this pool + modifier onlyGauge() { + require(msg.sender == gauge, 'NG'); + _; + } + + /// @dev Prevents calling a function from anyone except the nft manager + modifier onlyNftManager() { + require(msg.sender == nft, 'NNFT'); + _; + } + + /// @dev Prevents calling a function from anyone except the gauge factory + modifier onlyGaugeFactory() { + (, address gaugeFactory) = IFactoryRegistry(factoryRegistry) + .factoriesToPoolFactory(address(factory)); + require(msg.sender == gaugeFactory, 'NGF'); + _; + } + + /// @inheritdoc ICLPoolActions + function initialize( + address _factory, + address _token0, + address _token1, + int24 _tickSpacing, + address _factoryRegistry, + uint160 _sqrtPriceX96 + ) external override { + require(factory == address(0) && _factory != address(0)); + factory = _factory; + token0 = _token0; + token1 = _token1; + tickSpacing = _tickSpacing; + factoryRegistry = _factoryRegistry; + + maxLiquidityPerTick = Tick.tickSpacingToMaxLiquidityPerTick(_tickSpacing); + + int24 tick = TickMath.getTickAtSqrtRatio(_sqrtPriceX96); + + (uint16 cardinality, uint16 cardinalityNext) = observations.initialize( + _blockTimestamp() + ); + + slot0 = Slot0({ + sqrtPriceX96: _sqrtPriceX96, + tick: tick, + observationIndex: 0, + observationCardinality: cardinality, + observationCardinalityNext: cardinalityNext, + unlocked: true + }); + + emit Initialize(_sqrtPriceX96, tick); + } + + function fee() public view override returns (uint24) { + return ICLFactory(factory).getSwapFee(address(this)); + } + + function unstakedFee() public view override returns (uint24) { + return ICLFactory(factory).getUnstakedFee(address(this)); + } + + /// @dev Common checks for valid tick inputs. + function checkTicks(int24 tickLower, int24 tickUpper) private pure { + require(tickLower < tickUpper, 'TLU'); + require(tickLower >= TickMath.MIN_TICK, 'TLM'); + require(tickUpper <= TickMath.MAX_TICK, 'TUM'); + } + + /// @dev Returns the block timestamp truncated to 32 bits, i.e. mod 2**32. This method is overridden in tests. + function _blockTimestamp() internal view virtual returns (uint32) { + return uint32(block.timestamp); // truncation is desired + } + + /// @dev Get the pool's balance of token0 + /// @dev This function is gas optimized to avoid a redundant extcodesize check in addition to the returndatasize + /// check + function balance0() private view returns (uint256) { + (bool success, bytes memory data) = token0.staticcall( + abi.encodeWithSelector(IERC20Minimal.balanceOf.selector, address(this)) + ); + require(success && data.length >= 32); + return abi.decode(data, (uint256)); + } + + /// @dev Get the pool's balance of token1 + /// @dev This function is gas optimized to avoid a redundant extcodesize check in addition to the returndatasize + /// check + function balance1() private view returns (uint256) { + (bool success, bytes memory data) = token1.staticcall( + abi.encodeWithSelector(IERC20Minimal.balanceOf.selector, address(this)) + ); + require(success && data.length >= 32); + return abi.decode(data, (uint256)); + } + + /// @inheritdoc ICLPoolDerivedState + function snapshotCumulativesInside( + int24 tickLower, + int24 tickUpper + ) + external + view + override + returns ( + int56 tickCumulativeInside, + uint160 secondsPerLiquidityInsideX128, + uint32 secondsInside + ) + { + checkTicks(tickLower, tickUpper); + + int56 tickCumulativeLower; + int56 tickCumulativeUpper; + uint160 secondsPerLiquidityOutsideLowerX128; + uint160 secondsPerLiquidityOutsideUpperX128; + uint32 secondsOutsideLower; + uint32 secondsOutsideUpper; + + { + Tick.Info storage lower = ticks[tickLower]; + Tick.Info storage upper = ticks[tickUpper]; + bool initializedLower; + ( + tickCumulativeLower, + secondsPerLiquidityOutsideLowerX128, + secondsOutsideLower, + initializedLower + ) = ( + lower.tickCumulativeOutside, + lower.secondsPerLiquidityOutsideX128, + lower.secondsOutside, + lower.initialized + ); + require(initializedLower); + + bool initializedUpper; + ( + tickCumulativeUpper, + secondsPerLiquidityOutsideUpperX128, + secondsOutsideUpper, + initializedUpper + ) = ( + upper.tickCumulativeOutside, + upper.secondsPerLiquidityOutsideX128, + upper.secondsOutside, + upper.initialized + ); + require(initializedUpper); + } + + Slot0 memory _slot0 = slot0; + + if (_slot0.tick < tickLower) { + return ( + tickCumulativeLower - tickCumulativeUpper, + secondsPerLiquidityOutsideLowerX128 - + secondsPerLiquidityOutsideUpperX128, + secondsOutsideLower - secondsOutsideUpper + ); + } else if (_slot0.tick < tickUpper) { + uint32 time = _blockTimestamp(); + ( + int56 tickCumulative, + uint160 secondsPerLiquidityCumulativeX128 + ) = observations.observeSingle( + time, + 0, + _slot0.tick, + _slot0.observationIndex, + liquidity, + _slot0.observationCardinality + ); + return ( + tickCumulative - tickCumulativeLower - tickCumulativeUpper, + secondsPerLiquidityCumulativeX128 - + secondsPerLiquidityOutsideLowerX128 - + secondsPerLiquidityOutsideUpperX128, + time - secondsOutsideLower - secondsOutsideUpper + ); + } else { + return ( + tickCumulativeUpper - tickCumulativeLower, + secondsPerLiquidityOutsideUpperX128 - + secondsPerLiquidityOutsideLowerX128, + secondsOutsideUpper - secondsOutsideLower + ); + } + } + + /// @inheritdoc ICLPoolDerivedState + function observe( + uint32[] calldata secondsAgos + ) + external + view + override + returns ( + int56[] memory tickCumulatives, + uint160[] memory secondsPerLiquidityCumulativeX128s + ) + { + return + observations.observe( + _blockTimestamp(), + secondsAgos, + slot0.tick, + slot0.observationIndex, + liquidity, + slot0.observationCardinality + ); + } + + /// @inheritdoc ICLPoolActions + function increaseObservationCardinalityNext( + uint16 observationCardinalityNext + ) external override lock { + uint16 observationCardinalityNextOld = slot0.observationCardinalityNext; // for the event + uint16 observationCardinalityNextNew = observations.grow( + observationCardinalityNextOld, + observationCardinalityNext + ); + slot0.observationCardinalityNext = observationCardinalityNextNew; + if (observationCardinalityNextOld != observationCardinalityNextNew) { + emit IncreaseObservationCardinalityNext( + observationCardinalityNextOld, + observationCardinalityNextNew + ); + } + } + + struct ModifyPositionParams { + // the address that owns the position + address owner; + // the lower and upper tick of the position + int24 tickLower; + int24 tickUpper; + // any change in liquidity + int128 liquidityDelta; + } + + /// @dev Effect some changes to a position + /// @param params the position details and the change to the position's liquidity to effect + /// @return position a storage pointer referencing the position with the given owner and tick range + /// @return amount0 the amount of token0 owed to the pool, negative if the pool should pay the recipient + /// @return amount1 the amount of token1 owed to the pool, negative if the pool should pay the recipient + function _modifyPosition( + ModifyPositionParams memory params + ) + private + returns (Position.Info storage position, int256 amount0, int256 amount1) + { + checkTicks(params.tickLower, params.tickUpper); + + Slot0 memory _slot0 = slot0; // SLOAD for gas optimization + + position = _updatePosition( + params.owner, + params.tickLower, + params.tickUpper, + params.liquidityDelta, + _slot0.tick + ); + + if (params.liquidityDelta != 0) { + if (_slot0.tick < params.tickLower) { + // current tick is below the passed range; liquidity can only become in range by crossing from left to + // right, when we'll need _more_ token0 (it's becoming more valuable) so user must provide it + amount0 = SqrtPriceMath.getAmount0Delta( + TickMath.getSqrtRatioAtTick(params.tickLower), + TickMath.getSqrtRatioAtTick(params.tickUpper), + params.liquidityDelta + ); + } else if (_slot0.tick < params.tickUpper) { + // current tick is inside the passed range + uint128 liquidityBefore = liquidity; // SLOAD for gas optimization + + // write an oracle entry + (slot0.observationIndex, slot0.observationCardinality) = observations + .write( + _slot0.observationIndex, + _blockTimestamp(), + _slot0.tick, + liquidityBefore, + _slot0.observationCardinality, + _slot0.observationCardinalityNext + ); + + amount0 = SqrtPriceMath.getAmount0Delta( + _slot0.sqrtPriceX96, + TickMath.getSqrtRatioAtTick(params.tickUpper), + params.liquidityDelta + ); + amount1 = SqrtPriceMath.getAmount1Delta( + TickMath.getSqrtRatioAtTick(params.tickLower), + _slot0.sqrtPriceX96, + params.liquidityDelta + ); + + liquidity = LiquidityMath.addDelta( + liquidityBefore, + params.liquidityDelta + ); + } else { + // current tick is above the passed range; liquidity can only become in range by crossing from right to + // left, when we'll need _more_ token1 (it's becoming more valuable) so user must provide it + amount1 = SqrtPriceMath.getAmount1Delta( + TickMath.getSqrtRatioAtTick(params.tickLower), + TickMath.getSqrtRatioAtTick(params.tickUpper), + params.liquidityDelta + ); + } + } + } + + /// @dev Gets and updates a position with the given liquidity delta + /// @param owner the owner of the position + /// @param tickLower the lower tick of the position's tick range + /// @param tickUpper the upper tick of the position's tick range + /// @param tick the current tick, passed to avoid sloads + function _updatePosition( + address owner, + int24 tickLower, + int24 tickUpper, + int128 liquidityDelta, + int24 tick + ) private returns (Position.Info storage position) { + position = positions.get(owner, tickLower, tickUpper); + + uint256 _feeGrowthGlobal0X128 = feeGrowthGlobal0X128; // SLOAD for gas optimization + uint256 _feeGrowthGlobal1X128 = feeGrowthGlobal1X128; // SLOAD for gas optimization + + // if we need to update the ticks, do it + bool flippedLower; + bool flippedUpper; + if (liquidityDelta != 0) { + uint32 time = _blockTimestamp(); + ( + int56 tickCumulative, + uint160 secondsPerLiquidityCumulativeX128 + ) = observations.observeSingle( + time, + 0, + slot0.tick, + slot0.observationIndex, + liquidity, + slot0.observationCardinality + ); + + flippedLower = ticks.update( + tickLower, + tick, + liquidityDelta, + _feeGrowthGlobal0X128, + _feeGrowthGlobal1X128, + secondsPerLiquidityCumulativeX128, + tickCumulative, + time, + false, + maxLiquidityPerTick + ); + flippedUpper = ticks.update( + tickUpper, + tick, + liquidityDelta, + _feeGrowthGlobal0X128, + _feeGrowthGlobal1X128, + secondsPerLiquidityCumulativeX128, + tickCumulative, + time, + true, + maxLiquidityPerTick + ); + + if (flippedLower) { + tickBitmap.flipTick(tickLower, tickSpacing); + } + if (flippedUpper) { + tickBitmap.flipTick(tickUpper, tickSpacing); + } + } + + (uint256 feeGrowthInside0X128, uint256 feeGrowthInside1X128) = ticks + .getFeeGrowthInside( + tickLower, + tickUpper, + tick, + _feeGrowthGlobal0X128, + _feeGrowthGlobal1X128 + ); + + bool staked = (owner == gauge) && (owner != address(0)); + position.update( + liquidityDelta, + feeGrowthInside0X128, + feeGrowthInside1X128, + staked + ); + + // clear any tick data that is no longer needed + if (liquidityDelta < 0) { + if (flippedLower) { + ticks.clear(tickLower); + } + if (flippedUpper) { + ticks.clear(tickUpper); + } + } + } + + /// @inheritdoc ICLPoolActions + function mint( + address recipient, + int24 tickLower, + int24 tickUpper, + uint128 amount, + bytes calldata data + ) external override lock returns (uint256 amount0, uint256 amount1) { + require(amount > 0); + (, int256 amount0Int, int256 amount1Int) = _modifyPosition( + ModifyPositionParams({ + owner: recipient, + tickLower: tickLower, + tickUpper: tickUpper, + liquidityDelta: int256(amount).toInt128() + }) + ); + + amount0 = uint256(amount0Int); + amount1 = uint256(amount1Int); + + uint256 balance0Before; + uint256 balance1Before; + if (amount0 > 0) balance0Before = balance0(); + if (amount1 > 0) balance1Before = balance1(); + ICLMintCallback(msg.sender).uniswapV3MintCallback(amount0, amount1, data); + if (amount0 > 0) require(balance0Before.add(amount0) <= balance0(), 'M0'); + if (amount1 > 0) require(balance1Before.add(amount1) <= balance1(), 'M1'); + + emit Mint( + msg.sender, + recipient, + tickLower, + tickUpper, + amount, + amount0, + amount1 + ); + } + + /// @inheritdoc ICLPoolActions + function collect( + address recipient, + int24 tickLower, + int24 tickUpper, + uint128 amount0Requested, + uint128 amount1Requested + ) external override lock returns (uint128 amount0, uint128 amount1) { + (amount0, amount1) = _collect({ + recipient: recipient, + tickLower: tickLower, + tickUpper: tickUpper, + amount0Requested: amount0Requested, + amount1Requested: amount1Requested, + owner: msg.sender + }); + } + + /// @inheritdoc ICLPoolActions + function collect( + address recipient, + int24 tickLower, + int24 tickUpper, + uint128 amount0Requested, + uint128 amount1Requested, + address owner + ) + external + override + lock + onlyNftManager + returns (uint128 amount0, uint128 amount1) + { + (amount0, amount1) = _collect({ + recipient: recipient, + tickLower: tickLower, + tickUpper: tickUpper, + amount0Requested: amount0Requested, + amount1Requested: amount1Requested, + owner: owner + }); + } + + function _collect( + address recipient, + int24 tickLower, + int24 tickUpper, + uint128 amount0Requested, + uint128 amount1Requested, + address owner + ) private returns (uint128 amount0, uint128 amount1) { + // we don't need to checkTicks here, because invalid positions will never have non-zero tokensOwed{0,1} + Position.Info storage position = positions.get(owner, tickLower, tickUpper); + + amount0 = amount0Requested > position.tokensOwed0 + ? position.tokensOwed0 + : amount0Requested; + amount1 = amount1Requested > position.tokensOwed1 + ? position.tokensOwed1 + : amount1Requested; + + if (amount0 > 0) { + position.tokensOwed0 -= amount0; + TransferHelper.safeTransfer(token0, recipient, amount0); + } + if (amount1 > 0) { + position.tokensOwed1 -= amount1; + TransferHelper.safeTransfer(token1, recipient, amount1); + } + + emit Collect(owner, recipient, tickLower, tickUpper, amount0, amount1); + } + + /// @inheritdoc ICLPoolActions + function burn( + int24 tickLower, + int24 tickUpper, + uint128 amount + ) external override lock returns (uint256 amount0, uint256 amount1) { + (amount0, amount1) = _burn({ + tickLower: tickLower, + tickUpper: tickUpper, + amount: amount, + owner: msg.sender + }); + } + + /// @inheritdoc ICLPoolActions + function burn( + int24 tickLower, + int24 tickUpper, + uint128 amount, + address owner + ) + external + override + lock + onlyNftManager + returns (uint256 amount0, uint256 amount1) + { + (amount0, amount1) = _burn({ + tickLower: tickLower, + tickUpper: tickUpper, + amount: amount, + owner: owner + }); + } + + function _burn( + int24 tickLower, + int24 tickUpper, + uint128 amount, + address owner + ) private returns (uint256 amount0, uint256 amount1) { + ( + Position.Info storage position, + int256 amount0Int, + int256 amount1Int + ) = _modifyPosition( + ModifyPositionParams({ + owner: owner, + tickLower: tickLower, + tickUpper: tickUpper, + liquidityDelta: -int256(amount).toInt128() + }) + ); + + amount0 = uint256(-amount0Int); + amount1 = uint256(-amount1Int); + + if (amount0 > 0 || amount1 > 0) { + (position.tokensOwed0, position.tokensOwed1) = ( + position.tokensOwed0 + uint128(amount0), + position.tokensOwed1 + uint128(amount1) + ); + } + + emit Burn(owner, tickLower, tickUpper, amount, amount0, amount1); + } + + /// @inheritdoc ICLPoolActions + function stake( + int128 stakedLiquidityDelta, + int24 tickLower, + int24 tickUpper, + bool positionUpdate + ) external override lock onlyGauge { + int24 tick = slot0.tick; + // Increase staked liquidity in the current tick + if (tick >= tickLower && tick < tickUpper) { + _updateRewardsGrowthGlobal(); + stakedLiquidity = LiquidityMath.addDelta( + stakedLiquidity, + stakedLiquidityDelta + ); + } + + if (positionUpdate) { + Position.Info storage nftPosition = positions.get( + nft, + tickLower, + tickUpper + ); + Position.Info storage gaugePosition = positions.get( + gauge, + tickLower, + tickUpper + ); + + (uint256 feeGrowthInside0X128, uint256 feeGrowthInside1X128) = ticks + .getFeeGrowthInside( + tickLower, + tickUpper, + tick, + feeGrowthGlobal0X128, + feeGrowthGlobal1X128 + ); + + // Assign the staked positions virtually to the gauge + nftPosition.update( + -stakedLiquidityDelta, + feeGrowthInside0X128, + feeGrowthInside1X128, + false + ); + gaugePosition.update( + stakedLiquidityDelta, + feeGrowthInside0X128, + feeGrowthInside1X128, + true + ); + } + + // Update tick locations where staked liquidity needs to be added or subtracted + // Only update ticks if current tick is initialized + if (ticks[tickLower].initialized) + ticks.updateStake(tickLower, stakedLiquidityDelta, false); + if (ticks[tickUpper].initialized) + ticks.updateStake(tickUpper, stakedLiquidityDelta, true); + } + + struct SwapCache { + // liquidity at the beginning of the swap + uint128 liquidityStart; + // staked liquidity at the beginning of the swap + uint128 stakedLiquidityStart; + // the timestamp of the current block + uint32 blockTimestamp; + // the current value of the tick accumulator, computed only if we cross an initialized tick + int56 tickCumulative; + // the current value of seconds per liquidity accumulator, computed only if we cross an initialized tick + uint160 secondsPerLiquidityCumulativeX128; + // whether we've computed and cached the above two accumulators + bool computedLatestObservation; + } + + // the top level state of the swap, the results of which are recorded in storage at the end + struct SwapState { + // the amount remaining to be swapped in/out of the input/output asset + int256 amountSpecifiedRemaining; + // the amount already swapped out/in of the output/input asset + int256 amountCalculated; + // current sqrt(price) + uint160 sqrtPriceX96; + // the tick associated with the current price + int24 tick; + // the fee associated with the pool + uint24 fee; + // wether we've updated the fees in the current swap + bool hasUpdatedFees; + // the global fee growth of the input token + uint256 feeGrowthGlobalX128; + // amount of input token paid as gauge fee + uint128 gaugeFee; + // the current liquidity in range + uint128 liquidity; + // the current staked liquidity in range + uint128 stakedLiquidity; + } + + struct StepComputations { + // the price at the beginning of the step + uint160 sqrtPriceStartX96; + // the next tick to swap to from the current tick in the swap direction + int24 tickNext; + // whether tickNext is initialized or not + bool initialized; + // sqrt(price) for the next tick (1/0) + uint160 sqrtPriceNextX96; + // how much is being swapped in in this step + uint256 amountIn; + // how much is being swapped out + uint256 amountOut; + // how much fee is being paid in + uint256 feeAmount; + } + + /// @inheritdoc ICLPoolActions + function swap( + address recipient, + bool zeroForOne, + int256 amountSpecified, + uint160 sqrtPriceLimitX96, + bytes calldata data + ) external override returns (int256 amount0, int256 amount1) { + require(amountSpecified != 0, 'AS'); + + Slot0 memory slot0Start = slot0; + + require(slot0Start.unlocked, 'LOK'); + require( + zeroForOne + ? sqrtPriceLimitX96 < slot0Start.sqrtPriceX96 && + sqrtPriceLimitX96 > TickMath.MIN_SQRT_RATIO + : sqrtPriceLimitX96 > slot0Start.sqrtPriceX96 && + sqrtPriceLimitX96 < TickMath.MAX_SQRT_RATIO, + 'SPL' + ); + + slot0.unlocked = false; + + SwapCache memory cache = SwapCache({ + liquidityStart: liquidity, + stakedLiquidityStart: stakedLiquidity, + blockTimestamp: _blockTimestamp(), + secondsPerLiquidityCumulativeX128: 0, + tickCumulative: 0, + computedLatestObservation: false + }); + + bool exactInput = amountSpecified > 0; + + SwapState memory state = SwapState({ + amountSpecifiedRemaining: amountSpecified, + amountCalculated: 0, + sqrtPriceX96: slot0Start.sqrtPriceX96, + tick: slot0Start.tick, + fee: fee(), + hasUpdatedFees: false, + feeGrowthGlobalX128: zeroForOne + ? feeGrowthGlobal0X128 + : feeGrowthGlobal1X128, + gaugeFee: 0, + liquidity: cache.liquidityStart, + stakedLiquidity: cache.stakedLiquidityStart + }); + + // continue swapping as long as we haven't used the entire input/output and haven't reached the price limit + while ( + state.amountSpecifiedRemaining != 0 && + state.sqrtPriceX96 != sqrtPriceLimitX96 + ) { + StepComputations memory step; + + step.sqrtPriceStartX96 = state.sqrtPriceX96; + + (step.tickNext, step.initialized) = tickBitmap + .nextInitializedTickWithinOneWord(state.tick, tickSpacing, zeroForOne); + + // ensure that we do not overshoot the min/max tick, as the tick bitmap is not aware of these bounds + if (step.tickNext < TickMath.MIN_TICK) { + step.tickNext = TickMath.MIN_TICK; + } else if (step.tickNext > TickMath.MAX_TICK) { + step.tickNext = TickMath.MAX_TICK; + } + + // get the price for the next tick + step.sqrtPriceNextX96 = TickMath.getSqrtRatioAtTick(step.tickNext); + + // compute values to swap to the target tick, price limit, or point where input/output amount is exhausted + ( + state.sqrtPriceX96, + step.amountIn, + step.amountOut, + step.feeAmount + ) = SwapMath.computeSwapStep( + state.sqrtPriceX96, + ( + zeroForOne + ? step.sqrtPriceNextX96 < sqrtPriceLimitX96 + : step.sqrtPriceNextX96 > sqrtPriceLimitX96 + ) + ? sqrtPriceLimitX96 + : step.sqrtPriceNextX96, + state.liquidity, + state.amountSpecifiedRemaining, + state.fee + ); + + if (exactInput) { + state.amountSpecifiedRemaining -= (step.amountIn + step.feeAmount) + .toInt256(); + state.amountCalculated = state.amountCalculated.sub( + step.amountOut.toInt256() + ); + } else { + state.amountSpecifiedRemaining += step.amountOut.toInt256(); + state.amountCalculated = state.amountCalculated.add( + (step.amountIn + step.feeAmount).toInt256() + ); + } + + // update global fee tracker and gauge fee + if (state.liquidity > 0) { + ( + uint256 _feeGrowthGlobalX128, + uint256 _stakedFeeAmount + ) = calculateFees( + step.feeAmount, + state.liquidity, + state.stakedLiquidity + ); + + state.feeGrowthGlobalX128 += _feeGrowthGlobalX128; + state.gaugeFee += uint128(_stakedFeeAmount); + } + + // shift tick if we reached the next price + if (state.sqrtPriceX96 == step.sqrtPriceNextX96) { + // if the tick is initialized, run the tick transition + if (step.initialized) { + // check for the placeholder value, which we replace with the actual value the first time the swap + // crosses an initialized tick + if (!cache.computedLatestObservation) { + ( + cache.tickCumulative, + cache.secondsPerLiquidityCumulativeX128 + ) = observations.observeSingle( + cache.blockTimestamp, + 0, + slot0Start.tick, + slot0Start.observationIndex, + cache.liquidityStart, + slot0Start.observationCardinality + ); + cache.computedLatestObservation = true; + } + if (!state.hasUpdatedFees) { + _updateRewardsGrowthGlobal(); + state.hasUpdatedFees = true; + } + Tick.LiquidityNets memory nets = ticks.cross( + step.tickNext, + (zeroForOne ? state.feeGrowthGlobalX128 : feeGrowthGlobal0X128), + (zeroForOne ? feeGrowthGlobal1X128 : state.feeGrowthGlobalX128), + cache.secondsPerLiquidityCumulativeX128, + cache.tickCumulative, + cache.blockTimestamp, + rewardGrowthGlobalX128 + ); + // if we're moving leftward, we interpret liquidityNet & stakedLiquidityNet as the opposite sign + // safe because liquidityNet & stakedLiquidityNet cannot be type(int128).min + if (zeroForOne) { + nets.liquidityNet = -nets.liquidityNet; + nets.stakedLiquidityNet = -nets.stakedLiquidityNet; + } + + state.liquidity = LiquidityMath.addDelta( + state.liquidity, + nets.liquidityNet + ); + state.stakedLiquidity = LiquidityMath.addDelta( + state.stakedLiquidity, + nets.stakedLiquidityNet + ); + } + + state.tick = zeroForOne ? step.tickNext - 1 : step.tickNext; + } else if (state.sqrtPriceX96 != step.sqrtPriceStartX96) { + // recompute unless we're on a lower tick boundary (i.e. already transitioned ticks), and haven't moved + state.tick = TickMath.getTickAtSqrtRatio(state.sqrtPriceX96); + } + } + + // update tick and write an oracle entry if the tick change + if (state.tick != slot0Start.tick) { + (uint16 observationIndex, uint16 observationCardinality) = observations + .write( + slot0Start.observationIndex, + cache.blockTimestamp, + slot0Start.tick, + cache.liquidityStart, + slot0Start.observationCardinality, + slot0Start.observationCardinalityNext + ); + ( + slot0.sqrtPriceX96, + slot0.tick, + slot0.observationIndex, + slot0.observationCardinality + ) = ( + state.sqrtPriceX96, + state.tick, + observationIndex, + observationCardinality + ); + } else { + // otherwise just update the price + slot0.sqrtPriceX96 = state.sqrtPriceX96; + } + + // update liquidity and stakedLiquidity if it changed + if (cache.liquidityStart != state.liquidity) liquidity = state.liquidity; + if (cache.stakedLiquidityStart != state.stakedLiquidity) + stakedLiquidity = state.stakedLiquidity; + + // update fee growth global and, if necessary, gauge fees + // overflow is acceptable, protocol has to withdraw before it hits type(uint128).max fees + if (zeroForOne) { + feeGrowthGlobal0X128 = state.feeGrowthGlobalX128; + if (state.gaugeFee > 0) gaugeFees.token0 += state.gaugeFee; + } else { + feeGrowthGlobal1X128 = state.feeGrowthGlobalX128; + if (state.gaugeFee > 0) gaugeFees.token1 += state.gaugeFee; + } + + (amount0, amount1) = zeroForOne == exactInput + ? ( + amountSpecified - state.amountSpecifiedRemaining, + state.amountCalculated + ) + : ( + state.amountCalculated, + amountSpecified - state.amountSpecifiedRemaining + ); + + // do the transfers and collect payment + if (zeroForOne) { + if (amount1 < 0) + TransferHelper.safeTransfer(token1, recipient, uint256(-amount1)); + + uint256 balance0Before = balance0(); + ICLSwapCallback(msg.sender).uniswapV3SwapCallback(amount0, amount1, data); + require(balance0Before.add(uint256(amount0)) <= balance0(), 'IIA'); + } else { + if (amount0 < 0) + TransferHelper.safeTransfer(token0, recipient, uint256(-amount0)); + + uint256 balance1Before = balance1(); + ICLSwapCallback(msg.sender).uniswapV3SwapCallback(amount0, amount1, data); + require(balance1Before.add(uint256(amount1)) <= balance1(), 'IIA'); + } + + emit Swap( + msg.sender, + recipient, + amount0, + amount1, + state.sqrtPriceX96, + state.liquidity, + state.tick + ); + slot0.unlocked = true; + } + + /// @inheritdoc ICLPoolActions + function flash( + address recipient, + uint256 amount0, + uint256 amount1, + bytes calldata data + ) external override lock { + uint128 _liquidity = liquidity; + require(_liquidity > 0, 'L'); + + uint256 fee0 = FullMath.mulDivRoundingUp(amount0, fee(), 1e6); + uint256 fee1 = FullMath.mulDivRoundingUp(amount1, fee(), 1e6); + uint256 balance0Before = balance0(); + uint256 balance1Before = balance1(); + + if (amount0 > 0) TransferHelper.safeTransfer(token0, recipient, amount0); + if (amount1 > 0) TransferHelper.safeTransfer(token1, recipient, amount1); + + ICLFlashCallback(msg.sender).uniswapV3FlashCallback(fee0, fee1, data); + + uint256 balance0After = balance0(); + uint256 balance1After = balance1(); + + require(balance0Before.add(fee0) <= balance0After, 'F0'); + require(balance1Before.add(fee1) <= balance1After, 'F1'); + + // sub is safe because we know balanceAfter is gt balanceBefore by at least fee + uint256 paid0 = balance0After - balance0Before; + uint256 paid1 = balance1After - balance1Before; + + if (paid0 > 0) { + (uint256 feeGrowthGlobalX128, uint256 stakedFeeAmount) = calculateFees( + paid0, + _liquidity, + stakedLiquidity + ); + + if (feeGrowthGlobalX128 > 0) feeGrowthGlobal0X128 += feeGrowthGlobalX128; + if (uint128(stakedFeeAmount) > 0) + gaugeFees.token0 += uint128(stakedFeeAmount); + } + if (paid1 > 0) { + (uint256 feeGrowthGlobalX128, uint256 stakedFeeAmount) = calculateFees( + paid1, + _liquidity, + stakedLiquidity + ); + + if (feeGrowthGlobalX128 > 0) feeGrowthGlobal1X128 += feeGrowthGlobalX128; + if (uint128(stakedFeeAmount) > 0) + gaugeFees.token1 += uint128(stakedFeeAmount); + } + emit Flash(msg.sender, recipient, amount0, amount1, paid0, paid1); + } + + /// @inheritdoc ICLPoolState + function getRewardGrowthInside( + int24 tickLower, + int24 tickUpper, + uint256 _rewardGrowthGlobalX128 + ) external view override returns (uint256 rewardGrowthInside) { + checkTicks(tickLower, tickUpper); + if (_rewardGrowthGlobalX128 == 0) + _rewardGrowthGlobalX128 = rewardGrowthGlobalX128; + + return + ticks.getRewardGrowthInside( + tickLower, + tickUpper, + slot0.tick, + _rewardGrowthGlobalX128 + ); + } + + /// @inheritdoc ICLPoolActions + function updateRewardsGrowthGlobal() external override lock onlyGauge { + _updateRewardsGrowthGlobal(); + } + + /// @dev timeDelta != 0 handles case when function is called twice in the same block. + /// @dev stakedLiquidity > 0 handles case when depositing staked liquidity and there is no liquidity staked yet, + /// @dev or when notifying rewards when there is no liquidity stake + function _updateRewardsGrowthGlobal() internal { + uint32 timestamp = _blockTimestamp(); + uint256 _lastUpdated = lastUpdated; + uint256 timeDelta = timestamp - _lastUpdated; // skip if second call in same block + + if (timeDelta != 0) { + if (rewardReserve > 0) { + uint256 reward = rewardRate * timeDelta; + if (reward > rewardReserve) reward = rewardReserve; + rewardReserve -= reward; + if (stakedLiquidity > 0) { + rewardGrowthGlobalX128 += FullMath.mulDiv( + reward, + FixedPoint128.Q128, + stakedLiquidity + ); + } else { + rollover += reward; + } + } + lastUpdated = timestamp; + } + } + + /// @inheritdoc ICLPoolActions + function syncReward( + uint256 _rewardRate, + uint256 _rewardReserve, + uint256 _periodFinish + ) external override lock onlyGauge { + rewardRate = _rewardRate; + rewardReserve = _rewardReserve; + periodFinish = _periodFinish; + delete rollover; + } + + /// @notice Calculates the fees owed to staked liquidity, then calculates fee levied on unstaked liquidity + /// @param feeAmount Total fees + /// @param _liquidity Current liquidity in active tick + /// @param _stakedLiquidity Current staked liquidity in active tick + /// @return unstakedFeeAmount Fee amount for unstaked LPs after accounting for staked liquidity contribution and unstaked fee + /// @return stakedFeeAmount Fee amount for staked LPs consisting of staked liquidity contribution and unstaked fee + function splitFees( + uint256 feeAmount, + uint128 _liquidity, + uint128 _stakedLiquidity + ) internal view returns (uint256 unstakedFeeAmount, uint256 stakedFeeAmount) { + stakedFeeAmount = FullMath.mulDivRoundingUp( + feeAmount, + _stakedLiquidity, + _liquidity + ); + (unstakedFeeAmount, stakedFeeAmount) = applyUnstakedFees( + feeAmount - stakedFeeAmount, + stakedFeeAmount + ); + } + + /// @notice Calculates fee for levied on unstaked liquidity only + /// @param _unstakedFeeAmount Fee amount for unstaked LPs net of staked liquidity contribution + /// @param _stakedFeeAmount Fee amount for staked LPs consisting of staked liquidity contribution + /// @return unstakedFeeAmount Fee amount for unstaked LPs after accounting for staked liquidity contribution and unstaked fee + /// @return stakedFeeAmount Fee amount for staked LPs consisting of staked liquidity contribution and unstaked fee + function applyUnstakedFees( + uint256 _unstakedFeeAmount, + uint256 _stakedFeeAmount + ) internal view returns (uint256 unstakedFeeAmount, uint256 stakedFeeAmount) { + uint256 _stakedFee = FullMath.mulDivRoundingUp( + _unstakedFeeAmount, + unstakedFee(), + 1_000_000 + ); + unstakedFeeAmount = _unstakedFeeAmount - _stakedFee; + stakedFeeAmount = _stakedFeeAmount + _stakedFee; + } + + // calculates the fee growths for unstaked liquidity and returns it with the staked fee amount + function calculateFees( + uint256 feeAmount, + uint128 _liquidity, + uint128 _stakedLiquidity + ) + internal + view + returns (uint256 feeGrowthGlobalX128, uint256 stakedFeeAmount) + { + // if there is only staked liquidity + if (_liquidity == _stakedLiquidity) { + stakedFeeAmount = feeAmount; + } + // if there is only unstaked liquidity + else if (_stakedLiquidity == 0) { + (uint256 unstakedFeeAmount, uint256 _stakedFeeAmount) = applyUnstakedFees( + feeAmount, + 0 + ); + feeGrowthGlobalX128 = FullMath.mulDiv( + unstakedFeeAmount, + FixedPoint128.Q128, + _liquidity + ); + stakedFeeAmount = _stakedFeeAmount; + } + // if there are staked and unstaked liquidities + else { + (uint256 unstakedFeeAmount, uint256 _stakedFeeAmount) = splitFees( + feeAmount, + _liquidity, + _stakedLiquidity + ); + feeGrowthGlobalX128 = FullMath.mulDiv( + unstakedFeeAmount, + FixedPoint128.Q128, + _liquidity - _stakedLiquidity + ); + stakedFeeAmount = _stakedFeeAmount; + } + } + + /// @inheritdoc ICLPoolOwnerActions + function collectFees() + external + override + lock + onlyGauge + returns (uint128 amount0, uint128 amount1) + { + amount0 = gaugeFees.token0; + amount1 = gaugeFees.token1; + if (amount0 > 1) { + // ensure that the slot is not cleared, for gas savings + gaugeFees.token0 = 1; + TransferHelper.safeTransfer(token0, msg.sender, --amount0); + } + if (amount1 > 1) { + // ensure that the slot is not cleared, for gas savings + gaugeFees.token1 = 1; + TransferHelper.safeTransfer(token1, msg.sender, --amount1); + } + + emit CollectFees(msg.sender, amount0, amount1); + } + + /// @inheritdoc ICLPoolActions + function setGaugeAndPositionManager( + address _gauge, + address _nft + ) external override lock onlyGaugeFactory { + require(gauge == address(0)); + gauge = _gauge; + nft = _nft; + } +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/lib/openzeppelin-contracts/contracts/proxy /Clones.sol b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/lib/openzeppelin-contracts/contracts/proxy /Clones.sol new file mode 100644 index 00000000..093ae215 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/lib/openzeppelin-contracts/contracts/proxy /Clones.sol @@ -0,0 +1,109 @@ +// SPDX-License-Identifier: MIT +// OpenZeppelin Contracts (last updated v4.8.0) (proxy/Clones.sol) + +pragma solidity ^0.8.0; + +/** + * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for + * deploying minimal proxy contracts, also known as "clones". + * + * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies + * > a minimal bytecode implementation that delegates all calls to a known, fixed address. + * + * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` + * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the + * deterministic method. + * + * _Available since v3.4._ + */ +library Clones { + /** + * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. + * + * This function uses the create opcode, which should never revert. + */ + function clone(address implementation) internal returns (address instance) { + /// @solidity memory-safe-assembly + assembly { + // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes + // of the `implementation` address with the bytecode before the address. + mstore( + 0x00, + or( + shr(0xe8, shl(0x60, implementation)), + 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000 + ) + ) + // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. + mstore( + 0x20, + or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3) + ) + instance := create(0, 0x09, 0x37) + } + require(instance != address(0), 'ERC1167: create failed'); + } + + /** + * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. + * + * This function uses the create2 opcode and a `salt` to deterministically deploy + * the clone. Using the same `implementation` and `salt` multiple time will revert, since + * the clones cannot be deployed twice at the same address. + */ + function cloneDeterministic( + address implementation, + bytes32 salt + ) internal returns (address instance) { + /// @solidity memory-safe-assembly + assembly { + // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes + // of the `implementation` address with the bytecode before the address. + mstore( + 0x00, + or( + shr(0xe8, shl(0x60, implementation)), + 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000 + ) + ) + // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. + mstore( + 0x20, + or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3) + ) + instance := create2(0, 0x09, 0x37, salt) + } + require(instance != address(0), 'ERC1167: create2 failed'); + } + + /** + * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. + */ + function predictDeterministicAddress( + address implementation, + bytes32 salt, + address deployer + ) internal pure returns (address predicted) { + /// @solidity memory-safe-assembly + assembly { + let ptr := mload(0x40) + mstore(add(ptr, 0x38), deployer) + mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff) + mstore(add(ptr, 0x14), implementation) + mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73) + mstore(add(ptr, 0x58), salt) + mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37)) + predicted := keccak256(add(ptr, 0x43), 0x55) + } + } + + /** + * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. + */ + function predictDeterministicAddress( + address implementation, + bytes32 salt + ) internal view returns (address predicted) { + return predictDeterministicAddress(implementation, salt, address(this)); + } +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/config.ts b/packages/dodoex-widgets/src/widgets/ve33/config.ts new file mode 100644 index 00000000..63461f62 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/config.ts @@ -0,0 +1,74 @@ +import { ChainId } from '@dodoex/api'; + +/** + "WETH": "0x5300000000000000000000000000000000000011", + +{ + "AERO": "0x42EDf453F8483c7168c158d28D610A58308517D1", + "AirdropDistributor": "0x4c0dC92e49473Ad6691f34a6615FD53f8A0bDC8d", + "ArtProxy": "0xaf6c1052A1114C7816C24a5e8bC485b180C49Deb", + "Distributor": "0xBb5a0bF38C0BeA6829fDFef931B7988c8fF00a78", + "FactoryRegistry": "0x620572bEE4ECF35B2FEBB1F644F939A032cd7044", + "Forwarder": "0xB6362C3Ef78CDe47446a819B8131eC540a949EF8", + "GaugeFactory": "0xe77C7e8fE14662e07346A8e2797fee18809aCcEa", + "ManagedRewardsFactory": "0x69485b9B95df04dDbbF8669A33865C97E9B293B4", + "Minter": "0xF7d33BB55C74048352DC0413733095Cc8e273A74", + "PoolFactory": "0x2dA6Bf29baAB9Ac23Bb8E7fB04F6D9a20bbdfC82", + "Router": "0x468e60B84b11B3B1532D7C41FcBb79DA352aa12d", + "Voter": "0x74CAd58eD9712e3236D61dea8696B6Dced3da2b6", + "VotingEscrow": "0x00Fc0223442630e2AaDAB831d2Ee1FD27ee8A6B2", + "VotingRewardsFactory": "0x64e4a9BDA0670Cdb30664383244dA60158Af847B" +} +{ +// https://explorer-holesky.morphl2.io/address/0x64610da3092153a188278815c1f2072009F9Df1e?tab=contract +// https://github.com/Skyewwww/aerodrome-contracts/blob/deploy-morph/contracts/Pool.sol + // vAMM-WETH/AERO + "Pool": "0x98EcC0D3F774a7bDA38918bf5830a476dD5A606C", + "Gauge": "0x7B156830fDbC76d327a48a19B0143663e16A95ba", + "FeesVotingReward": "0x0266a69Ed8D4E9ef2781BB7B1BB9437E15Cf5639", + "BribeVotingReward": "0x6d3dCd05D0576a1379aA9587aBB4D968cF2fD8df" +} +{ + "GaugeFactory": "0xd648A03cE42bf7c7F5D4c7885eb76d89daEcB988", + "GaugeImplementation": "0x054aC9d1DD99C49a4B3A6314717aE49D09606d46", + "MixedQuoter": "0x9aE45C6566e4c032C119665Cfd38Eaa3f3859D06", + "NonfungiblePositionManager": "0x2b36c1be2a16ACb71E6F6CccfCd7D20cdfE01867", + "NonfungibleTokenPositionDescriptor": "0x0d3a1033d9F76A0bC5a444CdFB8fdE85B1290542", + "PoolFactory": "0x0d1B0d0d709292d35AB7455fF6DBA0Eed40Cc49b", + "PoolImplementation": "0xE2714F696039Fa207E4Fd1348d0D5bbD27fBe964", + "Quoter": "0xB725b88b32868266782398ae7Ab6bDCcebe90368", + "SwapFeeModule": "0x5ffDad8a7D2E9E45FCF88A0C5baDdd80a421f605", + "SwapRouter": "0xA0abF41a231BaCeB1feB624Dca843B71c10311e8", + "UnstakedFeeModule": "0xfa1824E71CFF5D315b63CBc91c0b859462B7EA30" +} +{ + // CL200-WETH/AERO + "Pool": "0x2f63A87bf42dc4c021af8BE085CecE16269e3b67", + "Gauge": "0x640be2253A65740152dC933FAb757606e9c7BD52", + "FeesVotingReward": "0x87BA1438fa2d2Fd6aD66162B7c1afAAB25b7CE83", + "BribeVotingReward": "0xA7a1790B8Cd1737278b464c295517408f38b4726" +} + */ + +export interface Ve33Config { + chainId: number; + /** + * https://explorer-holesky.morphl2.io/address/0x2dA6Bf29baAB9Ac23Bb8E7fB04F6D9a20bbdfC82?tab=contract + */ + PoolFactory: string; + /** + * https://explorer-holesky.morphl2.io/address/0x0d1B0d0d709292d35AB7455fF6DBA0Eed40Cc49b + */ + CLFactory: string; +} + +export const ve33Config: Map = new Map([ + [ + ChainId.MORPH_HOLESKY_TESTNET, + { + chainId: ChainId.MORPH_HOLESKY_TESTNET, + PoolFactory: '0x2dA6Bf29baAB9Ac23Bb8E7fB04F6D9a20bbdfC82', + CLFactory: '0x0d1B0d0d709292d35AB7455fF6DBA0Eed40Cc49b', + }, + ], +]); diff --git a/packages/dodoex-widgets/src/widgets/ve33/constants.ts b/packages/dodoex-widgets/src/widgets/ve33/constants.ts new file mode 100644 index 00000000..8baadcd0 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/constants.ts @@ -0,0 +1,27 @@ +/** + * The default factory enabled fee amounts, denominated in hundredths of bips. + * @see https://explorer-holesky.morphl2.io/address/0x0d1B0d0d709292d35AB7455fF6DBA0Eed40Cc49b?tab=read_contract + */ +export enum FeeAmount { + LOWEST = 100, + LOW = 500, + MEDIUM = 500, + HIGH = 3_000, + HIGHEST = 10_000, +} + +export enum TickSpacings { + LOWEST = 1, + LOW = 50, + MEDIUM = 100, + HIGH = 200, + HIGHEST = 2_000, +} + +export const tickSpacingToFee: { [amount in TickSpacings]: FeeAmount } = { + [TickSpacings.LOWEST]: FeeAmount.LOWEST, + [TickSpacings.LOW]: FeeAmount.LOW, + [TickSpacings.MEDIUM]: FeeAmount.MEDIUM, + [TickSpacings.HIGH]: FeeAmount.HIGH, + [TickSpacings.HIGHEST]: FeeAmount.HIGHEST, +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/hooks/usePoolColors.ts b/packages/dodoex-widgets/src/widgets/ve33/hooks/usePoolColors.ts new file mode 100644 index 00000000..af16f3b9 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/hooks/usePoolColors.ts @@ -0,0 +1,26 @@ +import { PoolTypeE } from '../types'; +import { Ve33PoolInfoI } from '../types'; + +export function usePoolColors({ + type, + stable, + fee, +}: { + type: PoolTypeE; + stable: boolean; + fee: Ve33PoolInfoI['fee']; +}) { + if (type === PoolTypeE.CLPool) { + return { + color: '#C39624', + backgroundColor: '#C3962433', + name: `V3·CL=${fee}`, + }; + } + + return { + color: '#9BB168', + backgroundColor: '#68873D33', + name: stable ? 'V2·Stable' : 'V2·Volatile', + }; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/types.ts b/packages/dodoex-widgets/src/widgets/ve33/types.ts index ff6874d3..fd0134a0 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/types.ts +++ b/packages/dodoex-widgets/src/widgets/ve33/types.ts @@ -1,5 +1,29 @@ import { FetchVe33PoolList } from '../PoolWidget/utils'; +export enum OperateTypeE { + Add = 1, + Remove, +} + +export enum PoolTypeE { + Pool = 1, + CLPool, +} + +export enum FeeE { + Stable = 5, + Volatile = 30, +} + +type FetchVe33PoolItem = FetchVe33PoolList[0]; + +export type Ve33PoolInfoI = FetchVe33PoolItem & { + stable: boolean; + fee: FeeE | 0 | number; + type: PoolTypeE; +}; + export interface Ve33PoolOperateProps { - poolInfo: FetchVe33PoolList[0]; + poolInfo: Ve33PoolInfoI; + operateType: OperateTypeE; } diff --git a/packages/dodoex-widgets/src/widgets/ve33/utils.ts b/packages/dodoex-widgets/src/widgets/ve33/utils.ts new file mode 100644 index 00000000..77cf23be --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/utils.ts @@ -0,0 +1,10 @@ +import { PoolTypeE } from './types'; + +import { FeeE } from './types'; + +export const formatFee = ({ type, fee }: { type: PoolTypeE; fee: FeeE }) => { + if (type === PoolTypeE.Pool) { + return `${fee / 100}%`; + } + return `${fee / 10000}%`; +}; From 40af585eee2343b9603084374937c2f6dcb05369 Mon Sep 17 00:00:00 2001 From: yrjkqq Date: Thu, 10 Apr 2025 20:18:49 +0800 Subject: [PATCH 06/18] chore: update TypeScript configuration and package versions to 3.0.4-ve33.3 for improved compatibility and features --- packages/doc/package.json | 2 +- packages/dodoex-api/package.json | 2 +- packages/dodoex-api/rollup.config.mjs | 6 +++++- packages/dodoex-api/tsconfig.json | 4 +--- packages/dodoex-components/package.json | 2 +- packages/dodoex-components/rollup.config.mjs | 6 +++++- packages/dodoex-components/tsconfig.json | 3 ++- packages/dodoex-widgets/package.json | 6 +++--- packages/dodoex-widgets/rollup.config.mjs | 6 +++++- packages/dodoex-widgets/tsconfig.json | 4 +--- tsconfig.json | 4 ++-- 11 files changed, 27 insertions(+), 18 deletions(-) diff --git a/packages/doc/package.json b/packages/doc/package.json index 5c2a8630..6f94b06e 100644 --- a/packages/doc/package.json +++ b/packages/doc/package.json @@ -8,7 +8,7 @@ }, "dependencies": { "@babel/runtime": "^7.17.0", - "@dodoex/components": "^3.0.4-ve33.2", + "@dodoex/components": "^3.0.4-ve33.3", "@emotion/styled": "^11.10.0", "@storybook/addon-docs": "^8.3.5", "@web3modal/ethers5": "^3.5.5", diff --git a/packages/dodoex-api/package.json b/packages/dodoex-api/package.json index 0275e28a..4f5ccbff 100644 --- a/packages/dodoex-api/package.json +++ b/packages/dodoex-api/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/api", - "version": "3.0.4-ve33.2", + "version": "3.0.4-ve33.3", "description": "DODO API Kit", "source": "src/index.ts", "types": "dist/types/index.d.ts", diff --git a/packages/dodoex-api/rollup.config.mjs b/packages/dodoex-api/rollup.config.mjs index 6a35222a..8de86614 100644 --- a/packages/dodoex-api/rollup.config.mjs +++ b/packages/dodoex-api/rollup.config.mjs @@ -24,7 +24,11 @@ const config = { }), url(), json(), - typescript(), + typescript({ + compilerOptions: { + paths: undefined, + }, + }), commonjs({ sourceMap: false, }), diff --git a/packages/dodoex-api/tsconfig.json b/packages/dodoex-api/tsconfig.json index e7647f9a..3336a93f 100644 --- a/packages/dodoex-api/tsconfig.json +++ b/packages/dodoex-api/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../tsconfig", "compilerOptions": { - "declarationDir": "./dist/types", - "jsx": "preserve", - "target": "es2016" + "declarationDir": "./dist/types" }, "exclude": ["node_modules", "types", "src/gql/graphql.ts"], "include": ["src/**/*.ts"] diff --git a/packages/dodoex-components/package.json b/packages/dodoex-components/package.json index ca131dc8..44432ef8 100644 --- a/packages/dodoex-components/package.json +++ b/packages/dodoex-components/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/components", - "version": "3.0.4-ve33.2", + "version": "3.0.4-ve33.3", "description": "UI component library", "source": "src/index.ts", "types": "dist/types/index.d.ts", diff --git a/packages/dodoex-components/rollup.config.mjs b/packages/dodoex-components/rollup.config.mjs index 91697ad1..8d234ecc 100644 --- a/packages/dodoex-components/rollup.config.mjs +++ b/packages/dodoex-components/rollup.config.mjs @@ -34,7 +34,11 @@ const config = { }, }), json(), - typescript(), + typescript({ + compilerOptions: { + paths: undefined, + }, + }), commonjs({ sourceMap: false, }), diff --git a/packages/dodoex-components/tsconfig.json b/packages/dodoex-components/tsconfig.json index 701b846c..1cfb314c 100644 --- a/packages/dodoex-components/tsconfig.json +++ b/packages/dodoex-components/tsconfig.json @@ -1,7 +1,8 @@ { "extends": "../../tsconfig", "compilerOptions": { - "declarationDir": "./dist/types" + "declarationDir": "./dist/types", + "jsx": "react-jsx" }, "exclude": ["node_modules", "**/*.d.mts"], "include": ["src/**/*.d.ts", "src/**/*.ts", "src/**/*.tsx"] diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index e71f06bc..8e8644d1 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.0.4-ve33.6", + "version": "3.0.4-ve33.7", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", @@ -58,8 +58,8 @@ }, "dependencies": { "@babel/runtime": "^7.17.0", - "@dodoex/api": "3.0.4-ve33.2", - "@dodoex/components": "3.0.4-ve33.2", + "@dodoex/api": "3.0.4-ve33.3", + "@dodoex/components": "3.0.4-ve33.3", "@dodoex/contract-request": "^1.3.0", "@dodoex/dodo-contract-request": "1.10.0-alpha.3", "@dodoex/icons": "^2.0.2", diff --git a/packages/dodoex-widgets/rollup.config.mjs b/packages/dodoex-widgets/rollup.config.mjs index 47996d2e..daae27de 100644 --- a/packages/dodoex-widgets/rollup.config.mjs +++ b/packages/dodoex-widgets/rollup.config.mjs @@ -33,7 +33,11 @@ const baseConfig = { }, }), json(), - typescript(), + typescript({ + compilerOptions: { + paths: undefined, + }, + }), commonjs(), resolve(), babel({ diff --git a/packages/dodoex-widgets/tsconfig.json b/packages/dodoex-widgets/tsconfig.json index f7698af7..d2fbcb51 100644 --- a/packages/dodoex-widgets/tsconfig.json +++ b/packages/dodoex-widgets/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../../tsconfig", "compilerOptions": { - "declarationDir": "./dist/types", - "jsx": "preserve", - "target": "es2016" + "declarationDir": "./dist/types" }, "exclude": ["node_modules", "types", "src/locales"], "include": ["src/**/*.d.ts", "src/**/*.ts", "src/**/*.tsx"] diff --git a/tsconfig.json b/tsconfig.json index fc2da099..3a4411a2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "es2016", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, @@ -12,7 +12,7 @@ "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "react-jsx", + "jsx": "preserve", "downlevelIteration": true, "newLine": "CRLF", "declaration": true, From 5d37cc9d7508b0e681701dc5c2eda0c6e74383dc Mon Sep 17 00:00:00 2001 From: yrjkqq Date: Thu, 10 Apr 2025 20:52:38 +0800 Subject: [PATCH 07/18] feat: add apiDomain support to widgets and update package version to 3.0.4-ve33.8 for enhanced API integration --- .../doc/src/stories/widgets/Swap.stories.tsx | 1 + .../stories/widgets/Ve33PoolList.stories.tsx | 1 + packages/dodoex-widgets/package.json | 2 +- .../src/components/Widget/index.tsx | 2 ++ packages/dodoex-widgets/src/constants/api.ts | 1 + .../src/hooks/setting/useGetAPIService.ts | 7 +++++-- .../src/hooks/useGraphQLRequests.ts | 19 +++++++++++++------ 7 files changed, 24 insertions(+), 9 deletions(-) diff --git a/packages/doc/src/stories/widgets/Swap.stories.tsx b/packages/doc/src/stories/widgets/Swap.stories.tsx index c4145972..af5d2ebc 100644 --- a/packages/doc/src/stories/widgets/Swap.stories.tsx +++ b/packages/doc/src/stories/widgets/Swap.stories.tsx @@ -14,6 +14,7 @@ export const Primary = (props: any) => { Primary.args = { apiKey: 'ef9apopzq9qrgntjubojbxe7hy4z5eez', + apiDomain: process.env.STORYBOOK_API_DOMAIN, popularTokenList: [], tokenList: [ { diff --git a/packages/doc/src/stories/widgets/Ve33PoolList.stories.tsx b/packages/doc/src/stories/widgets/Ve33PoolList.stories.tsx index bdb2ebc4..8a55473f 100644 --- a/packages/doc/src/stories/widgets/Ve33PoolList.stories.tsx +++ b/packages/doc/src/stories/widgets/Ve33PoolList.stories.tsx @@ -36,6 +36,7 @@ export const Primary = (props: any) => { Primary.args = { projectId: 'project2', apiKey: 'ee53d6b75b12aceed4', + apiDomain: process.env.STORYBOOK_API_DOMAIN, width: '100%', height: '100%', routerPage: undefined, diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index 8e8644d1..9d0c572c 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.0.4-ve33.7", + "version": "3.0.4-ve33.8", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", diff --git a/packages/dodoex-widgets/src/components/Widget/index.tsx b/packages/dodoex-widgets/src/components/Widget/index.tsx index 37804cca..d799d14d 100644 --- a/packages/dodoex-widgets/src/components/Widget/index.tsx +++ b/packages/dodoex-widgets/src/components/Widget/index.tsx @@ -53,6 +53,7 @@ export interface WidgetProps InitTokenListProps, ExecutionProps { apikey?: string; + apiDomain: string; theme?: PartialDeep; colorMode?: PaletteMode; defaultChainId?: ChainId; @@ -265,6 +266,7 @@ export function UnstyleWidget(props: PropsWithChildren) { {...{ ...props, widgetRef: props.widgetRef ?? widgetRef, + apiDomain: props.apiDomain ?? 'dodoex.io', }} > diff --git a/packages/dodoex-widgets/src/constants/api.ts b/packages/dodoex-widgets/src/constants/api.ts index 51534faa..b5a33bce 100644 --- a/packages/dodoex-widgets/src/constants/api.ts +++ b/packages/dodoex-widgets/src/constants/api.ts @@ -37,6 +37,7 @@ const BridgeCreateRouteAPI = `${BridgeUrlPrefix}/order/create`; export function getAPIService( key: APIServiceKey, serviceProps: Partial = {}, + apiDomain: string, ) { switch (key) { case APIServiceKey.routePrice: diff --git a/packages/dodoex-widgets/src/hooks/setting/useGetAPIService.ts b/packages/dodoex-widgets/src/hooks/setting/useGetAPIService.ts index 1e1ba223..b28cec28 100644 --- a/packages/dodoex-widgets/src/hooks/setting/useGetAPIService.ts +++ b/packages/dodoex-widgets/src/hooks/setting/useGetAPIService.ts @@ -3,7 +3,10 @@ import { useUserOptions } from '../../components/UserOptionsProvider'; import { APIServiceKey, getAPIService } from '../../constants/api'; export function useGetAPIService(key: APIServiceKey) { - const { apiServices } = useUserOptions(); + const { apiServices, apiDomain } = useUserOptions(); - return useMemo(() => getAPIService(key, apiServices), [apiServices, key]); + return useMemo( + () => getAPIService(key, apiServices, apiDomain), + [apiServices, apiDomain, key], + ); } diff --git a/packages/dodoex-widgets/src/hooks/useGraphQLRequests.ts b/packages/dodoex-widgets/src/hooks/useGraphQLRequests.ts index 0b1c7382..2fcc40aa 100644 --- a/packages/dodoex-widgets/src/hooks/useGraphQLRequests.ts +++ b/packages/dodoex-widgets/src/hooks/useGraphQLRequests.ts @@ -1,13 +1,20 @@ import { GraphQLRequests } from '@dodoex/api'; import { useUserOptions } from '../components/UserOptionsProvider'; -export const graphQLRequestsLocal = new GraphQLRequests({ - // url: 'https://api.gcp.dxd.ink/frontend-graphql', - url: 'https://gateway.gcp.dxd.ink/graphql', -}); +let graphQLRequestsLocal: GraphQLRequests | null = null; export function useGraphQLRequests() { - const { graphQLRequests } = useUserOptions(); + const { graphQLRequests, apiDomain } = useUserOptions(); - return graphQLRequests ?? graphQLRequestsLocal; + if (graphQLRequests) { + return graphQLRequests; + } + + if (!graphQLRequestsLocal) { + graphQLRequestsLocal = new GraphQLRequests({ + url: `https://gateway.${apiDomain}/graphql`, + }); + } + + return graphQLRequestsLocal; } From 4fee3e27346311b2b1359873d5cee778be653a18 Mon Sep 17 00:00:00 2001 From: yrjkqq Date: Mon, 14 Apr 2025 14:53:51 +0800 Subject: [PATCH 08/18] feat: integrate Ve33 pool details into widgets, enhance GraphQL queries, and improve component structure for better usability --- packages/doc/package.json | 1 + .../widgets/Ve33PoolDetail.stories.tsx | 50 +++++ .../stories/widgets/Ve33PoolList.stories.tsx | 89 ++++++++- packages/doc/tsconfig.json | 5 +- packages/dodoex-api/src/gql/gql.ts | 8 + packages/dodoex-api/src/gql/graphql.ts | 69 +++++++ .../src/services/pool/graphqlQuery.ts | 33 ++++ .../src/components/Widget/index.tsx | 3 +- .../src/components/WidgetContainer.tsx | 6 +- packages/dodoex-widgets/src/index.tsx | 34 +++- .../src/widgets/ve33/Ve33PoolDetail/index.tsx | 174 +++++++++++++++++ .../widgets/ve33/Ve33PoolList/TableList.tsx | 29 ++- .../src/widgets/ve33/Ve33PoolList/index.tsx | 23 ++- .../src/widgets/ve33/components/GoBack.tsx | 60 ++++++ .../src/widgets/ve33/components/PoolHead.tsx | 179 ++++++++++++++++++ .../components/PoolTypeTag.tsx | 6 +- .../src/widgets/ve33/components/widgets.tsx | 34 ++++ .../dodoex-widgets/src/widgets/ve33/types.ts | 5 +- .../dodoex-widgets/src/widgets/ve33/utils.ts | 31 ++- 19 files changed, 785 insertions(+), 54 deletions(-) create mode 100644 packages/doc/src/stories/widgets/Ve33PoolDetail.stories.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/components/GoBack.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/components/PoolHead.tsx rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolList => }/components/PoolTypeTag.tsx (88%) create mode 100644 packages/dodoex-widgets/src/widgets/ve33/components/widgets.tsx diff --git a/packages/doc/package.json b/packages/doc/package.json index 6f94b06e..2293dcb9 100644 --- a/packages/doc/package.json +++ b/packages/doc/package.json @@ -9,6 +9,7 @@ "dependencies": { "@babel/runtime": "^7.17.0", "@dodoex/components": "^3.0.4-ve33.3", + "@dodoex/widgets": "workspace:*", "@emotion/styled": "^11.10.0", "@storybook/addon-docs": "^8.3.5", "@web3modal/ethers5": "^3.5.5", diff --git a/packages/doc/src/stories/widgets/Ve33PoolDetail.stories.tsx b/packages/doc/src/stories/widgets/Ve33PoolDetail.stories.tsx new file mode 100644 index 00000000..a9b747d7 --- /dev/null +++ b/packages/doc/src/stories/widgets/Ve33PoolDetail.stories.tsx @@ -0,0 +1,50 @@ +import { ChainId } from '@dodoex/api'; +import { Ve33PoolDetailWidget, WidgetProps } from '@dodoex/widgets'; + +export default { + title: 'Widgets/Ve33PoolDetail', + component: 'div', +}; + +export const Primary = (props: WidgetProps) => { + const { apikey, ...other } = props; + + return ( + { + window.alert('onClickGoBack'); + }} + /> + ); +}; + +Primary.args = { + projectId: 'project2', + apikey: 'ee53d6b75b12aceed4', + apiDomain: process.env.STORYBOOK_API_DOMAIN, + width: '100%', + height: '100%', + routerPage: undefined, + onlyChainId: ChainId.MORPH_HOLESKY_TESTNET, + noUI: true, +}; diff --git a/packages/doc/src/stories/widgets/Ve33PoolList.stories.tsx b/packages/doc/src/stories/widgets/Ve33PoolList.stories.tsx index 8a55473f..77207663 100644 --- a/packages/doc/src/stories/widgets/Ve33PoolList.stories.tsx +++ b/packages/doc/src/stories/widgets/Ve33PoolList.stories.tsx @@ -1,13 +1,13 @@ -/* eslint-disable import/no-extraneous-dependencies */ -import { Ve33PoolListWidget } from '@dodoex/widgets'; +import { ChainId } from '@dodoex/api'; +import { Ve33PoolListWidget, WidgetProps } from '@dodoex/widgets'; export default { title: 'Widgets/Ve33PoolList', component: 'div', }; -export const Primary = (props: any) => { - const { projectId, apiKey, ...other } = props; +export const Primary = (props: WidgetProps) => { + const { apikey, ...other } = props; return ( { symbol: 'ETH', name: 'ETH', decimals: 18, - chainId: 2810, + chainId: ChainId.MORPH_HOLESKY_TESTNET, }, { address: '0x5300000000000000000000000000000000000011', symbol: 'WETH', name: 'WETH', decimals: 18, - chainId: 2810, + chainId: ChainId.MORPH_HOLESKY_TESTNET, }, ]} {...other} - apikey={apiKey} + apikey={apikey} + onClickPoolListRow={(id, chainId) => { + window.alert(`${id} ${chainId}`); + }} /> ); }; Primary.args = { projectId: 'project2', - apiKey: 'ee53d6b75b12aceed4', + apikey: 'ee53d6b75b12aceed4', apiDomain: process.env.STORYBOOK_API_DOMAIN, width: '100%', height: '100%', routerPage: undefined, - onlyChainId: 2810, + onlyChainId: ChainId.MORPH_HOLESKY_TESTNET, + noUI: true, }; + +/** +{ + "data": { + "ve33_getPoolList": [ + { + "id": "0x98ecc0d3f774a7bda38918bf5830a476dd5a606c", + "title": "V2.Volatile", + "version": "v2", + "gaugeAddress": "0x7b156830fdbc76d327a48a19b0143663e16a95ba", + "feeRate": "30", + "apr": { + "fees": "0", + "incentives": "0" + }, + "tvl": "0", + "totalValueLockedUSD": "0", + "totalValueLockedToken0": "0", + "totalValueLockedToken1": "0", + "volumeUSD": "0", + "volumeToken0": "0", + "volumeToken1": "0", + "feesUSD": "0", + "feesToken0": "0", + "feesToken1": "0", + "token0Address": "0x42edf453f8483c7168c158d28d610a58308517d1", + "token0Name": "Momodrome", + "token0Symbol": "MOMO", + "token0Decimals": 18, + "token1Address": "0x5300000000000000000000000000000000000011", + "token1Name": "Wrapped Ether", + "token1Symbol": "WETH", + "token1Decimals": 18 + }, + { + "id": "0x2f63a87bf42dc4c021af8be085cece16269e3b67", + "title": "V3.CL=200", + "version": "v3", + "gaugeAddress": "0x640be2253a65740152dc933fab757606e9c7bd52", + "feeRate": "3000", + "apr": { + "fees": "0", + "incentives": "0" + }, + "tvl": "0", + "totalValueLockedUSD": "0", + "totalValueLockedToken0": "0", + "totalValueLockedToken1": "0", + "volumeUSD": "0", + "volumeToken0": "0", + "volumeToken1": "0", + "feesUSD": "0", + "feesToken0": "0", + "feesToken1": "0", + "token0Address": "0x42edf453f8483c7168c158d28d610a58308517d1", + "token0Name": "Momodrome", + "token0Symbol": "MOMO", + "token0Decimals": 18, + "token1Address": "0x5300000000000000000000000000000000000011", + "token1Name": "Wrapped Ether", + "token1Symbol": "WETH", + "token1Decimals": 18 + } + ] + } +} + */ diff --git a/packages/doc/tsconfig.json b/packages/doc/tsconfig.json index 946d727c..bc2ab961 100644 --- a/packages/doc/tsconfig.json +++ b/packages/doc/tsconfig.json @@ -14,7 +14,10 @@ "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, - "jsx": "react-jsx" + "jsx": "react-jsx", + "paths": { + "@dodoex/widgets": ["../dodoex-widgets/src"] + } }, "include": ["src"] } diff --git a/packages/dodoex-api/src/gql/gql.ts b/packages/dodoex-api/src/gql/gql.ts index 9db5a64a..ed5514c7 100644 --- a/packages/dodoex-api/src/gql/gql.ts +++ b/packages/dodoex-api/src/gql/gql.ts @@ -48,6 +48,8 @@ const documents = { types.FetchPoolPairListDocument, '\n query Ve33_getPoolList($where: Ve33TokenFilterPaginationInput) {\n ve33_getPoolList(where: $where) {\n id\n title\n version\n gaugeAddress\n feeRate\n apr {\n fees\n incentives\n }\n tvl\n totalValueLockedUSD\n totalValueLockedToken0\n totalValueLockedToken1\n volumeUSD\n volumeToken0\n volumeToken1\n feesUSD\n feesToken0\n feesToken1\n token0Address\n token0Name\n token0Symbol\n token0Decimals\n token1Address\n token1Name\n token1Symbol\n token1Decimals\n }\n }\n ': types.Ve33_GetPoolListDocument, + '\n query Ve33_getPool($where: Ve33PoolInput) {\n ve33_getPool(where: $where) {\n id\n title\n version\n gaugeAddress\n feeRate\n apr {\n fees\n incentives\n }\n tvl\n totalValueLockedUSD\n totalValueLockedToken0\n totalValueLockedToken1\n volumeUSD\n volumeToken0\n volumeToken1\n feesUSD\n feesToken0\n feesToken1\n token0Address\n token0Name\n token0Symbol\n token0Decimals\n token1Address\n token1Name\n token1Symbol\n token1Decimals\n }\n }\n ': + types.Ve33_GetPoolDocument, '\n query FetchUserSwapOrderHistories($where: User_swapswapFilter) {\n user_swap_orderHistories(where: $where) {\n count\n page\n list {\n chainId\n createdAt\n fromAmount\n fromTokenDecimals\n fromTokenPrice\n fromTokenSymbol\n fromTokenAddress\n fromTokenLogoImg\n hash\n status\n toAmount\n toTokenDecimals\n toTokenPrice\n toTokenSymbol\n toTokenAddress\n toTokenLogoImg\n minAmount\n nonce\n extra\n user\n }\n }\n }\n ': types.FetchUserSwapOrderHistoriesDocument, '\n query FetchNoticeCenterTransactionList(\n $where: Notice_centertransactionListFilter\n ) {\n notice_center_transactionList(where: $where) {\n list {\n chainId\n createTime\n extend\n from\n id\n key\n type\n }\n count\n limit\n page\n }\n }\n ': @@ -166,6 +168,12 @@ export function graphql( export function graphql( source: '\n query Ve33_getPoolList($where: Ve33TokenFilterPaginationInput) {\n ve33_getPoolList(where: $where) {\n id\n title\n version\n gaugeAddress\n feeRate\n apr {\n fees\n incentives\n }\n tvl\n totalValueLockedUSD\n totalValueLockedToken0\n totalValueLockedToken1\n volumeUSD\n volumeToken0\n volumeToken1\n feesUSD\n feesToken0\n feesToken1\n token0Address\n token0Name\n token0Symbol\n token0Decimals\n token1Address\n token1Name\n token1Symbol\n token1Decimals\n }\n }\n ', ): typeof import('./graphql').Ve33_GetPoolListDocument; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql( + source: '\n query Ve33_getPool($where: Ve33PoolInput) {\n ve33_getPool(where: $where) {\n id\n title\n version\n gaugeAddress\n feeRate\n apr {\n fees\n incentives\n }\n tvl\n totalValueLockedUSD\n totalValueLockedToken0\n totalValueLockedToken1\n volumeUSD\n volumeToken0\n volumeToken1\n feesUSD\n feesToken0\n feesToken1\n token0Address\n token0Name\n token0Symbol\n token0Decimals\n token1Address\n token1Name\n token1Symbol\n token1Decimals\n }\n }\n ', +): typeof import('./graphql').Ve33_GetPoolDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/packages/dodoex-api/src/gql/graphql.ts b/packages/dodoex-api/src/gql/graphql.ts index 72e5ef04..5a341b8d 100644 --- a/packages/dodoex-api/src/gql/graphql.ts +++ b/packages/dodoex-api/src/gql/graphql.ts @@ -21613,6 +21613,39 @@ export type Ve33_GetPoolListQuery = { } | null>; }; +export type Ve33_GetPoolQueryVariables = Exact<{ + where?: InputMaybe; +}>; + +export type Ve33_GetPoolQuery = { + ve33_getPool?: { + id: string; + title: string; + version: string; + gaugeAddress: string; + feeRate: any; + tvl: any; + totalValueLockedUSD: any; + totalValueLockedToken0: any; + totalValueLockedToken1: any; + volumeUSD: any; + volumeToken0: any; + volumeToken1: any; + feesUSD: any; + feesToken0: any; + feesToken1: any; + token0Address: string; + token0Name: string; + token0Symbol: string; + token0Decimals: number; + token1Address: string; + token1Name: string; + token1Symbol: string; + token1Decimals: number; + apr: { fees: any; incentives: any }; + } | null; +}; + export type FetchUserSwapOrderHistoriesQueryVariables = Exact<{ where?: InputMaybe; }>; @@ -22578,6 +22611,42 @@ export const Ve33_GetPoolListDocument = new TypedDocumentString(` Ve33_GetPoolListQuery, Ve33_GetPoolListQueryVariables >; +export const Ve33_GetPoolDocument = new TypedDocumentString(` + query Ve33_getPool($where: Ve33PoolInput) { + ve33_getPool(where: $where) { + id + title + version + gaugeAddress + feeRate + apr { + fees + incentives + } + tvl + totalValueLockedUSD + totalValueLockedToken0 + totalValueLockedToken1 + volumeUSD + volumeToken0 + volumeToken1 + feesUSD + feesToken0 + feesToken1 + token0Address + token0Name + token0Symbol + token0Decimals + token1Address + token1Name + token1Symbol + token1Decimals + } +} + `) as unknown as TypedDocumentString< + Ve33_GetPoolQuery, + Ve33_GetPoolQueryVariables +>; export const FetchUserSwapOrderHistoriesDocument = new TypedDocumentString(` query FetchUserSwapOrderHistories($where: User_swapswapFilter) { user_swap_orderHistories(where: $where) { diff --git a/packages/dodoex-api/src/services/pool/graphqlQuery.ts b/packages/dodoex-api/src/services/pool/graphqlQuery.ts index 14bec24b..2eebd23c 100644 --- a/packages/dodoex-api/src/services/pool/graphqlQuery.ts +++ b/packages/dodoex-api/src/services/pool/graphqlQuery.ts @@ -525,4 +525,37 @@ export const poolGraphqlQuery = { } } `), + fetchVe33Pool: graphql(` + query Ve33_getPool($where: Ve33PoolInput) { + ve33_getPool(where: $where) { + id + title + version + gaugeAddress + feeRate + apr { + fees + incentives + } + tvl + totalValueLockedUSD + totalValueLockedToken0 + totalValueLockedToken1 + volumeUSD + volumeToken0 + volumeToken1 + feesUSD + feesToken0 + feesToken1 + token0Address + token0Name + token0Symbol + token0Decimals + token1Address + token1Name + token1Symbol + token1Decimals + } + } + `), }; diff --git a/packages/dodoex-widgets/src/components/Widget/index.tsx b/packages/dodoex-widgets/src/components/Widget/index.tsx index d799d14d..4c26f552 100644 --- a/packages/dodoex-widgets/src/components/Widget/index.tsx +++ b/packages/dodoex-widgets/src/components/Widget/index.tsx @@ -217,8 +217,7 @@ function InitStatus(props: PropsWithChildren) { flexDirection: 'column', minWidth: 335, minHeight: 494, - borderRadius: 16, - backgroundColor: 'background.paper', + backgroundColor: 'background.default', }} className={WIDGET_CLASS_NAME} ref={widgetRef} diff --git a/packages/dodoex-widgets/src/components/WidgetContainer.tsx b/packages/dodoex-widgets/src/components/WidgetContainer.tsx index 0fc7786c..846b367c 100644 --- a/packages/dodoex-widgets/src/components/WidgetContainer.tsx +++ b/packages/dodoex-widgets/src/components/WidgetContainer.tsx @@ -1,6 +1,6 @@ -import { Box, BoxProps, useTheme } from '@dodoex/components'; -import { useWidgetDevice } from '../hooks/style/useWidgetDevice'; +import { Box, BoxProps } from '@dodoex/components'; import React from 'react'; +import { useWidgetDevice } from '../hooks/style/useWidgetDevice'; export const WIDGET_MODULE_CLASS_NAME = 'widget-module-container'; @@ -9,7 +9,7 @@ const WidgetContainer = React.forwardRef(function WidgetContainer( ref: React.ForwardedRef, ) { const { isMobile } = useWidgetDevice(); - const theme = useTheme(); + return ( void; + }, +) { + const { onClickPoolListRow, ...rest } = props; return ( - - + + ); } + +export function Ve33PoolDetailWidget( + props: WidgetProps & { + id: string; + chainId: ChainId; + onClickGoBack: () => void; + }, +) { + const { id, chainId, onClickGoBack, ...rest } = props; + return ( + + + + ); +} + // For none-react project! export function InitSwapWidget(props: SwapWidgetProps) { const rootEl = document.getElementById('dodo-swap-widget'); diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx new file mode 100644 index 00000000..f2665ad8 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx @@ -0,0 +1,174 @@ +import { ChainId, PoolApi } from '@dodoex/api'; +import { Box, Skeleton, useTheme } from '@dodoex/components'; +import { useQuery } from '@tanstack/react-query'; +import { useRef } from 'react'; +import { FailedList } from '../../../components/List/FailedList'; +import WidgetContainer from '../../../components/WidgetContainer'; +import { useGraphQLRequests } from '../../../hooks/useGraphQLRequests'; +import { GoBack } from '../components/GoBack'; +import { PoolHead } from '../components/PoolHead'; +import { CardContainer } from '../components/widgets'; +import { compositePoolInfo } from '../utils'; + +export interface Ve33PoolDetailProps { + id: string; + chainId: ChainId; + onClickGoBack: () => void; +} + +export const Ve33PoolDetail = ({ + id, + chainId, + onClickGoBack, +}: Ve33PoolDetailProps) => { + const graphQLRequests = useGraphQLRequests(); + const theme = useTheme(); + + const scrollParentRef = useRef(null); + + const query = graphQLRequests.getQuery(PoolApi.graphql.fetchVe33Pool, { + where: { + pool: id, + }, + }); + const fetchResult = useQuery({ + ...query, + enabled: !!id && !!chainId, + }); + + const poolInfo = fetchResult.data?.ve33_getPool + ? compositePoolInfo(fetchResult.data.ve33_getPool, chainId) + : null; + + return ( + + + + {fetchResult.error ? ( + + ) : fetchResult.isLoading || !poolInfo ? ( + <> + + + + ) : ( + <> + + + + + + + + + a + + + b + + + + + My Assets + + + My Position + + + + {poolInfo?.title} + + + )} + + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx index 90bfa4b4..fd51d988 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx @@ -11,11 +11,10 @@ import { t, Trans } from '@lingui/macro'; import { AddressWithLinkAndCopy } from '../../../components/AddressWithLinkAndCopy'; import { TokenLogoPair } from '../../../components/TokenLogoPair'; import { WIDGET_CLASS_NAME } from '../../../components/Widget'; -import { TokenInfo } from '../../../hooks/Token/type'; import { formatApy, formatShortNumber } from '../../../utils'; import LiquidityTable from '../../PoolWidget/PoolList/components/LiquidityTable'; +import { PoolTypeTag } from '../components/PoolTypeTag'; import { OperateTypeE, Ve33PoolInfoI, Ve33PoolOperateProps } from '../types'; -import { PoolTypeTag } from './components/PoolTypeTag'; export interface TableListProps { chainId: ChainId; @@ -26,6 +25,7 @@ export interface TableListProps { hasMore?: boolean; loadMore?: () => void; loadMoreLoading?: boolean; + onClickPoolListRow: (id: string, chainId: ChainId) => void; } export const TableList = ({ @@ -37,6 +37,7 @@ export const TableList = ({ hasMore, loadMore, loadMoreLoading, + onClickPoolListRow, }: TableListProps) => { const theme = useTheme(); return ( @@ -76,22 +77,8 @@ export const TableList = ({ if (!item) { return null; } - const baseToken: TokenInfo = { - chainId, - address: item.token0Address, - name: item.token0Name, - decimals: item.token0Decimals, - symbol: item.token0Symbol, - logoURI: undefined, - }; - const quoteToken: TokenInfo = { - chainId, - address: item.token1Address, - name: item.token1Name, - decimals: item.token1Decimals, - symbol: item.token1Symbol, - logoURI: undefined, - }; + const { baseToken, quoteToken } = item; + const aprText = item.apr ? formatApy(item.apr.fees) : undefined; let operateBtnText = ''; @@ -115,6 +102,12 @@ export const TableList = ({ [`&:hover td${operateBtnText ? ', & td' : ''}`]: { backgroundImage: `linear-gradient(${hoverBg}, ${hoverBg})`, }, + cursor: 'pointer', + }} + onClick={(e) => { + if (!(e.target as HTMLElement).closest('button')) { + onClickPoolListRow(item.id, chainId); + } }} > diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx index 25d7bedd..26fc99b4 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx @@ -1,4 +1,4 @@ -import { PoolApi } from '@dodoex/api'; +import { ChainId, PoolApi } from '@dodoex/api'; import { Box, SearchInput, Switch, useTheme } from '@dodoex/components'; import { useInfiniteQuery } from '@tanstack/react-query'; import { useMemo, useRef, useState } from 'react'; @@ -7,12 +7,15 @@ import WidgetContainer from '../../../components/WidgetContainer'; import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; import { useGraphQLRequests } from '../../../hooks/useGraphQLRequests'; -import { PoolTypeE, Ve33PoolInfoI, Ve33PoolOperateProps } from '../types'; +import { Ve33PoolInfoI, Ve33PoolOperateProps } from '../types'; +import { compositePoolInfo } from '../utils'; import { TableList } from './TableList'; -export interface Ve33PoolListProps {} +export interface Ve33PoolListProps { + onClickPoolListRow: (id: string, chainId: ChainId) => void; +} -export const Ve33PoolList = (props: Ve33PoolListProps) => { +export const Ve33PoolList = ({ onClickPoolListRow }: Ve33PoolListProps) => { const { chainId } = useWalletInfo(); const { isMobile } = useWidgetDevice(); const graphQLRequests = useGraphQLRequests(); @@ -61,23 +64,18 @@ export const Ve33PoolList = (props: Ve33PoolListProps) => { fetchResult.data?.pages.forEach((page) => { page.ve33_getPoolList?.forEach((pool) => { if (pool) { - list.push({ - ...pool, - stable: false, - fee: pool.feeRate, - type: pool.version === 'v2' ? PoolTypeE.Pool : PoolTypeE.CLPool, - }); + list.push(compositePoolInfo(pool, chainId)); } }); }); return list; - }, [fetchResult.data?.pages]); + }, [chainId, fetchResult.data?.pages]); return ( { fetchResult.fetchNextPage(); } }} + onClickPoolListRow={onClickPoolListRow} /> void; +} + +export const GoBack = ({ onClick }: GoBackProps) => { + const theme = useTheme(); + + return ( + + + + + + + + + Go back + + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/components/PoolHead.tsx b/packages/dodoex-widgets/src/widgets/ve33/components/PoolHead.tsx new file mode 100644 index 00000000..027aaf6f --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/components/PoolHead.tsx @@ -0,0 +1,179 @@ +import { ChainId } from '@dodoex/api'; +import { Box, HoverOpacity, Tooltip, useTheme } from '@dodoex/components'; +import { AddressWithLinkAndCopy } from '../../../components/AddressWithLinkAndCopy'; +import { TokenLogoPair } from '../../../components/TokenLogoPair'; +import { WIDGET_CLASS_NAME } from '../../../components/Widget'; +import { Ve33PoolInfoI } from '../types'; +import { PoolTypeTag } from './PoolTypeTag'; + +export interface PoolHeadProps { + chainId: ChainId; + poolInfo: Ve33PoolInfoI; + size?: 'small' | 'medium'; +} + +export const PoolHead = ({ + chainId, + poolInfo, + size = 'medium', +}: PoolHeadProps) => { + const { baseToken, quoteToken } = poolInfo; + const theme = useTheme(); + + const isSmall = size === 'small'; + const tokenLogoWidth = isSmall ? 28 : 36; + const typography = isSmall ? 'body1' : 'h3'; + return ( + + + + + {`${baseToken.symbol}/${quoteToken.symbol}`} + + + + + + + + + + Pool Address + + + + + + Gauge Address + + + + + } + placement="top" + container={document.querySelector(`.${WIDGET_CLASS_NAME}`)} + onlyHover + sx={{ + maxWidth: 300, + }} + > + + + + + + + + + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/components/PoolTypeTag.tsx b/packages/dodoex-widgets/src/widgets/ve33/components/PoolTypeTag.tsx similarity index 88% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/components/PoolTypeTag.tsx rename to packages/dodoex-widgets/src/widgets/ve33/components/PoolTypeTag.tsx index ea99fcb8..649533d5 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/components/PoolTypeTag.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/components/PoolTypeTag.tsx @@ -1,7 +1,7 @@ import { Box, useTheme } from '@dodoex/components'; -import { PoolTypeE } from '../../types'; -import { usePoolColors } from '../../hooks/usePoolColors'; -import { formatFee } from '../../utils'; +import { usePoolColors } from '../hooks/usePoolColors'; +import { PoolTypeE } from '../types'; +import { formatFee } from '../utils'; export interface PoolTypeTagProps { type: PoolTypeE; diff --git a/packages/dodoex-widgets/src/widgets/ve33/components/widgets.tsx b/packages/dodoex-widgets/src/widgets/ve33/components/widgets.tsx new file mode 100644 index 00000000..fa4e5827 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/components/widgets.tsx @@ -0,0 +1,34 @@ +import { Box, useTheme } from '@dodoex/components'; + +export interface CardContainerProps { + title: string; + children: React.ReactNode; +} + +export const CardContainer = ({ title, children }: CardContainerProps) => { + const theme = useTheme(); + + return ( + + + {title} + + {children} + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/types.ts b/packages/dodoex-widgets/src/widgets/ve33/types.ts index fd0134a0..93840b84 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/types.ts +++ b/packages/dodoex-widgets/src/widgets/ve33/types.ts @@ -1,3 +1,4 @@ +import { TokenInfo } from '../../hooks/Token/type'; import { FetchVe33PoolList } from '../PoolWidget/utils'; export enum OperateTypeE { @@ -15,12 +16,14 @@ export enum FeeE { Volatile = 30, } -type FetchVe33PoolItem = FetchVe33PoolList[0]; +export type FetchVe33PoolItem = FetchVe33PoolList[0]; export type Ve33PoolInfoI = FetchVe33PoolItem & { stable: boolean; fee: FeeE | 0 | number; type: PoolTypeE; + baseToken: TokenInfo; + quoteToken: TokenInfo; }; export interface Ve33PoolOperateProps { diff --git a/packages/dodoex-widgets/src/widgets/ve33/utils.ts b/packages/dodoex-widgets/src/widgets/ve33/utils.ts index 77cf23be..5895cfb0 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/utils.ts +++ b/packages/dodoex-widgets/src/widgets/ve33/utils.ts @@ -1,4 +1,5 @@ -import { PoolTypeE } from './types'; +import { ChainId } from '@dodoex/api'; +import { FetchVe33PoolItem, PoolTypeE, Ve33PoolInfoI } from './types'; import { FeeE } from './types'; @@ -8,3 +9,31 @@ export const formatFee = ({ type, fee }: { type: PoolTypeE; fee: FeeE }) => { } return `${fee / 10000}%`; }; + +export function compositePoolInfo( + pool: NonNullable, + chainId: ChainId, +): Ve33PoolInfoI { + return { + ...pool, + stable: pool.title !== 'V2.Volatile', + fee: pool.feeRate, + type: pool.version === 'v2' ? PoolTypeE.Pool : PoolTypeE.CLPool, + baseToken: { + chainId, + address: pool.token0Address, + name: pool.token0Name, + decimals: pool.token0Decimals, + symbol: pool.token0Symbol, + logoURI: undefined, + }, + quoteToken: { + chainId, + address: pool.token1Address, + name: pool.token1Name, + decimals: pool.token1Decimals, + symbol: pool.token1Symbol, + logoURI: undefined, + }, + }; +} From e4614557e3916256d78e7f8c6f678e80810b3028 Mon Sep 17 00:00:00 2001 From: yrjkqq Date: Mon, 14 Apr 2025 14:54:06 +0800 Subject: [PATCH 09/18] chore: update @dodoex/widgets version to ^3.0.4-ve33.8 for improved compatibility with latest features --- packages/doc/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/doc/package.json b/packages/doc/package.json index 2293dcb9..03547279 100644 --- a/packages/doc/package.json +++ b/packages/doc/package.json @@ -9,7 +9,7 @@ "dependencies": { "@babel/runtime": "^7.17.0", "@dodoex/components": "^3.0.4-ve33.3", - "@dodoex/widgets": "workspace:*", + "@dodoex/widgets": "^3.0.4-ve33.8", "@emotion/styled": "^11.10.0", "@storybook/addon-docs": "^8.3.5", "@web3modal/ethers5": "^3.5.5", From dedfe2284066fad67df4c345bb684d70ee2cba0e Mon Sep 17 00:00:00 2001 From: JunJie Date: Tue, 13 May 2025 18:30:44 +0800 Subject: [PATCH 10/18] feat: add Ve33V2Operate comopnent --- packages/dodoex-widgets/package.json | 4 +- .../src/components/AddressWithLinkAndCopy.tsx | 39 +- .../src/hooks/Submission/types.ts | 2 + .../widgets/PoolWidget/hooks/useUniV2Pairs.ts | 11 +- .../src/widgets/ve33/Ve33PoolList/index.tsx | 107 ++++- .../ve33/Ve33PoolOperate/AddPoolOperate.tsx | 267 +++++++++++ .../Ve33PoolOperate/RemovePoolOperate.tsx | 434 ++++++++++++++++++ .../components/ComparePrice.tsx | 68 +++ .../Ve33PoolOperate/components/OperateBtn.tsx | 81 ++++ .../components/SliderPercentageCard.tsx | 84 ++++ .../components/SlippageSetting.tsx | 202 ++++++++ .../components/V2ConfirmDialog.tsx | 257 +++++++++++ .../Ve33PoolOperate/hooks/useComparePrice.ts | 62 +++ .../hooks/useLiquidityOperateAmount.ts | 148 ++++++ .../hooks/usePercentageRemove.ts | 113 +++++ .../hooks/usePoolOperateTabs.ts | 34 ++ .../hooks/useVe33V2AddLiquidity.ts | 158 +++++++ .../hooks/useVe33V2BalanceInfo.ts | 202 ++++++++ .../hooks/useVe33V2RemoveLiquidity.ts | 162 +++++++ .../Ve33PoolOperate/hooks/useWithdrawInfo.ts | 63 +++ .../widgets/ve33/Ve33PoolOperate/index.tsx | 420 +++++++++++++++++ .../src/widgets/ve33/Ve33PoolOperate/types.ts | 27 ++ .../widgets/ve33/components/PoolTypeTag.tsx | 33 +- .../dodoex-widgets/src/widgets/ve33/types.ts | 3 + .../dodoex-widgets/src/widgets/ve33/utils.ts | 1 + yarn.lock | 8 +- 26 files changed, 2937 insertions(+), 53 deletions(-) create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/OperateBtn.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/SliderPercentageCard.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/SlippageSetting.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useComparePrice.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useLiquidityOperateAmount.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/usePercentageRemove.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/usePoolOperateTabs.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2AddLiquidity.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2BalanceInfo.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2RemoveLiquidity.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useWithdrawInfo.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/index.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/types.ts diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index 9d0c572c..f4fc3c51 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -61,7 +61,7 @@ "@dodoex/api": "3.0.4-ve33.3", "@dodoex/components": "3.0.4-ve33.3", "@dodoex/contract-request": "^1.3.0", - "@dodoex/dodo-contract-request": "1.10.0-alpha.3", + "@dodoex/dodo-contract-request": "1.15.0-morph-holesky.2", "@dodoex/icons": "^2.0.2", "@emotion/react": "^11.10.0", "@emotion/styled": "^11.10.0", @@ -154,4 +154,4 @@ "ts-jest": "^29.0.1", "typescript": "^5.6.3" } -} \ No newline at end of file +} diff --git a/packages/dodoex-widgets/src/components/AddressWithLinkAndCopy.tsx b/packages/dodoex-widgets/src/components/AddressWithLinkAndCopy.tsx index 83fe7bb4..8ec8df4f 100644 --- a/packages/dodoex-widgets/src/components/AddressWithLinkAndCopy.tsx +++ b/packages/dodoex-widgets/src/components/AddressWithLinkAndCopy.tsx @@ -34,6 +34,8 @@ interface Props extends AddressTextProps { iconSpace?: number; iconDarkHover?: boolean; customChainId?: number; + disabledAddressIcon?: boolean; + children?: React.ReactNode; onAddressClick?: ( event: React.MouseEvent, ) => void; @@ -109,7 +111,9 @@ export function AddressWithLinkAndCopy({ disabledAddress, addressHoverColor, addressHoverShowIcon, + disabledAddressIcon, customChainId, + children, handleOpen, onAddressClick, }: Props) { @@ -167,24 +171,26 @@ export function AddressWithLinkAndCopy({ addressHoverShowIcon={addressHoverShowIcon} /> - { - handleOpenResult(evt, 'icon'); - }} - > - - + onClick={(evt) => { + handleOpenResult(evt, 'icon'); + }} + > + + + )} {showCopy ? ( ) : null} + {children} ); } diff --git a/packages/dodoex-widgets/src/hooks/Submission/types.ts b/packages/dodoex-widgets/src/hooks/Submission/types.ts index 148daa61..4ea5ea04 100644 --- a/packages/dodoex-widgets/src/hooks/Submission/types.ts +++ b/packages/dodoex-widgets/src/hooks/Submission/types.ts @@ -30,6 +30,8 @@ export enum MetadataFlag { submissionCreateMetaKey = 'submissionCreateMetaKey', approve = 'approve', reset = 'reset', + addLiquidityVe33V2Position = 'addLiquidityVe33V2Position', + removeLiquidityVe33V2Position = 'removeLiquidityVe33V2Position', } export type Metadata = Record; diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/useUniV2Pairs.ts b/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/useUniV2Pairs.ts index b7f0e2c3..19d7a731 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/useUniV2Pairs.ts +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/hooks/useUniV2Pairs.ts @@ -8,6 +8,7 @@ import { Pair } from '@uniswap/v2-sdk'; import BigNumber from 'bignumber.js'; import { byWei, formatReadableNumber, toWei } from '../../../utils'; import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; +import JSBI from 'jsbi'; export function useUniV2Pairs({ pool, @@ -147,7 +148,15 @@ export function useUniV2Pairs({ } const pair = new Pair(currencyAAmount, currencyBAmount); if (currencyAAmount.equalTo(0) || currencyBAmount.equalTo(0)) - return [pair, null]; + return [ + pair, + new Price( + currencyAAmount.currency, + currencyBAmount.currency, + JSBI.BigInt(1), + JSBI.BigInt(1), + ), + ]; const value = currencyBAmount.divide(currencyAAmount); const price = new Price( currencyAAmount.currency, diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx index 26fc99b4..88dbc73c 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx @@ -10,13 +10,16 @@ import { useGraphQLRequests } from '../../../hooks/useGraphQLRequests'; import { Ve33PoolInfoI, Ve33PoolOperateProps } from '../types'; import { compositePoolInfo } from '../utils'; import { TableList } from './TableList'; +import PoolOperateDialog, { PoolOperate } from '../Ve33PoolOperate'; export interface Ve33PoolListProps { onClickPoolListRow: (id: string, chainId: ChainId) => void; } export const Ve33PoolList = ({ onClickPoolListRow }: Ve33PoolListProps) => { - const { chainId } = useWalletInfo(); + // TODO: need replace + const chainId = ChainId.MORPH_HOLESKY_TESTNET; + const { account } = useWalletInfo(); const { isMobile } = useWidgetDevice(); const graphQLRequests = useGraphQLRequests(); const theme = useTheme(); @@ -24,7 +27,57 @@ export const Ve33PoolList = ({ onClickPoolListRow }: Ve33PoolListProps) => { const [filterToken, setFilterToken] = useState(''); const [usdValueChecked, setUsdValueChecked] = useState(false); const [operatePool, setOperatePool] = useState( - null, + // null, + { + poolInfo: { + id: '0x98ecc0d3f774a7bda38918bf5830a476dd5a606c', + title: 'V2.Volatile', + version: 'v2', + gaugeAddress: '0x7b156830fdbc76d327a48a19b0143663e16a95ba', + feeRate: '30', + apr: { + fees: '0', + incentives: '0', + }, + tvl: '0', + totalValueLockedUSD: '0', + totalValueLockedToken0: '0', + totalValueLockedToken1: '0', + volumeUSD: '0', + volumeToken0: '0', + volumeToken1: '0', + feesUSD: '0', + feesToken0: '0', + feesToken1: '0', + token0Address: '0x42edf453f8483c7168c158d28d610a58308517d1', + token0Name: 'Momodrome', + token0Symbol: 'MOMO', + token0Decimals: 18, + token1Address: '0x5300000000000000000000000000000000000011', + token1Name: 'Wrapped Ether', + token1Symbol: 'WETH', + token1Decimals: 18, + chainId: 2810, + stable: false, + fee: '30', + type: 1, + baseToken: { + chainId: 2810, + address: '0x42edf453f8483c7168c158d28d610a58308517d1', + name: 'Momodrome', + decimals: 18, + symbol: 'MOMO', + }, + quoteToken: { + chainId: 2810, + address: '0x5300000000000000000000000000000000000011', + name: 'Wrapped Ether', + decimals: 18, + symbol: 'WETH', + }, + }, + operateType: 1, + }, ); const scrollParentRef = useRef(null); @@ -43,18 +96,19 @@ export const Ve33PoolList = ({ onClickPoolListRow }: Ve33PoolListProps) => { ...query, initialPageParam: 1, getNextPageParam: (item) => { - const { currentPage, totalCount, pageSize } = item.ve33_getPoolList ?? {}; - if (!currentPage || !totalCount || !pageSize) { - return null; - } - let totalPage = Math.floor(totalCount / pageSize); - if (totalCount % pageSize) { - totalPage += 1; - } - if (currentPage >= totalPage) { - return null; - } - return currentPage + 1; + return null; + // const { currentPage, totalCount, pageSize } = item.ve33_getPoolList ?? {}; + // if (!currentPage || !totalCount || !pageSize) { + // return null; + // } + // let totalPage = Math.floor(totalCount / pageSize); + // if (totalCount % pageSize) { + // totalPage += 1; + // } + // if (currentPage >= totalPage) { + // return null; + // } + // return currentPage + 1; }, }); @@ -172,7 +226,30 @@ export const Ve33PoolList = ({ onClickPoolListRow }: Ve33PoolListProps) => { width: 375, }} > - {operatePool.poolInfo?.title ?? '-'} + {isMobile ? ( + setOperatePool(null)} + modal={isMobile} + pool={operatePool?.poolInfo} + operate={operatePool.operateType} + /> + ) : ( + setOperatePool(null)} + modal={isMobile} + pool={operatePool?.poolInfo} + operate={operatePool.operateType} + sx={{ + width: 375, + height: 'max-content', + backgroundColor: 'background.paper', + borderRadius: 16, + overflow: 'hidden', + }} + /> + )} )} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx new file mode 100644 index 00000000..7c9d9401 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx @@ -0,0 +1,267 @@ +import { Box, Button, LoadingSkeleton } from '@dodoex/components'; +import { useWeb3React } from '@web3-react/core'; +import React from 'react'; +import { + CardPlus, + TokenCard, +} from '../../../components/Swap/components/TokenCard'; +import { useLiquidityOperateAmount } from './hooks/useLiquidityOperateAmount'; +import SlippageSetting, { useSlipper } from './components/SlippageSetting'; +import ComparePrice from './components/ComparePrice'; +import OperateBtn from './components/OperateBtn'; +import { useTokenStatus } from '../../../hooks/Token/useTokenStatus'; +import { t } from '@lingui/macro'; +import { useComparePrice } from './hooks/useComparePrice'; +import Confirm from '../../../components/Confirm'; +import ErrorMessageDialog from '../../../components/ErrorMessageDialog'; +import { usePrevious } from '../../MiningWidget/hooks/usePrevious'; +import { Ve33PoolInfoI } from '../types'; +import { useVe33AddLiquidity } from './hooks/useVe33V2AddLiquidity'; +import V2ConfirmDialog from './components/V2ConfirmDialog'; +import { getVE33V2RouterContractAddressByChainId } from '@dodoex/dodo-contract-request'; +import BigNumber from 'bignumber.js'; + +export function AddPoolOperate({ + submittedBack: submittedBackProps, + onlyShowSide, + pool, +}: { + submittedBack?: () => void; + onlyShowSide?: 'base' | 'quote'; + pool?: Ve33PoolInfoI; +}) { + const { account } = useWeb3React(); + const { + baseAmount, + quoteAmount, + handleChangeBaseAmount, + handleChangeQuoteAmount, + + midPrice, + amountLoading, + amountCheckedDisabled, + balanceInfo, + + reset, + } = useLiquidityOperateAmount({ + pool, + }); + const [showConfirmAMMV2, setShowConfirmAMMV2] = React.useState(false); + const { slipper, setSlipper, slipperValue, resetSlipper } = useSlipper({ + type: pool?.type, + }); + + const prevPool = usePrevious(pool); + React.useEffect(() => { + if (pool?.id !== prevPool?.id) { + reset(); + resetSlipper(); + } + }, [pool]); + + const canOperate = Boolean(pool && account); + const [showCompareConfirm, setShowCompareConfirm] = React.useState(false); + const { isShowCompare, lqAndDodoCompareText, isWarnCompare } = + useComparePrice(pool?.baseToken, pool?.quoteToken, midPrice); + + const proxyContract = pool + ? getVE33V2RouterContractAddressByChainId(pool?.chainId) + : undefined; + const baseTokenStatus = useTokenStatus(pool?.baseToken, { + amount: baseAmount, + contractAddress: proxyContract, + }); + const quoteTokenStatus = useTokenStatus(pool?.quoteToken, { + amount: quoteAmount, + contractAddress: proxyContract, + }); + + const loading = balanceInfo.userLpToTokenBalanceLoading; + + const isOverBalance = + baseTokenStatus.insufficientBalance || quoteTokenStatus.insufficientBalance; + const disabled = + !pool || + isOverBalance || + !midPrice || + amountCheckedDisabled || + loading || + !!balanceInfo.userLpToTokenBalanceErrorRefetch; + + let submitBtnText = t`Add`; + if (isOverBalance) { + submitBtnText = t`Insufficient balance`; + } + const submittedBack = () => { + reset(); + resetSlipper(); + if (submittedBackProps) { + submittedBackProps(); + } + }; + const submitLq = () => { + setShowConfirmAMMV2(true); + }; + + const operateLiquidityMutation = useVe33AddLiquidity({ + baseToken: pool?.baseToken, + quoteToken: pool?.quoteToken, + baseAmount, + quoteAmount, + stable: !!pool?.stable, + fee: pool?.fee, + slippage: slipperValue, + submittedBack: () => { + submittedBack(); + setShowConfirmAMMV2(false); + }, + successBack: () => { + balanceInfo.refetch(); + }, + }); + + return ( + <> + + {onlyShowSide === 'quote' ? ( + '' + ) : ( + + )} + {onlyShowSide ? '' : } + {onlyShowSide === 'base' ? ( + '' + ) : ( + + )} + + + + + {/* footer */} + + {isShowCompare && ( + + )} + {pool ? ( + + + + ) : ( + + )} + + setShowCompareConfirm(false)} + title={t`Confirm submission`} + onConfirm={submitLq} + modal + > + + + {t`Price discrepancy ${lqAndDodoCompareText} between liquidity pool and the quote price on DODO.`} + + + {t`There is risk of being arbitraged if adding this liquidity.`} + + + + operateLiquidityMutation.reset()} + /> + {!!pool && ( + setShowConfirmAMMV2(false)} + slippage={slipperValue} + baseToken={pool.baseToken} + baseAmount={baseAmount} + quoteToken={pool.quoteToken} + quoteAmount={quoteAmount} + fee={pool.fee} + price={ + balanceInfo.price + ? new BigNumber(balanceInfo.price.toSignificant()) + : undefined + } + lpAmount={balanceInfo?.liquidityMinted} + shareOfPool={balanceInfo?.shareOfPool} + pairAddress={pool.id} + createMutation={operateLiquidityMutation} + /> + )} + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx new file mode 100644 index 00000000..df474a5f --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx @@ -0,0 +1,434 @@ +import { basicTokenMap, ChainId } from '@dodoex/api'; +import { Box, Button, LoadingSkeleton, Select } from '@dodoex/components'; +import { useWeb3React } from '@web3-react/core'; +import React from 'react'; +import { useLiquidityOperateAmount } from './hooks/useLiquidityOperateAmount'; +import SlippageSetting, { useSlipper } from './components/SlippageSetting'; +import ComparePrice from './components/ComparePrice'; +import OperateBtn from './components/OperateBtn'; +import { t, Trans } from '@lingui/macro'; +import { useComparePrice } from './hooks/useComparePrice'; +import Confirm from '../../../components/Confirm'; +import { + initSliderPercentage, + RemoveMode, + usePercentageRemove, +} from './hooks/usePercentageRemove'; +import { SliderPercentageCard } from './components/SliderPercentageCard'; +import { toWei } from '../../../utils'; +import { TokenInfo } from '../../../hooks/Token'; +import { usePrevious } from '../../MiningWidget/hooks/usePrevious'; +import { Ve33PoolInfoI } from '../types'; +import { useWithdrawInfo } from './hooks/useWithdrawInfo'; +import { useVe33V2BalanceInfo } from './hooks/useVe33V2BalanceInfo'; +import { useVe33RemoveLiquidity } from './hooks/useVe33V2RemoveLiquidity'; +import { useTokenStatus } from '../../../hooks/Token/useTokenStatus'; +import { getVE33V2RouterContractAddressByChainId } from '@dodoex/dodo-contract-request'; + +export function RemovePoolOperate({ + submittedBack: submittedBackProps, + pool, +}: { + submittedBack?: () => void; + pool?: Ve33PoolInfoI; +}) { + const { account } = useWeb3React(); + + const balanceInfo = useVe33V2BalanceInfo({ + pool, + account, + }); + + const baseOverride = balanceInfo.userLpToToken0; + const quoteOverride = balanceInfo.userLpToToken1; + const overrideBalanceLoading = balanceInfo.userLpToTokenBalanceLoading; + + const { slipper, setSlipper, slipperValue, resetSlipper } = useSlipper({ + type: pool?.type, + }); + + const { + baseAmount, + quoteAmount, + handleChangeBaseAmount: handleChangeBaseAmountOrigin, + handleChangeQuoteAmount: handleChangeQuoteAmountOrigin, + + addPortion, + midPrice, + amountLoading, + amountCheckedDisabled, + + reset, + } = useLiquidityOperateAmount({ + pool, + maxBaseAmount: baseOverride, + maxQuoteAmount: quoteOverride, + }); + const [baseAmountDelay, setBaseAmountDelay] = React.useState(''); + const [quoteAmountDelay, setQuoteAmountDelay] = React.useState(''); + React.useEffect(() => { + const time = setTimeout(() => { + setBaseAmountDelay(baseAmount); + }, 80); + return () => clearTimeout(time); + }, [baseAmount]); + React.useEffect(() => { + const time = setTimeout(() => { + setQuoteAmountDelay(quoteAmount); + }, 80); + return () => clearTimeout(time); + }, [quoteAmount]); + const handleChangeBaseAmount = (amount: string) => { + handleChangeBaseAmountOrigin(amount); + }; + const handleChangeQuoteAmount = (amount: string) => { + handleChangeQuoteAmountOrigin(amount); + }; + + const basicToken = pool?.chainId + ? basicTokenMap[pool.chainId as ChainId] + : undefined; + const basicAddressLow = basicToken?.address?.toLowerCase(); + const basicWrappedAddressLow = basicToken?.wrappedTokenAddress?.toLowerCase(); + const isBaseEther = + !!pool && + [basicAddressLow, basicWrappedAddressLow].includes( + pool.baseToken.address.toLowerCase(), + ); + const isQuoteEther = + !!pool && + [basicAddressLow, basicWrappedAddressLow].includes( + pool.quoteToken.address.toLowerCase(), + ); + const canWithdrawBasicToken = pool && (isBaseEther || isQuoteEther); + const [receiveWrapped, setReceiveWrapped] = React.useState(false); + + const withdrawBaseToken = + canWithdrawBasicToken && isBaseEther && !receiveWrapped && basicToken + ? pool + ? { + ...pool.baseToken, + symbol: basicToken.symbol, + address: basicToken.address, + } + : undefined + : pool?.baseToken; + const withdrawQuoteToken = + canWithdrawBasicToken && isQuoteEther && !receiveWrapped && basicToken + ? pool + ? { + ...pool.quoteToken, + symbol: basicToken.symbol, + address: basicToken.address, + } + : undefined + : pool?.quoteToken; + + const withdrawInfo = useWithdrawInfo({ + pool: pool + ? { + chainId: pool.chainId, + address: pool.id, + baseToken: withdrawBaseToken as TokenInfo, + quoteToken: withdrawQuoteToken as TokenInfo, + } + : pool, + baseAmount: baseAmountDelay, + quoteAmount: quoteAmountDelay, + }); + + const { + mode, + modeOptions, + handleChangeMode, + + sliderPercentage, + handleChangeSliderPercentage, + + // resetPercentage, + } = usePercentageRemove({ + pool, + baseOverride, + quoteOverride, + resetAmount: reset, + handleChangeBaseAmount, + handleChangeQuoteAmount, + }); + + const prevPool = usePrevious(pool); + React.useEffect(() => { + if (pool?.id !== prevPool?.id) { + reset(); + resetSlipper(); + handleChangeMode(RemoveMode.percentage); + handleChangeSliderPercentage(initSliderPercentage); + } + }, [pool]); + React.useEffect(() => { + if (mode === RemoveMode.percentage) { + handleChangeSliderPercentage(sliderPercentage); + } + }, [baseOverride?.toString(), quoteOverride?.toString()]); + + const canOperate = Boolean(pool && account); + const [showCompareConfirm, setShowCompareConfirm] = React.useState(false); + const { isShowCompare, lqAndDodoCompareText, isWarnCompare } = + useComparePrice(pool?.baseToken, pool?.quoteToken, midPrice); + + const proxyContract = pool + ? getVE33V2RouterContractAddressByChainId(pool?.chainId) + : undefined; + const lpTokenStatus = useTokenStatus( + pool?.baseToken + ? { + ...pool.baseToken, + decimals: 18, + symbol: `${pool.baseToken.symbol}/${pool.quoteToken?.symbol} LP`, + address: pool?.id, + } + : undefined, + { + amount: balanceInfo.userLp, + contractAddress: proxyContract, + skipQuery: !proxyContract, + }, + ); + const isOverBalance = lpTokenStatus.insufficientBalance; + const disabled = + !pool || + isOverBalance || + !midPrice || + balanceInfo.userLpToTokenBalanceLoading || + amountCheckedDisabled || + !!withdrawInfo.receiveAmountBg?.lte(0); + + const submitBtnText = isOverBalance ? t`Insufficient balance` : t`Remove`; + + const submittedBack = () => { + reset(); + resetSlipper(); + if (submittedBackProps) { + submittedBackProps(); + } + }; + const liquidityDecimals = 18; + const liquidityAmountBg = balanceInfo.userLp?.times(sliderPercentage / 100); + const liquidityAmountWei = + liquidityAmountBg && liquidityDecimals !== undefined + ? toWei(liquidityAmountBg, liquidityDecimals).toString() + : ''; + const removeLiquidityMutataion = useVe33RemoveLiquidity({ + baseToken: withdrawBaseToken, + quoteToken: withdrawQuoteToken, + baseAmount, + quoteAmount, + liquidityAmount: liquidityAmountWei, + slippage: slipperValue, + stable: !!pool?.stable, + submittedBack, + successBack: () => { + balanceInfo.refetch(); + }, + }); + const submitLq = () => { + return removeLiquidityMutataion.mutate(); + }; + + return ( + <> + + + + + + + {canWithdrawBasicToken && ( + setReceiveWrapped((prev) => !prev)} + > + + Receive{' '} + {receiveWrapped + ? basicToken?.symbol + : basicToken?.wrappedTokenSymbol} + + + )} + + + + {!!pool && ( + + + Receive + + + {withdrawInfo.receiveList.map((receive, index) => ( + 0 ? 4 : 0, + }} + > + + {receive.amount}  + + + {receive.symbol} + + + ))} + + + )} + + {/* footer */} + + {isShowCompare && ( + + )} + {pool ? ( + + + + ) : ( + + )} + + setShowCompareConfirm(false)} + title={t`Confirm submission`} + onConfirm={submitLq} + modal + > + + + {t`Price discrepancy ${lqAndDodoCompareText} between liquidity pool and the quote price on DODO.`} + + + {t`There is risk of being arbitraged if adding this liquidity.`} + + + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx new file mode 100644 index 00000000..9de71805 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx @@ -0,0 +1,68 @@ +import { Box } from '@dodoex/components'; +import { Alarm } from '@dodoex/icons'; +import { t } from '@lingui/macro'; +import { Trans } from '@lingui/macro'; +import BigNumber from 'bignumber.js'; +import React from 'react'; +import { TokenInfo } from '../../../../hooks/Token'; +import { formatReadableNumber } from '../../../../utils/formatter'; + +export default function ComparePrice({ + lqAndDodoCompareText, + baseToken, + quoteToken, + midPrice, +}: { + lqAndDodoCompareText: string; + baseToken?: TokenInfo; + quoteToken?: TokenInfo; + midPrice?: BigNumber; +}) { + const midPriceText = midPrice + ? formatReadableNumber({ input: midPrice }) + : ''; + + return ( + + + + {t`${lqAndDodoCompareText} Price Difference`} + + + Current liquidity pool token price + {` 1 ${baseToken?.symbol} = ${midPriceText} ${ + quoteToken?.symbol + } ${t`differs from the price quoted by DODO by ${lqAndDodoCompareText}`}`} + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/OperateBtn.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/OperateBtn.tsx new file mode 100644 index 00000000..657b0a61 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/OperateBtn.tsx @@ -0,0 +1,81 @@ +import { Button, Box } from '@dodoex/components'; +import { Trans } from '@lingui/macro'; +import { useWeb3React } from '@web3-react/core'; +import NeedConnectButton from '../../../../components/ConnectWallet/NeedConnectButton'; +import TokenStatusButton from '../../../../components/TokenStatusButton'; +import { useInflights } from '../../../../hooks/Submission'; +import { MetadataFlag } from '../../../../hooks/Submission/types'; +import { useTokenStatus } from '../../../../hooks/Token/useTokenStatus'; + +export default function OperateBtn({ + chainId, + baseTokenStatus, + quoteTokenStatus, + children, +}: React.PropsWithChildren<{ + chainId: number; + baseTokenStatus?: ReturnType; + quoteTokenStatus?: ReturnType; +}>) { + const updateBalanceLoading = false; + + const { runningRequests } = useInflights(); + const { account, chainId: currentChainId } = useWeb3React(); + + if (!account || chainId !== currentChainId) { + return ; + } + + const isPending = runningRequests.some( + (request) => + request.metadata?.[MetadataFlag.addLiquidity] || + request.metadata?.[MetadataFlag.removeLiquidity], + ); + const buttons: JSX.Element[] = []; + if (baseTokenStatus?.needShowTokenStatusButton) { + buttons.push(); + } + if ( + quoteTokenStatus?.needShowTokenStatusButton && + !baseTokenStatus?.isApproving + ) { + buttons.push(); + } + + const len = buttons.length; + if (len === 2) { + return ( + button': { + flex: 1, + '&:last-child': { + ml: 8, + }, + }, + }} + > + {buttons.map((item) => item)} + + ); + } + if (len === 1) { + return buttons[0]; + } + if (isPending) { + return ( + + ); + } + if (updateBalanceLoading) { + return ( + + ); + } + return <>{children}; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/SliderPercentageCard.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/SliderPercentageCard.tsx new file mode 100644 index 00000000..1a7179a8 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/SliderPercentageCard.tsx @@ -0,0 +1,84 @@ +import { Box, BoxProps, Slider } from '@dodoex/components'; +import { NumberInput } from '../../../../components/Swap/components/TokenCard/NumberInput'; + +const marks = [ + { + value: 0, + label: '0%', + }, + { + value: 25, + label: '25%', + }, + { + value: 50, + label: '50%', + }, + { + value: 75, + label: '75%', + }, + { + value: 100, + label: '100%', + }, +]; + +export function SliderPercentageCard({ + disabled, + value, + onChange, + sx, +}: { + disabled?: boolean; + value: number; + onChange: (val: number) => void; + sx?: BoxProps['sx']; +}) { + return ( + + onChange(+str)} + readOnly + readonlyShowSuffix + suffix={ + + % + + } + sx={{ + mt: 12, + '& input': { + pl: 0, + typography: 'h1', + }, + }} + /> + + onChange(newVal as number)} + /> + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/SlippageSetting.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/SlippageSetting.tsx new file mode 100644 index 00000000..121cf58c --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/SlippageSetting.tsx @@ -0,0 +1,202 @@ +import { + Box, + BoxProps, + HoverAddBackground, + Input, + Tooltip, + useTheme, +} from '@dodoex/components'; +import { Setting } from '@dodoex/icons'; +import { Trans } from '@lingui/macro'; +import BigNumber from 'bignumber.js'; +import { ChangeEvent, useMemo, useState } from 'react'; +import { AutoButton } from '../../../../components/AutoButton'; +import { + AUTO_AMM_V2_LIQUIDITY_SLIPPAGE_PROTECTION, + AUTO_AMM_V3_LIQUIDITY_SLIPPAGE_PROTECTION, + AUTO_LIQUIDITY_SLIPPAGE_PROTECTION, + AUTO_SWAP_SLIPPAGE_PROTECTION, +} from '../../../../constants/pool'; +import { PoolTypeE } from '../../types'; + +export const useSlipper = ({ type }: { type?: PoolTypeE }) => { + const [slipper, setSlipper] = useState< + number | typeof AUTO_SWAP_SLIPPAGE_PROTECTION + >(AUTO_SWAP_SLIPPAGE_PROTECTION); + + const slipperValue = useMemo( + () => + slipper === AUTO_SWAP_SLIPPAGE_PROTECTION + ? type === PoolTypeE.CLPool + ? new BigNumber(AUTO_AMM_V3_LIQUIDITY_SLIPPAGE_PROTECTION) + .div(100) + .toNumber() + : new BigNumber(AUTO_AMM_V2_LIQUIDITY_SLIPPAGE_PROTECTION) + .div(100) + .toNumber() + : slipper, + [slipper, type], + ); + + const resetSlipper = () => { + setSlipper(AUTO_SWAP_SLIPPAGE_PROTECTION); + }; + + return { + slipper, + setSlipper, + slipperValue, + resetSlipper, + }; +}; + +export default function SlippageSetting({ + type, + disabled, + value, + onChange, + sx, +}: { + type?: PoolTypeE; + disabled?: boolean; + value: number | typeof AUTO_SWAP_SLIPPAGE_PROTECTION; + onChange: (val: number | typeof AUTO_SWAP_SLIPPAGE_PROTECTION) => void; + sx?: BoxProps['sx']; +}) { + const theme = useTheme(); + const isAuto = value === AUTO_SWAP_SLIPPAGE_PROTECTION; + const [tempValue, setTempValue] = useState( + isAuto ? '' : new BigNumber(value).times(100).toNumber(), + ); + + const handleChange = (evt: ChangeEvent) => { + const { value: val } = evt.target; + setTempValue(val); + onChange( + val + ? new BigNumber(val).div(100).toNumber() + : AUTO_SWAP_SLIPPAGE_PROTECTION, + ); + }; + + const autoValue = + type === PoolTypeE.CLPool + ? AUTO_AMM_V3_LIQUIDITY_SLIPPAGE_PROTECTION + : AUTO_AMM_V2_LIQUIDITY_SLIPPAGE_PROTECTION; + + return ( + + + + Slippage Tolerance + + + {isAuto + ? autoValue + : value && new BigNumber(value).times(100).toNumber()} + % + + + + { + setTempValue(''); + onChange(AUTO_SWAP_SLIPPAGE_PROTECTION); + }} + active={isAuto} + /> + { + if ( + (!isAuto && new BigNumber(value).gt(0.1)) || + new BigNumber(value).lte(0) + ) { + setTempValue(10); + onChange(0.1); + } + }} + suffix={ + + % + + } + sx={{ + ml: 8, + '& input': { + px: 16, + py: 0, + height: '39px', + }, + }} + /> + + + } + sx={{ + p: 0, + }} + arrow={false} + placement="bottom-end" + > + + + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx new file mode 100644 index 00000000..eb08c8dd --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx @@ -0,0 +1,257 @@ +import BigNumber from 'bignumber.js'; +import { alpha, Box, Button, useTheme } from '@dodoex/components'; +import { Trans } from '@lingui/macro'; +import { TokenInfo } from '../../../../hooks/Token'; +import { useWidgetDevice } from '../../../../hooks/style/useWidgetDevice'; +import Dialog from '../../../../components/Dialog'; +import { TokenLogoPair } from '../../../../components/TokenLogoPair'; +import { + formatPercentageNumber, + formatTokenAmountNumber, +} from '../../../../utils'; +import { PoolTypeTag } from '../../components/PoolTypeTag'; +import { PoolTypeE } from '../../types'; +import SpaceBetweenItem from '../../../../components/SpaceBetweenItem'; +import TokenLogo from '../../../../components/TokenLogo'; +import { RatioPrice } from '../../../PoolWidget/AMMV2Create/Ratio'; +import { AddressWithLinkAndCopy } from '../../../../components/AddressWithLinkAndCopy'; +import { useVe33AddLiquidity } from '../hooks/useVe33V2AddLiquidity'; + +export default function V2ConfirmDialog({ + open, + onClose, + slippage, + baseToken, + quoteToken, + baseAmount, + quoteAmount, + lpAmount, + fee, + price, + shareOfPool, + pairAddress, + stable, + createMutation, +}: { + open: boolean; + onClose: () => void; + slippage: number; + baseToken?: TokenInfo; + quoteToken?: TokenInfo; + baseAmount: string; + quoteAmount: string; + lpAmount: BigNumber | undefined; + fee: number | undefined; + price?: BigNumber | null; + shareOfPool?: string; + pairAddress?: string; + stable?: boolean; + createMutation: ReturnType; +}) { + const theme = useTheme(); + const { isMobile } = useWidgetDevice(); + return ( + You will receive + ) : ( + You are creating a pool + ) + } + > + + + + + {lpAmount + ? formatTokenAmountNumber({ + input: lpAmount, + decimals: 18, + }) + : ''} + + + + + {baseToken?.symbol}/{quoteToken?.symbol} Pool Tokens + + {stable !== undefined && fee !== undefined && ( + + )} + + + + + + Output is estimated. If the price changes by more than{' '} + {formatPercentageNumber({ input: slippage })} your transaction will + revert. + + + + + {baseToken?.symbol} deposited} + > + + + {formatTokenAmountNumber({ + input: baseAmount, + decimals: baseToken?.decimals, + })} + + + + {quoteToken?.symbol} deposited} + > + + + {formatTokenAmountNumber({ + input: quoteAmount, + decimals: quoteToken?.decimals, + })} + + + + Fee tier}> + {formatPercentageNumber({ + input: fee ? fee / 10000 : fee, + })} + + + Rate}> + + + + + + + Share of pool}> + {shareOfPool} + + + Pool address}> + + + + + + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useComparePrice.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useComparePrice.ts new file mode 100644 index 00000000..0906c5ef --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useComparePrice.ts @@ -0,0 +1,62 @@ +import { useMemo } from 'react'; +import BigNumber from 'bignumber.js'; +import { TokenInfo } from '../../../../hooks/Token'; +import { useFetchFiatPrice } from '../../../../hooks/Swap'; +import { formatShortNumber, getTokenPairCompareText } from '../../../../utils'; + +export function useDODOPrice({ + baseToken, + quoteToken, +}: { + baseToken?: TokenInfo; + quoteToken?: TokenInfo; +}) { + const { toFiatPrice, fromFiatPrice } = useFetchFiatPrice({ + fromToken: baseToken ?? null, + toToken: quoteToken ?? null, + }); + return getTokenPairCompareText({ + fromToken: baseToken, + toToken: quoteToken, + fromFiatPrice: fromFiatPrice ? new BigNumber(fromFiatPrice) : undefined, + toFiatPrice: toFiatPrice ? new BigNumber(toFiatPrice) : undefined, + }); +} + +export const lqAndDodoCompareSmallNum = 0.01; +export const lqAndDodoCompareWarningNum = 0.03; + +export const useComparePrice = ( + baseToken?: TokenInfo, + quoteToken?: TokenInfo, + midPrice?: BigNumber, +) => { + const { comparePrice } = useDODOPrice({ + baseToken, + quoteToken, + }); + + const lqAndDodoCompare = useMemo(() => { + if ( + !midPrice || + !comparePrice || + !comparePrice.toNumber() || + !midPrice.toNumber() + ) + return 0; + const difference = comparePrice.minus(midPrice); + return Math.abs(difference.div(comparePrice).toNumber()); + }, [midPrice, comparePrice]); + + const lqAndDodoCompareText = useMemo(() => { + return `${formatShortNumber(new BigNumber(lqAndDodoCompare).times(100))}%`; + }, [lqAndDodoCompare]); + + return { + lqAndDodoCompare, + lqAndDodoCompareText, + midPrice, + isShowCompare: lqAndDodoCompare > lqAndDodoCompareSmallNum, + isWarnCompare: lqAndDodoCompare > lqAndDodoCompareWarningNum, + }; +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useLiquidityOperateAmount.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useLiquidityOperateAmount.ts new file mode 100644 index 00000000..792a31de --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useLiquidityOperateAmount.ts @@ -0,0 +1,148 @@ +import BigNumber from 'bignumber.js'; +import React from 'react'; +import { fixedInputStringToFormattedNumber } from '../../../../utils/formatter'; +import { Ve33PoolInfoI } from '../../types'; +import { useVe33V2BalanceInfo } from './useVe33V2BalanceInfo'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; + +export function useLiquidityOperateAmount({ + pool, + maxBaseAmount, + maxQuoteAmount, + isRemove, +}: { + pool?: Ve33PoolInfoI; + maxBaseAmount?: BigNumber | null; + maxQuoteAmount?: BigNumber | null; + isRemove?: boolean; +}) { + const [baseAmount, setBaseAmount] = React.useState(''); + const [quoteAmount, setQuoteAmount] = React.useState(''); + + const reset = () => { + setBaseAmount(''); + setQuoteAmount(''); + }; + + let midPrice: undefined | BigNumber; + let addPortion = new BigNumber(NaN); + const { account } = useWalletInfo(); + const balanceInfo = useVe33V2BalanceInfo({ + account, + pool, + }); + if (pool) { + if (balanceInfo.price) { + midPrice = balanceInfo.isRearTokenA + ? new BigNumber(balanceInfo.price?.invert().toSignificant()) + : new BigNumber(balanceInfo.price?.toSignificant()); + } + addPortion = midPrice || new BigNumber(1); + } + + const prevAddPortion = React.useRef(addPortion); + + if (!pool || addPortion.isNaN()) + return { + baseAmount, + quoteAmount, + handleChangeBaseAmount: () => {}, + handleChangeQuoteAmount: () => {}, + reset, + balanceInfo, + }; + + const needBindAmountChange = true; + const baseDecimals = pool.baseToken.decimals; + const quoteDecimals = pool.quoteToken.decimals; + + const changeQuoteByBaseAmount = (amount: string) => { + if (amount) { + let matchQuoteAmount = addPortion + .multipliedBy(amount) + .dp(quoteDecimals) + .toString(); + if ( + maxQuoteAmount && + isRemove && + (maxQuoteAmount.lte(matchQuoteAmount) || maxBaseAmount?.lte(0)) + ) { + matchQuoteAmount = maxQuoteAmount.toString(); + } + setQuoteAmount(matchQuoteAmount); + } else { + setQuoteAmount(amount); + } + }; + + const changeBaseByQuoteAmount = (amount: string) => { + if (amount) { + let matchBaseAmount = new BigNumber(amount) + .div(addPortion) + .dp(baseDecimals) + .toString(); + if ( + maxBaseAmount && + isRemove && + (maxBaseAmount.lte(matchBaseAmount) || maxQuoteAmount?.lte(0)) + ) { + matchBaseAmount = maxBaseAmount.toString(); + } + setBaseAmount(matchBaseAmount); + } else { + setBaseAmount(amount); + } + }; + + // After the data on the chain changes, change quoteAmount + if ( + needBindAmountChange && + (!prevAddPortion.current || !addPortion.isEqualTo(prevAddPortion.current)) + ) { + prevAddPortion.current = addPortion; + changeQuoteByBaseAmount(baseAmount); + } + + const handleChangeBaseAmount = (newValue: string) => { + let amount = fixedInputStringToFormattedNumber(newValue, baseDecimals); + if (amount === null) { + amount = baseAmount; + } + setBaseAmount(amount); + if (needBindAmountChange) { + changeQuoteByBaseAmount(amount); + } + }; + + const handleChangeQuoteAmount = (newValue: string) => { + let amount = fixedInputStringToFormattedNumber(newValue, quoteDecimals); + if (amount === null) { + amount = quoteAmount; + } + setQuoteAmount(amount); + if (needBindAmountChange) { + changeBaseByQuoteAmount(amount); + } + }; + + const amountCheckedDisabled = !baseAmount || !quoteAmount; + + const amountStatusQuery = balanceInfo.reserveQuery; + + return { + baseAmount, + quoteAmount, + handleChangeBaseAmount, + handleChangeQuoteAmount, + reset, + + addPortion, + amountLoading: amountStatusQuery.isLoading, + amountError: amountStatusQuery.isError, + amountRefetch: amountStatusQuery.refetch, + amountCheckedDisabled, + balanceInfo, + + midPrice, + }; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/usePercentageRemove.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/usePercentageRemove.ts new file mode 100644 index 00000000..2d3d9689 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/usePercentageRemove.ts @@ -0,0 +1,113 @@ +import { t } from '@lingui/macro'; +import BigNumber from 'bignumber.js'; +import React from 'react'; +import { fixedString } from '../../../../utils/formatter'; +import { OperatePool } from '../types'; +import { Ve33PoolInfoI } from '../../types'; + +export const initSliderPercentage = 50; + +export enum RemoveMode { + quantity = 1, + percentage, +} + +export function usePercentageRemove({ + pool, + baseOverride, + quoteOverride, + resetAmount, + handleChangeBaseAmount, + handleChangeQuoteAmount, +}: { + pool: Ve33PoolInfoI | undefined; + baseOverride: BigNumber | undefined | null; + quoteOverride: BigNumber | undefined | null; + resetAmount: () => void; + handleChangeBaseAmount: (val: string) => void; + handleChangeQuoteAmount: (val: string) => void; +}) { + const [mode, setMode] = React.useState(RemoveMode.percentage); + const [sliderPercentage, setSliderPercentage] = + React.useState(initSliderPercentage); + const changeSliderPercentageTime = React.useRef(null); + const clearPercentageChangeTimer = () => { + if (changeSliderPercentageTime.current) { + clearTimeout(changeSliderPercentageTime.current); + } + }; + + const handleChangeSliderPercentage = (val: number) => { + clearPercentageChangeTimer(); + if (val !== sliderPercentage) { + setSliderPercentage(val); + } + if (!pool) return; + const max = val === 100; + const changeAmount = () => { + if (!pool) return; + if (baseOverride) { + let raw = baseOverride.toString(); + if (!max) { + raw = fixedString( + baseOverride.times(val / 100), + pool.baseToken.decimals, + ); + } + handleChangeBaseAmount(raw); + } else if (quoteOverride) { + let raw = quoteOverride.toString(); + if (max) { + } else { + raw = fixedString( + quoteOverride.times(val / 100), + pool.quoteToken.decimals, + ); + } + handleChangeQuoteAmount(raw); + } + }; + if (max) { + changeAmount(); + } else { + changeSliderPercentageTime.current = setTimeout(changeAmount, 100); + } + }; + + const resetPercentage = () => { + clearPercentageChangeTimer(); + setSliderPercentage(initSliderPercentage); + }; + + React.useEffect(() => { + return clearPercentageChangeTimer; + }, []); + + const handleChangeMode = (mode: RemoveMode) => { + setMode(mode); + resetAmount(); + resetPercentage(); + }; + + const modeOptions = [ + { + key: RemoveMode.quantity, + value: t`Quantity model`, + }, + { + key: RemoveMode.percentage, + value: t`Percentage to remove`, + }, + ]; + + return { + mode, + modeOptions, + handleChangeMode, + + sliderPercentage, + handleChangeSliderPercentage, + + resetPercentage, + }; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/usePoolOperateTabs.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/usePoolOperateTabs.ts new file mode 100644 index 00000000..1475f8d8 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/usePoolOperateTabs.ts @@ -0,0 +1,34 @@ +import { t } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; +import React from 'react'; + +export enum OperateTab { + Add = 1, + Remove, +} + +export function usePoolOperateTabs(defaultValue = OperateTab.Add) { + const { i18n } = useLingui(); + const [operateTab, setOperateTab] = React.useState(defaultValue); + const operateTabs = React.useMemo( + () => [ + { key: OperateTab.Add, value: t`Add` }, + { key: OperateTab.Remove, value: t`Remove` }, + ], + [i18n._], + ); + + const handleChangeTab = (poolTab: OperateTab) => { + setOperateTab(poolTab); + }; + + React.useEffect(() => { + setOperateTab(defaultValue); + }, [defaultValue]); + + return { + operateTab, + operateTabs, + handleChangeTab, + }; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2AddLiquidity.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2AddLiquidity.ts new file mode 100644 index 00000000..bfbee69d --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2AddLiquidity.ts @@ -0,0 +1,158 @@ +import { useMutation } from '@tanstack/react-query'; +import { basicTokenMap, ChainId } from '@dodoex/api'; +import BigNumber from 'bignumber.js'; +import { t } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; +import { + encodeVE33V2RouterAddLiquidity, + encodeVE33V2RouterAddLiquidityETH, +} from '@dodoex/dodo-contract-request'; +import { TokenInfo } from '../../../../hooks/Token'; +import { useSubmission } from '../../../../hooks/Submission'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; +import { useUserOptions } from '../../../../components/UserOptionsProvider'; +import { toWei } from '../../../../utils'; +import { NumberToHex } from '../../../../utils/bytes'; +import { OpCode } from '../../../../hooks/Submission/spec'; +import { MetadataFlag } from '../../../../hooks/Submission/types'; +import { useMessageState } from '../../../../hooks/useMessageState'; + +export function useVe33AddLiquidity({ + baseToken, + quoteToken, + baseAmount, + quoteAmount, + slippage, + stable, + fee, + successBack, + submittedBack, +}: { + baseToken: TokenInfo | undefined; + quoteToken: TokenInfo | undefined; + baseAmount: string; + quoteAmount: string; + slippage: number; + stable: boolean; + fee: number | undefined; + successBack?: () => void; + submittedBack?: () => void; +}) { + const submission = useSubmission(); + const { account } = useWalletInfo(); + useLingui(); + + const { deadLine: ddl } = useUserOptions(); + return useMutation({ + mutationFn: async () => { + if (!baseToken || !quoteToken) { + throw new Error('token is undefined'); + } + if (!account) { + throw new Error('account is undefined'); + } + if (!fee) { + throw new Error('fee is undefined'); + } + const chainId = baseToken.chainId as ChainId; + const basicToken = basicTokenMap[chainId]; + const basicTokenAddressLow = basicToken.address.toLowerCase(); + // const dynamicFeeContractAddress = + // getUniswapV2Router02ContractAddressByChainId(chainId); + // const fixedFeeContractAddress = + // getUniswapV2Router02FixedFeeContractAddressByChainId(chainId); + // const to = dynamicFeeContractAddress || fixedFeeContractAddress; + const to = '0x468e60B84b11B3B1532D7C41FcBb79DA352aa12d'; + if (!to) { + throw new Error('Ve33 V2 contract address is not valid.'); + } + let data = ''; + let value = '0x0'; + const baseIsETH = + baseToken.address.toLowerCase() === basicTokenAddressLow; + const quoteIsETH = + quoteToken.address.toLowerCase() === basicTokenAddressLow; + const baseInAmountBg = toWei(baseAmount, baseToken.decimals); + const quoteInAmountBg = toWei(quoteAmount, quoteToken.decimals); + const baseInAmountMinBg = baseInAmountBg + .times(1 - slippage) + .dp(0, BigNumber.ROUND_FLOOR); + const quoteInAmountMinBg = quoteInAmountBg + .times(1 - slippage) + .dp(0, BigNumber.ROUND_FLOOR); + const feeWei = toWei(fee, 4).toString(); + const deadline = Math.ceil(Date.now() / 1000) + (ddl ?? 10 * 60); + + try { + if (baseIsETH) { + const tokenAddress = quoteToken.address; + const tokenInAmount = quoteInAmountBg.toString(); + const tokenInAmountMin = quoteInAmountMinBg.toString(); + const ethAmountMin = baseInAmountMinBg.toString(); + value = NumberToHex(baseInAmountBg) ?? ''; + data = encodeVE33V2RouterAddLiquidityETH( + tokenAddress, + stable, + tokenInAmount, + tokenInAmountMin, + ethAmountMin, + account, + deadline, + ); + } else if (quoteIsETH) { + const tokenAddress = baseToken.address; + const tokenInAmount = baseInAmountBg.toString(); + const tokenInAmountMin = baseInAmountMinBg.toString(); + const ethAmountMin = quoteInAmountMinBg.toString(); + value = NumberToHex(quoteInAmountBg) ?? ''; + data = encodeVE33V2RouterAddLiquidityETH( + tokenAddress, + stable, + tokenInAmount, + tokenInAmountMin, + ethAmountMin, + account, + deadline, + ); + } else { + data = encodeVE33V2RouterAddLiquidity( + baseToken.address, + quoteToken.address, + stable, + baseInAmountBg.toString(), + quoteInAmountBg.toString(), + baseInAmountMinBg.toString(), + quoteInAmountMinBg.toString(), + account, + deadline, + ); + } + } catch (error) { + console.error('encodeVe33V2RouterAddLiquidity error', error); + useMessageState.getState().toast({ + message: `${t`Failed to add`}${error ? `: ${error}` : ''}`, + type: 'error', + }); + throw error; + } + + const txResult = await submission.execute( + t`Add liquidity`, + { + opcode: OpCode.TX, + to, + data, + value, + }, + { + metadata: { + [MetadataFlag.addLiquidityVe33V2Position]: true, + }, + successBack, + submittedBack, + }, + ); + return txResult; + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2BalanceInfo.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2BalanceInfo.ts new file mode 100644 index 00000000..f0277a7a --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2BalanceInfo.ts @@ -0,0 +1,202 @@ +import { + getFetchVE33V2PairBalanceOfQueryOptions, + getFetchVE33V2PairGetReservesQueryOptions, + getFetchVE33V2PairTotalSupplyQueryOptions, +} from '@dodoex/dodo-contract-request'; +import { useQuery } from '@tanstack/react-query'; +import { getLpToTokenBalance } from '../../../PoolWidget/hooks/usePoolBalanceInfo'; +import { formatUnits } from '@dodoex/contract-request'; +import BigNumber from 'bignumber.js'; +import { CurrencyAmount, Price, sqrt, Token } from '@uniswap/sdk-core'; +import { TokenInfo } from '../../../../hooks/Token'; +import { byWei, formatReadableNumber, sortsBefore } from '../../../../utils'; +import React from 'react'; +import JSBI from 'jsbi'; +import { MINIMUM_LIQUIDITY } from '@uniswap/v2-sdk'; + +export function useVe33V2BalanceInfo({ + account, + pool, +}: { + account?: string; + pool?: { + id: string; + chainId: number; + baseToken: TokenInfo; + quoteToken: TokenInfo; + }; +}) { + const isRearTokenA = pool + ? sortsBefore(pool?.quoteToken, pool?.baseToken) + : false; + const token0 = isRearTokenA ? pool?.quoteToken : pool?.baseToken; + const token1 = isRearTokenA ? pool?.baseToken : pool?.quoteToken; + const token0Decimals = token0?.decimals; + const token1Decimals = token1?.decimals; + + const userLpQuery = useQuery( + getFetchVE33V2PairBalanceOfQueryOptions(pool?.chainId, pool?.id, account), + ); + const totalLpQuery = useQuery( + getFetchVE33V2PairTotalSupplyQueryOptions(pool?.chainId, pool?.id), + ); + const reserveQuery = useQuery( + getFetchVE33V2PairGetReservesQueryOptions(pool?.chainId, pool?.id), + ); + + const lpDecimals = 18; + const userLp = userLpQuery.data + ? new BigNumber(formatUnits(userLpQuery.data, lpDecimals)) + : undefined; + const totalLp = totalLpQuery.data + ? new BigNumber(formatUnits(totalLpQuery.data, lpDecimals)) + : undefined; + const token0Reserve = + reserveQuery.data && token0Decimals !== undefined + ? new BigNumber(formatUnits(reserveQuery.data._reserve0, token0Decimals)) + : undefined; + const token1Reserve = + reserveQuery.data && token1Decimals !== undefined + ? new BigNumber(formatUnits(reserveQuery.data._reserve1, token1Decimals)) + : undefined; + + const [_, userLpToToken0] = getLpToTokenBalance( + userLp, + totalLp, + token0Reserve, + undefined, + pool?.id, + undefined, + lpDecimals, + ); + const [__, userLpToToken1] = getLpToTokenBalance( + userLp, + totalLp, + token1Reserve, + undefined, + pool?.id, + undefined, + lpDecimals, + ); + + const userLpToTokenBalanceLoading = + userLpQuery.isLoading || totalLpQuery.isLoading || reserveQuery.isLoading; + const userLpToTokenBalanceIsError = + userLpQuery.isError || totalLpQuery.isError || reserveQuery.isError; + const userLpToTokenBalanceErrorRefetch = userLpToTokenBalanceIsError + ? () => { + if (userLpQuery.isError) { + userLpQuery.refetch(); + } + if (totalLpQuery.isError) { + totalLpQuery.refetch(); + } + if (reserveQuery.isError) { + reserveQuery.refetch(); + } + } + : undefined; + + const [price, liquidityMinted, poolTokenPercentage] = React.useMemo(() => { + if ( + !token0 || + !token1 || + !reserveQuery.data?._reserve0 || + !reserveQuery.data._reserve1 + ) + return [undefined, undefined, undefined]; + const currency0Amount = CurrencyAmount.fromRawAmount( + new Token( + token0.chainId, + token0.address, + token0.decimals, + token0.symbol, + token0.name, + ), + reserveQuery.data?._reserve0?.toString(), + ); + const currency1Amount = CurrencyAmount.fromRawAmount( + new Token( + token1.chainId, + token1.address, + token1.decimals, + token1.symbol, + token1.name, + ), + reserveQuery.data?._reserve1?.toString(), + ); + const value = currency1Amount.divide(currency0Amount); + const price = new Price( + currency0Amount.currency, + currency1Amount.currency, + value.denominator, + value.numerator, + ); + + let liquidity: JSBI; + if (totalLpQuery.data === undefined) return [price, undefined, undefined]; + const totalSupply = JSBI.BigInt(totalLpQuery.data.toString()); + if (!totalLpQuery.data) { + liquidity = JSBI.subtract( + sqrt(JSBI.multiply(currency0Amount.quotient, currency1Amount.quotient)), + MINIMUM_LIQUIDITY, + ); + } else { + const amount0 = JSBI.divide( + JSBI.multiply(currency0Amount.quotient, totalSupply), + JSBI.BigInt(reserveQuery.data._reserve0.toString()), + ); + const amount1 = JSBI.divide( + JSBI.multiply(currency1Amount.quotient, totalSupply), + JSBI.BigInt(reserveQuery.data._reserve1.toString()), + ); + liquidity = JSBI.lessThanOrEqual(amount0, amount1) ? amount0 : amount1; + } + const liquidityBg = new BigNumber(liquidity.toString()); + const poolTokenPercentage = liquidityBg + .div(JSBI.add(liquidity, totalSupply).toString()) + .times(100); + const liquidityMinted = byWei(liquidityBg, lpDecimals); + + return [price, liquidityMinted, poolTokenPercentage]; + }, [token0, token1, reserveQuery.data, totalLpQuery.data, lpDecimals]); + + let shareOfPool = '-'; + if (pool?.baseToken && pool.quoteToken) { + shareOfPool = poolTokenPercentage + ? `${formatReadableNumber({ + input: poolTokenPercentage, + showDecimals: 2, + roundingMode: BigNumber.ROUND_HALF_UP, + })}%` + : '0%'; + } + + const refetch = () => { + userLpQuery.refetch(); + totalLpQuery.refetch(); + reserveQuery.refetch(); + }; + + return { + userLpQuery, + totalLpQuery, + reserveQuery, + + userLp, + totalLp, + token0Reserve, + token1Reserve, + userLpToToken0, + userLpToToken1, + isRearTokenA, + price, + liquidityMinted, + poolTokenPercentage, + shareOfPool, + + userLpToTokenBalanceLoading, + userLpToTokenBalanceErrorRefetch, + refetch, + }; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2RemoveLiquidity.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2RemoveLiquidity.ts new file mode 100644 index 00000000..8150019a --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2RemoveLiquidity.ts @@ -0,0 +1,162 @@ +import { basicTokenMap, ChainId } from '@dodoex/api'; +import { + encodeVE33V2RouterRemoveLiquidity, + encodeVE33V2RouterRemoveLiquidityETH, + getVE33V2RouterContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; +import { t } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; +import { useMutation } from '@tanstack/react-query'; +import BigNumber from 'bignumber.js'; +import { TokenInfo } from '../../../../hooks/Token'; +import { useSubmission } from '../../../../hooks/Submission'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; +import { useUserOptions } from '../../../../components/UserOptionsProvider'; +import { toWei } from '../../../../utils'; +import { useMessageState } from '../../../../hooks/useMessageState'; +import { OpCode } from '../../../../hooks/Submission/spec'; +import { MetadataFlag } from '../../../../hooks/Submission/types'; + +export function useVe33RemoveLiquidity({ + baseToken, + quoteToken, + baseAmount, + quoteAmount, + liquidityAmount, + slippage, + stable, + submittedBack, + successBack, +}: { + baseToken: TokenInfo | undefined; + quoteToken: TokenInfo | undefined; + baseAmount: string; + quoteAmount: string; + liquidityAmount: string; + slippage: number; + stable: boolean; + submittedBack?: () => void; + successBack?: () => void; +}) { + const submission = useSubmission(); + const { account } = useWalletInfo(); + useLingui(); + + const { deadLine: ddl } = useUserOptions(); + return useMutation({ + mutationFn: async () => { + if (!baseToken || !quoteToken) { + throw new Error('token is undefined'); + } + if (!account) { + throw new Error('account is undefined'); + } + const chainId = baseToken.chainId as ChainId; + const basicToken = basicTokenMap[chainId]; + const basicTokenAddressLow = basicToken.address.toLowerCase(); + const to = getVE33V2RouterContractAddressByChainId(chainId); + if (!to) { + throw new Error('Ve33 V2 contract address is not valid.'); + } + let data = ''; + const value = '0x0'; + const baseIsETH = + baseToken.address.toLowerCase() === basicTokenAddressLow; + const quoteIsETH = + quoteToken.address.toLowerCase() === basicTokenAddressLow; + const baseInAmountMinBg = toWei( + new BigNumber(baseAmount).times(1 - slippage), + baseToken.decimals, + ); + const quoteInAmountMinBg = toWei( + new BigNumber(quoteAmount).times(1 - slippage), + quoteToken.decimals, + ); + const deadline = Math.ceil(Date.now() / 1000) + (ddl ?? 10 * 60); + try { + if (baseIsETH) { + const tokenAddress = quoteToken.address; + const tokenInAmountMin = quoteInAmountMinBg.toString(); + const ethAmountMin = baseInAmountMinBg.toString(); + data = encodeVE33V2RouterRemoveLiquidityETH( + tokenAddress, + stable, + liquidityAmount, + tokenInAmountMin, + ethAmountMin, + account, + deadline, + ); + } else if (quoteIsETH) { + const tokenAddress = baseToken.address; + const tokenInAmountMin = baseInAmountMinBg.toString(); + const ethAmountMin = quoteInAmountMinBg.toString(); + console.log( + tokenAddress, + stable, + liquidityAmount, + tokenInAmountMin, + ethAmountMin, + account, + deadline, + ); + data = encodeVE33V2RouterRemoveLiquidityETH( + tokenAddress, + stable, + liquidityAmount, + tokenInAmountMin, + ethAmountMin, + account, + deadline, + ); + } else { + console.log( + baseToken.address, + quoteToken.address, + stable, + liquidityAmount, + baseInAmountMinBg.toString(), + quoteInAmountMinBg.toString(), + account, + deadline, + ); + data = encodeVE33V2RouterRemoveLiquidity( + baseToken.address, + quoteToken.address, + stable, + liquidityAmount, + baseInAmountMinBg.toString(), + quoteInAmountMinBg.toString(), + account, + deadline, + ); + } + } catch (error) { + console.error('encodeUniswapV2Router02RemoveLiquidity error', error); + useMessageState.getState().toast({ + message: `${t`Failed to remove`}${error ? `: ${error}` : ''}`, + type: 'error', + }); + throw error; + } + + const txResult = await submission.execute( + t`Remove liquidity`, + { + opcode: OpCode.TX, + to, + data, + value, + }, + { + metadata: { + [MetadataFlag.removeLiquidityVe33V2Position]: true, + }, + submittedBack, + successBack, + }, + ); + return txResult; + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useWithdrawInfo.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useWithdrawInfo.ts new file mode 100644 index 00000000..a8a63f7f --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useWithdrawInfo.ts @@ -0,0 +1,63 @@ +import BigNumber from 'bignumber.js'; +import { formatReadableNumber } from '../../../../utils/formatter'; +import { getShowDecimals } from '../../../../utils/token'; + +export const useWithdrawInfo = ({ + pool, + baseAmount, + quoteAmount, +}: { + pool?: { + chainId: number; + address: string; + baseToken: { + symbol: string; + decimals: number; + }; + quoteToken: { + symbol: string; + decimals: number; + }; + }; + baseAmount: string; + quoteAmount: string; +}) => { + let receiveBaseAmount = ''; + let receiveQuoteAmount = ''; + let receiveAmountBg: BigNumber | undefined; + + if (pool) { + const baseShowDecimals = getShowDecimals(pool.baseToken.decimals); + const quoteShowDecimals = getShowDecimals(pool.quoteToken.decimals); + receiveBaseAmount = formatReadableNumber({ + input: baseAmount, + showDecimals: baseShowDecimals, + }); + receiveQuoteAmount = formatReadableNumber({ + input: quoteAmount, + showDecimals: quoteShowDecimals, + }); + } + + let receiveList: { + amount: string; + symbol: string; + }[] = []; + if (pool) { + receiveList.push({ + amount: receiveBaseAmount || '0', + symbol: pool.baseToken.symbol, + }); + receiveList.push({ + amount: receiveQuoteAmount || '0', + symbol: pool.quoteToken.symbol, + }); + } + + return { + receiveBaseAmount, + receiveQuoteAmount, + receiveAmountBg, + receiveList, + }; +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/index.tsx new file mode 100644 index 00000000..29bceb4a --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/index.tsx @@ -0,0 +1,420 @@ +import { + Tabs, + TabPanel, + TabsButtonGroup, + Box, + HoverOpacity, + Tooltip, + LoadingSkeleton, +} from '@dodoex/components'; +import { FailedList } from '../../../components/List/FailedList'; +import { AddPoolOperate } from './AddPoolOperate'; +import { RemovePoolOperate } from './RemovePoolOperate'; +import { OperateTypeE, Ve33PoolInfoI } from '../types'; +import { useLingui } from '@lingui/react'; +import { DetailBorder, Error } from '@dodoex/icons'; +import React from 'react'; +import { t, Trans } from '@lingui/macro'; +import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; +import Dialog from '../../../components/Dialog'; +import { BoxProps } from '@dodoex/components'; +import { TokenLogoPair } from '../../../components/TokenLogoPair'; +import { PoolTypeTag } from '../components/PoolTypeTag'; +import { AddressWithLinkAndCopy } from '../../../components/AddressWithLinkAndCopy'; +import TokenItem from '../../../components/Token/TokenItem'; +import { formatTokenAmountNumber } from '../../../utils'; +import { useVe33V2BalanceInfo } from './hooks/useVe33V2BalanceInfo'; + +export interface PoolOperateProps { + sx?: BoxProps['sx']; + pool?: Ve33PoolInfoI; + account?: string; + operate?: OperateTypeE; + errorRefetch?: () => void; + submittedBack?: () => void; + onClose?: () => void; +} + +export default function PoolOperateDialog({ + modal, + ...props +}: PoolOperateProps & { + modal?: boolean; +}) { + const { isMobile } = useWidgetDevice(); + + return ( + + + + ); +} + +export function PoolOperate({ + sx, + pool, + operate, + account, + errorRefetch, + submittedBack, + onClose, +}: PoolOperateProps) { + const { operateTab, operateTabs, handleChangeTab } = + usePoolOperateTabs(operate); + const chainId = pool?.chainId; + + const balanceInfo = useVe33V2BalanceInfo({ + pool, + account, + }); + + return ( + + {!pool || + chainId === undefined || + balanceInfo.userLpToTokenBalanceErrorRefetch || + errorRefetch ? ( + { + if (balanceInfo.userLpToTokenBalanceErrorRefetch) { + balanceInfo.userLpToTokenBalanceErrorRefetch(); + } + if (errorRefetch) { + errorRefetch(); + } + }} + sx={{ + my: 40, + height: '100%', + }} + /> + ) : ( + { + handleChangeTab(value as OperateTypeE); + }} + > + + + + + + + {pool.baseToken.symbol}/{pool.quoteToken.symbol} + + + + + + + Pool Adress + + + + Gauge Adress + + + + } + > + + + + + + + + {onClose ? ( + + { + onClose(); + }} + /> + + ) : undefined} + + + + My Liquidity + + + + + {formatTokenAmountNumber({ + input: balanceInfo.userLp, + decimals: 18, + })} + + {`${pool.baseToken.symbol}/${pool.quoteToken.symbol}`} + + + {formatTokenAmountNumber({ + input: balanceInfo.userLpToToken0, + decimals: pool.baseToken.decimals, + })} + + } + /> + + {formatTokenAmountNumber({ + input: balanceInfo.userLpToToken1, + decimals: pool.quoteToken.decimals, + })} + + } + /> + + } + > + svg': { + width: '100%', + height: '100%', + }, + }} + > + + + + + + + + + + + + + + )} + + ); +} + +export function usePoolOperateTabs(defaultValue = OperateTypeE.Add) { + const { i18n } = useLingui(); + const [operateTab, setOperateTab] = React.useState(defaultValue); + const operateTabs = React.useMemo( + () => [ + { key: OperateTypeE.Add, value: t`Add` }, + { key: OperateTypeE.Remove, value: t`Remove` }, + ], + [i18n._], + ); + + const handleChangeTab = (poolTab: OperateTypeE) => { + setOperateTab(poolTab); + }; + + React.useEffect(() => { + setOperateTab(defaultValue); + }, [defaultValue]); + + return { + operateTab, + operateTabs, + handleChangeTab, + }; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/types.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/types.ts new file mode 100644 index 00000000..355b2e2c --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/types.ts @@ -0,0 +1,27 @@ +import { ExcludeNone, PoolType } from '@dodoex/api'; +import { TokenInfo } from '../../../hooks/Token'; +import { FetchMyLiquidityListLqList } from '../utils'; + +export type OperatePool = + | { + address: string; + chainId: number; + baseToken: TokenInfo; + quoteToken: TokenInfo; + baseLpToken?: { + id: string; + decimals: number; + }; + quoteLpToken?: { + id: string; + decimals: number; + }; + type: PoolType; + owner?: string; + creator: string; + lpFeeRate?: string; + liquidityPositions?: ExcludeNone< + ExcludeNone[0] + >['liquidityPositions']; + } + | undefined; diff --git a/packages/dodoex-widgets/src/widgets/ve33/components/PoolTypeTag.tsx b/packages/dodoex-widgets/src/widgets/ve33/components/PoolTypeTag.tsx index 649533d5..324c0740 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/components/PoolTypeTag.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/components/PoolTypeTag.tsx @@ -7,10 +7,11 @@ export interface PoolTypeTagProps { type: PoolTypeE; stable: boolean; fee: number; + hideFee?: boolean; } export const PoolTypeTag = (props: PoolTypeTagProps) => { - const { type, stable, fee } = props; + const { type, stable, fee, hideFee } = props; const theme = useTheme(); const { color, backgroundColor, name } = usePoolColors({ type, stable, fee }); @@ -37,20 +38,22 @@ export const PoolTypeTag = (props: PoolTypeTagProps) => { > {name} - - {formatFee({ type, fee })} - + {!hideFee && ( + + {formatFee({ type, fee })} + + )} ); }; diff --git a/packages/dodoex-widgets/src/widgets/ve33/types.ts b/packages/dodoex-widgets/src/widgets/ve33/types.ts index 93840b84..551b0b66 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/types.ts +++ b/packages/dodoex-widgets/src/widgets/ve33/types.ts @@ -1,3 +1,4 @@ +import { ChainId } from '@dodoex/api'; import { TokenInfo } from '../../hooks/Token/type'; import { FetchVe33PoolList } from '../PoolWidget/utils'; @@ -22,6 +23,7 @@ export type Ve33PoolInfoI = FetchVe33PoolItem & { stable: boolean; fee: FeeE | 0 | number; type: PoolTypeE; + chainId: ChainId; baseToken: TokenInfo; quoteToken: TokenInfo; }; @@ -29,4 +31,5 @@ export type Ve33PoolInfoI = FetchVe33PoolItem & { export interface Ve33PoolOperateProps { poolInfo: Ve33PoolInfoI; operateType: OperateTypeE; + chainId: ChainId; } diff --git a/packages/dodoex-widgets/src/widgets/ve33/utils.ts b/packages/dodoex-widgets/src/widgets/ve33/utils.ts index 5895cfb0..fbf4ce85 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/utils.ts +++ b/packages/dodoex-widgets/src/widgets/ve33/utils.ts @@ -16,6 +16,7 @@ export function compositePoolInfo( ): Ve33PoolInfoI { return { ...pool, + chainId, stable: pool.title !== 'V2.Volatile', fee: pool.feeRate, type: pool.version === 'v2' ? PoolTypeE.Pool : PoolTypeE.CLPool, diff --git a/yarn.lock b/yarn.lock index 65b0cc32..28f0bec5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1857,10 +1857,10 @@ ethers "^6.13.2" https-proxy-agent "^7.0.5" -"@dodoex/dodo-contract-request@1.10.0-alpha.3": - version "1.10.0-alpha.3" - resolved "https://registry.yarnpkg.com/@dodoex/dodo-contract-request/-/dodo-contract-request-1.10.0-alpha.3.tgz#eaaf64ba2d39d35f805fafa364ba653b6529ae13" - integrity sha512-GfbD1vDIHDz1WkYgKJ+ewc4yz78wZBSDz78HXvKUHe8v0659aTEcjQefkWdaNiX31dI8vHHV8MDH8rVAyhOKgw== +"@dodoex/dodo-contract-request@1.15.0-morph-holesky.2": + version "1.15.0-morph-holesky.2" + resolved "https://registry.yarnpkg.com/@dodoex/dodo-contract-request/-/dodo-contract-request-1.15.0-morph-holesky.2.tgz#c3de12ccdd221e35f32abb0abba5e7f019c4997c" + integrity sha512-n/MKkLKH5fSY8hsTVw+98EQDyoYvsHR8li+uO3DkYKeJmGtK2e0CCOKyJwR37dtuaw5ynQCvoJm9WsaveCUuqQ== dependencies: typescript "^5" From 8bc601fbe33676c3031c9804170558b496cf5ca8 Mon Sep 17 00:00:00 2001 From: JunJie Date: Tue, 13 May 2025 18:34:27 +0800 Subject: [PATCH 11/18] chore: delete sol code --- .../ve33/aerodrome-finance/contracts/Pool.sol | 609 -------- .../aerodrome-finance/contracts/PoolFees.sol | 34 - .../contracts/factories/PoolFactory.sol | 173 --- .../contracts/core/CLFactory.sol | 234 --- .../contracts/core/CLPool.sol | 1329 ----------------- .../contracts/proxy /Clones.sol | 109 -- 6 files changed, 2488 deletions(-) delete mode 100644 packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/Pool.sol delete mode 100644 packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/PoolFees.sol delete mode 100644 packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/factories/PoolFactory.sol delete mode 100644 packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLFactory.sol delete mode 100644 packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLPool.sol delete mode 100644 packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/lib/openzeppelin-contracts/contracts/proxy /Clones.sol diff --git a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/Pool.sol b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/Pool.sol deleted file mode 100644 index 08363f40..00000000 --- a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/Pool.sol +++ /dev/null @@ -1,609 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.19; - -import {Math} from '@openzeppelin/contracts/utils/math/Math.sol'; -import {IPool} from './interfaces/IPool.sol'; -import {IVoter} from './interfaces/IVoter.sol'; -import {IPoolCallee} from './interfaces/IPoolCallee.sol'; -import {IPoolFactory} from './interfaces/factories/IPoolFactory.sol'; -import {PoolFees} from './PoolFees.sol'; -import {SafeERC20} from '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol'; -import {ERC20} from '@openzeppelin/contracts/token/ERC20/ERC20.sol'; -import {IERC20} from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; -import {ERC20Permit} from '@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol'; -import {ReentrancyGuard} from '@openzeppelin/contracts/security/ReentrancyGuard.sol'; - -/// @title Pool -/// @author velodrome.finance, @figs999, @pegahcarter -/// @notice Protocol token pool, either stable or volatile -contract Pool is IPool, ERC20Permit, ReentrancyGuard { - using SafeERC20 for IERC20; - - string private _name; - string private _symbol; - address private _voter; - - /// @inheritdoc IPool - bool public stable; - - uint256 internal constant MINIMUM_LIQUIDITY = 10 ** 3; - uint256 internal constant MINIMUM_K = 10 ** 10; - - /// @inheritdoc IPool - address public token0; - /// @inheritdoc IPool - address public token1; - /// @inheritdoc IPool - address public poolFees; - /// @inheritdoc IPool - address public factory; - - /// @inheritdoc IPool - uint256 public constant periodSize = 1800; - - Observation[] public observations; - - uint256 internal decimals0; - uint256 internal decimals1; - - /// @inheritdoc IPool - uint256 public reserve0; - /// @inheritdoc IPool - uint256 public reserve1; - /// @inheritdoc IPool - uint256 public blockTimestampLast; - - /// @inheritdoc IPool - uint256 public reserve0CumulativeLast; - /// @inheritdoc IPool - uint256 public reserve1CumulativeLast; - - /// @inheritdoc IPool - uint256 public index0 = 0; - /// @inheritdoc IPool - uint256 public index1 = 0; - - /// @inheritdoc IPool - mapping(address => uint256) public supplyIndex0; - /// @inheritdoc IPool - mapping(address => uint256) public supplyIndex1; - - /// @inheritdoc IPool - mapping(address => uint256) public claimable0; - /// @inheritdoc IPool - mapping(address => uint256) public claimable1; - - constructor() ERC20('', '') ERC20Permit('') {} - - /// @inheritdoc IPool - function initialize(address _token0, address _token1, bool _stable) external { - if (factory != address(0)) revert FactoryAlreadySet(); - factory = _msgSender(); - _voter = IPoolFactory(factory).voter(); - (token0, token1, stable) = (_token0, _token1, _stable); - poolFees = address(new PoolFees(_token0, _token1)); - string memory symbol0 = ERC20(_token0).symbol(); - string memory symbol1 = ERC20(_token1).symbol(); - if (_stable) { - _name = string(abi.encodePacked('Stable AMM - ', symbol0, '/', symbol1)); - _symbol = string(abi.encodePacked('sAMM-', symbol0, '/', symbol1)); - } else { - _name = string( - abi.encodePacked('Volatile AMM - ', symbol0, '/', symbol1) - ); - _symbol = string(abi.encodePacked('vAMM-', symbol0, '/', symbol1)); - } - - decimals0 = 10 ** ERC20(_token0).decimals(); - decimals1 = 10 ** ERC20(_token1).decimals(); - - observations.push(Observation(block.timestamp, 0, 0)); - } - - /// @inheritdoc IPool - function setName(string calldata __name) external { - if (msg.sender != IVoter(_voter).emergencyCouncil()) - revert NotEmergencyCouncil(); - _name = __name; - } - - /// @inheritdoc IPool - function setSymbol(string calldata __symbol) external { - if (msg.sender != IVoter(_voter).emergencyCouncil()) - revert NotEmergencyCouncil(); - _symbol = __symbol; - } - - /// @inheritdoc IPool - function observationLength() external view returns (uint256) { - return observations.length; - } - - /// @inheritdoc IPool - function lastObservation() public view returns (Observation memory) { - return observations[observations.length - 1]; - } - - /// @inheritdoc IPool - function metadata() - external - view - returns ( - uint256 dec0, - uint256 dec1, - uint256 r0, - uint256 r1, - bool st, - address t0, - address t1 - ) - { - return (decimals0, decimals1, reserve0, reserve1, stable, token0, token1); - } - - /// @inheritdoc IPool - function tokens() external view returns (address, address) { - return (token0, token1); - } - - /// @inheritdoc IPool - function getK() external nonReentrant returns (uint256) { - return _k(reserve0, reserve1); - } - - /// @inheritdoc IPool - function claimFees() external returns (uint256 claimed0, uint256 claimed1) { - address sender = _msgSender(); - _updateFor(sender); - - claimed0 = claimable0[sender]; - claimed1 = claimable1[sender]; - - if (claimed0 > 0 || claimed1 > 0) { - claimable0[sender] = 0; - claimable1[sender] = 0; - - PoolFees(poolFees).claimFeesFor(sender, claimed0, claimed1); - - emit Claim(sender, sender, claimed0, claimed1); - } - } - - /// @dev Accrue fees on token0 - function _update0(uint256 amount) internal { - // Only update on this pool if there is a fee - if (amount == 0) return; - IERC20(token0).safeTransfer(poolFees, amount); // transfer the fees out to PoolFees - uint256 _ratio = (amount * 1e18) / totalSupply(); // 1e18 adjustment is removed during claim - if (_ratio > 0) { - index0 += _ratio; - } - emit Fees(_msgSender(), amount, 0); - } - - /// @dev Accrue fees on token1 - function _update1(uint256 amount) internal { - // Only update on this pool if there is a fee - if (amount == 0) return; - IERC20(token1).safeTransfer(poolFees, amount); - uint256 _ratio = (amount * 1e18) / totalSupply(); - if (_ratio > 0) { - index1 += _ratio; - } - emit Fees(_msgSender(), 0, amount); - } - - /// @dev This function MUST be called on any balance changes, otherwise can be used to infinitely claim fees - /// Fees are segregated from core funds, so fees can never put liquidity at risk. - function _updateFor(address recipient) internal { - uint256 _supplied = balanceOf(recipient); // get LP balance of `recipient` - if (_supplied > 0) { - uint256 _supplyIndex0 = supplyIndex0[recipient]; // get last adjusted index0 for recipient - uint256 _supplyIndex1 = supplyIndex1[recipient]; - uint256 _index0 = index0; // get global index0 for accumulated fees - uint256 _index1 = index1; - supplyIndex0[recipient] = _index0; // update user current position to global position - supplyIndex1[recipient] = _index1; - uint256 _delta0 = _index0 - _supplyIndex0; // see if there is any difference that need to be accrued - uint256 _delta1 = _index1 - _supplyIndex1; - if (_delta0 > 0) { - uint256 _share = (_supplied * _delta0) / 1e18; // add accrued difference for each supplied token - claimable0[recipient] += _share; - } - if (_delta1 > 0) { - uint256 _share = (_supplied * _delta1) / 1e18; - claimable1[recipient] += _share; - } - } else { - supplyIndex0[recipient] = index0; // new users are set to the default global state - supplyIndex1[recipient] = index1; - } - } - - /// @inheritdoc IPool - function getReserves() - public - view - returns (uint256 _reserve0, uint256 _reserve1, uint256 _blockTimestampLast) - { - _reserve0 = reserve0; - _reserve1 = reserve1; - _blockTimestampLast = blockTimestampLast; - } - - /// @dev update reserves and, on the first call per block, price accumulators - function _update( - uint256 balance0, - uint256 balance1, - uint256 _reserve0, - uint256 _reserve1 - ) internal { - uint256 blockTimestamp = block.timestamp; - uint256 timeElapsed = blockTimestamp - blockTimestampLast; - if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) { - reserve0CumulativeLast += _reserve0 * timeElapsed; - reserve1CumulativeLast += _reserve1 * timeElapsed; - } - - Observation memory _point = lastObservation(); - timeElapsed = blockTimestamp - _point.timestamp; // compare the last observation with current timestamp, if greater than 30 minutes, record a new event - if (timeElapsed > periodSize) { - observations.push( - Observation( - blockTimestamp, - reserve0CumulativeLast, - reserve1CumulativeLast - ) - ); - } - reserve0 = balance0; - reserve1 = balance1; - blockTimestampLast = blockTimestamp; - emit Sync(reserve0, reserve1); - } - - /// @inheritdoc IPool - function currentCumulativePrices() - public - view - returns ( - uint256 reserve0Cumulative, - uint256 reserve1Cumulative, - uint256 blockTimestamp - ) - { - blockTimestamp = block.timestamp; - reserve0Cumulative = reserve0CumulativeLast; - reserve1Cumulative = reserve1CumulativeLast; - - // if time has elapsed since the last update on the pool, mock the accumulated price values - ( - uint256 _reserve0, - uint256 _reserve1, - uint256 _blockTimestampLast - ) = getReserves(); - if (_blockTimestampLast != blockTimestamp) { - // subtraction overflow is desired - uint256 timeElapsed = blockTimestamp - _blockTimestampLast; - reserve0Cumulative += _reserve0 * timeElapsed; - reserve1Cumulative += _reserve1 * timeElapsed; - } - } - - /// @inheritdoc IPool - function quote( - address tokenIn, - uint256 amountIn, - uint256 granularity - ) external view returns (uint256 amountOut) { - uint256[] memory _prices = sample(tokenIn, amountIn, granularity, 1); - uint256 priceAverageCumulative; - uint256 _length = _prices.length; - for (uint256 i = 0; i < _length; i++) { - priceAverageCumulative += _prices[i]; - } - return priceAverageCumulative / granularity; - } - - /// @inheritdoc IPool - function prices( - address tokenIn, - uint256 amountIn, - uint256 points - ) external view returns (uint256[] memory) { - return sample(tokenIn, amountIn, points, 1); - } - - /// @inheritdoc IPool - function sample( - address tokenIn, - uint256 amountIn, - uint256 points, - uint256 window - ) public view returns (uint256[] memory) { - uint256[] memory _prices = new uint256[](points); - - uint256 length = observations.length - 1; - uint256 i = length - (points * window); - uint256 nextIndex = 0; - uint256 index = 0; - - for (; i < length; i += window) { - nextIndex = i + window; - uint256 timeElapsed = observations[nextIndex].timestamp - - observations[i].timestamp; - uint256 _reserve0 = (observations[nextIndex].reserve0Cumulative - - observations[i].reserve0Cumulative) / timeElapsed; - uint256 _reserve1 = (observations[nextIndex].reserve1Cumulative - - observations[i].reserve1Cumulative) / timeElapsed; - _prices[index] = _getAmountOut(amountIn, tokenIn, _reserve0, _reserve1); - // index < length; length cannot overflow - unchecked { - index = index + 1; - } - } - return _prices; - } - - /// @inheritdoc IPool - function mint(address to) external nonReentrant returns (uint256 liquidity) { - (uint256 _reserve0, uint256 _reserve1) = (reserve0, reserve1); - uint256 _balance0 = IERC20(token0).balanceOf(address(this)); - uint256 _balance1 = IERC20(token1).balanceOf(address(this)); - uint256 _amount0 = _balance0 - _reserve0; - uint256 _amount1 = _balance1 - _reserve1; - - uint256 _totalSupply = totalSupply(); // gas savings, must be defined here since totalSupply can update in _mintFee - if (_totalSupply == 0) { - liquidity = Math.sqrt(_amount0 * _amount1) - MINIMUM_LIQUIDITY; - _mint(address(1), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens - cannot be address(0) - if (stable) { - if ((_amount0 * 1e18) / decimals0 != (_amount1 * 1e18) / decimals1) - revert DepositsNotEqual(); - if (_k(_amount0, _amount1) <= MINIMUM_K) revert BelowMinimumK(); - } - } else { - liquidity = Math.min( - (_amount0 * _totalSupply) / _reserve0, - (_amount1 * _totalSupply) / _reserve1 - ); - } - if (liquidity == 0) revert InsufficientLiquidityMinted(); - _mint(to, liquidity); - - _update(_balance0, _balance1, _reserve0, _reserve1); - emit Mint(_msgSender(), _amount0, _amount1); - } - - /// @inheritdoc IPool - function burn( - address to - ) external nonReentrant returns (uint256 amount0, uint256 amount1) { - (uint256 _reserve0, uint256 _reserve1) = (reserve0, reserve1); - (address _token0, address _token1) = (token0, token1); - uint256 _balance0 = IERC20(_token0).balanceOf(address(this)); - uint256 _balance1 = IERC20(_token1).balanceOf(address(this)); - uint256 _liquidity = balanceOf(address(this)); - - uint256 _totalSupply = totalSupply(); // gas savings, must be defined here since totalSupply can update in _mintFee - amount0 = (_liquidity * _balance0) / _totalSupply; // using balances ensures pro-rata distribution - amount1 = (_liquidity * _balance1) / _totalSupply; // using balances ensures pro-rata distribution - if (amount0 == 0 || amount1 == 0) revert InsufficientLiquidityBurned(); - _burn(address(this), _liquidity); - IERC20(_token0).safeTransfer(to, amount0); - IERC20(_token1).safeTransfer(to, amount1); - _balance0 = IERC20(_token0).balanceOf(address(this)); - _balance1 = IERC20(_token1).balanceOf(address(this)); - - _update(_balance0, _balance1, _reserve0, _reserve1); - emit Burn(_msgSender(), to, amount0, amount1); - } - - /// @inheritdoc IPool - function swap( - uint256 amount0Out, - uint256 amount1Out, - address to, - bytes calldata data - ) external nonReentrant { - if (IPoolFactory(factory).isPaused()) revert IsPaused(); - if (amount0Out == 0 && amount1Out == 0) revert InsufficientOutputAmount(); - (uint256 _reserve0, uint256 _reserve1) = (reserve0, reserve1); - if (amount0Out >= _reserve0 || amount1Out >= _reserve1) - revert InsufficientLiquidity(); - - uint256 _balance0; - uint256 _balance1; - { - // scope for _token{0,1}, avoids stack too deep errors - (address _token0, address _token1) = (token0, token1); - if (to == _token0 || to == _token1) revert InvalidTo(); - if (amount0Out > 0) IERC20(_token0).safeTransfer(to, amount0Out); // optimistically transfer tokens - if (amount1Out > 0) IERC20(_token1).safeTransfer(to, amount1Out); // optimistically transfer tokens - if (data.length > 0) - IPoolCallee(to).hook(_msgSender(), amount0Out, amount1Out, data); // callback, used for flash loans - _balance0 = IERC20(_token0).balanceOf(address(this)); - _balance1 = IERC20(_token1).balanceOf(address(this)); - } - uint256 amount0In = _balance0 > _reserve0 - amount0Out - ? _balance0 - (_reserve0 - amount0Out) - : 0; - uint256 amount1In = _balance1 > _reserve1 - amount1Out - ? _balance1 - (_reserve1 - amount1Out) - : 0; - if (amount0In == 0 && amount1In == 0) revert InsufficientInputAmount(); - { - // scope for reserve{0,1}Adjusted, avoids stack too deep errors - (address _token0, address _token1) = (token0, token1); - if (amount0In > 0) - _update0( - (amount0In * IPoolFactory(factory).getFee(address(this), stable)) / - 10000 - ); // accrue fees for token0 and move them out of pool - if (amount1In > 0) - _update1( - (amount1In * IPoolFactory(factory).getFee(address(this), stable)) / - 10000 - ); // accrue fees for token1 and move them out of pool - _balance0 = IERC20(_token0).balanceOf(address(this)); // since we removed tokens, we need to reconfirm balances, can also simply use previous balance - amountIn/ 10000, but doing balanceOf again as safety check - _balance1 = IERC20(_token1).balanceOf(address(this)); - // The curve, either x3y+y3x for stable pools, or x*y for volatile pools - if (_k(_balance0, _balance1) < _k(_reserve0, _reserve1)) revert K(); - } - - _update(_balance0, _balance1, _reserve0, _reserve1); - emit Swap(_msgSender(), to, amount0In, amount1In, amount0Out, amount1Out); - } - - /// @inheritdoc IPool - function skim(address to) external nonReentrant { - (address _token0, address _token1) = (token0, token1); - IERC20(_token0).safeTransfer( - to, - IERC20(_token0).balanceOf(address(this)) - (reserve0) - ); - IERC20(_token1).safeTransfer( - to, - IERC20(_token1).balanceOf(address(this)) - (reserve1) - ); - } - - /// @inheritdoc IPool - function sync() external nonReentrant { - _update( - IERC20(token0).balanceOf(address(this)), - IERC20(token1).balanceOf(address(this)), - reserve0, - reserve1 - ); - } - - function _f(uint256 x0, uint256 y) internal pure returns (uint256) { - uint256 _a = (x0 * y) / 1e18; - uint256 _b = ((x0 * x0) / 1e18 + (y * y) / 1e18); - return (_a * _b) / 1e18; - } - - function _d(uint256 x0, uint256 y) internal pure returns (uint256) { - return - (3 * x0 * ((y * y) / 1e18)) / 1e18 + ((((x0 * x0) / 1e18) * x0) / 1e18); - } - - function _get_y( - uint256 x0, - uint256 xy, - uint256 y - ) internal view returns (uint256) { - for (uint256 i = 0; i < 255; i++) { - uint256 k = _f(x0, y); - if (k < xy) { - // there are two cases where dy == 0 - // case 1: The y is converged and we find the correct answer - // case 2: _d(x0, y) is too large compare to (xy - k) and the rounding error - // screwed us. - // In this case, we need to increase y by 1 - uint256 dy = ((xy - k) * 1e18) / _d(x0, y); - if (dy == 0) { - if (k == xy) { - // We found the correct answer. Return y - return y; - } - if (_k(x0, y + 1) > xy) { - // If _k(x0, y + 1) > xy, then we are close to the correct answer. - // There's no closer answer than y + 1 - return y + 1; - } - dy = 1; - } - y = y + dy; - } else { - uint256 dy = ((k - xy) * 1e18) / _d(x0, y); - if (dy == 0) { - if (k == xy || _f(x0, y - 1) < xy) { - // Likewise, if k == xy, we found the correct answer. - // If _f(x0, y - 1) < xy, then we are close to the correct answer. - // There's no closer answer than "y" - // It's worth mentioning that we need to find y where f(x0, y) >= xy - // As a result, we can't return y - 1 even it's closer to the correct answer - return y; - } - dy = 1; - } - y = y - dy; - } - } - revert('!y'); - } - - /// @inheritdoc IPool - function getAmountOut( - uint256 amountIn, - address tokenIn - ) external view returns (uint256) { - (uint256 _reserve0, uint256 _reserve1) = (reserve0, reserve1); - amountIn -= - (amountIn * IPoolFactory(factory).getFee(address(this), stable)) / - 10000; // remove fee from amount received - return _getAmountOut(amountIn, tokenIn, _reserve0, _reserve1); - } - - function _getAmountOut( - uint256 amountIn, - address tokenIn, - uint256 _reserve0, - uint256 _reserve1 - ) internal view returns (uint256) { - if (stable) { - uint256 xy = _k(_reserve0, _reserve1); - _reserve0 = (_reserve0 * 1e18) / decimals0; - _reserve1 = (_reserve1 * 1e18) / decimals1; - (uint256 reserveA, uint256 reserveB) = tokenIn == token0 - ? (_reserve0, _reserve1) - : (_reserve1, _reserve0); - amountIn = tokenIn == token0 - ? (amountIn * 1e18) / decimals0 - : (amountIn * 1e18) / decimals1; - uint256 y = reserveB - _get_y(amountIn + reserveA, xy, reserveB); - return (y * (tokenIn == token0 ? decimals1 : decimals0)) / 1e18; - } else { - (uint256 reserveA, uint256 reserveB) = tokenIn == token0 - ? (_reserve0, _reserve1) - : (_reserve1, _reserve0); - return (amountIn * reserveB) / (reserveA + amountIn); - } - } - - function _k(uint256 x, uint256 y) internal view returns (uint256) { - if (stable) { - uint256 _x = (x * 1e18) / decimals0; - uint256 _y = (y * 1e18) / decimals1; - uint256 _a = (_x * _y) / 1e18; - uint256 _b = ((_x * _x) / 1e18 + (_y * _y) / 1e18); - return (_a * _b) / 1e18; // x3y+y3x >= k - } else { - return x * y; // xy >= k - } - } - - /* - @dev OZ inheritance overrides - These are needed as _name and _symbol are set privately before - logic is executed within the constructor to set _name and _symbol. - */ - function name() public view override returns (string memory) { - return _name; - } - - function symbol() public view override returns (string memory) { - return _symbol; - } - - function _beforeTokenTransfer( - address from, - address to, - uint256 - ) internal override { - _updateFor(from); - _updateFor(to); - } -} diff --git a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/PoolFees.sol b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/PoolFees.sol deleted file mode 100644 index e266757b..00000000 --- a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/PoolFees.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.19; - -import {IERC20} from '@openzeppelin/contracts/token/ERC20/IERC20.sol'; -import {SafeERC20} from '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol'; - -/// @title PoolFees -/// @notice Contract used as 1:1 pool relationship to split out fees. -/// @notice Ensures curve does not need to be modified for LP shares. -contract PoolFees { - using SafeERC20 for IERC20; - address internal immutable pool; // The pool it is bonded to - address internal immutable token0; // token0 of pool, saved localy and statically for gas optimization - address internal immutable token1; // Token1 of pool, saved localy and statically for gas optimization - - error NotPool(); - - constructor(address _token0, address _token1) { - pool = msg.sender; - token0 = _token0; - token1 = _token1; - } - - /// @notice Allow the pool to transfer fees to users - function claimFeesFor( - address _recipient, - uint256 _amount0, - uint256 _amount1 - ) external { - if (msg.sender != pool) revert NotPool(); - if (_amount0 > 0) IERC20(token0).safeTransfer(_recipient, _amount0); - if (_amount1 > 0) IERC20(token1).safeTransfer(_recipient, _amount1); - } -} diff --git a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/factories/PoolFactory.sol b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/factories/PoolFactory.sol deleted file mode 100644 index 499a4ff2..00000000 --- a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-finance/contracts/factories/PoolFactory.sol +++ /dev/null @@ -1,173 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.19; - -import {IPoolFactory} from '../interfaces/factories/IPoolFactory.sol'; -import {IPool} from '../interfaces/IPool.sol'; -import {Clones} from '@openzeppelin/contracts/proxy/Clones.sol'; - -contract PoolFactory is IPoolFactory { - address public immutable implementation; - - bool public isPaused; - address public pauser; - - uint256 public stableFee; - uint256 public volatileFee; - uint256 public constant MAX_FEE = 300; // 3% - // Override to indicate there is custom 0% fee - as a 0 value in the customFee mapping indicates - // that no custom fee rate has been set - uint256 public constant ZERO_FEE_INDICATOR = 420; - address public feeManager; - - /// @dev used to change the name/symbol of the pool by calling emergencyCouncil - address public voter; - - mapping(address => mapping(address => mapping(bool => address))) - private _getPool; - address[] public allPools; - mapping(address => bool) private _isPool; // simplified check if its a pool, given that `stable` flag might not be available in peripherals - mapping(address => uint256) public customFee; // override for custom fees - - address internal _temp0; - address internal _temp1; - bool internal _temp; - - constructor(address _implementation) { - implementation = _implementation; - voter = msg.sender; - pauser = msg.sender; - feeManager = msg.sender; - isPaused = false; - stableFee = 5; // 0.05% - volatileFee = 30; // 0.3% - } - - /// @inheritdoc IPoolFactory - function allPoolsLength() external view returns (uint256) { - return allPools.length; - } - - /// @inheritdoc IPoolFactory - function getPool( - address tokenA, - address tokenB, - uint24 fee - ) external view returns (address) { - return - fee > 1 - ? address(0) - : fee == 1 - ? _getPool[tokenA][tokenB][true] - : _getPool[tokenA][tokenB][false]; - } - - /// @inheritdoc IPoolFactory - function getPool( - address tokenA, - address tokenB, - bool stable - ) external view returns (address) { - return _getPool[tokenA][tokenB][stable]; - } - - /// @inheritdoc IPoolFactory - function isPool(address pool) external view returns (bool) { - return _isPool[pool]; - } - - /// @inheritdoc IPoolFactory - function setVoter(address _voter) external { - if (msg.sender != voter) revert NotVoter(); - voter = _voter; - emit SetVoter(_voter); - } - - function setPauser(address _pauser) external { - if (msg.sender != pauser) revert NotPauser(); - if (_pauser == address(0)) revert ZeroAddress(); - pauser = _pauser; - emit SetPauser(_pauser); - } - - function setPauseState(bool _state) external { - if (msg.sender != pauser) revert NotPauser(); - isPaused = _state; - emit SetPauseState(_state); - } - - function setFeeManager(address _feeManager) external { - if (msg.sender != feeManager) revert NotFeeManager(); - if (_feeManager == address(0)) revert ZeroAddress(); - feeManager = _feeManager; - emit SetFeeManager(_feeManager); - } - - /// @inheritdoc IPoolFactory - function setFee(bool _stable, uint256 _fee) external { - if (msg.sender != feeManager) revert NotFeeManager(); - if (_fee > MAX_FEE) revert FeeTooHigh(); - if (_fee == 0) revert ZeroFee(); - if (_stable) { - stableFee = _fee; - } else { - volatileFee = _fee; - } - } - - /// @inheritdoc IPoolFactory - function setCustomFee(address pool, uint256 fee) external { - if (msg.sender != feeManager) revert NotFeeManager(); - if (fee > MAX_FEE && fee != ZERO_FEE_INDICATOR) revert FeeTooHigh(); - if (!_isPool[pool]) revert InvalidPool(); - - customFee[pool] = fee; - emit SetCustomFee(pool, fee); - } - - /// @inheritdoc IPoolFactory - function getFee(address pool, bool _stable) public view returns (uint256) { - uint256 fee = customFee[pool]; - return - fee == ZERO_FEE_INDICATOR - ? 0 - : fee != 0 - ? fee - : _stable - ? stableFee - : volatileFee; - } - - /// @inheritdoc IPoolFactory - function createPool( - address tokenA, - address tokenB, - uint24 fee - ) external returns (address pool) { - if (fee > 1) revert FeeInvalid(); - bool stable = fee == 1; - return createPool(tokenA, tokenB, stable); - } - - /// @inheritdoc IPoolFactory - function createPool( - address tokenA, - address tokenB, - bool stable - ) public returns (address pool) { - if (tokenA == tokenB) revert SameAddress(); - (address token0, address token1) = tokenA < tokenB - ? (tokenA, tokenB) - : (tokenB, tokenA); - if (token0 == address(0)) revert ZeroAddress(); - if (_getPool[token0][token1][stable] != address(0)) - revert PoolAlreadyExists(); - bytes32 salt = keccak256(abi.encodePacked(token0, token1, stable)); // salt includes stable as well, 3 parameters - pool = Clones.cloneDeterministic(implementation, salt); - IPool(pool).initialize(token0, token1, stable); - _getPool[token0][token1][stable] = pool; - _getPool[token1][token0][stable] = pool; // populate mapping in the reverse direction - allPools.push(pool); - _isPool[pool] = true; - emit PoolCreated(token0, token1, stable, pool, allPools.length); - } -} diff --git a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLFactory.sol b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLFactory.sol deleted file mode 100644 index eca09f5d..00000000 --- a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLFactory.sol +++ /dev/null @@ -1,234 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity =0.7.6; - -import './interfaces/ICLFactory.sol'; -import './interfaces/fees/IFeeModule.sol'; -import './interfaces/IVoter.sol'; -import './interfaces/IFactoryRegistry.sol'; -import '@openzeppelin/contracts/proxy/Clones.sol'; -import '@nomad-xyz/src/ExcessivelySafeCall.sol'; -import './CLPool.sol'; - -/// @title Canonical CL factory -/// @notice Deploys CL pools and manages ownership and control over pool protocol fees -contract CLFactory is ICLFactory { - using ExcessivelySafeCall for address; - - /// @inheritdoc ICLFactory - IVoter public immutable override voter; - /// @inheritdoc ICLFactory - address public immutable override poolImplementation; - /// @inheritdoc ICLFactory - IFactoryRegistry public immutable override factoryRegistry; - /// @inheritdoc ICLFactory - address public override owner; - /// @inheritdoc ICLFactory - address public override swapFeeManager; - /// @inheritdoc ICLFactory - address public override swapFeeModule; - /// @inheritdoc ICLFactory - address public override unstakedFeeManager; - /// @inheritdoc ICLFactory - address public override unstakedFeeModule; - /// @inheritdoc ICLFactory - uint24 public override defaultUnstakedFee; - /// @inheritdoc ICLFactory - mapping(int24 => uint24) public override tickSpacingToFee; - /// @inheritdoc ICLFactory - mapping(address => mapping(address => mapping(int24 => address))) - public - override getPool; - /// @dev Used in VotingEscrow to determine if a contract is a valid pool - mapping(address => bool) private _isPool; - /// @inheritdoc ICLFactory - address[] public override allPools; - - int24[] private _tickSpacings; - - constructor(address _voter, address _poolImplementation) { - owner = msg.sender; - swapFeeManager = msg.sender; - unstakedFeeManager = msg.sender; - voter = IVoter(_voter); - factoryRegistry = IVoter(_voter).factoryRegistry(); - poolImplementation = _poolImplementation; - defaultUnstakedFee = 100_000; - emit OwnerChanged(address(0), msg.sender); - emit SwapFeeManagerChanged(address(0), msg.sender); - emit UnstakedFeeManagerChanged(address(0), msg.sender); - emit DefaultUnstakedFeeChanged(0, 100_000); - - enableTickSpacing(1, 100); - enableTickSpacing(50, 500); - enableTickSpacing(100, 500); - enableTickSpacing(200, 3_000); - enableTickSpacing(2_000, 10_000); - } - - /// @inheritdoc ICLFactory - function createPool( - address tokenA, - address tokenB, - int24 tickSpacing, - uint160 sqrtPriceX96 - ) external override returns (address pool) { - require(tokenA != tokenB); - (address token0, address token1) = tokenA < tokenB - ? (tokenA, tokenB) - : (tokenB, tokenA); - require(token0 != address(0)); - require(tickSpacingToFee[tickSpacing] != 0); - require(getPool[token0][token1][tickSpacing] == address(0)); - pool = Clones.cloneDeterministic({ - master: poolImplementation, - salt: keccak256(abi.encode(token0, token1, tickSpacing)) - }); - CLPool(pool).initialize({ - _factory: address(this), - _token0: token0, - _token1: token1, - _tickSpacing: tickSpacing, - _factoryRegistry: address(factoryRegistry), - _sqrtPriceX96: sqrtPriceX96 - }); - allPools.push(pool); - _isPool[pool] = true; - getPool[token0][token1][tickSpacing] = pool; - // populate mapping in the reverse direction, deliberate choice to avoid the cost of comparing addresses - getPool[token1][token0][tickSpacing] = pool; - emit PoolCreated(token0, token1, tickSpacing, pool); - } - - /// @inheritdoc ICLFactory - function setOwner(address _owner) external override { - address cachedOwner = owner; - require(msg.sender == cachedOwner); - require(_owner != address(0)); - emit OwnerChanged(cachedOwner, _owner); - owner = _owner; - } - - /// @inheritdoc ICLFactory - function setSwapFeeManager(address _swapFeeManager) external override { - address cachedSwapFeeManager = swapFeeManager; - require(msg.sender == cachedSwapFeeManager); - require(_swapFeeManager != address(0)); - swapFeeManager = _swapFeeManager; - emit SwapFeeManagerChanged(cachedSwapFeeManager, _swapFeeManager); - } - - /// @inheritdoc ICLFactory - function setUnstakedFeeManager( - address _unstakedFeeManager - ) external override { - address cachedUnstakedFeeManager = unstakedFeeManager; - require(msg.sender == cachedUnstakedFeeManager); - require(_unstakedFeeManager != address(0)); - unstakedFeeManager = _unstakedFeeManager; - emit UnstakedFeeManagerChanged( - cachedUnstakedFeeManager, - _unstakedFeeManager - ); - } - - /// @inheritdoc ICLFactory - function setSwapFeeModule(address _swapFeeModule) external override { - require(msg.sender == swapFeeManager); - require(_swapFeeModule != address(0)); - address oldFeeModule = swapFeeModule; - swapFeeModule = _swapFeeModule; - emit SwapFeeModuleChanged(oldFeeModule, _swapFeeModule); - } - - /// @inheritdoc ICLFactory - function setUnstakedFeeModule(address _unstakedFeeModule) external override { - require(msg.sender == unstakedFeeManager); - require(_unstakedFeeModule != address(0)); - address oldFeeModule = unstakedFeeModule; - unstakedFeeModule = _unstakedFeeModule; - emit UnstakedFeeModuleChanged(oldFeeModule, _unstakedFeeModule); - } - - /// @inheritdoc ICLFactory - function setDefaultUnstakedFee(uint24 _defaultUnstakedFee) external override { - require(msg.sender == unstakedFeeManager); - require(_defaultUnstakedFee <= 500_000); - uint24 oldUnstakedFee = defaultUnstakedFee; - defaultUnstakedFee = _defaultUnstakedFee; - emit DefaultUnstakedFeeChanged(oldUnstakedFee, _defaultUnstakedFee); - } - - /// @inheritdoc ICLFactory - function getSwapFee(address pool) external view override returns (uint24) { - if (swapFeeModule != address(0)) { - (bool success, bytes memory data) = swapFeeModule - .excessivelySafeStaticCall( - 200_000, - 32, - abi.encodeWithSelector(IFeeModule.getFee.selector, pool) - ); - if (success) { - uint24 fee = abi.decode(data, (uint24)); - if (fee <= 100_000) { - return fee; - } - } - } - return tickSpacingToFee[CLPool(pool).tickSpacing()]; - } - - /// @inheritdoc ICLFactory - function getUnstakedFee( - address pool - ) external view override returns (uint24) { - address gauge = voter.gauges(pool); - if (!voter.isAlive(gauge) || gauge == address(0)) { - return 0; - } - if (unstakedFeeModule != address(0)) { - (bool success, bytes memory data) = unstakedFeeModule - .excessivelySafeStaticCall( - 200_000, - 32, - abi.encodeWithSelector(IFeeModule.getFee.selector, pool) - ); - if (success) { - uint24 fee = abi.decode(data, (uint24)); - if (fee <= 1_000_000) { - return fee; - } - } - } - return defaultUnstakedFee; - } - - /// @inheritdoc ICLFactory - function enableTickSpacing(int24 tickSpacing, uint24 fee) public override { - require(msg.sender == owner); - require(fee > 0 && fee <= 100_000); - // tick spacing is capped at 16384 to prevent the situation where tickSpacing is so large that - // TickBitmap#nextInitializedTickWithinOneWord overflows int24 container from a valid tick - // 16384 ticks represents a >5x price change with ticks of 1 bips - require(tickSpacing > 0 && tickSpacing < 16384); - require(tickSpacingToFee[tickSpacing] == 0); - - tickSpacingToFee[tickSpacing] = fee; - _tickSpacings.push(tickSpacing); - emit TickSpacingEnabled(tickSpacing, fee); - } - - /// @inheritdoc ICLFactory - function tickSpacings() external view override returns (int24[] memory) { - return _tickSpacings; - } - - /// @inheritdoc ICLFactory - function allPoolsLength() external view override returns (uint256) { - return allPools.length; - } - - /// @inheritdoc ICLFactory - function isPool(address pool) external view override returns (bool) { - return _isPool[pool]; - } -} diff --git a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLPool.sol b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLPool.sol deleted file mode 100644 index 7d642380..00000000 --- a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/contracts/core/CLPool.sol +++ /dev/null @@ -1,1329 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity =0.7.6; - -import './interfaces/ICLPool.sol'; - -import './libraries/LowGasSafeMath.sol'; -import './libraries/SafeCast.sol'; -import './libraries/Tick.sol'; -import './libraries/TickBitmap.sol'; -import './libraries/Position.sol'; -import './libraries/Oracle.sol'; - -import './libraries/FullMath.sol'; -import './libraries/FixedPoint128.sol'; -import './libraries/TransferHelper.sol'; -import './libraries/TickMath.sol'; -import './libraries/LiquidityMath.sol'; -import './libraries/SqrtPriceMath.sol'; -import './libraries/SwapMath.sol'; - -import './interfaces/ICLFactory.sol'; -import './interfaces/IFactoryRegistry.sol'; -import './interfaces/IERC20Minimal.sol'; -import './interfaces/callback/ICLMintCallback.sol'; -import './interfaces/callback/ICLSwapCallback.sol'; -import './interfaces/callback/ICLFlashCallback.sol'; -import 'contracts/libraries/ProtocolTimeLibrary.sol'; - -contract CLPool is ICLPool { - using LowGasSafeMath for uint256; - using LowGasSafeMath for int256; - using SafeCast for uint256; - using SafeCast for int256; - using Tick for mapping(int24 => Tick.Info); - using TickBitmap for mapping(int16 => uint256); - using Position for mapping(bytes32 => Position.Info); - using Position for Position.Info; - using Oracle for Oracle.Observation[65535]; - - /// @inheritdoc ICLPoolConstants - address public override factory; - /// @inheritdoc ICLPoolConstants - address public override token0; - /// @inheritdoc ICLPoolConstants - address public override token1; - /// @inheritdoc ICLPoolConstants - address public override gauge; - /// @inheritdoc ICLPoolConstants - address public override nft; - /// @inheritdoc ICLPoolConstants - address public override factoryRegistry; - - struct Slot0 { - // the current price - uint160 sqrtPriceX96; - // the current tick - int24 tick; - // the most-recently updated index of the observations array - uint16 observationIndex; - // the current maximum number of observations that are being stored - uint16 observationCardinality; - // the next maximum number of observations to store, triggered in observations.write - uint16 observationCardinalityNext; - // whether the pool is locked - bool unlocked; - } - - /// @inheritdoc ICLPoolState - Slot0 public override slot0; - - /// @inheritdoc ICLPoolState - uint256 public override feeGrowthGlobal0X128; - /// @inheritdoc ICLPoolState - uint256 public override feeGrowthGlobal1X128; - - /// @inheritdoc ICLPoolState - uint256 public override rewardGrowthGlobalX128; - - // accumulated gauge fees in token0/token1 units - struct GaugeFees { - uint128 token0; - uint128 token1; - } - - /// @inheritdoc ICLPoolState - GaugeFees public override gaugeFees; - - /// @inheritdoc ICLPoolState - uint256 public override rewardRate; - /// @inheritdoc ICLPoolState - uint256 public override rewardReserve; - /// @inheritdoc ICLPoolState - uint256 public override periodFinish; - /// @inheritdoc ICLPoolState - uint256 public override rollover; - - /// @inheritdoc ICLPoolState - uint128 public override stakedLiquidity; - /// @inheritdoc ICLPoolState - uint32 public override lastUpdated; - /// @inheritdoc ICLPoolConstants - int24 public override tickSpacing; - - /// @inheritdoc ICLPoolState - uint128 public override liquidity; - /// @inheritdoc ICLPoolConstants - uint128 public override maxLiquidityPerTick; - - /// @inheritdoc ICLPoolState - mapping(int24 => Tick.Info) public override ticks; - /// @inheritdoc ICLPoolState - mapping(int16 => uint256) public override tickBitmap; - /// @inheritdoc ICLPoolState - mapping(bytes32 => Position.Info) public override positions; - /// @inheritdoc ICLPoolState - Oracle.Observation[65535] public override observations; - - /// @dev Mutually exclusive reentrancy protection into the pool to/from a method. This method also prevents entrance - /// to a function before the pool is initialized. The reentrancy guard is required throughout the contract because - /// we use balance checks to determine the payment status of interactions such as mint, swap and flash. - modifier lock() { - require(slot0.unlocked, 'LOK'); - slot0.unlocked = false; - _; - slot0.unlocked = true; - } - - /// @dev Prevents calling a function from anyone except the gauge associated with this pool - modifier onlyGauge() { - require(msg.sender == gauge, 'NG'); - _; - } - - /// @dev Prevents calling a function from anyone except the nft manager - modifier onlyNftManager() { - require(msg.sender == nft, 'NNFT'); - _; - } - - /// @dev Prevents calling a function from anyone except the gauge factory - modifier onlyGaugeFactory() { - (, address gaugeFactory) = IFactoryRegistry(factoryRegistry) - .factoriesToPoolFactory(address(factory)); - require(msg.sender == gaugeFactory, 'NGF'); - _; - } - - /// @inheritdoc ICLPoolActions - function initialize( - address _factory, - address _token0, - address _token1, - int24 _tickSpacing, - address _factoryRegistry, - uint160 _sqrtPriceX96 - ) external override { - require(factory == address(0) && _factory != address(0)); - factory = _factory; - token0 = _token0; - token1 = _token1; - tickSpacing = _tickSpacing; - factoryRegistry = _factoryRegistry; - - maxLiquidityPerTick = Tick.tickSpacingToMaxLiquidityPerTick(_tickSpacing); - - int24 tick = TickMath.getTickAtSqrtRatio(_sqrtPriceX96); - - (uint16 cardinality, uint16 cardinalityNext) = observations.initialize( - _blockTimestamp() - ); - - slot0 = Slot0({ - sqrtPriceX96: _sqrtPriceX96, - tick: tick, - observationIndex: 0, - observationCardinality: cardinality, - observationCardinalityNext: cardinalityNext, - unlocked: true - }); - - emit Initialize(_sqrtPriceX96, tick); - } - - function fee() public view override returns (uint24) { - return ICLFactory(factory).getSwapFee(address(this)); - } - - function unstakedFee() public view override returns (uint24) { - return ICLFactory(factory).getUnstakedFee(address(this)); - } - - /// @dev Common checks for valid tick inputs. - function checkTicks(int24 tickLower, int24 tickUpper) private pure { - require(tickLower < tickUpper, 'TLU'); - require(tickLower >= TickMath.MIN_TICK, 'TLM'); - require(tickUpper <= TickMath.MAX_TICK, 'TUM'); - } - - /// @dev Returns the block timestamp truncated to 32 bits, i.e. mod 2**32. This method is overridden in tests. - function _blockTimestamp() internal view virtual returns (uint32) { - return uint32(block.timestamp); // truncation is desired - } - - /// @dev Get the pool's balance of token0 - /// @dev This function is gas optimized to avoid a redundant extcodesize check in addition to the returndatasize - /// check - function balance0() private view returns (uint256) { - (bool success, bytes memory data) = token0.staticcall( - abi.encodeWithSelector(IERC20Minimal.balanceOf.selector, address(this)) - ); - require(success && data.length >= 32); - return abi.decode(data, (uint256)); - } - - /// @dev Get the pool's balance of token1 - /// @dev This function is gas optimized to avoid a redundant extcodesize check in addition to the returndatasize - /// check - function balance1() private view returns (uint256) { - (bool success, bytes memory data) = token1.staticcall( - abi.encodeWithSelector(IERC20Minimal.balanceOf.selector, address(this)) - ); - require(success && data.length >= 32); - return abi.decode(data, (uint256)); - } - - /// @inheritdoc ICLPoolDerivedState - function snapshotCumulativesInside( - int24 tickLower, - int24 tickUpper - ) - external - view - override - returns ( - int56 tickCumulativeInside, - uint160 secondsPerLiquidityInsideX128, - uint32 secondsInside - ) - { - checkTicks(tickLower, tickUpper); - - int56 tickCumulativeLower; - int56 tickCumulativeUpper; - uint160 secondsPerLiquidityOutsideLowerX128; - uint160 secondsPerLiquidityOutsideUpperX128; - uint32 secondsOutsideLower; - uint32 secondsOutsideUpper; - - { - Tick.Info storage lower = ticks[tickLower]; - Tick.Info storage upper = ticks[tickUpper]; - bool initializedLower; - ( - tickCumulativeLower, - secondsPerLiquidityOutsideLowerX128, - secondsOutsideLower, - initializedLower - ) = ( - lower.tickCumulativeOutside, - lower.secondsPerLiquidityOutsideX128, - lower.secondsOutside, - lower.initialized - ); - require(initializedLower); - - bool initializedUpper; - ( - tickCumulativeUpper, - secondsPerLiquidityOutsideUpperX128, - secondsOutsideUpper, - initializedUpper - ) = ( - upper.tickCumulativeOutside, - upper.secondsPerLiquidityOutsideX128, - upper.secondsOutside, - upper.initialized - ); - require(initializedUpper); - } - - Slot0 memory _slot0 = slot0; - - if (_slot0.tick < tickLower) { - return ( - tickCumulativeLower - tickCumulativeUpper, - secondsPerLiquidityOutsideLowerX128 - - secondsPerLiquidityOutsideUpperX128, - secondsOutsideLower - secondsOutsideUpper - ); - } else if (_slot0.tick < tickUpper) { - uint32 time = _blockTimestamp(); - ( - int56 tickCumulative, - uint160 secondsPerLiquidityCumulativeX128 - ) = observations.observeSingle( - time, - 0, - _slot0.tick, - _slot0.observationIndex, - liquidity, - _slot0.observationCardinality - ); - return ( - tickCumulative - tickCumulativeLower - tickCumulativeUpper, - secondsPerLiquidityCumulativeX128 - - secondsPerLiquidityOutsideLowerX128 - - secondsPerLiquidityOutsideUpperX128, - time - secondsOutsideLower - secondsOutsideUpper - ); - } else { - return ( - tickCumulativeUpper - tickCumulativeLower, - secondsPerLiquidityOutsideUpperX128 - - secondsPerLiquidityOutsideLowerX128, - secondsOutsideUpper - secondsOutsideLower - ); - } - } - - /// @inheritdoc ICLPoolDerivedState - function observe( - uint32[] calldata secondsAgos - ) - external - view - override - returns ( - int56[] memory tickCumulatives, - uint160[] memory secondsPerLiquidityCumulativeX128s - ) - { - return - observations.observe( - _blockTimestamp(), - secondsAgos, - slot0.tick, - slot0.observationIndex, - liquidity, - slot0.observationCardinality - ); - } - - /// @inheritdoc ICLPoolActions - function increaseObservationCardinalityNext( - uint16 observationCardinalityNext - ) external override lock { - uint16 observationCardinalityNextOld = slot0.observationCardinalityNext; // for the event - uint16 observationCardinalityNextNew = observations.grow( - observationCardinalityNextOld, - observationCardinalityNext - ); - slot0.observationCardinalityNext = observationCardinalityNextNew; - if (observationCardinalityNextOld != observationCardinalityNextNew) { - emit IncreaseObservationCardinalityNext( - observationCardinalityNextOld, - observationCardinalityNextNew - ); - } - } - - struct ModifyPositionParams { - // the address that owns the position - address owner; - // the lower and upper tick of the position - int24 tickLower; - int24 tickUpper; - // any change in liquidity - int128 liquidityDelta; - } - - /// @dev Effect some changes to a position - /// @param params the position details and the change to the position's liquidity to effect - /// @return position a storage pointer referencing the position with the given owner and tick range - /// @return amount0 the amount of token0 owed to the pool, negative if the pool should pay the recipient - /// @return amount1 the amount of token1 owed to the pool, negative if the pool should pay the recipient - function _modifyPosition( - ModifyPositionParams memory params - ) - private - returns (Position.Info storage position, int256 amount0, int256 amount1) - { - checkTicks(params.tickLower, params.tickUpper); - - Slot0 memory _slot0 = slot0; // SLOAD for gas optimization - - position = _updatePosition( - params.owner, - params.tickLower, - params.tickUpper, - params.liquidityDelta, - _slot0.tick - ); - - if (params.liquidityDelta != 0) { - if (_slot0.tick < params.tickLower) { - // current tick is below the passed range; liquidity can only become in range by crossing from left to - // right, when we'll need _more_ token0 (it's becoming more valuable) so user must provide it - amount0 = SqrtPriceMath.getAmount0Delta( - TickMath.getSqrtRatioAtTick(params.tickLower), - TickMath.getSqrtRatioAtTick(params.tickUpper), - params.liquidityDelta - ); - } else if (_slot0.tick < params.tickUpper) { - // current tick is inside the passed range - uint128 liquidityBefore = liquidity; // SLOAD for gas optimization - - // write an oracle entry - (slot0.observationIndex, slot0.observationCardinality) = observations - .write( - _slot0.observationIndex, - _blockTimestamp(), - _slot0.tick, - liquidityBefore, - _slot0.observationCardinality, - _slot0.observationCardinalityNext - ); - - amount0 = SqrtPriceMath.getAmount0Delta( - _slot0.sqrtPriceX96, - TickMath.getSqrtRatioAtTick(params.tickUpper), - params.liquidityDelta - ); - amount1 = SqrtPriceMath.getAmount1Delta( - TickMath.getSqrtRatioAtTick(params.tickLower), - _slot0.sqrtPriceX96, - params.liquidityDelta - ); - - liquidity = LiquidityMath.addDelta( - liquidityBefore, - params.liquidityDelta - ); - } else { - // current tick is above the passed range; liquidity can only become in range by crossing from right to - // left, when we'll need _more_ token1 (it's becoming more valuable) so user must provide it - amount1 = SqrtPriceMath.getAmount1Delta( - TickMath.getSqrtRatioAtTick(params.tickLower), - TickMath.getSqrtRatioAtTick(params.tickUpper), - params.liquidityDelta - ); - } - } - } - - /// @dev Gets and updates a position with the given liquidity delta - /// @param owner the owner of the position - /// @param tickLower the lower tick of the position's tick range - /// @param tickUpper the upper tick of the position's tick range - /// @param tick the current tick, passed to avoid sloads - function _updatePosition( - address owner, - int24 tickLower, - int24 tickUpper, - int128 liquidityDelta, - int24 tick - ) private returns (Position.Info storage position) { - position = positions.get(owner, tickLower, tickUpper); - - uint256 _feeGrowthGlobal0X128 = feeGrowthGlobal0X128; // SLOAD for gas optimization - uint256 _feeGrowthGlobal1X128 = feeGrowthGlobal1X128; // SLOAD for gas optimization - - // if we need to update the ticks, do it - bool flippedLower; - bool flippedUpper; - if (liquidityDelta != 0) { - uint32 time = _blockTimestamp(); - ( - int56 tickCumulative, - uint160 secondsPerLiquidityCumulativeX128 - ) = observations.observeSingle( - time, - 0, - slot0.tick, - slot0.observationIndex, - liquidity, - slot0.observationCardinality - ); - - flippedLower = ticks.update( - tickLower, - tick, - liquidityDelta, - _feeGrowthGlobal0X128, - _feeGrowthGlobal1X128, - secondsPerLiquidityCumulativeX128, - tickCumulative, - time, - false, - maxLiquidityPerTick - ); - flippedUpper = ticks.update( - tickUpper, - tick, - liquidityDelta, - _feeGrowthGlobal0X128, - _feeGrowthGlobal1X128, - secondsPerLiquidityCumulativeX128, - tickCumulative, - time, - true, - maxLiquidityPerTick - ); - - if (flippedLower) { - tickBitmap.flipTick(tickLower, tickSpacing); - } - if (flippedUpper) { - tickBitmap.flipTick(tickUpper, tickSpacing); - } - } - - (uint256 feeGrowthInside0X128, uint256 feeGrowthInside1X128) = ticks - .getFeeGrowthInside( - tickLower, - tickUpper, - tick, - _feeGrowthGlobal0X128, - _feeGrowthGlobal1X128 - ); - - bool staked = (owner == gauge) && (owner != address(0)); - position.update( - liquidityDelta, - feeGrowthInside0X128, - feeGrowthInside1X128, - staked - ); - - // clear any tick data that is no longer needed - if (liquidityDelta < 0) { - if (flippedLower) { - ticks.clear(tickLower); - } - if (flippedUpper) { - ticks.clear(tickUpper); - } - } - } - - /// @inheritdoc ICLPoolActions - function mint( - address recipient, - int24 tickLower, - int24 tickUpper, - uint128 amount, - bytes calldata data - ) external override lock returns (uint256 amount0, uint256 amount1) { - require(amount > 0); - (, int256 amount0Int, int256 amount1Int) = _modifyPosition( - ModifyPositionParams({ - owner: recipient, - tickLower: tickLower, - tickUpper: tickUpper, - liquidityDelta: int256(amount).toInt128() - }) - ); - - amount0 = uint256(amount0Int); - amount1 = uint256(amount1Int); - - uint256 balance0Before; - uint256 balance1Before; - if (amount0 > 0) balance0Before = balance0(); - if (amount1 > 0) balance1Before = balance1(); - ICLMintCallback(msg.sender).uniswapV3MintCallback(amount0, amount1, data); - if (amount0 > 0) require(balance0Before.add(amount0) <= balance0(), 'M0'); - if (amount1 > 0) require(balance1Before.add(amount1) <= balance1(), 'M1'); - - emit Mint( - msg.sender, - recipient, - tickLower, - tickUpper, - amount, - amount0, - amount1 - ); - } - - /// @inheritdoc ICLPoolActions - function collect( - address recipient, - int24 tickLower, - int24 tickUpper, - uint128 amount0Requested, - uint128 amount1Requested - ) external override lock returns (uint128 amount0, uint128 amount1) { - (amount0, amount1) = _collect({ - recipient: recipient, - tickLower: tickLower, - tickUpper: tickUpper, - amount0Requested: amount0Requested, - amount1Requested: amount1Requested, - owner: msg.sender - }); - } - - /// @inheritdoc ICLPoolActions - function collect( - address recipient, - int24 tickLower, - int24 tickUpper, - uint128 amount0Requested, - uint128 amount1Requested, - address owner - ) - external - override - lock - onlyNftManager - returns (uint128 amount0, uint128 amount1) - { - (amount0, amount1) = _collect({ - recipient: recipient, - tickLower: tickLower, - tickUpper: tickUpper, - amount0Requested: amount0Requested, - amount1Requested: amount1Requested, - owner: owner - }); - } - - function _collect( - address recipient, - int24 tickLower, - int24 tickUpper, - uint128 amount0Requested, - uint128 amount1Requested, - address owner - ) private returns (uint128 amount0, uint128 amount1) { - // we don't need to checkTicks here, because invalid positions will never have non-zero tokensOwed{0,1} - Position.Info storage position = positions.get(owner, tickLower, tickUpper); - - amount0 = amount0Requested > position.tokensOwed0 - ? position.tokensOwed0 - : amount0Requested; - amount1 = amount1Requested > position.tokensOwed1 - ? position.tokensOwed1 - : amount1Requested; - - if (amount0 > 0) { - position.tokensOwed0 -= amount0; - TransferHelper.safeTransfer(token0, recipient, amount0); - } - if (amount1 > 0) { - position.tokensOwed1 -= amount1; - TransferHelper.safeTransfer(token1, recipient, amount1); - } - - emit Collect(owner, recipient, tickLower, tickUpper, amount0, amount1); - } - - /// @inheritdoc ICLPoolActions - function burn( - int24 tickLower, - int24 tickUpper, - uint128 amount - ) external override lock returns (uint256 amount0, uint256 amount1) { - (amount0, amount1) = _burn({ - tickLower: tickLower, - tickUpper: tickUpper, - amount: amount, - owner: msg.sender - }); - } - - /// @inheritdoc ICLPoolActions - function burn( - int24 tickLower, - int24 tickUpper, - uint128 amount, - address owner - ) - external - override - lock - onlyNftManager - returns (uint256 amount0, uint256 amount1) - { - (amount0, amount1) = _burn({ - tickLower: tickLower, - tickUpper: tickUpper, - amount: amount, - owner: owner - }); - } - - function _burn( - int24 tickLower, - int24 tickUpper, - uint128 amount, - address owner - ) private returns (uint256 amount0, uint256 amount1) { - ( - Position.Info storage position, - int256 amount0Int, - int256 amount1Int - ) = _modifyPosition( - ModifyPositionParams({ - owner: owner, - tickLower: tickLower, - tickUpper: tickUpper, - liquidityDelta: -int256(amount).toInt128() - }) - ); - - amount0 = uint256(-amount0Int); - amount1 = uint256(-amount1Int); - - if (amount0 > 0 || amount1 > 0) { - (position.tokensOwed0, position.tokensOwed1) = ( - position.tokensOwed0 + uint128(amount0), - position.tokensOwed1 + uint128(amount1) - ); - } - - emit Burn(owner, tickLower, tickUpper, amount, amount0, amount1); - } - - /// @inheritdoc ICLPoolActions - function stake( - int128 stakedLiquidityDelta, - int24 tickLower, - int24 tickUpper, - bool positionUpdate - ) external override lock onlyGauge { - int24 tick = slot0.tick; - // Increase staked liquidity in the current tick - if (tick >= tickLower && tick < tickUpper) { - _updateRewardsGrowthGlobal(); - stakedLiquidity = LiquidityMath.addDelta( - stakedLiquidity, - stakedLiquidityDelta - ); - } - - if (positionUpdate) { - Position.Info storage nftPosition = positions.get( - nft, - tickLower, - tickUpper - ); - Position.Info storage gaugePosition = positions.get( - gauge, - tickLower, - tickUpper - ); - - (uint256 feeGrowthInside0X128, uint256 feeGrowthInside1X128) = ticks - .getFeeGrowthInside( - tickLower, - tickUpper, - tick, - feeGrowthGlobal0X128, - feeGrowthGlobal1X128 - ); - - // Assign the staked positions virtually to the gauge - nftPosition.update( - -stakedLiquidityDelta, - feeGrowthInside0X128, - feeGrowthInside1X128, - false - ); - gaugePosition.update( - stakedLiquidityDelta, - feeGrowthInside0X128, - feeGrowthInside1X128, - true - ); - } - - // Update tick locations where staked liquidity needs to be added or subtracted - // Only update ticks if current tick is initialized - if (ticks[tickLower].initialized) - ticks.updateStake(tickLower, stakedLiquidityDelta, false); - if (ticks[tickUpper].initialized) - ticks.updateStake(tickUpper, stakedLiquidityDelta, true); - } - - struct SwapCache { - // liquidity at the beginning of the swap - uint128 liquidityStart; - // staked liquidity at the beginning of the swap - uint128 stakedLiquidityStart; - // the timestamp of the current block - uint32 blockTimestamp; - // the current value of the tick accumulator, computed only if we cross an initialized tick - int56 tickCumulative; - // the current value of seconds per liquidity accumulator, computed only if we cross an initialized tick - uint160 secondsPerLiquidityCumulativeX128; - // whether we've computed and cached the above two accumulators - bool computedLatestObservation; - } - - // the top level state of the swap, the results of which are recorded in storage at the end - struct SwapState { - // the amount remaining to be swapped in/out of the input/output asset - int256 amountSpecifiedRemaining; - // the amount already swapped out/in of the output/input asset - int256 amountCalculated; - // current sqrt(price) - uint160 sqrtPriceX96; - // the tick associated with the current price - int24 tick; - // the fee associated with the pool - uint24 fee; - // wether we've updated the fees in the current swap - bool hasUpdatedFees; - // the global fee growth of the input token - uint256 feeGrowthGlobalX128; - // amount of input token paid as gauge fee - uint128 gaugeFee; - // the current liquidity in range - uint128 liquidity; - // the current staked liquidity in range - uint128 stakedLiquidity; - } - - struct StepComputations { - // the price at the beginning of the step - uint160 sqrtPriceStartX96; - // the next tick to swap to from the current tick in the swap direction - int24 tickNext; - // whether tickNext is initialized or not - bool initialized; - // sqrt(price) for the next tick (1/0) - uint160 sqrtPriceNextX96; - // how much is being swapped in in this step - uint256 amountIn; - // how much is being swapped out - uint256 amountOut; - // how much fee is being paid in - uint256 feeAmount; - } - - /// @inheritdoc ICLPoolActions - function swap( - address recipient, - bool zeroForOne, - int256 amountSpecified, - uint160 sqrtPriceLimitX96, - bytes calldata data - ) external override returns (int256 amount0, int256 amount1) { - require(amountSpecified != 0, 'AS'); - - Slot0 memory slot0Start = slot0; - - require(slot0Start.unlocked, 'LOK'); - require( - zeroForOne - ? sqrtPriceLimitX96 < slot0Start.sqrtPriceX96 && - sqrtPriceLimitX96 > TickMath.MIN_SQRT_RATIO - : sqrtPriceLimitX96 > slot0Start.sqrtPriceX96 && - sqrtPriceLimitX96 < TickMath.MAX_SQRT_RATIO, - 'SPL' - ); - - slot0.unlocked = false; - - SwapCache memory cache = SwapCache({ - liquidityStart: liquidity, - stakedLiquidityStart: stakedLiquidity, - blockTimestamp: _blockTimestamp(), - secondsPerLiquidityCumulativeX128: 0, - tickCumulative: 0, - computedLatestObservation: false - }); - - bool exactInput = amountSpecified > 0; - - SwapState memory state = SwapState({ - amountSpecifiedRemaining: amountSpecified, - amountCalculated: 0, - sqrtPriceX96: slot0Start.sqrtPriceX96, - tick: slot0Start.tick, - fee: fee(), - hasUpdatedFees: false, - feeGrowthGlobalX128: zeroForOne - ? feeGrowthGlobal0X128 - : feeGrowthGlobal1X128, - gaugeFee: 0, - liquidity: cache.liquidityStart, - stakedLiquidity: cache.stakedLiquidityStart - }); - - // continue swapping as long as we haven't used the entire input/output and haven't reached the price limit - while ( - state.amountSpecifiedRemaining != 0 && - state.sqrtPriceX96 != sqrtPriceLimitX96 - ) { - StepComputations memory step; - - step.sqrtPriceStartX96 = state.sqrtPriceX96; - - (step.tickNext, step.initialized) = tickBitmap - .nextInitializedTickWithinOneWord(state.tick, tickSpacing, zeroForOne); - - // ensure that we do not overshoot the min/max tick, as the tick bitmap is not aware of these bounds - if (step.tickNext < TickMath.MIN_TICK) { - step.tickNext = TickMath.MIN_TICK; - } else if (step.tickNext > TickMath.MAX_TICK) { - step.tickNext = TickMath.MAX_TICK; - } - - // get the price for the next tick - step.sqrtPriceNextX96 = TickMath.getSqrtRatioAtTick(step.tickNext); - - // compute values to swap to the target tick, price limit, or point where input/output amount is exhausted - ( - state.sqrtPriceX96, - step.amountIn, - step.amountOut, - step.feeAmount - ) = SwapMath.computeSwapStep( - state.sqrtPriceX96, - ( - zeroForOne - ? step.sqrtPriceNextX96 < sqrtPriceLimitX96 - : step.sqrtPriceNextX96 > sqrtPriceLimitX96 - ) - ? sqrtPriceLimitX96 - : step.sqrtPriceNextX96, - state.liquidity, - state.amountSpecifiedRemaining, - state.fee - ); - - if (exactInput) { - state.amountSpecifiedRemaining -= (step.amountIn + step.feeAmount) - .toInt256(); - state.amountCalculated = state.amountCalculated.sub( - step.amountOut.toInt256() - ); - } else { - state.amountSpecifiedRemaining += step.amountOut.toInt256(); - state.amountCalculated = state.amountCalculated.add( - (step.amountIn + step.feeAmount).toInt256() - ); - } - - // update global fee tracker and gauge fee - if (state.liquidity > 0) { - ( - uint256 _feeGrowthGlobalX128, - uint256 _stakedFeeAmount - ) = calculateFees( - step.feeAmount, - state.liquidity, - state.stakedLiquidity - ); - - state.feeGrowthGlobalX128 += _feeGrowthGlobalX128; - state.gaugeFee += uint128(_stakedFeeAmount); - } - - // shift tick if we reached the next price - if (state.sqrtPriceX96 == step.sqrtPriceNextX96) { - // if the tick is initialized, run the tick transition - if (step.initialized) { - // check for the placeholder value, which we replace with the actual value the first time the swap - // crosses an initialized tick - if (!cache.computedLatestObservation) { - ( - cache.tickCumulative, - cache.secondsPerLiquidityCumulativeX128 - ) = observations.observeSingle( - cache.blockTimestamp, - 0, - slot0Start.tick, - slot0Start.observationIndex, - cache.liquidityStart, - slot0Start.observationCardinality - ); - cache.computedLatestObservation = true; - } - if (!state.hasUpdatedFees) { - _updateRewardsGrowthGlobal(); - state.hasUpdatedFees = true; - } - Tick.LiquidityNets memory nets = ticks.cross( - step.tickNext, - (zeroForOne ? state.feeGrowthGlobalX128 : feeGrowthGlobal0X128), - (zeroForOne ? feeGrowthGlobal1X128 : state.feeGrowthGlobalX128), - cache.secondsPerLiquidityCumulativeX128, - cache.tickCumulative, - cache.blockTimestamp, - rewardGrowthGlobalX128 - ); - // if we're moving leftward, we interpret liquidityNet & stakedLiquidityNet as the opposite sign - // safe because liquidityNet & stakedLiquidityNet cannot be type(int128).min - if (zeroForOne) { - nets.liquidityNet = -nets.liquidityNet; - nets.stakedLiquidityNet = -nets.stakedLiquidityNet; - } - - state.liquidity = LiquidityMath.addDelta( - state.liquidity, - nets.liquidityNet - ); - state.stakedLiquidity = LiquidityMath.addDelta( - state.stakedLiquidity, - nets.stakedLiquidityNet - ); - } - - state.tick = zeroForOne ? step.tickNext - 1 : step.tickNext; - } else if (state.sqrtPriceX96 != step.sqrtPriceStartX96) { - // recompute unless we're on a lower tick boundary (i.e. already transitioned ticks), and haven't moved - state.tick = TickMath.getTickAtSqrtRatio(state.sqrtPriceX96); - } - } - - // update tick and write an oracle entry if the tick change - if (state.tick != slot0Start.tick) { - (uint16 observationIndex, uint16 observationCardinality) = observations - .write( - slot0Start.observationIndex, - cache.blockTimestamp, - slot0Start.tick, - cache.liquidityStart, - slot0Start.observationCardinality, - slot0Start.observationCardinalityNext - ); - ( - slot0.sqrtPriceX96, - slot0.tick, - slot0.observationIndex, - slot0.observationCardinality - ) = ( - state.sqrtPriceX96, - state.tick, - observationIndex, - observationCardinality - ); - } else { - // otherwise just update the price - slot0.sqrtPriceX96 = state.sqrtPriceX96; - } - - // update liquidity and stakedLiquidity if it changed - if (cache.liquidityStart != state.liquidity) liquidity = state.liquidity; - if (cache.stakedLiquidityStart != state.stakedLiquidity) - stakedLiquidity = state.stakedLiquidity; - - // update fee growth global and, if necessary, gauge fees - // overflow is acceptable, protocol has to withdraw before it hits type(uint128).max fees - if (zeroForOne) { - feeGrowthGlobal0X128 = state.feeGrowthGlobalX128; - if (state.gaugeFee > 0) gaugeFees.token0 += state.gaugeFee; - } else { - feeGrowthGlobal1X128 = state.feeGrowthGlobalX128; - if (state.gaugeFee > 0) gaugeFees.token1 += state.gaugeFee; - } - - (amount0, amount1) = zeroForOne == exactInput - ? ( - amountSpecified - state.amountSpecifiedRemaining, - state.amountCalculated - ) - : ( - state.amountCalculated, - amountSpecified - state.amountSpecifiedRemaining - ); - - // do the transfers and collect payment - if (zeroForOne) { - if (amount1 < 0) - TransferHelper.safeTransfer(token1, recipient, uint256(-amount1)); - - uint256 balance0Before = balance0(); - ICLSwapCallback(msg.sender).uniswapV3SwapCallback(amount0, amount1, data); - require(balance0Before.add(uint256(amount0)) <= balance0(), 'IIA'); - } else { - if (amount0 < 0) - TransferHelper.safeTransfer(token0, recipient, uint256(-amount0)); - - uint256 balance1Before = balance1(); - ICLSwapCallback(msg.sender).uniswapV3SwapCallback(amount0, amount1, data); - require(balance1Before.add(uint256(amount1)) <= balance1(), 'IIA'); - } - - emit Swap( - msg.sender, - recipient, - amount0, - amount1, - state.sqrtPriceX96, - state.liquidity, - state.tick - ); - slot0.unlocked = true; - } - - /// @inheritdoc ICLPoolActions - function flash( - address recipient, - uint256 amount0, - uint256 amount1, - bytes calldata data - ) external override lock { - uint128 _liquidity = liquidity; - require(_liquidity > 0, 'L'); - - uint256 fee0 = FullMath.mulDivRoundingUp(amount0, fee(), 1e6); - uint256 fee1 = FullMath.mulDivRoundingUp(amount1, fee(), 1e6); - uint256 balance0Before = balance0(); - uint256 balance1Before = balance1(); - - if (amount0 > 0) TransferHelper.safeTransfer(token0, recipient, amount0); - if (amount1 > 0) TransferHelper.safeTransfer(token1, recipient, amount1); - - ICLFlashCallback(msg.sender).uniswapV3FlashCallback(fee0, fee1, data); - - uint256 balance0After = balance0(); - uint256 balance1After = balance1(); - - require(balance0Before.add(fee0) <= balance0After, 'F0'); - require(balance1Before.add(fee1) <= balance1After, 'F1'); - - // sub is safe because we know balanceAfter is gt balanceBefore by at least fee - uint256 paid0 = balance0After - balance0Before; - uint256 paid1 = balance1After - balance1Before; - - if (paid0 > 0) { - (uint256 feeGrowthGlobalX128, uint256 stakedFeeAmount) = calculateFees( - paid0, - _liquidity, - stakedLiquidity - ); - - if (feeGrowthGlobalX128 > 0) feeGrowthGlobal0X128 += feeGrowthGlobalX128; - if (uint128(stakedFeeAmount) > 0) - gaugeFees.token0 += uint128(stakedFeeAmount); - } - if (paid1 > 0) { - (uint256 feeGrowthGlobalX128, uint256 stakedFeeAmount) = calculateFees( - paid1, - _liquidity, - stakedLiquidity - ); - - if (feeGrowthGlobalX128 > 0) feeGrowthGlobal1X128 += feeGrowthGlobalX128; - if (uint128(stakedFeeAmount) > 0) - gaugeFees.token1 += uint128(stakedFeeAmount); - } - emit Flash(msg.sender, recipient, amount0, amount1, paid0, paid1); - } - - /// @inheritdoc ICLPoolState - function getRewardGrowthInside( - int24 tickLower, - int24 tickUpper, - uint256 _rewardGrowthGlobalX128 - ) external view override returns (uint256 rewardGrowthInside) { - checkTicks(tickLower, tickUpper); - if (_rewardGrowthGlobalX128 == 0) - _rewardGrowthGlobalX128 = rewardGrowthGlobalX128; - - return - ticks.getRewardGrowthInside( - tickLower, - tickUpper, - slot0.tick, - _rewardGrowthGlobalX128 - ); - } - - /// @inheritdoc ICLPoolActions - function updateRewardsGrowthGlobal() external override lock onlyGauge { - _updateRewardsGrowthGlobal(); - } - - /// @dev timeDelta != 0 handles case when function is called twice in the same block. - /// @dev stakedLiquidity > 0 handles case when depositing staked liquidity and there is no liquidity staked yet, - /// @dev or when notifying rewards when there is no liquidity stake - function _updateRewardsGrowthGlobal() internal { - uint32 timestamp = _blockTimestamp(); - uint256 _lastUpdated = lastUpdated; - uint256 timeDelta = timestamp - _lastUpdated; // skip if second call in same block - - if (timeDelta != 0) { - if (rewardReserve > 0) { - uint256 reward = rewardRate * timeDelta; - if (reward > rewardReserve) reward = rewardReserve; - rewardReserve -= reward; - if (stakedLiquidity > 0) { - rewardGrowthGlobalX128 += FullMath.mulDiv( - reward, - FixedPoint128.Q128, - stakedLiquidity - ); - } else { - rollover += reward; - } - } - lastUpdated = timestamp; - } - } - - /// @inheritdoc ICLPoolActions - function syncReward( - uint256 _rewardRate, - uint256 _rewardReserve, - uint256 _periodFinish - ) external override lock onlyGauge { - rewardRate = _rewardRate; - rewardReserve = _rewardReserve; - periodFinish = _periodFinish; - delete rollover; - } - - /// @notice Calculates the fees owed to staked liquidity, then calculates fee levied on unstaked liquidity - /// @param feeAmount Total fees - /// @param _liquidity Current liquidity in active tick - /// @param _stakedLiquidity Current staked liquidity in active tick - /// @return unstakedFeeAmount Fee amount for unstaked LPs after accounting for staked liquidity contribution and unstaked fee - /// @return stakedFeeAmount Fee amount for staked LPs consisting of staked liquidity contribution and unstaked fee - function splitFees( - uint256 feeAmount, - uint128 _liquidity, - uint128 _stakedLiquidity - ) internal view returns (uint256 unstakedFeeAmount, uint256 stakedFeeAmount) { - stakedFeeAmount = FullMath.mulDivRoundingUp( - feeAmount, - _stakedLiquidity, - _liquidity - ); - (unstakedFeeAmount, stakedFeeAmount) = applyUnstakedFees( - feeAmount - stakedFeeAmount, - stakedFeeAmount - ); - } - - /// @notice Calculates fee for levied on unstaked liquidity only - /// @param _unstakedFeeAmount Fee amount for unstaked LPs net of staked liquidity contribution - /// @param _stakedFeeAmount Fee amount for staked LPs consisting of staked liquidity contribution - /// @return unstakedFeeAmount Fee amount for unstaked LPs after accounting for staked liquidity contribution and unstaked fee - /// @return stakedFeeAmount Fee amount for staked LPs consisting of staked liquidity contribution and unstaked fee - function applyUnstakedFees( - uint256 _unstakedFeeAmount, - uint256 _stakedFeeAmount - ) internal view returns (uint256 unstakedFeeAmount, uint256 stakedFeeAmount) { - uint256 _stakedFee = FullMath.mulDivRoundingUp( - _unstakedFeeAmount, - unstakedFee(), - 1_000_000 - ); - unstakedFeeAmount = _unstakedFeeAmount - _stakedFee; - stakedFeeAmount = _stakedFeeAmount + _stakedFee; - } - - // calculates the fee growths for unstaked liquidity and returns it with the staked fee amount - function calculateFees( - uint256 feeAmount, - uint128 _liquidity, - uint128 _stakedLiquidity - ) - internal - view - returns (uint256 feeGrowthGlobalX128, uint256 stakedFeeAmount) - { - // if there is only staked liquidity - if (_liquidity == _stakedLiquidity) { - stakedFeeAmount = feeAmount; - } - // if there is only unstaked liquidity - else if (_stakedLiquidity == 0) { - (uint256 unstakedFeeAmount, uint256 _stakedFeeAmount) = applyUnstakedFees( - feeAmount, - 0 - ); - feeGrowthGlobalX128 = FullMath.mulDiv( - unstakedFeeAmount, - FixedPoint128.Q128, - _liquidity - ); - stakedFeeAmount = _stakedFeeAmount; - } - // if there are staked and unstaked liquidities - else { - (uint256 unstakedFeeAmount, uint256 _stakedFeeAmount) = splitFees( - feeAmount, - _liquidity, - _stakedLiquidity - ); - feeGrowthGlobalX128 = FullMath.mulDiv( - unstakedFeeAmount, - FixedPoint128.Q128, - _liquidity - _stakedLiquidity - ); - stakedFeeAmount = _stakedFeeAmount; - } - } - - /// @inheritdoc ICLPoolOwnerActions - function collectFees() - external - override - lock - onlyGauge - returns (uint128 amount0, uint128 amount1) - { - amount0 = gaugeFees.token0; - amount1 = gaugeFees.token1; - if (amount0 > 1) { - // ensure that the slot is not cleared, for gas savings - gaugeFees.token0 = 1; - TransferHelper.safeTransfer(token0, msg.sender, --amount0); - } - if (amount1 > 1) { - // ensure that the slot is not cleared, for gas savings - gaugeFees.token1 = 1; - TransferHelper.safeTransfer(token1, msg.sender, --amount1); - } - - emit CollectFees(msg.sender, amount0, amount1); - } - - /// @inheritdoc ICLPoolActions - function setGaugeAndPositionManager( - address _gauge, - address _nft - ) external override lock onlyGaugeFactory { - require(gauge == address(0)); - gauge = _gauge; - nft = _nft; - } -} diff --git a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/lib/openzeppelin-contracts/contracts/proxy /Clones.sol b/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/lib/openzeppelin-contracts/contracts/proxy /Clones.sol deleted file mode 100644 index 093ae215..00000000 --- a/packages/dodoex-widgets/src/widgets/ve33/aerodrome-slipstream/lib/openzeppelin-contracts/contracts/proxy /Clones.sol +++ /dev/null @@ -1,109 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v4.8.0) (proxy/Clones.sol) - -pragma solidity ^0.8.0; - -/** - * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for - * deploying minimal proxy contracts, also known as "clones". - * - * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies - * > a minimal bytecode implementation that delegates all calls to a known, fixed address. - * - * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` - * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the - * deterministic method. - * - * _Available since v3.4._ - */ -library Clones { - /** - * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. - * - * This function uses the create opcode, which should never revert. - */ - function clone(address implementation) internal returns (address instance) { - /// @solidity memory-safe-assembly - assembly { - // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes - // of the `implementation` address with the bytecode before the address. - mstore( - 0x00, - or( - shr(0xe8, shl(0x60, implementation)), - 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000 - ) - ) - // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. - mstore( - 0x20, - or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3) - ) - instance := create(0, 0x09, 0x37) - } - require(instance != address(0), 'ERC1167: create failed'); - } - - /** - * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. - * - * This function uses the create2 opcode and a `salt` to deterministically deploy - * the clone. Using the same `implementation` and `salt` multiple time will revert, since - * the clones cannot be deployed twice at the same address. - */ - function cloneDeterministic( - address implementation, - bytes32 salt - ) internal returns (address instance) { - /// @solidity memory-safe-assembly - assembly { - // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes - // of the `implementation` address with the bytecode before the address. - mstore( - 0x00, - or( - shr(0xe8, shl(0x60, implementation)), - 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000 - ) - ) - // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. - mstore( - 0x20, - or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3) - ) - instance := create2(0, 0x09, 0x37, salt) - } - require(instance != address(0), 'ERC1167: create2 failed'); - } - - /** - * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. - */ - function predictDeterministicAddress( - address implementation, - bytes32 salt, - address deployer - ) internal pure returns (address predicted) { - /// @solidity memory-safe-assembly - assembly { - let ptr := mload(0x40) - mstore(add(ptr, 0x38), deployer) - mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff) - mstore(add(ptr, 0x14), implementation) - mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73) - mstore(add(ptr, 0x58), salt) - mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37)) - predicted := keccak256(add(ptr, 0x43), 0x55) - } - } - - /** - * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. - */ - function predictDeterministicAddress( - address implementation, - bytes32 salt - ) internal view returns (address predicted) { - return predictDeterministicAddress(implementation, salt, address(this)); - } -} From 5259e2981d1dd7318873bc95f6e06df4ecdb11e9 Mon Sep 17 00:00:00 2001 From: AxeAfk Date: Wed, 14 May 2025 21:21:39 +0800 Subject: [PATCH 12/18] tmp vote pool list --- packages/doc/.storybook/preview.tsx | 1 + .../stories/widgets/VotePoolList.stories.tsx | 112 ++++++ packages/dodoex-api/src/gql/gql.ts | 8 + packages/dodoex-api/src/gql/graphql.ts | 320 +++++++++++++++- .../src/services/pool/graphqlQuery.ts | 45 +++ packages/dodoex-widgets/src/index.tsx | 10 + packages/dodoex-widgets/src/locales/en-US.js | 2 +- packages/dodoex-widgets/src/locales/en-US.po | 66 +++- packages/dodoex-widgets/src/locales/zh-CN.js | 2 +- packages/dodoex-widgets/src/locales/zh-CN.po | 66 +++- .../src/widgets/PoolWidget/utils.ts | 6 + .../widgets/ve33/VotePoolList/TableList.tsx | 356 ++++++++++++++++++ .../src/widgets/ve33/VotePoolList/index.tsx | 310 +++++++++++++++ .../widgets/ve33/hooks/useVotePoolFilters.ts | 39 ++ .../src/widgets/ve33/hooks/useVoteTabs.ts | 31 ++ .../dodoex-widgets/src/widgets/ve33/types.ts | 12 +- .../dodoex-widgets/src/widgets/ve33/utils.ts | 37 +- 17 files changed, 1404 insertions(+), 19 deletions(-) create mode 100644 packages/doc/src/stories/widgets/VotePoolList.stories.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/VotePoolList/TableList.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/VotePoolList/index.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/hooks/useVotePoolFilters.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/hooks/useVoteTabs.ts diff --git a/packages/doc/.storybook/preview.tsx b/packages/doc/.storybook/preview.tsx index 3073a1d0..8b48de30 100644 --- a/packages/doc/.storybook/preview.tsx +++ b/packages/doc/.storybook/preview.tsx @@ -60,6 +60,7 @@ const preview = { sx={{ position: 'relative', zIndex: 1, + height: '100%', }} > diff --git a/packages/doc/src/stories/widgets/VotePoolList.stories.tsx b/packages/doc/src/stories/widgets/VotePoolList.stories.tsx new file mode 100644 index 00000000..044be402 --- /dev/null +++ b/packages/doc/src/stories/widgets/VotePoolList.stories.tsx @@ -0,0 +1,112 @@ +import { ChainId } from '@dodoex/api'; +import { VotePoolListWidget, WidgetProps } from '@dodoex/widgets'; + +export default { + title: 'Widgets/Ve33PoolList', + component: 'div', +}; + +export const Primary = (props: WidgetProps) => { + const { apikey, ...other } = props; + + return ( + + ); +}; + +Primary.args = { + projectId: 'project2', + apikey: 'ee53d6b75b12aceed4', + apiDomain: process.env.STORYBOOK_API_DOMAIN, + width: '100%', + height: '100%', + routerPage: undefined, + onlyChainId: ChainId.MORPH_HOLESKY_TESTNET, + noUI: true, +}; + +/** +{ + "data": { + "ve33_getPoolList": [ + { + "id": "0x98ecc0d3f774a7bda38918bf5830a476dd5a606c", + "title": "V2.Volatile", + "version": "v2", + "gaugeAddress": "0x7b156830fdbc76d327a48a19b0143663e16a95ba", + "feeRate": "30", + "apr": { + "fees": "0", + "incentives": "0" + }, + "tvl": "0", + "totalValueLockedUSD": "0", + "totalValueLockedToken0": "0", + "totalValueLockedToken1": "0", + "volumeUSD": "0", + "volumeToken0": "0", + "volumeToken1": "0", + "feesUSD": "0", + "feesToken0": "0", + "feesToken1": "0", + "token0Address": "0x42edf453f8483c7168c158d28d610a58308517d1", + "token0Name": "Momodrome", + "token0Symbol": "MOMO", + "token0Decimals": 18, + "token1Address": "0x5300000000000000000000000000000000000011", + "token1Name": "Wrapped Ether", + "token1Symbol": "WETH", + "token1Decimals": 18 + }, + { + "id": "0x2f63a87bf42dc4c021af8be085cece16269e3b67", + "title": "V3.CL=200", + "version": "v3", + "gaugeAddress": "0x640be2253a65740152dc933fab757606e9c7bd52", + "feeRate": "3000", + "apr": { + "fees": "0", + "incentives": "0" + }, + "tvl": "0", + "totalValueLockedUSD": "0", + "totalValueLockedToken0": "0", + "totalValueLockedToken1": "0", + "volumeUSD": "0", + "volumeToken0": "0", + "volumeToken1": "0", + "feesUSD": "0", + "feesToken0": "0", + "feesToken1": "0", + "token0Address": "0x42edf453f8483c7168c158d28d610a58308517d1", + "token0Name": "Momodrome", + "token0Symbol": "MOMO", + "token0Decimals": 18, + "token1Address": "0x5300000000000000000000000000000000000011", + "token1Name": "Wrapped Ether", + "token1Symbol": "WETH", + "token1Decimals": 18 + } + ] + } +} + */ diff --git a/packages/dodoex-api/src/gql/gql.ts b/packages/dodoex-api/src/gql/gql.ts index ed5514c7..d2195f20 100644 --- a/packages/dodoex-api/src/gql/gql.ts +++ b/packages/dodoex-api/src/gql/gql.ts @@ -50,6 +50,8 @@ const documents = { types.Ve33_GetPoolListDocument, '\n query Ve33_getPool($where: Ve33PoolInput) {\n ve33_getPool(where: $where) {\n id\n title\n version\n gaugeAddress\n feeRate\n apr {\n fees\n incentives\n }\n tvl\n totalValueLockedUSD\n totalValueLockedToken0\n totalValueLockedToken1\n volumeUSD\n volumeToken0\n volumeToken1\n feesUSD\n feesToken0\n feesToken1\n token0Address\n token0Name\n token0Symbol\n token0Decimals\n token1Address\n token1Name\n token1Symbol\n token1Decimals\n }\n }\n ': types.Ve33_GetPoolDocument, + '\n query Ve33_getVotePoolList($where: Ve33VotePoolInput) {\n ve33_getVotePoolList(where: $where) {\n id\n title\n version\n\n gaugeAddress\n feeRate\n apr {\n fees\n incentives\n }\n tvl\n\n token0Address\n token0Name\n token0Symbol\n token0Decimals\n\n token1Address\n token1Name\n token1Symbol\n token1Decimals\n\n totalValueLockedUSD\n totalValueLockedToken0\n totalValueLockedToken1\n\n feesUSD\n feesToken0\n feesToken1\n\n incentives {\n amount\n token\n usd\n }\n votes {\n token\n weight\n }\n }\n }\n ': + types.Ve33_GetVotePoolListDocument, '\n query FetchUserSwapOrderHistories($where: User_swapswapFilter) {\n user_swap_orderHistories(where: $where) {\n count\n page\n list {\n chainId\n createdAt\n fromAmount\n fromTokenDecimals\n fromTokenPrice\n fromTokenSymbol\n fromTokenAddress\n fromTokenLogoImg\n hash\n status\n toAmount\n toTokenDecimals\n toTokenPrice\n toTokenSymbol\n toTokenAddress\n toTokenLogoImg\n minAmount\n nonce\n extra\n user\n }\n }\n }\n ': types.FetchUserSwapOrderHistoriesDocument, '\n query FetchNoticeCenterTransactionList(\n $where: Notice_centertransactionListFilter\n ) {\n notice_center_transactionList(where: $where) {\n list {\n chainId\n createTime\n extend\n from\n id\n key\n type\n }\n count\n limit\n page\n }\n }\n ': @@ -174,6 +176,12 @@ export function graphql( export function graphql( source: '\n query Ve33_getPool($where: Ve33PoolInput) {\n ve33_getPool(where: $where) {\n id\n title\n version\n gaugeAddress\n feeRate\n apr {\n fees\n incentives\n }\n tvl\n totalValueLockedUSD\n totalValueLockedToken0\n totalValueLockedToken1\n volumeUSD\n volumeToken0\n volumeToken1\n feesUSD\n feesToken0\n feesToken1\n token0Address\n token0Name\n token0Symbol\n token0Decimals\n token1Address\n token1Name\n token1Symbol\n token1Decimals\n }\n }\n ', ): typeof import('./graphql').Ve33_GetPoolDocument; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql( + source: '\n query Ve33_getVotePoolList($where: Ve33VotePoolInput) {\n ve33_getVotePoolList(where: $where) {\n id\n title\n version\n\n gaugeAddress\n feeRate\n apr {\n fees\n incentives\n }\n tvl\n\n token0Address\n token0Name\n token0Symbol\n token0Decimals\n\n token1Address\n token1Name\n token1Symbol\n token1Decimals\n\n totalValueLockedUSD\n totalValueLockedToken0\n totalValueLockedToken1\n\n feesUSD\n feesToken0\n feesToken1\n\n incentives {\n amount\n token\n usd\n }\n votes {\n token\n weight\n }\n }\n }\n ', +): typeof import('./graphql').Ve33_GetVotePoolListDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/packages/dodoex-api/src/gql/graphql.ts b/packages/dodoex-api/src/gql/graphql.ts index 5a341b8d..93087dbc 100644 --- a/packages/dodoex-api/src/gql/graphql.ts +++ b/packages/dodoex-api/src/gql/graphql.ts @@ -873,6 +873,73 @@ export type Balance_Filter = { export type Balance_OrderBy = 'chain' | 'id'; +export type Berachain_AlmPool = { + id?: Maybe; + poolDayData?: Maybe>>; + token0?: Maybe; + token0Price?: Maybe; + token1?: Maybe; + token1Price?: Maybe; + totalValueLockedUSD?: Maybe; +}; + +export type Berachain_AlmPoolDayData = { + date?: Maybe; + feesUSD?: Maybe; + tvlUSD?: Maybe; + volumeUSD?: Maybe; +}; + +export type Berachain_AlmToken = { + decimals?: Maybe; + derivedUSD?: Maybe; + id?: Maybe; + initialUSD?: Maybe; + liquidityUSD?: Maybe; + marketCap?: Maybe; + name?: Maybe; + priceChange24h?: Maybe; + priceChange24hPercentage?: Maybe; + symbol?: Maybe; + totalSupply?: Maybe; +}; + +export type Berachain_AlmVault = { + allowTokenA?: Maybe; + allowTokenB?: Maybe; + count?: Maybe; + createdAtTimestamp?: Maybe; + feeApr_1d?: Maybe; + feeApr_3d?: Maybe; + feeApr_7d?: Maybe; + feeApr_30d?: Maybe; + holdersCount?: Maybe; + id?: Maybe; + pool?: Maybe; + protocol?: Maybe; + sender?: Maybe; + tokenA?: Maybe; + tokenB?: Maybe; + totalAmount0?: Maybe; + totalAmount1?: Maybe; + totalShares?: Maybe; + totalSupply?: Maybe; +}; + +export type Berachain_AlmVaultShares = { + id?: Maybe; + vault?: Maybe; + vaultShareBalance?: Maybe; +}; + +export type Berachain_AlmallVaultsSearch = { + search?: InputMaybe; +}; + +export type Berachain_AlmmyVaultsSearch = { + address?: InputMaybe; +}; + export type BidHistory = { /** action :bid、cancle */ action: Scalars['String']['output']; @@ -1936,6 +2003,117 @@ export type Cross_Chain_SwapToolDetail = { name?: Maybe; }; +export type Cross_Chain_Swap_ZetachainCrossChainOrderCreate = { + createdAt?: Maybe; + fromAddress?: Maybe; + fromAmount?: Maybe; + fromChainId?: Maybe; + fromHash?: Maybe; + fromTokenAddress?: Maybe; + id?: Maybe; + status?: Maybe; + toAddress?: Maybe; + toAmount?: Maybe; + toChainId?: Maybe; + toHash?: Maybe; + toTokenAddress?: Maybe; + updatedAt?: Maybe; +}; + +export type Cross_Chain_Swap_ZetachainCrossChainOrderList = { + createdAt?: Maybe; + extend?: Maybe; + externalId?: Maybe; + fromAddress?: Maybe; + fromAmount?: Maybe; + fromChainId?: Maybe; + fromHash?: Maybe; + fromTokenAddress?: Maybe; + id?: Maybe; + status?: Maybe; + toAddress?: Maybe; + toAmount?: Maybe; + toChainId?: Maybe; + toHash?: Maybe; + toTokenAddress?: Maybe; +}; + +export type Cross_Chain_Swap_ZetachainCrossChainOrderResult = { + count?: Maybe; + list?: Maybe>>; + page?: Maybe; + pageSize?: Maybe; +}; + +export type Cross_Chain_Swap_ZetachainCrossChainRoute = { + approveTarget?: Maybe; + asset?: Maybe; + encodeParams?: Maybe; + fees?: Maybe; + fromAmount?: Maybe; + fromChainId?: Maybe; + fromTokenAddress?: Maybe; + step?: Maybe; + toAmount?: Maybe; + toChainId?: Maybe; + toTokenAddress?: Maybe; +}; + +export type Cross_Chain_Swap_ZetachainCrossChainTransactionEncode = { + chainId?: Maybe; + data?: Maybe; + from?: Maybe; + to?: Maybe; + value?: Maybe; +}; + +export type Cross_Chain_Swap_ZetachainorderCreateData = { + extend?: InputMaybe; + fromAddress?: InputMaybe; + fromAmount?: InputMaybe; + fromChainId?: InputMaybe; + fromTokenAddress?: InputMaybe; + hash?: InputMaybe; + slippage?: InputMaybe; + toAddress?: InputMaybe; + toAmount?: InputMaybe; + toChainId?: InputMaybe; + toTokenAddress?: InputMaybe; +}; + +export type Cross_Chain_Swap_ZetachainorderCreateDataExtend = { + asset?: InputMaybe; + step?: InputMaybe; +}; + +export type Cross_Chain_Swap_ZetachainorderListData = { + chainId?: InputMaybe; + limit?: InputMaybe; + page?: InputMaybe; + product?: InputMaybe; + refreshNow?: InputMaybe; + source?: InputMaybe; + status?: InputMaybe; + user?: InputMaybe; +}; + +export type Cross_Chain_Swap_ZetachainrouteParams = { + fromAddress?: InputMaybe; + fromAmount?: InputMaybe; + fromChainId?: InputMaybe; + fromTokenAddress?: InputMaybe; + refreshNow?: InputMaybe; + slippage?: InputMaybe; + toAddress?: InputMaybe; + toChainId?: InputMaybe; + toTokenAddress?: InputMaybe; +}; + +export type Cross_Chain_Swap_ZetachaintransactionEncodeParams = { + interfaceParams?: InputMaybe; + refreshNow?: InputMaybe; +}; + export type Cross_Chain_SwapdodoOrderListData = { from?: InputMaybe; limit?: InputMaybe; @@ -2105,6 +2283,23 @@ export type Cross_Chain_TokentokenlistFilter = { refreshNow?: InputMaybe; }; +export type Cross_Chain_Zetachain_TokenCrossChainTokenlist = { + address?: Maybe; + chainId?: Maybe; + decimals?: Maybe; + id?: Maybe; + logo?: Maybe; + name?: Maybe; + position?: Maybe; + slippage?: Maybe; + symbol?: Maybe; +}; + +export type Cross_Chain_Zetachain_TokentokenlistFilter = { + chainId?: InputMaybe; + refreshNow?: InputMaybe; +}; + export type CrowdPooling = { /** base token */ baseToken: Token; @@ -6679,6 +6874,8 @@ export type LiquidityApyData = { metromMiningApy?: Maybe; miningBaseApy?: Maybe; miningQuoteApy?: Maybe; + /** 1D 7D 14D 30D */ + timeRange?: Maybe; transactionBaseApy?: Maybe; transactionQuoteApy?: Maybe; }; @@ -7023,7 +7220,6 @@ export type LiquidityLp = { liquidityTokenInMining?: Maybe; /** my liquidity usd */ liquidityUSD?: Maybe; - nftMint?: Maybe; outOfRange?: Maybe; /** Share in the pool */ poolShare?: Maybe; @@ -7110,6 +7306,7 @@ export type LiquidityOrder = { export type LiquidityPair = { apy?: Maybe; + apyList?: Maybe>>; /** base LP token, for DPP is null, for dodo v1 lpToken is different */ baseLpToken?: Maybe; /** base token reserve */ @@ -7191,6 +7388,7 @@ export type LiquidityPair = { volume24H?: Maybe; /** trade volume of basetoken */ volumeBaseToken: Scalars['BigDecimal']['output']; + volumeList?: Maybe>>; /** trade volume of quotetoken */ volumeQuoteToken: Scalars['BigDecimal']['output']; /** traded volume of USD */ @@ -7602,6 +7800,11 @@ export type LiquidityToken = { volumeUSDBridge: Scalars['BigDecimal']['output']; }; +export type LiquidityVolumeData = { + timeRange?: Maybe; + volume?: Maybe; +}; + export type Liquiditycount_Data_Query = { chain?: InputMaybe; refreshNow?: InputMaybe; @@ -12161,6 +12364,8 @@ export type Query = { avatars: Array; balance?: Maybe; balances: Array; + berachain_alm_allVaults?: Maybe>>; + berachain_alm_myVaults?: Maybe>>; bidHistories: Array; bidHistory?: Maybe; bidPosition?: Maybe; @@ -12200,8 +12405,15 @@ export type Query = { cross_chain_swap_orderRefundCount?: Maybe; cross_chain_swap_routesV2?: Maybe; cross_chain_swap_transactionEncode?: Maybe; + cross_chain_swap_zetachain_orderCreate?: Maybe; + cross_chain_swap_zetachain_orderList?: Maybe; + cross_chain_swap_zetachain_routes?: Maybe; + cross_chain_swap_zetachain_transactionEncode?: Maybe; cross_chain_token_list?: Maybe; cross_chain_token_tokenPair?: Maybe; + cross_chain_zetachain_token_list?: Maybe< + Array> + >; crowdPooling?: Maybe; crowdPoolingDayData?: Maybe; crowdPoolingDayDatas: Array; @@ -12825,6 +13037,14 @@ export type QueryBalancesArgs = { where?: InputMaybe; }; +export type QueryBerachain_Alm_AllVaultsArgs = { + where?: InputMaybe; +}; + +export type QueryBerachain_Alm_MyVaultsArgs = { + where?: InputMaybe; +}; + export type QueryBidHistoriesArgs = { block?: InputMaybe; first?: InputMaybe; @@ -13016,6 +13236,22 @@ export type QueryCross_Chain_Swap_TransactionEncodeArgs = { data?: InputMaybe; }; +export type QueryCross_Chain_Swap_Zetachain_OrderCreateArgs = { + data?: InputMaybe; +}; + +export type QueryCross_Chain_Swap_Zetachain_OrderListArgs = { + where?: InputMaybe; +}; + +export type QueryCross_Chain_Swap_Zetachain_RoutesArgs = { + where?: InputMaybe; +}; + +export type QueryCross_Chain_Swap_Zetachain_TransactionEncodeArgs = { + data?: InputMaybe; +}; + export type QueryCross_Chain_Token_ListArgs = { where?: InputMaybe; }; @@ -13024,6 +13260,10 @@ export type QueryCross_Chain_Token_TokenPairArgs = { where?: InputMaybe; }; +export type QueryCross_Chain_Zetachain_Token_ListArgs = { + where?: InputMaybe; +}; + export type QueryCrowdPoolingArgs = { block?: InputMaybe; id: Scalars['ID']['input']; @@ -20248,6 +20488,7 @@ export type Ve33Pool = { feesUSD: Scalars['BigDecimal']['output']; gaugeAddress: Scalars['String']['output']; id: Scalars['String']['output']; + tickSpacing: Scalars['Int']['output']; title: Scalars['String']['output']; token0Address: Scalars['String']['output']; token0Decimals: Scalars['Int']['output']; @@ -20301,6 +20542,8 @@ export type Ve33Portfolio = { liquidityUSD: Scalars['String']['output']; locks: Array>; poolAddress: Scalars['String']['output']; + /** Stable, Volatile, CL */ + tickSpacing: Scalars['Int']['output']; title: Scalars['String']['output']; token0Address: Scalars['String']['output']; token0Amount: Scalars['String']['output']; @@ -20374,6 +20617,7 @@ export type Ve33VotePool = { gaugeAddress: Scalars['String']['output']; id: Scalars['String']['output']; incentives: Array>; + tickSpacing: Scalars['Int']['output']; title: Scalars['String']['output']; token0Address: Scalars['String']['output']; token0Decimals: Scalars['Int']['output']; @@ -21646,6 +21890,38 @@ export type Ve33_GetPoolQuery = { } | null; }; +export type Ve33_GetVotePoolListQueryVariables = Exact<{ + where?: InputMaybe; +}>; + +export type Ve33_GetVotePoolListQuery = { + ve33_getVotePoolList: Array<{ + id: string; + title: string; + version: string; + gaugeAddress: string; + feeRate: any; + tvl: any; + token0Address: string; + token0Name: string; + token0Symbol: string; + token0Decimals: number; + token1Address: string; + token1Name: string; + token1Symbol: string; + token1Decimals: number; + totalValueLockedUSD: any; + totalValueLockedToken0: any; + totalValueLockedToken1: any; + feesUSD: any; + feesToken0: any; + feesToken1: any; + apr: { fees: any; incentives: any }; + incentives: Array<{ amount: any; token: string; usd: any } | null>; + votes: Array<{ token: string; weight: string } | null>; + } | null>; +}; + export type FetchUserSwapOrderHistoriesQueryVariables = Exact<{ where?: InputMaybe; }>; @@ -22647,6 +22923,48 @@ export const Ve33_GetPoolDocument = new TypedDocumentString(` Ve33_GetPoolQuery, Ve33_GetPoolQueryVariables >; +export const Ve33_GetVotePoolListDocument = new TypedDocumentString(` + query Ve33_getVotePoolList($where: Ve33VotePoolInput) { + ve33_getVotePoolList(where: $where) { + id + title + version + gaugeAddress + feeRate + apr { + fees + incentives + } + tvl + token0Address + token0Name + token0Symbol + token0Decimals + token1Address + token1Name + token1Symbol + token1Decimals + totalValueLockedUSD + totalValueLockedToken0 + totalValueLockedToken1 + feesUSD + feesToken0 + feesToken1 + incentives { + amount + token + usd + } + votes { + token + weight + } + } +} + `) as unknown as TypedDocumentString< + Ve33_GetVotePoolListQuery, + Ve33_GetVotePoolListQueryVariables +>; export const FetchUserSwapOrderHistoriesDocument = new TypedDocumentString(` query FetchUserSwapOrderHistories($where: User_swapswapFilter) { user_swap_orderHistories(where: $where) { diff --git a/packages/dodoex-api/src/services/pool/graphqlQuery.ts b/packages/dodoex-api/src/services/pool/graphqlQuery.ts index 2eebd23c..df18f0dc 100644 --- a/packages/dodoex-api/src/services/pool/graphqlQuery.ts +++ b/packages/dodoex-api/src/services/pool/graphqlQuery.ts @@ -558,4 +558,49 @@ export const poolGraphqlQuery = { } } `), + fetchVotePoolList: graphql(` + query Ve33_getVotePoolList($where: Ve33VotePoolInput) { + ve33_getVotePoolList(where: $where) { + id + title + version + + gaugeAddress + feeRate + apr { + fees + incentives + } + tvl + + token0Address + token0Name + token0Symbol + token0Decimals + + token1Address + token1Name + token1Symbol + token1Decimals + + totalValueLockedUSD + totalValueLockedToken0 + totalValueLockedToken1 + + feesUSD + feesToken0 + feesToken1 + + incentives { + amount + token + usd + } + votes { + token + weight + } + } + } + `), }; diff --git a/packages/dodoex-widgets/src/index.tsx b/packages/dodoex-widgets/src/index.tsx index cece90b3..eb710b6d 100644 --- a/packages/dodoex-widgets/src/index.tsx +++ b/packages/dodoex-widgets/src/index.tsx @@ -5,6 +5,7 @@ import { Widget, WidgetProps } from './components/Widget'; import { Pool } from './widgets/PoolWidget'; import { Ve33PoolDetail } from './widgets/ve33/Ve33PoolDetail'; import { Ve33PoolList } from './widgets/ve33/Ve33PoolList'; +import { VotePoolList } from './widgets/ve33/VotePoolList'; export { PageType, useRouterStore } from './router'; export type { Page } from './router'; @@ -90,6 +91,15 @@ export function Ve33PoolListWidget( ); } +export function VotePoolListWidget(props: WidgetProps) { + const { ...rest } = props; + return ( + + + + ); +} + export function Ve33PoolDetailWidget( props: WidgetProps & { id: string; diff --git a/packages/dodoex-widgets/src/locales/en-US.js b/packages/dodoex-widgets/src/locales/en-US.js index f1cd492f..967e16ca 100644 --- a/packages/dodoex-widgets/src/locales/en-US.js +++ b/packages/dodoex-widgets/src/locales/en-US.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"Transaction Time:\",\"+uZnU3\":\"Cross Chain\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"The current slippage protection coefficient set exceeds \",[\"maxSlippageWarning\"],\"%, which may result in losses.\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"Opening \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"To\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/mfICu\":\"Fees\",\"/nzjSF\":[[\"0\"],\" pending\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"Balance:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"Dismiss\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"Due to the market condition, market price and estimated price may have a slight difference\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" confirmed\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"The current network is inconsistent with the wallet - please switch in wallet\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"Current price impact\",\"6UYTy8\":\"Minute\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"Hour\",\"6lss/t\":\"Pricing Model\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"Enter the token symbol or address\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"Fee includes: Cross Chain fees + Swap fees. Gas fee not included.\",\"7VpPHA\":\"Confirm\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"This token is on\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"Estimated service provider fees\",\"93m8jT\":\"Basic Fee\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"Price impact exceeds the slippage tolerance you set. Try increasing the slippage tolerance.\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"s\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"This CP has been settled by other addrs\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"Max\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"Slippage\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"Insufficient funds - Please retry after depositing more \",[\"EtherTokenSymbol\"],\" into your wallet\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"Are you sure swapping to another chain?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"Destination\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"Unapproved\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"Insufficient cross-chain fees, need at least \",[\"0\"],\" \",[\"1\"]],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"Transaction Pending\",\"Fdp03t\":\"on\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"Day\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HuVZMK\":\"Days\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"Connecting...\",\"J39pAJ\":\"Additional Fee\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"Fetching best price...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"Review Swap\",\"K/PgcA\":\"Select Cross Chain\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"Attention: High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"Select Tokens\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"The setting has been switched to swap mode\",\"NVAuTg\":\"Quote not available\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"Fetching Price...\",\"OfhWJH\":\"Reset\",\"OgKD6h\":\"Best offer\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"Confirming\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"Fee\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"Confirm Cross Chain\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"Estimated Time\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"Swap summary\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"Tx\",\"S8G1qk\":\"Single\",\"SXnevP\":\"Review Cross Chain\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"Price Impact\",\"T0Y2+3\":\"Select a token\",\"TFOxRM\":\"Mins\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"Wallet incompatibility\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"Settings\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"Connect to your \",[\"0\"],\" Wallet\"],\"V+rJKF\":\"Seconds\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"Swap Detail\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"For\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"On\",\"Z7ZXbT\":\"Approve\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"Additional routing fees set by the Widget user\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"Maximum slippage do not exceed 50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"Minutes\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"Cancel\",\"dI46oG\":\"Auto switch network\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"Min\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"Transaction rejected.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"Service update, please wait and try again\",\"gz+9Rb\":\"Gas price is too low, please adjust in your wallet and try again\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC node data exception\",\"h5FVz1\":\"Estimated transaction time\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"Connect to your wallet\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"Enter an amount\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"Approving\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"Something went wrong.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"Second\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"Confirm swap\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"Slippage Tolerance\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"Send to:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"Unable to SETTLE during the cooling-off period\",\"qLkska\":\"The setting has been switched to cross chain mode\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"Connect to a wallet\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"Detail\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"SELECT TOKEN\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"Cross Chain Summary\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20: low-level call failed. Please contact the DODO team.\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"Unsupported network - switch to trade\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"Swap\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"Source\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"User denied transaction signature.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop exception\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"Hours\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"Close\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"Transaction Deadline\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"Insufficient balance\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"Transaction Time:\",\"+uZnU3\":\"Cross Chain\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"The current slippage protection coefficient set exceeds \",[\"maxSlippageWarning\"],\"%, which may result in losses.\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"Opening \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"To\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/mfICu\":\"Fees\",\"/nzjSF\":[[\"0\"],\" pending\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"Balance:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"Dismiss\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"Due to the market condition, market price and estimated price may have a slight difference\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" confirmed\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"The current network is inconsistent with the wallet - please switch in wallet\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"Current price impact\",\"6UYTy8\":\"Minute\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"Hour\",\"6lss/t\":\"Pricing Model\",\"6nlY4n\":\"Gauge Adress\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"Enter the token symbol or address\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"Fee includes: Cross Chain fees + Swap fees. Gas fee not included.\",\"7VpPHA\":\"Confirm\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"This token is on\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"Estimated service provider fees\",\"93m8jT\":\"Basic Fee\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"Price impact exceeds the slippage tolerance you set. Try increasing the slippage tolerance.\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"s\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"This CP has been settled by other addrs\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"Max\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"Slippage\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"Insufficient funds - Please retry after depositing more \",[\"EtherTokenSymbol\"],\" into your wallet\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"Are you sure swapping to another chain?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"Destination\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"Unapproved\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"Insufficient cross-chain fees, need at least \",[\"0\"],\" \",[\"1\"]],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"Transaction Pending\",\"Fdp03t\":\"on\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"Day\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HXOnT6\":\"Failed to remove\",\"HuVZMK\":\"Days\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"Connecting...\",\"J39pAJ\":\"Additional Fee\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"Fetching best price...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"Review Swap\",\"K/PgcA\":\"Select Cross Chain\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"Attention: High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"Select Tokens\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"The setting has been switched to swap mode\",\"NVAuTg\":\"Quote not available\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"Fetching Price...\",\"OfhWJH\":\"Reset\",\"OgKD6h\":\"Best offer\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"Confirming\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"Fee\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"Confirm Cross Chain\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"Estimated Time\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"Swap summary\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"Tx\",\"S8G1qk\":\"Single\",\"SXnevP\":\"Review Cross Chain\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"Price Impact\",\"T0Y2+3\":\"Select a token\",\"TFOxRM\":\"Mins\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"Wallet incompatibility\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"Settings\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"Connect to your \",[\"0\"],\" Wallet\"],\"V+rJKF\":\"Seconds\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"Swap Detail\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"For\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YpVMk+\":\"Pool Adress\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"On\",\"Z7ZXbT\":\"Approve\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"Additional routing fees set by the Widget user\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"Maximum slippage do not exceed 50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"Minutes\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"Cancel\",\"dI46oG\":\"Auto switch network\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"Min\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"Transaction rejected.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"Service update, please wait and try again\",\"gz+9Rb\":\"Gas price is too low, please adjust in your wallet and try again\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC node data exception\",\"h5FVz1\":\"Estimated transaction time\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"Connect to your wallet\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"Enter an amount\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"Approving\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"Something went wrong.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"Second\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"Confirm swap\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"Slippage Tolerance\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"Send to:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"Unable to SETTLE during the cooling-off period\",\"qLkska\":\"The setting has been switched to cross chain mode\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"Connect to a wallet\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"Detail\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"SELECT TOKEN\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"Cross Chain Summary\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20: low-level call failed. Please contact the DODO team.\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"Unsupported network - switch to trade\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"Swap\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"Source\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"User denied transaction signature.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop exception\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"Hours\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"Close\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"Transaction Deadline\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"Insufficient balance\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file diff --git a/packages/dodoex-widgets/src/locales/en-US.po b/packages/dodoex-widgets/src/locales/en-US.po index fff557fc..15682d25 100644 --- a/packages/dodoex-widgets/src/locales/en-US.po +++ b/packages/dodoex-widgets/src/locales/en-US.po @@ -47,7 +47,7 @@ msgid "Total Number of Traders" msgstr "Total Number of Traders" #: src/widgets/PoolWidget/PoolDetail/components/ChartInfo.tsx:43 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:60 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:61 msgid "Volume" msgstr "Volume" @@ -56,10 +56,11 @@ msgid "To" msgstr "To" #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:416 +#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:287 msgid "Receive {0}" msgstr "Receive {0}" -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:63 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:64 msgid "Fees" msgstr "Fees" @@ -70,7 +71,7 @@ msgstr "{0} pending" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:449 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:343 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:713 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:101 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:88 msgid "Removing" msgstr "Removing" @@ -97,6 +98,7 @@ msgid "Staking Rules" msgstr "Staking Rules" #: src/widgets/PoolWidget/PoolOperate/components/OperateBtn.tsx:76 +#: src/widgets/ve33/Ve33PoolOperate/components/OperateBtn.tsx:76 msgid "Loading info..." msgstr "Loading info..." @@ -148,7 +150,7 @@ msgstr "Unstaking" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:452 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:346 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:716 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:104 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:91 msgid "Adding" msgstr "Adding" @@ -308,6 +310,10 @@ msgstr "Hour" msgid "Pricing Model" msgstr "Pricing Model" +#: src/widgets/ve33/Ve33PoolOperate/index.tsx:198 +msgid "Gauge Adress" +msgstr "Gauge Adress" + #: src/widgets/PoolWidget/PoolCreate/components/DepthAndLiquidityChart.tsx:74 #: src/widgets/PoolWidget/PoolList/index.tsx:179 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOrMiningTabs.ts:17 @@ -316,7 +322,7 @@ msgstr "Liquidity" #: src/widgets/MiningWidget/MiningDetail/MiningInfo.tsx:146 #: src/widgets/MiningWidget/MiningDetail/MiningInfo.tsx:213 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:54 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:55 msgid "APR" msgstr "APR" @@ -352,6 +358,7 @@ msgstr "Fee includes: Cross Chain fees + Swap fees. Gas fee not included." #: src/widgets/PoolWidget/PoolCreate/operate-widgets/SlippageCoefficientSetting.tsx:240 #: src/widgets/PoolWidget/PoolModify/operate-widgets/BottomButtonGroup.tsx:74 #: src/widgets/PoolWidget/PoolModify/operate-widgets/FeeRateSetting.tsx:197 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:251 msgid "Confirm" msgstr "Confirm" @@ -446,6 +453,7 @@ msgid "Active" msgstr "Active" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:56 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:60 msgid "You will receive" msgstr "You will receive" @@ -470,7 +478,7 @@ msgstr "No results found" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:388 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:297 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:595 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:51 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:52 msgid "Pair" msgstr "Pair" @@ -610,6 +618,7 @@ msgstr "Add Initial Liquidity" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:481 #: src/widgets/PoolWidget/AMMV3/components/ReviewModal.tsx:40 #: src/widgets/PoolWidget/hooks/useAMMV2AddLiquidity.ts:174 +#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2AddLiquidity.ts:140 msgid "Add liquidity" msgstr "Add liquidity" @@ -618,12 +627,14 @@ msgid "Min price" msgstr "Min price" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:229 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:223 msgid "Pool address" msgstr "Pool address" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:198 #: src/widgets/PoolWidget/AMMV3/components/FeeSelector.tsx:54 #: src/widgets/PoolWidget/AMMV3/components/PositionPreview.tsx:122 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:192 msgid "Fee tier" msgstr "Fee tier" @@ -698,7 +709,7 @@ msgstr "Insufficient cross-chain fees, need at least {0} {1}" #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:300 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:345 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:604 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:57 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:58 msgid "TVL" msgstr "TVL" @@ -772,6 +783,10 @@ msgstr "You can set the minimum selling price for single-token pools." msgid "Invalid price input" msgstr "Invalid price input" +#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2RemoveLiquidity.ts:137 +msgid "Failed to remove" +msgstr "Failed to remove" + #: src/utils/time.ts:27 msgid "Days" msgstr "Days" @@ -837,6 +852,8 @@ msgstr "Stake" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:281 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:568 +#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:233 +#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:425 msgid "Price discrepancy {lqAndDodoCompareText} between liquidity pool and the quote price on DODO." msgstr "Price discrepancy {lqAndDodoCompareText} between liquidity pool and the quote price on DODO." @@ -1095,6 +1112,7 @@ msgid "The initial price needs to be greater than {min} and less than 100,000,00 msgstr "The initial price needs to be greater than {min} and less than 100,000,000" #: src/widgets/PoolWidget/PoolOperate/hooks/usePercentageRemove.ts:98 +#: src/widgets/ve33/Ve33PoolOperate/hooks/usePercentageRemove.ts:95 msgid "Quantity model" msgstr "Quantity model" @@ -1196,6 +1214,7 @@ msgstr "Review Cross Chain" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:225 #: src/widgets/PoolWidget/AMMV2Create/Ratio.tsx:213 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:219 msgid "Share of pool" msgstr "Share of pool" @@ -1304,6 +1323,7 @@ msgid "Details" msgstr "Details" #: src/widgets/PoolWidget/PoolOperate/components/OperateBtn.tsx:69 +#: src/widgets/ve33/Ve33PoolOperate/components/OperateBtn.tsx:69 msgid "Pending" msgstr "Pending" @@ -1406,6 +1426,8 @@ msgstr "Price Range" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:154 #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:177 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:148 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:171 msgid "{0} deposited" msgstr "{0} deposited" @@ -1415,6 +1437,7 @@ msgstr "{0} deposited" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:454 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:613 #: src/widgets/PoolWidget/PoolOperate/components/LiquidityInfo.tsx:430 +#: src/widgets/ve33/Ve33PoolOperate/index.tsx:277 msgid "My Liquidity" msgstr "My Liquidity" @@ -1423,6 +1446,7 @@ msgid "For" msgstr "For" #: src/widgets/PoolWidget/PoolOperate/components/ComparePrice.tsx:52 +#: src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx:52 msgid "{lqAndDodoCompareText} Price Difference" msgstr "{lqAndDodoCompareText} Price Difference" @@ -1436,6 +1460,10 @@ msgstr "You are not currently providing liquidity for any LP pools." msgid "You have not create any mining" msgstr "You have not create any mining" +#: src/widgets/ve33/Ve33PoolOperate/index.tsx:177 +msgid "Pool Adress" +msgstr "Pool Adress" + #: src/components/chart/i18n.ts:27 msgid "The area of the chart indicates the buy/sell volume of {0} that can be carried by the market when the current price changes to the hover price." msgstr "The area of the chart indicates the buy/sell volume of {0} that can be carried by the market when the current price changes to the hover price." @@ -1470,6 +1498,7 @@ msgid "The start time is too soon, please set a later time" msgstr "The start time is too soon, please set a later time" #: src/widgets/PoolWidget/PoolOperate/components/ComparePrice.tsx:61 +#: src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx:61 msgid "Current liquidity pool token price" msgstr "Current liquidity pool token price" @@ -1499,6 +1528,7 @@ msgid "The price of this pool is within your selected range. Your position is cu msgstr "The price of this pool is within your selected range. Your position is currently earning fees." #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:58 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:62 msgid "You are creating a pool" msgstr "You are creating a pool" @@ -1533,6 +1563,8 @@ msgstr "Suitable for stablecoins with price fluctuations within 10%" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:275 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:562 +#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:227 +#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:419 msgid "Confirm submission" msgstr "Confirm submission" @@ -1563,6 +1595,7 @@ msgid "Settler" msgstr "Settler" #: src/widgets/PoolWidget/hooks/useAMMV2RemoveLiquidity.ts:164 +#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2RemoveLiquidity.ts:144 msgid "Remove liquidity" msgstr "Remove liquidity" @@ -1698,6 +1731,7 @@ msgstr "Approve {0}" #: src/components/Swap/SwapOrderHistory/index.tsx:105 #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:204 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:198 msgid "Rate" msgstr "Rate" @@ -1857,6 +1891,7 @@ msgstr "Total Swap Volume" #: src/components/Swap/SwapOrderHistory/index.tsx:99 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:458 +#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:323 msgid "Receive" msgstr "Receive" @@ -1881,6 +1916,7 @@ msgstr "Once created, the price cannot be changed. This option applies to assets #: src/components/Swap/components/SwapSettingsDialog/index.tsx:87 #: src/widgets/PoolWidget/AMMV2Create/Setting.tsx:100 #: src/widgets/PoolWidget/PoolOperate/components/SlippageSetting.tsx:123 +#: src/widgets/ve33/Ve33PoolOperate/components/SlippageSetting.tsx:111 msgid "Slippage Tolerance" msgstr "Slippage Tolerance" @@ -1909,6 +1945,9 @@ msgstr "My Staked" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1110 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:122 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOperateTabs.ts:15 +#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:91 +#: src/widgets/ve33/Ve33PoolOperate/hooks/usePoolOperateTabs.ts:15 +#: src/widgets/ve33/Ve33PoolOperate/index.tsx:401 msgid "Add" msgstr "Add" @@ -2022,6 +2061,7 @@ msgid "{0}-{1} is not supported. Please select another pair." msgstr "{0}-{1} is not supported. Please select another pair." #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:255 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:249 msgid "Confirming..." msgstr "Confirming..." @@ -2071,6 +2111,7 @@ msgid "There is no liquidity data." msgstr "There is no liquidity data." #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:134 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:128 msgid "Output is estimated. If the price changes by more than {0} your transaction will revert." msgstr "Output is estimated. If the price changes by more than {0} your transaction will revert." @@ -2135,6 +2176,7 @@ msgid "Advanced" msgstr "Advanced" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:107 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:111 msgid "{0}/{1} Pool Tokens" msgstr "{0}/{1} Pool Tokens" @@ -2150,6 +2192,9 @@ msgstr "Initial Price Alert" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1098 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOperateTabs.ts:16 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:233 +#: src/widgets/ve33/Ve33PoolOperate/hooks/usePoolOperateTabs.ts:16 +#: src/widgets/ve33/Ve33PoolOperate/index.tsx:402 +#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:205 msgid "Remove" msgstr "Remove" @@ -2195,6 +2240,7 @@ msgid "Low price" msgstr "Low price" #: src/widgets/PoolWidget/PoolOperate/components/ComparePrice.tsx:64 +#: src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx:64 msgid "differs from the price quoted by DODO by {lqAndDodoCompareText}" msgstr "differs from the price quoted by DODO by {lqAndDodoCompareText}" @@ -2221,6 +2267,7 @@ msgid "Paid" msgstr "Paid" #: src/components/AddTokenToMetamask.tsx:54 +#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2AddLiquidity.ts:133 msgid "Failed to add" msgstr "Failed to add" @@ -2241,6 +2288,8 @@ msgstr "In range" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:284 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:571 +#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:236 +#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:428 msgid "There is risk of being arbitraged if adding this liquidity." msgstr "There is risk of being arbitraged if adding this liquidity." @@ -2274,6 +2323,7 @@ msgid "Liquidity Burn Ratio" msgstr "Liquidity Burn Ratio" #: src/widgets/PoolWidget/PoolOperate/hooks/usePercentageRemove.ts:102 +#: src/widgets/ve33/Ve33PoolOperate/hooks/usePercentageRemove.ts:99 msgid "Percentage to remove" msgstr "Percentage to remove" @@ -2380,6 +2430,8 @@ msgstr "Total Rewards=Daily Rewards*Duration" #: src/components/TokenStatusButton.tsx:18 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:124 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:233 +#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:93 +#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:205 msgid "Insufficient balance" msgstr "Insufficient balance" diff --git a/packages/dodoex-widgets/src/locales/zh-CN.js b/packages/dodoex-widgets/src/locales/zh-CN.js index 39b4e838..e2d6d6f5 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.js +++ b/packages/dodoex-widgets/src/locales/zh-CN.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"交易时长:\",\"+uZnU3\":\"跨链桥\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"当前滑点保护系数设置超过\",[\"maxSlippageWarning\"],\"%,可能会造成损失。\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"连接 \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"至\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/mfICu\":\"Fees\",\"/nzjSF\":[[\"0\"],\" 等待中\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"余额:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"忽略\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"由于市场情况不同,市场价格与估算价格可能略有差异。\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" 已确认\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"当前网络与钱包不一致,请在钱包中切换\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"当前价格冲击\",\"6UYTy8\":\"分钟\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"小时\",\"6lss/t\":\"Pricing Model\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"输入代币符号或地址\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"费用包括过跨链桥和交易的手续费,不包括 gas 费。\",\"7VpPHA\":\"确认\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"该代币在\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"预计服务供应商费用\",\"93m8jT\":\"基础手续费\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"价格冲击超过了你设置的滑点, 请提高滑点后重试\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"秒\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"此众筹池已被其他地址结算\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"全部\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"滑点\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"余额不足 - 请在钱包充值\",[\"EtherTokenSymbol\"],\"后重试\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"是否确认切换到另一个链?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"目标\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"未授权\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"跨链费用不足,至少需要 \",[\"0\"],\" \",[\"1\"],\" \"],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"交易进行中\",\"Fdp03t\":\"在\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"天\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HuVZMK\":\"天\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"连接中...\",\"J39pAJ\":\"额外手续费\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"获取最优价格中...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"预览交易\",\"K/PgcA\":\"选择跨链桥\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"注意:滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"选择代币\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"设置已切换至闪兑模式\",\"NVAuTg\":\"没有报价\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"获取价格中...\",\"OfhWJH\":\"重置\",\"OgKD6h\":\"最优价格\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"确认中\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"手续费\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"确认跨链交易\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"价格冲击为<0>\",[\"priceImpact\"],\"%, 仍接受此报价\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"预计时间\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"交易预览\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"交易哈希:\",\"S8G1qk\":\"Single\",\"SXnevP\":\"预览跨链交易\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"价格冲击\",\"T0Y2+3\":\"选择代币\",\"TFOxRM\":\"分钟\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"钱包不兼容\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"设置\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"连接你的\",[\"0\"],\"钱包\"],\"V+rJKF\":\"秒\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"交易详情\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"对于\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"在\",\"Z7ZXbT\":\"代币授权\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"由 Widget 设置的额外路由费用\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"最大滑点不能超过50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"分钟\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"取消\",\"dI46oG\":\"自动切换网络\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"分钟\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"交易被拒绝.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"服务升级中, 请等待或重试\",\"gz+9Rb\":\"Gas 价格过低, 请调整后重试\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC节点异常\",\"h5FVz1\":\"预计交易时长\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"连接钱包\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"输入代币数量\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"授权中\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"发生异常错误.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"秒\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"确认交易\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"滑点\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"发送至:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"在冷静期无法进行清算\",\"qLkska\":\"设置已切换到跨链桥交易模式\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"连接钱包\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"详情\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"选择代币\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"跨链桥概览\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20:low-level call failed,请联系DODO团队解决。\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"未支持网络 - 请切换后进行交易\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"交易\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"源\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"用户拒绝交易签名.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop 异常\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"小时\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"关闭\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"交易截止时间\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"余额不足\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"交易时长:\",\"+uZnU3\":\"跨链桥\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"当前滑点保护系数设置超过\",[\"maxSlippageWarning\"],\"%,可能会造成损失。\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"连接 \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"至\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/mfICu\":\"Fees\",\"/nzjSF\":[[\"0\"],\" 等待中\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"余额:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"忽略\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"由于市场情况不同,市场价格与估算价格可能略有差异。\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" 已确认\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"当前网络与钱包不一致,请在钱包中切换\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"当前价格冲击\",\"6UYTy8\":\"分钟\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"小时\",\"6lss/t\":\"Pricing Model\",\"6nlY4n\":\"Gauge Adress\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"输入代币符号或地址\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"费用包括过跨链桥和交易的手续费,不包括 gas 费。\",\"7VpPHA\":\"确认\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"该代币在\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"预计服务供应商费用\",\"93m8jT\":\"基础手续费\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"价格冲击超过了你设置的滑点, 请提高滑点后重试\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"秒\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"此众筹池已被其他地址结算\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"全部\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"滑点\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"余额不足 - 请在钱包充值\",[\"EtherTokenSymbol\"],\"后重试\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"是否确认切换到另一个链?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"目标\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"未授权\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"跨链费用不足,至少需要 \",[\"0\"],\" \",[\"1\"],\" \"],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"交易进行中\",\"Fdp03t\":\"在\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"天\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HXOnT6\":\"Failed to remove\",\"HuVZMK\":\"天\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"连接中...\",\"J39pAJ\":\"额外手续费\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"获取最优价格中...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"预览交易\",\"K/PgcA\":\"选择跨链桥\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"注意:滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"选择代币\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"设置已切换至闪兑模式\",\"NVAuTg\":\"没有报价\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"获取价格中...\",\"OfhWJH\":\"重置\",\"OgKD6h\":\"最优价格\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"确认中\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"手续费\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"确认跨链交易\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"价格冲击为<0>\",[\"priceImpact\"],\"%, 仍接受此报价\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"预计时间\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"交易预览\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"交易哈希:\",\"S8G1qk\":\"Single\",\"SXnevP\":\"预览跨链交易\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"价格冲击\",\"T0Y2+3\":\"选择代币\",\"TFOxRM\":\"分钟\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"钱包不兼容\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"设置\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"连接你的\",[\"0\"],\"钱包\"],\"V+rJKF\":\"秒\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"交易详情\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"对于\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YpVMk+\":\"Pool Adress\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"在\",\"Z7ZXbT\":\"代币授权\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"由 Widget 设置的额外路由费用\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"最大滑点不能超过50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"分钟\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"取消\",\"dI46oG\":\"自动切换网络\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"分钟\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"交易被拒绝.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"服务升级中, 请等待或重试\",\"gz+9Rb\":\"Gas 价格过低, 请调整后重试\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC节点异常\",\"h5FVz1\":\"预计交易时长\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"连接钱包\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"输入代币数量\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"授权中\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"发生异常错误.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"秒\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"确认交易\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"滑点\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"发送至:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"在冷静期无法进行清算\",\"qLkska\":\"设置已切换到跨链桥交易模式\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"连接钱包\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"详情\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"选择代币\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"跨链桥概览\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20:low-level call failed,请联系DODO团队解决。\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"未支持网络 - 请切换后进行交易\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"交易\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"源\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"用户拒绝交易签名.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop 异常\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"小时\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"关闭\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"交易截止时间\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"余额不足\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file diff --git a/packages/dodoex-widgets/src/locales/zh-CN.po b/packages/dodoex-widgets/src/locales/zh-CN.po index a0f19497..ed1949d2 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.po +++ b/packages/dodoex-widgets/src/locales/zh-CN.po @@ -47,7 +47,7 @@ msgid "Total Number of Traders" msgstr "" #: src/widgets/PoolWidget/PoolDetail/components/ChartInfo.tsx:43 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:60 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:61 msgid "Volume" msgstr "" @@ -56,10 +56,11 @@ msgid "To" msgstr "至" #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:416 +#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:287 msgid "Receive {0}" msgstr "" -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:63 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:64 msgid "Fees" msgstr "" @@ -70,7 +71,7 @@ msgstr "{0} 等待中" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:449 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:343 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:713 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:101 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:88 msgid "Removing" msgstr "" @@ -97,6 +98,7 @@ msgid "Staking Rules" msgstr "" #: src/widgets/PoolWidget/PoolOperate/components/OperateBtn.tsx:76 +#: src/widgets/ve33/Ve33PoolOperate/components/OperateBtn.tsx:76 msgid "Loading info..." msgstr "" @@ -148,7 +150,7 @@ msgstr "" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:452 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:346 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:716 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:104 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:91 msgid "Adding" msgstr "" @@ -308,6 +310,10 @@ msgstr "小时" msgid "Pricing Model" msgstr "" +#: src/widgets/ve33/Ve33PoolOperate/index.tsx:198 +msgid "Gauge Adress" +msgstr "" + #: src/widgets/PoolWidget/PoolCreate/components/DepthAndLiquidityChart.tsx:74 #: src/widgets/PoolWidget/PoolList/index.tsx:179 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOrMiningTabs.ts:17 @@ -316,7 +322,7 @@ msgstr "" #: src/widgets/MiningWidget/MiningDetail/MiningInfo.tsx:146 #: src/widgets/MiningWidget/MiningDetail/MiningInfo.tsx:213 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:54 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:55 msgid "APR" msgstr "" @@ -352,6 +358,7 @@ msgstr "费用包括过跨链桥和交易的手续费,不包括 gas 费。" #: src/widgets/PoolWidget/PoolCreate/operate-widgets/SlippageCoefficientSetting.tsx:240 #: src/widgets/PoolWidget/PoolModify/operate-widgets/BottomButtonGroup.tsx:74 #: src/widgets/PoolWidget/PoolModify/operate-widgets/FeeRateSetting.tsx:197 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:251 msgid "Confirm" msgstr "确认" @@ -446,6 +453,7 @@ msgid "Active" msgstr "" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:56 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:60 msgid "You will receive" msgstr "" @@ -470,7 +478,7 @@ msgstr "" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:388 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:297 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:595 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:51 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:52 msgid "Pair" msgstr "" @@ -610,6 +618,7 @@ msgstr "" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:481 #: src/widgets/PoolWidget/AMMV3/components/ReviewModal.tsx:40 #: src/widgets/PoolWidget/hooks/useAMMV2AddLiquidity.ts:174 +#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2AddLiquidity.ts:140 msgid "Add liquidity" msgstr "" @@ -618,12 +627,14 @@ msgid "Min price" msgstr "" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:229 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:223 msgid "Pool address" msgstr "" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:198 #: src/widgets/PoolWidget/AMMV3/components/FeeSelector.tsx:54 #: src/widgets/PoolWidget/AMMV3/components/PositionPreview.tsx:122 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:192 msgid "Fee tier" msgstr "" @@ -698,7 +709,7 @@ msgstr "跨链费用不足,至少需要 {0} {1} " #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:300 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:345 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:604 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:57 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:58 msgid "TVL" msgstr "" @@ -772,6 +783,10 @@ msgstr "" msgid "Invalid price input" msgstr "" +#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2RemoveLiquidity.ts:137 +msgid "Failed to remove" +msgstr "" + #: src/utils/time.ts:27 msgid "Days" msgstr "天" @@ -837,6 +852,8 @@ msgstr "" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:281 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:568 +#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:233 +#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:425 msgid "Price discrepancy {lqAndDodoCompareText} between liquidity pool and the quote price on DODO." msgstr "" @@ -1095,6 +1112,7 @@ msgid "The initial price needs to be greater than {min} and less than 100,000,00 msgstr "" #: src/widgets/PoolWidget/PoolOperate/hooks/usePercentageRemove.ts:98 +#: src/widgets/ve33/Ve33PoolOperate/hooks/usePercentageRemove.ts:95 msgid "Quantity model" msgstr "" @@ -1196,6 +1214,7 @@ msgstr "预览跨链交易" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:225 #: src/widgets/PoolWidget/AMMV2Create/Ratio.tsx:213 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:219 msgid "Share of pool" msgstr "" @@ -1304,6 +1323,7 @@ msgid "Details" msgstr "" #: src/widgets/PoolWidget/PoolOperate/components/OperateBtn.tsx:69 +#: src/widgets/ve33/Ve33PoolOperate/components/OperateBtn.tsx:69 msgid "Pending" msgstr "" @@ -1406,6 +1426,8 @@ msgstr "" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:154 #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:177 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:148 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:171 msgid "{0} deposited" msgstr "" @@ -1415,6 +1437,7 @@ msgstr "" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:454 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:613 #: src/widgets/PoolWidget/PoolOperate/components/LiquidityInfo.tsx:430 +#: src/widgets/ve33/Ve33PoolOperate/index.tsx:277 msgid "My Liquidity" msgstr "" @@ -1423,6 +1446,7 @@ msgid "For" msgstr "对于" #: src/widgets/PoolWidget/PoolOperate/components/ComparePrice.tsx:52 +#: src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx:52 msgid "{lqAndDodoCompareText} Price Difference" msgstr "" @@ -1436,6 +1460,10 @@ msgstr "" msgid "You have not create any mining" msgstr "" +#: src/widgets/ve33/Ve33PoolOperate/index.tsx:177 +msgid "Pool Adress" +msgstr "" + #: src/components/chart/i18n.ts:27 msgid "The area of the chart indicates the buy/sell volume of {0} that can be carried by the market when the current price changes to the hover price." msgstr "" @@ -1470,6 +1498,7 @@ msgid "The start time is too soon, please set a later time" msgstr "" #: src/widgets/PoolWidget/PoolOperate/components/ComparePrice.tsx:61 +#: src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx:61 msgid "Current liquidity pool token price" msgstr "" @@ -1499,6 +1528,7 @@ msgid "The price of this pool is within your selected range. Your position is cu msgstr "" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:58 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:62 msgid "You are creating a pool" msgstr "" @@ -1533,6 +1563,8 @@ msgstr "" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:275 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:562 +#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:227 +#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:419 msgid "Confirm submission" msgstr "" @@ -1563,6 +1595,7 @@ msgid "Settler" msgstr "" #: src/widgets/PoolWidget/hooks/useAMMV2RemoveLiquidity.ts:164 +#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2RemoveLiquidity.ts:144 msgid "Remove liquidity" msgstr "" @@ -1698,6 +1731,7 @@ msgstr "" #: src/components/Swap/SwapOrderHistory/index.tsx:105 #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:204 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:198 msgid "Rate" msgstr "" @@ -1857,6 +1891,7 @@ msgstr "" #: src/components/Swap/SwapOrderHistory/index.tsx:99 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:458 +#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:323 msgid "Receive" msgstr "" @@ -1881,6 +1916,7 @@ msgstr "" #: src/components/Swap/components/SwapSettingsDialog/index.tsx:87 #: src/widgets/PoolWidget/AMMV2Create/Setting.tsx:100 #: src/widgets/PoolWidget/PoolOperate/components/SlippageSetting.tsx:123 +#: src/widgets/ve33/Ve33PoolOperate/components/SlippageSetting.tsx:111 msgid "Slippage Tolerance" msgstr "滑点" @@ -1909,6 +1945,9 @@ msgstr "" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1110 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:122 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOperateTabs.ts:15 +#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:91 +#: src/widgets/ve33/Ve33PoolOperate/hooks/usePoolOperateTabs.ts:15 +#: src/widgets/ve33/Ve33PoolOperate/index.tsx:401 msgid "Add" msgstr "" @@ -2022,6 +2061,7 @@ msgid "{0}-{1} is not supported. Please select another pair." msgstr "" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:255 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:249 msgid "Confirming..." msgstr "" @@ -2071,6 +2111,7 @@ msgid "There is no liquidity data." msgstr "" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:134 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:128 msgid "Output is estimated. If the price changes by more than {0} your transaction will revert." msgstr "" @@ -2135,6 +2176,7 @@ msgid "Advanced" msgstr "" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:107 +#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:111 msgid "{0}/{1} Pool Tokens" msgstr "" @@ -2150,6 +2192,9 @@ msgstr "" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1098 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOperateTabs.ts:16 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:233 +#: src/widgets/ve33/Ve33PoolOperate/hooks/usePoolOperateTabs.ts:16 +#: src/widgets/ve33/Ve33PoolOperate/index.tsx:402 +#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:205 msgid "Remove" msgstr "" @@ -2195,6 +2240,7 @@ msgid "Low price" msgstr "" #: src/widgets/PoolWidget/PoolOperate/components/ComparePrice.tsx:64 +#: src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx:64 msgid "differs from the price quoted by DODO by {lqAndDodoCompareText}" msgstr "" @@ -2221,6 +2267,7 @@ msgid "Paid" msgstr "" #: src/components/AddTokenToMetamask.tsx:54 +#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2AddLiquidity.ts:133 msgid "Failed to add" msgstr "" @@ -2241,6 +2288,8 @@ msgstr "" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:284 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:571 +#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:236 +#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:428 msgid "There is risk of being arbitraged if adding this liquidity." msgstr "" @@ -2274,6 +2323,7 @@ msgid "Liquidity Burn Ratio" msgstr "" #: src/widgets/PoolWidget/PoolOperate/hooks/usePercentageRemove.ts:102 +#: src/widgets/ve33/Ve33PoolOperate/hooks/usePercentageRemove.ts:99 msgid "Percentage to remove" msgstr "" @@ -2380,6 +2430,8 @@ msgstr "" #: src/components/TokenStatusButton.tsx:18 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:124 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:233 +#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:93 +#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:205 msgid "Insufficient balance" msgstr "余额不足" diff --git a/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts b/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts index 2fef837c..9dba25af 100644 --- a/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts +++ b/packages/dodoex-widgets/src/widgets/PoolWidget/utils.ts @@ -51,6 +51,12 @@ export type FetchVe33PoolList = ExcludeNone< >['ve33_getPoolList'] >; +export type FetchVotePoolList = ExcludeNone< + ReturnType< + Exclude<(typeof PoolApi.graphql.fetchVotePoolList)['__apiType'], undefined> + >['ve33_getVotePoolList'] +>; + export function convertLiquidityTokenToTokenInfo( token: | { diff --git a/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/TableList.tsx b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/TableList.tsx new file mode 100644 index 00000000..78751179 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/TableList.tsx @@ -0,0 +1,356 @@ +import { ChainId } from '@dodoex/api'; +import { + Box, + Checkbox, + HoverOpacity, + Tooltip, + useTheme, +} from '@dodoex/components'; +import { t, Trans } from '@lingui/macro'; +import { AddressWithLinkAndCopy } from '../../../components/AddressWithLinkAndCopy'; +import { TokenLogoPair } from '../../../components/TokenLogoPair'; +import { WIDGET_CLASS_NAME } from '../../../components/Widget'; +import { formatApy, formatShortNumber } from '../../../utils'; +import LiquidityTable from '../../PoolWidget/PoolList/components/LiquidityTable'; +import { PoolTypeTag } from '../components/PoolTypeTag'; +import { VotePoolInfoI } from '../types'; + +export interface TableListProps { + chainId: ChainId; + poolList: VotePoolInfoI[]; + hasMore?: boolean; + loadMore?: () => void; + loadMoreLoading?: boolean; + onSelectPool: (id: string, selected: boolean) => void; + selectedPoolList: { [key: string]: boolean }; +} + +export const TableList = ({ + chainId, + poolList, + hasMore, + loadMore, + loadMoreLoading, + onSelectPool, + selectedPoolList, +}: TableListProps) => { + const theme = useTheme(); + return ( + + + + + Pair + + + vAPR + + + TVL + + + Fees + + + Incentives + + + Total Vote + + + + + + {poolList?.map((item) => { + if (!item) { + return null; + } + const { baseToken, quoteToken } = item; + const aprText = item.apr ? formatApy(item.apr.fees) : undefined; + return ( + + + + + + + {`${baseToken.symbol}/${quoteToken.symbol}`} + + + + + Pool Address + + + + + + Gauge Address + + + + + } + placement="top" + container={document.querySelector( + `.${WIDGET_CLASS_NAME}`, + )} + onlyHover + sx={{ + maxWidth: 300, + }} + > + + + + + + + + + + + + + + {aprText} + + + + + + {formatShortNumber(item.totalValueLockedToken0)} +   + + {baseToken.symbol} + + + + {formatShortNumber(item.totalValueLockedToken1)}  + + {quoteToken.symbol} + + + + + + + + {formatShortNumber(item.feesToken0)} +   + + {baseToken.symbol} + + + + {formatShortNumber(item.feesToken1)}  + + {quoteToken.symbol} + + + + + + + Incentives + + + + + Votes + + + + + ) => { + const { checked } = evt.target; + onSelectPool(item.id, checked); + }} + /> + + + + ); + })} + + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/index.tsx new file mode 100644 index 00000000..52cbf7b8 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/index.tsx @@ -0,0 +1,310 @@ +import { ChainId, PoolApi } from '@dodoex/api'; +import { + Box, + Button, + SearchInput, + TabPanel, + Tabs, + TabsGroup, + useTheme, +} from '@dodoex/components'; +import { useInfiniteQuery } from '@tanstack/react-query'; +import { useCallback, useMemo, useRef, useState } from 'react'; +import { CardStatus } from '../../../components/CardWidgets'; +import WidgetContainer from '../../../components/WidgetContainer'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; +import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; +import { useGraphQLRequests } from '../../../hooks/useGraphQLRequests'; +import { TableList } from './TableList'; +import { useVoteTabs, VoteTab } from '../hooks/useVoteTabs'; +import { + useVotePoolFilters, + VotePoolFilters, +} from '../hooks/useVotePoolFilters'; +import { VotePoolInfoI } from '../types'; +import { compositeVotePoolInfo } from '../utils'; + +export const VotePoolList = () => { + // TODO: need replace + const chainId = ChainId.MORPH_HOLESKY_TESTNET; + const { account } = useWalletInfo(); + const { isMobile } = useWidgetDevice(); + const graphQLRequests = useGraphQLRequests(); + const theme = useTheme(); + const [filterToken, setFilterToken] = useState(''); + const [selectedPoolList, setSelectedPoolList] = useState<{ + [key: string]: boolean; + }>({}); + const { voteTab, tabs, handleChangeVoteTab } = useVoteTabs(); + const { votePoolFilter, filters, handleChangeVotePoolFilter } = + useVotePoolFilters(); + + const scrollParentRef = useRef(null); + const onSelectPool = useCallback( + (id: string, selected: boolean) => { + setSelectedPoolList({ ...selectedPoolList, [id]: selected }); + }, + [selectedPoolList, setSelectedPoolList], + ); + + const query = graphQLRequests.getInfiniteQuery( + PoolApi.graphql.fetchVotePoolList, + 'page', + { + where: { + token_starts_with: filterToken, + size: isMobile ? 4 : 8, + user: voteTab === VoteTab.MyVoted ? account : null, + }, + }, + ); + const fetchResult = useInfiniteQuery({ + ...query, + initialPageParam: 1, + getNextPageParam: (item) => { + return null; + // const { currentPage, totalCount, pageSize } = item.ve33_getPoolList ?? {}; + // if (!currentPage || !totalCount || !pageSize) { + // return null; + // } + // let totalPage = Math.floor(totalCount / pageSize); + // if (totalCount % pageSize) { + // totalPage += 1; + // } + // if (currentPage >= totalPage) { + // return null; + // } + // return currentPage + 1; + }, + }); + + const hasMore = fetchResult.hasNextPage; + const poolList = useMemo(() => { + const list = [] as VotePoolInfoI[]; + fetchResult.data?.pages.forEach((page) => { + page.ve33_getVotePoolList?.forEach((pool) => { + if (pool) { + const votePool = compositeVotePoolInfo(pool, chainId); + if ( + votePoolFilter === VotePoolFilters.All || + //@ts-ignore + votePool.type === votePoolFilter + ) { + list.push(compositeVotePoolInfo(pool, chainId)); + } + } + }); + }); + return list; + }, [chainId, fetchResult.data?.pages, votePoolFilter]); + + return ( + + + { + handleChangeVoteTab(value as VoteTab); + }} + sx={{ + display: 'flex', + flexDirection: 'column', + borderRadius: 16, + backgroundColor: 'background.paper', + flex: 1, + overflow: 'hidden', + height: 'max-content', + maxHeight: '100%', + }} + className={'gradient-card-border'} + placeholder={undefined} + onPointerEnterCapture={undefined} + onPointerLeaveCapture={undefined} + > + + + + { + setFilterToken(e.target.value); + }} + /> + + + {filters.map(({ key, value }, index) => { + return ( + handleChangeVotePoolFilter(key)} + key={key} + > + {value} + + ); + })} + + + + { + if (fetchResult.hasNextPage && !fetchResult.isFetching) { + fetchResult.fetchNextPage(); + } + }} + onSelectPool={onSelectPool} + selectedPoolList={selectedPoolList} + /> + + + + + { + if (fetchResult.hasNextPage && !fetchResult.isFetching) { + fetchResult.fetchNextPage(); + } + }} + onSelectPool={onSelectPool} + selectedPoolList={selectedPoolList} + /> + + + + + + + Select A Lock + + + + + + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/hooks/useVotePoolFilters.ts b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVotePoolFilters.ts new file mode 100644 index 00000000..54f96169 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVotePoolFilters.ts @@ -0,0 +1,39 @@ +import React from 'react'; +import { PoolTypeE } from '../types'; + +export enum VotePoolFilters { + All = 'all', + V2 = PoolTypeE.Pool, + V3 = PoolTypeE.CLPool, +} + +export function useVotePoolFilters() { + const [votePoolFilter, setVotePoolFilter] = React.useState( + VotePoolFilters.All, + ); + const filters = React.useMemo(() => { + const result = [ + { key: VotePoolFilters.All, value: 'All' }, + { + key: VotePoolFilters.V2, + value: 'V2', + }, + { + key: VotePoolFilters.V3, + value: 'V3', + }, + ]; + + return result; + }, []); + + const handleChangeVotePoolFilter = (votePoolFilter: VotePoolFilters) => { + setVotePoolFilter(votePoolFilter); + }; + + return { + votePoolFilter, + filters, + handleChangeVotePoolFilter, + }; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/hooks/useVoteTabs.ts b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVoteTabs.ts new file mode 100644 index 00000000..10bd3ef1 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVoteTabs.ts @@ -0,0 +1,31 @@ +import React from 'react'; + +export enum VoteTab { + SelectToVote = 'select-to-vote', + MyVoted = 'my-voted', +} + +export function useVoteTabs() { + const [voteTab, setVoteTab] = React.useState(VoteTab.SelectToVote); + const tabs = React.useMemo(() => { + const result = [ + { key: VoteTab.SelectToVote, value: 'Select to Vote' }, + { + key: VoteTab.MyVoted, + value: 'My Voted', + }, + ]; + + return result; + }, []); + + const handleChangeVoteTab = (voteTab: VoteTab) => { + setVoteTab(voteTab); + }; + + return { + voteTab, + tabs, + handleChangeVoteTab, + }; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/types.ts b/packages/dodoex-widgets/src/widgets/ve33/types.ts index 551b0b66..189255b9 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/types.ts +++ b/packages/dodoex-widgets/src/widgets/ve33/types.ts @@ -1,6 +1,6 @@ import { ChainId } from '@dodoex/api'; import { TokenInfo } from '../../hooks/Token/type'; -import { FetchVe33PoolList } from '../PoolWidget/utils'; +import { FetchVe33PoolList, FetchVotePoolList } from '../PoolWidget/utils'; export enum OperateTypeE { Add = 1, @@ -18,6 +18,7 @@ export enum FeeE { } export type FetchVe33PoolItem = FetchVe33PoolList[0]; +export type FetchVotePoolItem = FetchVotePoolList[0]; export type Ve33PoolInfoI = FetchVe33PoolItem & { stable: boolean; @@ -28,6 +29,15 @@ export type Ve33PoolInfoI = FetchVe33PoolItem & { quoteToken: TokenInfo; }; +export type VotePoolInfoI = FetchVotePoolItem & { + stable: boolean; + fee: FeeE | 0 | number; + type: PoolTypeE; + chainId: ChainId; + baseToken: TokenInfo; + quoteToken: TokenInfo; +}; + export interface Ve33PoolOperateProps { poolInfo: Ve33PoolInfoI; operateType: OperateTypeE; diff --git a/packages/dodoex-widgets/src/widgets/ve33/utils.ts b/packages/dodoex-widgets/src/widgets/ve33/utils.ts index fbf4ce85..6be3c695 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/utils.ts +++ b/packages/dodoex-widgets/src/widgets/ve33/utils.ts @@ -1,5 +1,11 @@ import { ChainId } from '@dodoex/api'; -import { FetchVe33PoolItem, PoolTypeE, Ve33PoolInfoI } from './types'; +import { + FetchVe33PoolItem, + FetchVotePoolItem, + PoolTypeE, + Ve33PoolInfoI, + VotePoolInfoI, +} from './types'; import { FeeE } from './types'; @@ -38,3 +44,32 @@ export function compositePoolInfo( }, }; } + +export function compositeVotePoolInfo( + pool: NonNullable, + chainId: ChainId, +): VotePoolInfoI { + return { + ...pool, + chainId, + stable: pool.title !== 'V2.Volatile', + fee: pool.feeRate, + type: pool.version === 'v2' ? PoolTypeE.Pool : PoolTypeE.CLPool, + baseToken: { + chainId, + address: pool.token0Address, + name: pool.token0Name, + decimals: pool.token0Decimals, + symbol: pool.token0Symbol, + logoURI: undefined, + }, + quoteToken: { + chainId, + address: pool.token1Address, + name: pool.token1Name, + decimals: pool.token1Decimals, + symbol: pool.token1Symbol, + logoURI: undefined, + }, + }; +} From 377bddd50d92d64a837ae4370704423c7932c08f Mon Sep 17 00:00:00 2001 From: AxeAfk Date: Wed, 14 May 2025 21:57:07 +0800 Subject: [PATCH 13/18] publish beta version --- packages/dodoex-api/package.json | 4 ++-- packages/dodoex-widgets/package.json | 4 ++-- packages/dodoex-widgets/src/index.tsx | 1 + packages/dodoex-widgets/src/locales/en-US.js | 2 +- packages/dodoex-widgets/src/locales/en-US.po | 15 +++++++++++++++ packages/dodoex-widgets/src/locales/zh-CN.js | 2 +- packages/dodoex-widgets/src/locales/zh-CN.po | 15 +++++++++++++++ 7 files changed, 37 insertions(+), 6 deletions(-) diff --git a/packages/dodoex-api/package.json b/packages/dodoex-api/package.json index 4f5ccbff..0338943e 100644 --- a/packages/dodoex-api/package.json +++ b/packages/dodoex-api/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/api", - "version": "3.0.4-ve33.3", + "version": "3.0.4-ve33.4", "description": "DODO API Kit", "source": "src/index.ts", "types": "dist/types/index.d.ts", @@ -102,4 +102,4 @@ "ts-jest": "^29.0.1", "typescript": "^5.6.3" } -} \ No newline at end of file +} diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index f4fc3c51..8e54e58e 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.0.4-ve33.8", + "version": "3.0.4-ve33.10", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", @@ -58,7 +58,7 @@ }, "dependencies": { "@babel/runtime": "^7.17.0", - "@dodoex/api": "3.0.4-ve33.3", + "@dodoex/api": "3.0.4-ve33.4", "@dodoex/components": "3.0.4-ve33.3", "@dodoex/contract-request": "^1.3.0", "@dodoex/dodo-contract-request": "1.15.0-morph-holesky.2", diff --git a/packages/dodoex-widgets/src/index.tsx b/packages/dodoex-widgets/src/index.tsx index eb710b6d..90504a52 100644 --- a/packages/dodoex-widgets/src/index.tsx +++ b/packages/dodoex-widgets/src/index.tsx @@ -44,6 +44,7 @@ export type { PoolOperateProps } from './widgets/PoolWidget/PoolOperate'; export { Ve33PoolDetail } from './widgets/ve33/Ve33PoolDetail'; export { Ve33PoolList } from './widgets/ve33/Ve33PoolList'; +export { VotePoolList } from './widgets/ve33/VotePoolList'; export type SwapWidgetProps = WidgetProps & SwapProps; diff --git a/packages/dodoex-widgets/src/locales/en-US.js b/packages/dodoex-widgets/src/locales/en-US.js index 967e16ca..c3f09247 100644 --- a/packages/dodoex-widgets/src/locales/en-US.js +++ b/packages/dodoex-widgets/src/locales/en-US.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"Transaction Time:\",\"+uZnU3\":\"Cross Chain\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"The current slippage protection coefficient set exceeds \",[\"maxSlippageWarning\"],\"%, which may result in losses.\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"Opening \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"To\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/mfICu\":\"Fees\",\"/nzjSF\":[[\"0\"],\" pending\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"Balance:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"Dismiss\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"Due to the market condition, market price and estimated price may have a slight difference\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" confirmed\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"The current network is inconsistent with the wallet - please switch in wallet\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"Current price impact\",\"6UYTy8\":\"Minute\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"Hour\",\"6lss/t\":\"Pricing Model\",\"6nlY4n\":\"Gauge Adress\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"Enter the token symbol or address\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"Fee includes: Cross Chain fees + Swap fees. Gas fee not included.\",\"7VpPHA\":\"Confirm\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"This token is on\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"Estimated service provider fees\",\"93m8jT\":\"Basic Fee\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"Price impact exceeds the slippage tolerance you set. Try increasing the slippage tolerance.\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"s\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"This CP has been settled by other addrs\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"Max\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"Slippage\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"Insufficient funds - Please retry after depositing more \",[\"EtherTokenSymbol\"],\" into your wallet\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"Are you sure swapping to another chain?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"Destination\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"Unapproved\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"Insufficient cross-chain fees, need at least \",[\"0\"],\" \",[\"1\"]],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"Transaction Pending\",\"Fdp03t\":\"on\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"Day\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HXOnT6\":\"Failed to remove\",\"HuVZMK\":\"Days\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"Connecting...\",\"J39pAJ\":\"Additional Fee\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"Fetching best price...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"Review Swap\",\"K/PgcA\":\"Select Cross Chain\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"Attention: High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"Select Tokens\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"The setting has been switched to swap mode\",\"NVAuTg\":\"Quote not available\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"Fetching Price...\",\"OfhWJH\":\"Reset\",\"OgKD6h\":\"Best offer\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"Confirming\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"Fee\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"Confirm Cross Chain\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"Estimated Time\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"Swap summary\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"Tx\",\"S8G1qk\":\"Single\",\"SXnevP\":\"Review Cross Chain\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"Price Impact\",\"T0Y2+3\":\"Select a token\",\"TFOxRM\":\"Mins\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"Wallet incompatibility\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"Settings\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"Connect to your \",[\"0\"],\" Wallet\"],\"V+rJKF\":\"Seconds\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"Swap Detail\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"For\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YpVMk+\":\"Pool Adress\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"On\",\"Z7ZXbT\":\"Approve\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"Additional routing fees set by the Widget user\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"Maximum slippage do not exceed 50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"Minutes\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"Cancel\",\"dI46oG\":\"Auto switch network\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"Min\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"Transaction rejected.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"Service update, please wait and try again\",\"gz+9Rb\":\"Gas price is too low, please adjust in your wallet and try again\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC node data exception\",\"h5FVz1\":\"Estimated transaction time\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"Connect to your wallet\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"Enter an amount\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"Approving\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"Something went wrong.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"Second\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"Confirm swap\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"Slippage Tolerance\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"Send to:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"Unable to SETTLE during the cooling-off period\",\"qLkska\":\"The setting has been switched to cross chain mode\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"Connect to a wallet\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"Detail\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"SELECT TOKEN\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"Cross Chain Summary\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20: low-level call failed. Please contact the DODO team.\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"Unsupported network - switch to trade\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"Swap\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"Source\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"User denied transaction signature.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop exception\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"Hours\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"Close\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"Transaction Deadline\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"Insufficient balance\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"Transaction Time:\",\"+uZnU3\":\"Cross Chain\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"The current slippage protection coefficient set exceeds \",[\"maxSlippageWarning\"],\"%, which may result in losses.\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"Opening \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"To\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/mfICu\":\"Fees\",\"/nzjSF\":[[\"0\"],\" pending\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"Balance:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"Dismiss\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"Due to the market condition, market price and estimated price may have a slight difference\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" confirmed\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"The current network is inconsistent with the wallet - please switch in wallet\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"Current price impact\",\"6UYTy8\":\"Minute\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"Hour\",\"6lss/t\":\"Pricing Model\",\"6nlY4n\":\"Gauge Adress\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"Enter the token symbol or address\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"Fee includes: Cross Chain fees + Swap fees. Gas fee not included.\",\"7VpPHA\":\"Confirm\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"This token is on\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"Estimated service provider fees\",\"93m8jT\":\"Basic Fee\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"Price impact exceeds the slippage tolerance you set. Try increasing the slippage tolerance.\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"s\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"This CP has been settled by other addrs\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"Max\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"Slippage\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"Insufficient funds - Please retry after depositing more \",[\"EtherTokenSymbol\"],\" into your wallet\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dizb6O\":\"Incentives\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"Are you sure swapping to another chain?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"Destination\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"Unapproved\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"Insufficient cross-chain fees, need at least \",[\"0\"],\" \",[\"1\"]],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"Transaction Pending\",\"Fdp03t\":\"on\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"GXkFCl\":\"Total Vote\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"Day\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HXOnT6\":\"Failed to remove\",\"HuVZMK\":\"Days\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"Connecting...\",\"J39pAJ\":\"Additional Fee\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"Fetching best price...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"Review Swap\",\"K/PgcA\":\"Select Cross Chain\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"Attention: High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"Select Tokens\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"The setting has been switched to swap mode\",\"NVAuTg\":\"Quote not available\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"Fetching Price...\",\"OfhWJH\":\"Reset\",\"OgKD6h\":\"Best offer\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"Confirming\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"Fee\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"Confirm Cross Chain\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"Estimated Time\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"Swap summary\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"Tx\",\"S8G1qk\":\"Single\",\"SXnevP\":\"Review Cross Chain\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"Price Impact\",\"T0Y2+3\":\"Select a token\",\"TFOxRM\":\"Mins\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"Wallet incompatibility\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"Settings\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"Connect to your \",[\"0\"],\" Wallet\"],\"V+rJKF\":\"Seconds\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"Swap Detail\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"For\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"YcpWhR\":\"vAPR\",\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YpVMk+\":\"Pool Adress\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"On\",\"Z7ZXbT\":\"Approve\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"Additional routing fees set by the Widget user\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"Maximum slippage do not exceed 50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"Minutes\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"Cancel\",\"dI46oG\":\"Auto switch network\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"Min\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"Transaction rejected.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"Service update, please wait and try again\",\"gz+9Rb\":\"Gas price is too low, please adjust in your wallet and try again\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC node data exception\",\"h5FVz1\":\"Estimated transaction time\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"Connect to your wallet\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"Enter an amount\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"Approving\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"Something went wrong.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"Second\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"Confirm swap\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"Slippage Tolerance\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"Send to:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"Unable to SETTLE during the cooling-off period\",\"qLkska\":\"The setting has been switched to cross chain mode\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"Connect to a wallet\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"Detail\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"SELECT TOKEN\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"Cross Chain Summary\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20: low-level call failed. Please contact the DODO team.\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"Unsupported network - switch to trade\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"Swap\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"Source\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"User denied transaction signature.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop exception\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"Hours\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"Close\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"Transaction Deadline\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"Insufficient balance\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file diff --git a/packages/dodoex-widgets/src/locales/en-US.po b/packages/dodoex-widgets/src/locales/en-US.po index 15682d25..ea8d00c1 100644 --- a/packages/dodoex-widgets/src/locales/en-US.po +++ b/packages/dodoex-widgets/src/locales/en-US.po @@ -61,6 +61,7 @@ msgid "Receive {0}" msgstr "Receive {0}" #: src/widgets/ve33/Ve33PoolList/TableList.tsx:64 +#: src/widgets/ve33/VotePoolList/TableList.tsx:56 msgid "Fees" msgstr "Fees" @@ -479,6 +480,7 @@ msgstr "No results found" #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:297 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:595 #: src/widgets/ve33/Ve33PoolList/TableList.tsx:52 +#: src/widgets/ve33/VotePoolList/TableList.tsx:47 msgid "Pair" msgstr "Pair" @@ -586,6 +588,10 @@ msgstr "Pool not found. Please switch to another network and retry." msgid "Daily Rewards" msgstr "Daily Rewards" +#: src/widgets/ve33/VotePoolList/TableList.tsx:59 +msgid "Incentives" +msgstr "Incentives" + #: src/widgets/MiningWidget/MiningCreate/hooks/useCreateMiningTypeList.ts:14 msgid "Token Pair Mining" msgstr "Token Pair Mining" @@ -710,6 +716,7 @@ msgstr "Insufficient cross-chain fees, need at least {0} {1}" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:345 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:604 #: src/widgets/ve33/Ve33PoolList/TableList.tsx:58 +#: src/widgets/ve33/VotePoolList/TableList.tsx:53 msgid "TVL" msgstr "TVL" @@ -754,6 +761,10 @@ msgstr "Canceled" msgid "The fee rate must be between 0.01% to 10%" msgstr "The fee rate must be between 0.01% to 10%" +#: src/widgets/ve33/VotePoolList/TableList.tsx:62 +msgid "Total Vote" +msgstr "Total Vote" + #. js-lingui-explicit-id #: src/widgets/MiningWidget/MiningList/components/GoBack.tsx:49 msgid "Go back" @@ -1450,6 +1461,10 @@ msgstr "For" msgid "{lqAndDodoCompareText} Price Difference" msgstr "{lqAndDodoCompareText} Price Difference" +#: src/widgets/ve33/VotePoolList/TableList.tsx:50 +msgid "vAPR" +msgstr "vAPR" + #. js-lingui-explicit-id #: src/widgets/MiningWidget/MiningList/index.tsx:176 msgid "You are not currently providing liquidity for any LP pools." diff --git a/packages/dodoex-widgets/src/locales/zh-CN.js b/packages/dodoex-widgets/src/locales/zh-CN.js index e2d6d6f5..f0bb1260 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.js +++ b/packages/dodoex-widgets/src/locales/zh-CN.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"交易时长:\",\"+uZnU3\":\"跨链桥\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"当前滑点保护系数设置超过\",[\"maxSlippageWarning\"],\"%,可能会造成损失。\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"连接 \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"至\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/mfICu\":\"Fees\",\"/nzjSF\":[[\"0\"],\" 等待中\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"余额:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"忽略\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"由于市场情况不同,市场价格与估算价格可能略有差异。\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" 已确认\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"当前网络与钱包不一致,请在钱包中切换\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"当前价格冲击\",\"6UYTy8\":\"分钟\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"小时\",\"6lss/t\":\"Pricing Model\",\"6nlY4n\":\"Gauge Adress\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"输入代币符号或地址\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"费用包括过跨链桥和交易的手续费,不包括 gas 费。\",\"7VpPHA\":\"确认\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"该代币在\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"预计服务供应商费用\",\"93m8jT\":\"基础手续费\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"价格冲击超过了你设置的滑点, 请提高滑点后重试\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"秒\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"此众筹池已被其他地址结算\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"全部\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"滑点\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"余额不足 - 请在钱包充值\",[\"EtherTokenSymbol\"],\"后重试\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"是否确认切换到另一个链?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"目标\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"未授权\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"跨链费用不足,至少需要 \",[\"0\"],\" \",[\"1\"],\" \"],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"交易进行中\",\"Fdp03t\":\"在\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"天\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HXOnT6\":\"Failed to remove\",\"HuVZMK\":\"天\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"连接中...\",\"J39pAJ\":\"额外手续费\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"获取最优价格中...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"预览交易\",\"K/PgcA\":\"选择跨链桥\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"注意:滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"选择代币\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"设置已切换至闪兑模式\",\"NVAuTg\":\"没有报价\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"获取价格中...\",\"OfhWJH\":\"重置\",\"OgKD6h\":\"最优价格\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"确认中\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"手续费\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"确认跨链交易\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"价格冲击为<0>\",[\"priceImpact\"],\"%, 仍接受此报价\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"预计时间\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"交易预览\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"交易哈希:\",\"S8G1qk\":\"Single\",\"SXnevP\":\"预览跨链交易\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"价格冲击\",\"T0Y2+3\":\"选择代币\",\"TFOxRM\":\"分钟\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"钱包不兼容\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"设置\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"连接你的\",[\"0\"],\"钱包\"],\"V+rJKF\":\"秒\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"交易详情\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"对于\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YpVMk+\":\"Pool Adress\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"在\",\"Z7ZXbT\":\"代币授权\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"由 Widget 设置的额外路由费用\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"最大滑点不能超过50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"分钟\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"取消\",\"dI46oG\":\"自动切换网络\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"分钟\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"交易被拒绝.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"服务升级中, 请等待或重试\",\"gz+9Rb\":\"Gas 价格过低, 请调整后重试\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC节点异常\",\"h5FVz1\":\"预计交易时长\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"连接钱包\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"输入代币数量\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"授权中\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"发生异常错误.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"秒\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"确认交易\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"滑点\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"发送至:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"在冷静期无法进行清算\",\"qLkska\":\"设置已切换到跨链桥交易模式\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"连接钱包\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"详情\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"选择代币\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"跨链桥概览\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20:low-level call failed,请联系DODO团队解决。\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"未支持网络 - 请切换后进行交易\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"交易\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"源\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"用户拒绝交易签名.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop 异常\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"小时\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"关闭\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"交易截止时间\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"余额不足\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"交易时长:\",\"+uZnU3\":\"跨链桥\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"当前滑点保护系数设置超过\",[\"maxSlippageWarning\"],\"%,可能会造成损失。\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"连接 \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"至\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/mfICu\":\"Fees\",\"/nzjSF\":[[\"0\"],\" 等待中\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"余额:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"忽略\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"由于市场情况不同,市场价格与估算价格可能略有差异。\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" 已确认\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"当前网络与钱包不一致,请在钱包中切换\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"当前价格冲击\",\"6UYTy8\":\"分钟\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"小时\",\"6lss/t\":\"Pricing Model\",\"6nlY4n\":\"Gauge Adress\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"输入代币符号或地址\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"费用包括过跨链桥和交易的手续费,不包括 gas 费。\",\"7VpPHA\":\"确认\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"该代币在\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"预计服务供应商费用\",\"93m8jT\":\"基础手续费\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"价格冲击超过了你设置的滑点, 请提高滑点后重试\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"秒\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"此众筹池已被其他地址结算\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"全部\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"滑点\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"余额不足 - 请在钱包充值\",[\"EtherTokenSymbol\"],\"后重试\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dizb6O\":\"Incentives\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"是否确认切换到另一个链?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"目标\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"未授权\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"跨链费用不足,至少需要 \",[\"0\"],\" \",[\"1\"],\" \"],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"交易进行中\",\"Fdp03t\":\"在\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"GXkFCl\":\"Total Vote\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"天\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HXOnT6\":\"Failed to remove\",\"HuVZMK\":\"天\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"连接中...\",\"J39pAJ\":\"额外手续费\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"获取最优价格中...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"预览交易\",\"K/PgcA\":\"选择跨链桥\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"注意:滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"选择代币\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"设置已切换至闪兑模式\",\"NVAuTg\":\"没有报价\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"获取价格中...\",\"OfhWJH\":\"重置\",\"OgKD6h\":\"最优价格\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"确认中\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"手续费\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"确认跨链交易\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"价格冲击为<0>\",[\"priceImpact\"],\"%, 仍接受此报价\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"预计时间\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"交易预览\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"交易哈希:\",\"S8G1qk\":\"Single\",\"SXnevP\":\"预览跨链交易\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"价格冲击\",\"T0Y2+3\":\"选择代币\",\"TFOxRM\":\"分钟\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"钱包不兼容\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"设置\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"连接你的\",[\"0\"],\"钱包\"],\"V+rJKF\":\"秒\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"交易详情\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"对于\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"YcpWhR\":\"vAPR\",\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YpVMk+\":\"Pool Adress\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"在\",\"Z7ZXbT\":\"代币授权\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"由 Widget 设置的额外路由费用\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"最大滑点不能超过50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"分钟\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"取消\",\"dI46oG\":\"自动切换网络\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"分钟\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"交易被拒绝.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"服务升级中, 请等待或重试\",\"gz+9Rb\":\"Gas 价格过低, 请调整后重试\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC节点异常\",\"h5FVz1\":\"预计交易时长\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"连接钱包\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"输入代币数量\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"授权中\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"发生异常错误.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"秒\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"确认交易\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"滑点\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"发送至:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"在冷静期无法进行清算\",\"qLkska\":\"设置已切换到跨链桥交易模式\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"连接钱包\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"详情\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"选择代币\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"跨链桥概览\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20:low-level call failed,请联系DODO团队解决。\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"未支持网络 - 请切换后进行交易\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"交易\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"源\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"用户拒绝交易签名.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop 异常\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"小时\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"关闭\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"交易截止时间\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"余额不足\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file diff --git a/packages/dodoex-widgets/src/locales/zh-CN.po b/packages/dodoex-widgets/src/locales/zh-CN.po index ed1949d2..334ca32c 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.po +++ b/packages/dodoex-widgets/src/locales/zh-CN.po @@ -61,6 +61,7 @@ msgid "Receive {0}" msgstr "" #: src/widgets/ve33/Ve33PoolList/TableList.tsx:64 +#: src/widgets/ve33/VotePoolList/TableList.tsx:56 msgid "Fees" msgstr "" @@ -479,6 +480,7 @@ msgstr "" #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:297 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:595 #: src/widgets/ve33/Ve33PoolList/TableList.tsx:52 +#: src/widgets/ve33/VotePoolList/TableList.tsx:47 msgid "Pair" msgstr "" @@ -586,6 +588,10 @@ msgstr "" msgid "Daily Rewards" msgstr "" +#: src/widgets/ve33/VotePoolList/TableList.tsx:59 +msgid "Incentives" +msgstr "" + #: src/widgets/MiningWidget/MiningCreate/hooks/useCreateMiningTypeList.ts:14 msgid "Token Pair Mining" msgstr "" @@ -710,6 +716,7 @@ msgstr "跨链费用不足,至少需要 {0} {1} " #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:345 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:604 #: src/widgets/ve33/Ve33PoolList/TableList.tsx:58 +#: src/widgets/ve33/VotePoolList/TableList.tsx:53 msgid "TVL" msgstr "" @@ -754,6 +761,10 @@ msgstr "" msgid "The fee rate must be between 0.01% to 10%" msgstr "" +#: src/widgets/ve33/VotePoolList/TableList.tsx:62 +msgid "Total Vote" +msgstr "" + #. js-lingui-explicit-id #: src/widgets/MiningWidget/MiningList/components/GoBack.tsx:49 msgid "Go back" @@ -1450,6 +1461,10 @@ msgstr "对于" msgid "{lqAndDodoCompareText} Price Difference" msgstr "" +#: src/widgets/ve33/VotePoolList/TableList.tsx:50 +msgid "vAPR" +msgstr "" + #. js-lingui-explicit-id #: src/widgets/MiningWidget/MiningList/index.tsx:176 msgid "You are not currently providing liquidity for any LP pools." From 656ff49b94297aa36d5aa8ea0167725d025b0487 Mon Sep 17 00:00:00 2001 From: AxeAfk Date: Wed, 14 May 2025 22:12:42 +0800 Subject: [PATCH 14/18] publish beta version --- packages/doc/src/stories/widgets/VotePoolList.stories.tsx | 2 +- packages/dodoex-widgets/src/widgets/ve33/VotePoolList/index.tsx | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/doc/src/stories/widgets/VotePoolList.stories.tsx b/packages/doc/src/stories/widgets/VotePoolList.stories.tsx index 044be402..2186b86b 100644 --- a/packages/doc/src/stories/widgets/VotePoolList.stories.tsx +++ b/packages/doc/src/stories/widgets/VotePoolList.stories.tsx @@ -2,7 +2,7 @@ import { ChainId } from '@dodoex/api'; import { VotePoolListWidget, WidgetProps } from '@dodoex/widgets'; export default { - title: 'Widgets/Ve33PoolList', + title: 'Widgets/VotePoolList', component: 'div', }; diff --git a/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/index.tsx index 52cbf7b8..d2dee7b0 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/index.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/index.tsx @@ -127,7 +127,6 @@ export const VotePoolList = () => { display: 'flex', flexDirection: 'column', borderRadius: 16, - backgroundColor: 'background.paper', flex: 1, overflow: 'hidden', height: 'max-content', @@ -143,7 +142,6 @@ export const VotePoolList = () => { display: 'flex', justifyContent: 'space-between', padding: 20, - borderBottomWidth: 1, }} > From a17af0b096bebb381b7942575f5d8ba9fad7eb21 Mon Sep 17 00:00:00 2001 From: JunJie Date: Thu, 15 May 2025 19:25:28 +0800 Subject: [PATCH 15/18] feat: add ve33-v3 operate --- packages/dodoex-widgets/package.json | 4 +- .../Swap/components/TokenCard/NumberInput.tsx | 10 + .../Swap/components/TokenCard/index.tsx | 3 + .../src/hooks/Submission/types.ts | 1 + .../src/hooks/Token/usePoolTokenSort.ts | 65 +++ .../src/utils/fractions/fraction.ts | 195 +++++++ .../src/utils/fractions/index.ts | 3 + .../src/utils/fractions/percent.ts | 54 ++ .../src/utils/fractions/price.ts | 86 +++ .../src/utils/fractions/types.ts | 8 + .../src/widgets/ve33/Ve33PoolList/index.tsx | 55 +- .../src/widgets/ve33/Ve33PoolOperate.tsx | 44 ++ .../AddPoolOperate.tsx | 0 .../RemovePoolOperate.tsx | 0 .../components/ComparePrice.tsx | 0 .../components/OperateBtn.tsx | 0 .../components/SliderPercentageCard.tsx | 0 .../components/SlippageSetting.tsx | 0 .../components/V2ConfirmDialog.tsx | 0 .../hooks/useComparePrice.ts | 0 .../hooks/useLiquidityOperateAmount.ts | 0 .../hooks/usePercentageRemove.ts | 0 .../hooks/usePoolOperateTabs.ts | 0 .../hooks/useVe33V2AddLiquidity.ts | 0 .../hooks/useVe33V2BalanceInfo.ts | 0 .../hooks/useVe33V2RemoveLiquidity.ts | 0 .../hooks/useWithdrawInfo.ts | 0 .../index.tsx | 8 +- .../types.ts | 0 .../Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx | 504 ++++++++++++++++++ .../components/Badge/RangeBadge.tsx | 51 ++ .../components/ClaimButton.tsx | 56 ++ .../components/InRangeDot.tsx | 48 ++ .../components/InputStepCounter.tsx | 223 ++++++++ .../LiquidityChartRangeInput/Area.tsx | 44 ++ .../LiquidityChartRangeInput/AxisBottom.tsx | 51 ++ .../LiquidityChartRangeInput/Brush.tsx | 412 ++++++++++++++ .../LiquidityChartRangeInput/Chart.tsx | 189 +++++++ .../LiquidityChartRangeInput/Line.tsx | 32 ++ .../LiquidityChartRangeInput/Zoom.tsx | 192 +++++++ .../LiquidityChartRangeInput/index.tsx | 258 +++++++++ .../LiquidityChartRangeInput/svg.tsx | 61 +++ .../LiquidityChartRangeInput/types.ts | 64 +++ .../LiquidityChartRangeInput/usePrevious.ts | 16 + .../LiquidityChartRangeInput/utils.ts | 14 + .../components/MyLiquidity.tsx | 130 +++++ .../components/PositionPreview.tsx | 143 +++++ .../PositionSelectedRangePreview.tsx | 237 ++++++++ .../components/RangeRatioSelect.tsx | 101 ++++ .../components/RangeSelector.tsx | 99 ++++ .../components/RateToggle.tsx | 97 ++++ .../components/RemoveButton.tsx | 60 +++ .../components/ReviewModal.tsx | 96 ++++ .../components/TokenAndEtherscan.tsx | 50 ++ .../components/TokenPairSelect.tsx | 194 +++++++ .../Ve33V3PoolOperate/components/arrow.svg | 7 + .../Ve33V3PoolOperate/components/shared.ts | 25 + .../Ve33V3PoolOperate/components/widgets.tsx | 273 ++++++++++ .../ve33/Ve33V3PoolOperate/constants/misc.ts | 36 ++ .../hooks/useAddVe33V3Liquidity.ts | 149 ++++++ .../hooks/usePoolActiveLiquidityChartData.ts | 156 ++++++ .../Ve33V3PoolOperate/hooks/useSetRange.ts | 316 +++++++++++ .../hooks/useVe33PoolPositions.ts | 27 + .../hooks/useVe33V3Amounts.ts | 118 ++++ .../Ve33V3PoolOperate/hooks/useVe33V3Pair.ts | 88 +++ .../widgets/ve33/Ve33V3PoolOperate/index.tsx | 300 +++++++++++ .../widgets/ve33/Ve33V3PoolOperate/types.ts | 13 + .../ve33/Ve33V3PoolOperate/utils/calldata.ts | 16 + .../utils/computeSurroundingTicks.ts | 69 +++ .../ve33/Ve33V3PoolOperate/utils/constants.ts | 14 + .../utils/encodeSqrtRatioX96.ts | 20 + .../utils/formatTickPrice.ts | 20 + .../ve33/Ve33V3PoolOperate/utils/fullMath.ts | 17 + .../utils/getPositionAmount.ts | 156 ++++++ .../utils/getPositionAmountWithSlippage.ts | 138 +++++ .../Ve33V3PoolOperate/utils/getTickToPrice.ts | 73 +++ .../utils/maxLiquidityForAmounts.ts | 156 ++++++ .../utils/mostSignificantBit.ts | 25 + .../utils/nearestUsableTick.ts | 17 + .../ve33/Ve33V3PoolOperate/utils/slippage.ts | 17 + .../ve33/Ve33V3PoolOperate/utils/sqrt.ts | 31 ++ .../Ve33V3PoolOperate/utils/sqrtPriceMath.ts | 174 ++++++ .../ve33/Ve33V3PoolOperate/utils/tickMath.ts | 173 ++++++ .../Ve33V3PoolOperate/utils/tryParseTick.ts | 70 +++ yarn.lock | 8 +- 85 files changed, 6610 insertions(+), 50 deletions(-) create mode 100644 packages/dodoex-widgets/src/hooks/Token/usePoolTokenSort.ts create mode 100644 packages/dodoex-widgets/src/utils/fractions/fraction.ts create mode 100644 packages/dodoex-widgets/src/utils/fractions/index.ts create mode 100644 packages/dodoex-widgets/src/utils/fractions/percent.ts create mode 100644 packages/dodoex-widgets/src/utils/fractions/price.ts create mode 100644 packages/dodoex-widgets/src/utils/fractions/types.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate.tsx rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/AddPoolOperate.tsx (100%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/RemovePoolOperate.tsx (100%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/components/ComparePrice.tsx (100%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/components/OperateBtn.tsx (100%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/components/SliderPercentageCard.tsx (100%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/components/SlippageSetting.tsx (100%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/components/V2ConfirmDialog.tsx (100%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/hooks/useComparePrice.ts (100%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/hooks/useLiquidityOperateAmount.ts (100%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/hooks/usePercentageRemove.ts (100%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/hooks/usePoolOperateTabs.ts (100%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/hooks/useVe33V2AddLiquidity.ts (100%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/hooks/useVe33V2BalanceInfo.ts (100%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/hooks/useVe33V2RemoveLiquidity.ts (100%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/hooks/useWithdrawInfo.ts (100%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/index.tsx (98%) rename packages/dodoex-widgets/src/widgets/ve33/{Ve33PoolOperate => Ve33V2PoolOperate}/types.ts (100%) create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/ClaimButton.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/InRangeDot.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/InputStepCounter.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Area.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/AxisBottom.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Brush.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Chart.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Line.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Zoom.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/index.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/svg.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/types.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/usePrevious.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/utils.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/MyLiquidity.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/PositionPreview.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RangeRatioSelect.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RangeSelector.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RateToggle.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RemoveButton.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/ReviewModal.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/TokenAndEtherscan.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/TokenPairSelect.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/arrow.svg create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/shared.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/widgets.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/constants/misc.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useAddVe33V3Liquidity.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/usePoolActiveLiquidityChartData.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useSetRange.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33PoolPositions.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33V3Amounts.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33V3Pair.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/index.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/types.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/calldata.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/computeSurroundingTicks.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/constants.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/encodeSqrtRatioX96.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/formatTickPrice.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/fullMath.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getPositionAmount.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getPositionAmountWithSlippage.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getTickToPrice.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/maxLiquidityForAmounts.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/mostSignificantBit.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/nearestUsableTick.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/slippage.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/sqrt.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/sqrtPriceMath.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/tickMath.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/tryParseTick.ts diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index 8e54e58e..b3c64092 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -61,7 +61,7 @@ "@dodoex/api": "3.0.4-ve33.4", "@dodoex/components": "3.0.4-ve33.3", "@dodoex/contract-request": "^1.3.0", - "@dodoex/dodo-contract-request": "1.15.0-morph-holesky.2", + "@dodoex/dodo-contract-request": "1.15.0-morph-holesky.3", "@dodoex/icons": "^2.0.2", "@emotion/react": "^11.10.0", "@emotion/styled": "^11.10.0", @@ -154,4 +154,4 @@ "ts-jest": "^29.0.1", "typescript": "^5.6.3" } -} +} \ No newline at end of file diff --git a/packages/dodoex-widgets/src/components/Swap/components/TokenCard/NumberInput.tsx b/packages/dodoex-widgets/src/components/Swap/components/TokenCard/NumberInput.tsx index 189d815f..348c8c51 100644 --- a/packages/dodoex-widgets/src/components/Swap/components/TokenCard/NumberInput.tsx +++ b/packages/dodoex-widgets/src/components/Swap/components/TokenCard/NumberInput.tsx @@ -18,6 +18,7 @@ export const NumberInput = forwardRef(function NumberInput( suffixGap = 0, withClear, onFocus, + onBlur, placeholder, readonlyShowSuffix, typography, @@ -27,6 +28,7 @@ export const NumberInput = forwardRef(function NumberInput( value?: string; decimals?: number; onFocus?: () => void; + onBlur?: (v: string) => void; onChange?: (v: string) => void; suffix?: React.ReactNode | string; suffixGap?: number; @@ -86,6 +88,14 @@ export const NumberInput = forwardRef(function NumberInput( readOnly={readOnly} placeholder={placeholder || '0.00'} onFocus={onFocus} + onBlur={ + onBlur + ? (evt) => { + const inputVal = evt.target.value; + onBlur(inputVal); + } + : undefined + } onChange={(evt: any) => { const inputVal = evt.target.value; const input = diff --git a/packages/dodoex-widgets/src/components/Swap/components/TokenCard/index.tsx b/packages/dodoex-widgets/src/components/Swap/components/TokenCard/index.tsx index 44250959..8d86cb29 100644 --- a/packages/dodoex-widgets/src/components/Swap/components/TokenCard/index.tsx +++ b/packages/dodoex-widgets/src/components/Swap/components/TokenCard/index.tsx @@ -42,6 +42,7 @@ export interface TokenCardProps { token?: TokenInfo | null; onInputChange?: (v: string) => void; onInputFocus?: () => void; + onInputBlur?: (v: string) => void; onTokenClick?: () => void; onTokenChange?: (token: TokenInfo, isOccupied: boolean) => void; side?: TokenPickerProps['side']; @@ -120,6 +121,7 @@ export function TokenCard({ occupiedAddrs, occupiedChainId, onInputFocus, + onInputBlur, onTokenClick, onInputChange, onTokenChange, @@ -255,6 +257,7 @@ export function TokenCard({ { diff --git a/packages/dodoex-widgets/src/hooks/Submission/types.ts b/packages/dodoex-widgets/src/hooks/Submission/types.ts index 4ea5ea04..195c4198 100644 --- a/packages/dodoex-widgets/src/hooks/Submission/types.ts +++ b/packages/dodoex-widgets/src/hooks/Submission/types.ts @@ -32,6 +32,7 @@ export enum MetadataFlag { reset = 'reset', addLiquidityVe33V2Position = 'addLiquidityVe33V2Position', removeLiquidityVe33V2Position = 'removeLiquidityVe33V2Position', + addLiquidityVe33V3Position = 'addLiquidityVe33V3Position', } export type Metadata = Record; diff --git a/packages/dodoex-widgets/src/hooks/Token/usePoolTokenSort.ts b/packages/dodoex-widgets/src/hooks/Token/usePoolTokenSort.ts new file mode 100644 index 00000000..b28c8742 --- /dev/null +++ b/packages/dodoex-widgets/src/hooks/Token/usePoolTokenSort.ts @@ -0,0 +1,65 @@ +import React from 'react'; +import { basicTokenMap, ChainId } from '@dodoex/api'; +import { TokenInfo } from './type'; +import { sortsBefore } from '../../utils'; + +export function usePoolTokenSort({ + baseToken, + quoteToken, +}: { + baseToken: TokenInfo | undefined; + quoteToken: TokenInfo | undefined; +}) { + return React.useMemo(() => { + let isRearTokenA = false; + let isBaseTokenNative = false; + let isQuoteTokenNative = false; + if (!baseToken || !quoteToken) + return { + chainId: undefined, + isRearTokenA: false, + token0: undefined, + token1: undefined, + token0Wrapped: undefined, + token1Wrapped: undefined, + isBaseTokenNative, + isQuoteTokenNative, + }; + const chainId = baseToken.chainId as ChainId; + const etherToken = basicTokenMap[chainId]; + isBaseTokenNative = + etherToken.address?.toLowerCase() === baseToken.address.toLowerCase(); + isQuoteTokenNative = + etherToken.address?.toLowerCase() === quoteToken.address.toLowerCase(); + const baseTokenWrapped = isBaseTokenNative + ? { + ...baseToken, + address: etherToken.wrappedTokenAddress, + symbol: etherToken.wrappedTokenSymbol, + } + : baseToken; + const quoteTokenWrapped = isQuoteTokenNative + ? { + ...quoteToken, + address: etherToken.wrappedTokenAddress, + symbol: etherToken.wrappedTokenSymbol, + } + : quoteToken; + + isRearTokenA = !sortsBefore(baseTokenWrapped, quoteTokenWrapped); + const [token0, token1, token0Wrapped, token1Wrapped] = !isRearTokenA + ? [baseToken, quoteToken, baseTokenWrapped, quoteTokenWrapped] + : [quoteToken, baseToken, quoteTokenWrapped, baseTokenWrapped]; + + return { + chainId, + isRearTokenA, + token0, + token1, + token0Wrapped, + token1Wrapped, + isBaseTokenNative, + isQuoteTokenNative, + }; + }, [baseToken, quoteToken]); +} diff --git a/packages/dodoex-widgets/src/utils/fractions/fraction.ts b/packages/dodoex-widgets/src/utils/fractions/fraction.ts new file mode 100644 index 00000000..9cacdc6f --- /dev/null +++ b/packages/dodoex-widgets/src/utils/fractions/fraction.ts @@ -0,0 +1,195 @@ +import JSBI from 'jsbi'; +import invariant from 'tiny-invariant'; + +import BigNumber from 'bignumber.js'; +import { BigintIsh, Rounding } from './types'; + +const toSignificantRounding = { + [Rounding.ROUND_DOWN]: BigNumber.ROUND_DOWN, + [Rounding.ROUND_HALF_UP]: BigNumber.ROUND_HALF_UP, + [Rounding.ROUND_UP]: BigNumber.ROUND_UP, +}; + +const toFixedRounding = { + [Rounding.ROUND_DOWN]: BigNumber.ROUND_DOWN, + [Rounding.ROUND_HALF_UP]: BigNumber.ROUND_HALF_UP, + [Rounding.ROUND_UP]: BigNumber.ROUND_UP, +}; + +export class Fraction { + public readonly numerator: JSBI; + public readonly denominator: JSBI; + + public constructor( + numerator: BigintIsh, + denominator: BigintIsh = JSBI.BigInt(1), + ) { + this.numerator = JSBI.BigInt(numerator); + this.denominator = JSBI.BigInt(denominator); + } + + private static tryParseFraction(fractionish: BigintIsh | Fraction): Fraction { + if ( + fractionish instanceof JSBI || + typeof fractionish === 'number' || + typeof fractionish === 'string' + ) + return new Fraction(fractionish); + + if ('numerator' in fractionish && 'denominator' in fractionish) + return fractionish; + throw new Error('Could not parse fraction'); + } + + // performs floor division + public get quotient(): JSBI { + return JSBI.divide(this.numerator, this.denominator); + } + + // remainder after floor division + public get remainder(): Fraction { + return new Fraction( + JSBI.remainder(this.numerator, this.denominator), + this.denominator, + ); + } + + public invert(): Fraction { + return new Fraction(this.denominator, this.numerator); + } + + public add(other: Fraction | BigintIsh): Fraction { + const otherParsed = Fraction.tryParseFraction(other); + if (JSBI.equal(this.denominator, otherParsed.denominator)) { + return new Fraction( + JSBI.add(this.numerator, otherParsed.numerator), + this.denominator, + ); + } + return new Fraction( + JSBI.add( + JSBI.multiply(this.numerator, otherParsed.denominator), + JSBI.multiply(otherParsed.numerator, this.denominator), + ), + JSBI.multiply(this.denominator, otherParsed.denominator), + ); + } + + public subtract(other: Fraction | BigintIsh): Fraction { + const otherParsed = Fraction.tryParseFraction(other); + if (JSBI.equal(this.denominator, otherParsed.denominator)) { + return new Fraction( + JSBI.subtract(this.numerator, otherParsed.numerator), + this.denominator, + ); + } + return new Fraction( + JSBI.subtract( + JSBI.multiply(this.numerator, otherParsed.denominator), + JSBI.multiply(otherParsed.numerator, this.denominator), + ), + JSBI.multiply(this.denominator, otherParsed.denominator), + ); + } + + public lessThan(other: Fraction | BigintIsh): boolean { + const otherParsed = Fraction.tryParseFraction(other); + return JSBI.lessThan( + JSBI.multiply(this.numerator, otherParsed.denominator), + JSBI.multiply(otherParsed.numerator, this.denominator), + ); + } + + public equalTo(other: Fraction | BigintIsh): boolean { + const otherParsed = Fraction.tryParseFraction(other); + return JSBI.equal( + JSBI.multiply(this.numerator, otherParsed.denominator), + JSBI.multiply(otherParsed.numerator, this.denominator), + ); + } + + public greaterThan(other: Fraction | BigintIsh): boolean { + const otherParsed = Fraction.tryParseFraction(other); + return JSBI.greaterThan( + JSBI.multiply(this.numerator, otherParsed.denominator), + JSBI.multiply(otherParsed.numerator, this.denominator), + ); + } + + public multiply(other: Fraction | BigintIsh): Fraction { + const otherParsed = Fraction.tryParseFraction(other); + return new Fraction( + JSBI.multiply(this.numerator, otherParsed.numerator), + JSBI.multiply(this.denominator, otherParsed.denominator), + ); + } + + public divide(other: Fraction | BigintIsh): Fraction { + const otherParsed = Fraction.tryParseFraction(other); + return new Fraction( + JSBI.multiply(this.numerator, otherParsed.denominator), + JSBI.multiply(this.denominator, otherParsed.numerator), + ); + } + + public toSignificant( + significantDigits: number, + format: object = { + decimalSeparator: '.', + groupSeparator: '', + groupSize: 3, + secondaryGroupSize: 0, + fractionGroupSeparator: '', + fractionGroupSize: 0, + }, + rounding: Rounding = Rounding.ROUND_HALF_UP, + ): string { + invariant( + Number.isInteger(significantDigits), + `${significantDigits} is not an integer.`, + ); + invariant(significantDigits > 0, `${significantDigits} is not positive.`); + + const roundingMode = toSignificantRounding[rounding]; + const quotient = new BigNumber(this.numerator.toString()) + .div(this.denominator.toString()) + .precision(significantDigits, roundingMode); + return quotient.toFormat( + quotient.decimalPlaces() as number, + roundingMode, + format, + ); + } + + public toFixed( + decimalPlaces: number, + format: object = { + decimalSeparator: '.', + groupSeparator: '', + groupSize: 3, + secondaryGroupSize: 0, + fractionGroupSeparator: '', + fractionGroupSize: 0, + }, + rounding: Rounding = Rounding.ROUND_HALF_UP, + ): string { + invariant( + Number.isInteger(decimalPlaces), + `${decimalPlaces} is not an integer.`, + ); + invariant(decimalPlaces >= 0, `${decimalPlaces} is negative.`); + + const roundingMode = toFixedRounding[rounding]; + return new BigNumber(this.numerator.toString()) + .decimalPlaces(decimalPlaces, roundingMode) + .div(this.denominator.toString()) + .toFormat(decimalPlaces, roundingMode, format); + } + + /** + * Helper method for converting any super class back to a fraction + */ + public get asFraction(): Fraction { + return new Fraction(this.numerator, this.denominator); + } +} diff --git a/packages/dodoex-widgets/src/utils/fractions/index.ts b/packages/dodoex-widgets/src/utils/fractions/index.ts new file mode 100644 index 00000000..31e02a16 --- /dev/null +++ b/packages/dodoex-widgets/src/utils/fractions/index.ts @@ -0,0 +1,3 @@ +export { Fraction } from './fraction'; +export { Percent } from './percent'; +export { Price } from './price'; diff --git a/packages/dodoex-widgets/src/utils/fractions/percent.ts b/packages/dodoex-widgets/src/utils/fractions/percent.ts new file mode 100644 index 00000000..fcebbbf2 --- /dev/null +++ b/packages/dodoex-widgets/src/utils/fractions/percent.ts @@ -0,0 +1,54 @@ +import JSBI from 'jsbi'; +import { BigintIsh, Rounding } from './types'; +import { Fraction } from './fraction'; + +const ONE_HUNDRED = new Fraction(JSBI.BigInt(100)); + +/** + * Converts a fraction to a percent + * @param fraction the fraction to convert + */ +function toPercent(fraction: Fraction): Percent { + return new Percent(fraction.numerator, fraction.denominator); +} + +export class Percent extends Fraction { + /** + * This boolean prevents a fraction from being interpreted as a Percent + */ + public readonly isPercent: true = true; + + add(other: Fraction | BigintIsh): Percent { + return toPercent(super.add(other)); + } + + subtract(other: Fraction | BigintIsh): Percent { + return toPercent(super.subtract(other)); + } + + multiply(other: Fraction | BigintIsh): Percent { + return toPercent(super.multiply(other)); + } + + divide(other: Fraction | BigintIsh): Percent { + return toPercent(super.divide(other)); + } + + public toSignificant( + significantDigits: number = 5, + format?: object, + rounding?: Rounding, + ): string { + return super + .multiply(ONE_HUNDRED) + .toSignificant(significantDigits, format, rounding); + } + + public toFixed( + decimalPlaces: number = 2, + format?: object, + rounding?: Rounding, + ): string { + return super.multiply(ONE_HUNDRED).toFixed(decimalPlaces, format, rounding); + } +} diff --git a/packages/dodoex-widgets/src/utils/fractions/price.ts b/packages/dodoex-widgets/src/utils/fractions/price.ts new file mode 100644 index 00000000..4d5708ac --- /dev/null +++ b/packages/dodoex-widgets/src/utils/fractions/price.ts @@ -0,0 +1,86 @@ +import JSBI from 'jsbi'; + +import { BigintIsh, Rounding } from './types'; +import { Fraction } from './fraction'; +import { TokenInfo } from '../../hooks/Token'; + +export class Price extends Fraction { + public readonly baseCurrency: TokenInfo; // input i.e. denominator + public readonly quoteCurrency: TokenInfo; // output i.e. numerator + public readonly scalar: Fraction; // used to adjust the raw fraction w/r/t the decimals of the {base,quote}Token + + /** + * Construct a price, either with the base and quote currency amount, or the + * @param args + */ + public constructor(...args: [TokenInfo, TokenInfo, BigintIsh, BigintIsh]) { + let baseCurrency: TokenInfo, + quoteCurrency: TokenInfo, + denominator: BigintIsh, + numerator: BigintIsh; + + [baseCurrency, quoteCurrency, denominator, numerator] = args; + super(numerator, denominator); + + this.baseCurrency = baseCurrency; + this.quoteCurrency = quoteCurrency; + this.scalar = new Fraction( + JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(baseCurrency.decimals)), + JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(quoteCurrency.decimals)), + ); + } + + /** + * Flip the price, switching the base and quote currency + */ + public invert(): Price { + return new Price( + this.quoteCurrency, + this.baseCurrency, + this.numerator, + this.denominator, + ); + } + + /** + * Multiply the price by another price, returning a new price. The other price must have the same base currency as this price's quote currency + * @param other the other price + */ + public multiply(other: Price): Price { + const fraction = super.multiply(other); + return new Price( + this.baseCurrency, + other.quoteCurrency, + fraction.denominator, + fraction.numerator, + ); + } + + /** + * Get the value scaled by decimals for formatting + * @private + */ + private get adjustedForDecimals(): Fraction { + return super.multiply(this.scalar); + } + + public toSignificant( + significantDigits: number = 6, + format?: object, + rounding?: Rounding, + ): string { + return this.adjustedForDecimals.toSignificant( + significantDigits, + format, + rounding, + ); + } + + public toFixed( + decimalPlaces: number = 4, + format?: object, + rounding?: Rounding, + ): string { + return this.adjustedForDecimals.toFixed(decimalPlaces, format, rounding); + } +} diff --git a/packages/dodoex-widgets/src/utils/fractions/types.ts b/packages/dodoex-widgets/src/utils/fractions/types.ts new file mode 100644 index 00000000..0a40cc84 --- /dev/null +++ b/packages/dodoex-widgets/src/utils/fractions/types.ts @@ -0,0 +1,8 @@ +import JSBI from 'jsbi'; + +export type BigintIsh = JSBI | string | number; +export enum Rounding { + ROUND_DOWN, + ROUND_HALF_UP, + ROUND_UP, +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx index 88dbc73c..2153c729 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx @@ -10,7 +10,7 @@ import { useGraphQLRequests } from '../../../hooks/useGraphQLRequests'; import { Ve33PoolInfoI, Ve33PoolOperateProps } from '../types'; import { compositePoolInfo } from '../utils'; import { TableList } from './TableList'; -import PoolOperateDialog, { PoolOperate } from '../Ve33PoolOperate'; +import PoolOperateDialog from '../Ve33PoolOperate'; export interface Ve33PoolListProps { onClickPoolListRow: (id: string, chainId: ChainId) => void; @@ -30,11 +30,11 @@ export const Ve33PoolList = ({ onClickPoolListRow }: Ve33PoolListProps) => { // null, { poolInfo: { - id: '0x98ecc0d3f774a7bda38918bf5830a476dd5a606c', - title: 'V2.Volatile', - version: 'v2', - gaugeAddress: '0x7b156830fdbc76d327a48a19b0143663e16a95ba', - feeRate: '30', + id: '0x2f63a87bf42dc4c021af8be085cece16269e3b67', + title: 'V3.CL=200', + version: 'v3', + gaugeAddress: '0x640be2253a65740152dc933fab757606e9c7bd52', + feeRate: '3000', apr: { fees: '0', incentives: '0', @@ -58,9 +58,9 @@ export const Ve33PoolList = ({ onClickPoolListRow }: Ve33PoolListProps) => { token1Symbol: 'WETH', token1Decimals: 18, chainId: 2810, - stable: false, - fee: '30', - type: 1, + stable: true, + fee: '3000', + type: 2, baseToken: { chainId: 2810, address: '0x42edf453f8483c7168c158d28d610a58308517d1', @@ -220,37 +220,12 @@ export const Ve33PoolList = ({ onClickPoolListRow }: Ve33PoolListProps) => { /> {operatePool && ( - - {isMobile ? ( - setOperatePool(null)} - modal={isMobile} - pool={operatePool?.poolInfo} - operate={operatePool.operateType} - /> - ) : ( - setOperatePool(null)} - modal={isMobile} - pool={operatePool?.poolInfo} - operate={operatePool.operateType} - sx={{ - width: 375, - height: 'max-content', - backgroundColor: 'background.paper', - borderRadius: 16, - overflow: 'hidden', - }} - /> - )} - + setOperatePool(null)} + pool={operatePool?.poolInfo} + operate={operatePool.operateType} + /> )} ); diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate.tsx new file mode 100644 index 00000000..0a50f820 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate.tsx @@ -0,0 +1,44 @@ +import { Box } from '@dodoex/components'; +import { useWidgetDevice } from '../../hooks/style/useWidgetDevice'; +import Ve33V2PoolOperateDialog, { + PoolOperateProps, + Ve33V2PoolOperate, +} from './Ve33V2PoolOperate'; +import Ve33V3PoolOperateDialog, { + Ve33V3PoolOperate, +} from './Ve33V3PoolOperate'; +import { PoolTypeE } from './types'; + +export default function Ve33PoolOperateDialog(props: PoolOperateProps) { + const { isMobile } = useWidgetDevice(); + const isV3 = props.pool?.type === PoolTypeE.CLPool; + const PoolOperateDialog = isV3 + ? Ve33V3PoolOperateDialog + : Ve33V2PoolOperateDialog; + const PoolOperate = isV3 ? Ve33V3PoolOperate : Ve33V2PoolOperate; + + return ( + + {isMobile ? ( + + ) : ( + + )} + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/AddPoolOperate.tsx similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/AddPoolOperate.tsx diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/components/ComparePrice.tsx similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/components/ComparePrice.tsx diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/OperateBtn.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/components/OperateBtn.tsx similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/OperateBtn.tsx rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/components/OperateBtn.tsx diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/SliderPercentageCard.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/components/SliderPercentageCard.tsx similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/SliderPercentageCard.tsx rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/components/SliderPercentageCard.tsx diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/SlippageSetting.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/components/SlippageSetting.tsx similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/SlippageSetting.tsx rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/components/SlippageSetting.tsx diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useComparePrice.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useComparePrice.ts similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useComparePrice.ts rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useComparePrice.ts diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useLiquidityOperateAmount.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useLiquidityOperateAmount.ts similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useLiquidityOperateAmount.ts rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useLiquidityOperateAmount.ts diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/usePercentageRemove.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/usePercentageRemove.ts similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/usePercentageRemove.ts rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/usePercentageRemove.ts diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/usePoolOperateTabs.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/usePoolOperateTabs.ts similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/usePoolOperateTabs.ts rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/usePoolOperateTabs.ts diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2AddLiquidity.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2AddLiquidity.ts similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2AddLiquidity.ts rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2AddLiquidity.ts diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2BalanceInfo.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2BalanceInfo.ts similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2BalanceInfo.ts rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2BalanceInfo.ts diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2RemoveLiquidity.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2RemoveLiquidity.ts similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2RemoveLiquidity.ts rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2RemoveLiquidity.ts diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useWithdrawInfo.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useWithdrawInfo.ts similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/hooks/useWithdrawInfo.ts rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useWithdrawInfo.ts diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/index.tsx similarity index 98% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/index.tsx rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/index.tsx index 29bceb4a..ba28bfef 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/index.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/index.tsx @@ -35,7 +35,7 @@ export interface PoolOperateProps { onClose?: () => void; } -export default function PoolOperateDialog({ +export default function Ve33V2PoolOperateDialog({ modal, ...props }: PoolOperateProps & { @@ -51,12 +51,12 @@ export default function PoolOperateDialog({ modal={modal} id="pool-operate" > - + ); } -export function PoolOperate({ +export function Ve33V2PoolOperate({ sx, pool, operate, @@ -393,7 +393,7 @@ export function PoolOperate({ ); } -export function usePoolOperateTabs(defaultValue = OperateTypeE.Add) { +function usePoolOperateTabs(defaultValue = OperateTypeE.Add) { const { i18n } = useLingui(); const [operateTab, setOperateTab] = React.useState(defaultValue); const operateTabs = React.useMemo( diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/types.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/types.ts similarity index 100% rename from packages/dodoex-widgets/src/widgets/ve33/Ve33PoolOperate/types.ts rename to packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/types.ts diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx new file mode 100644 index 00000000..73db8434 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx @@ -0,0 +1,504 @@ +import { alpha, Box, Button, useTheme } from '@dodoex/components'; +import { t, Trans } from '@lingui/macro'; +import { + CardPlusConnected, + TokenCard, +} from '../../../components/Swap/components/TokenCard'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; +import { TokenInfo } from '../../../hooks/Token'; +import { useTokenStatus } from '../../../hooks/Token/useTokenStatus'; +import NeedConnectButton from '../../../components/ConnectWallet/NeedConnectButton'; +import TokenPairStatusButton from '../../../components/TokenPairStatusButton'; +import React from 'react'; +import { parseUnits } from '@dodoex/contract-request'; +import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; +import { usePoolActiveLiquidityChartData } from './hooks/usePoolActiveLiquidityChartData'; +import { useVe33V3Pair } from './hooks/useVe33V3Pair'; +import { Ve33PoolInfoI } from '../types'; +import { useSetRange } from './hooks/useSetRange'; +import { TickMath } from './utils/tickMath'; +import { useVe33V3Amounts } from './hooks/useVe33V3Amounts'; +import SlippageSetting, { + useSlipper, +} from '../Ve33V2PoolOperate/components/SlippageSetting'; +import { + getFetchVE33NonfungiblePositionManagerBalanceOfQueryOptions, + getVE33NonfungiblePositionManagerContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; +import { DynamicSection, YellowCard } from './components/widgets'; +import { RateToggle } from './components/RateToggle'; +import { RangeSelector } from './components/RangeSelector'; +import LiquidityChartRangeInput from './components/LiquidityChartRangeInput'; +import { toSlippagePercent } from './utils/slippage'; +import { mintAmountsWithSlippage } from './utils/getPositionAmountWithSlippage'; +import { useAddVe33V3Liquidity } from './hooks/useAddVe33V3Liquidity'; +import { ReviewModal } from './components/ReviewModal'; +import { formatReadableNumber } from '../../../utils'; +import RangeRatioSelect from './components/RangeRatioSelect'; +import { useQuery } from '@tanstack/react-query'; + +export default function Ve33V3AddLiquidity({ + pool, +}: { + pool: Ve33PoolInfoI | undefined; +}) { + const { account } = useWalletInfo(); + const theme = useTheme(); + const { isMobile } = useWidgetDevice(); + + const fetchTicksQuery = useQuery({ + queryKey: ['test'], + queryFn: () => { + return new Promise((resolve) => { + setTimeout(() => { + resolve([ + { + id: '0x37afbad94db04a96f9fbe86cb4048664941f6233#-887270', + poolAddress: '0x2f63a87bf42dc4c021af8be085cece16269e3b67', + tickIdx: '-887270', + liquidityNet: '6049724999999999999', + price0: '0.99980002999600049994000699920009', + price1: '1.00020001', + }, + { + id: '0x37afbad94db04a96f9fbe86cb4048664941f6233#887270', + poolAddress: '0x2f63a87bf42dc4c021af8be085cece16269e3b67', + tickIdx: '887270', + liquidityNet: '-6049724999999999999', + price0: '1.00020001', + price1: '0.99980002999600049994000699920009', + }, + ]); + }, 1000); + }); + }, + }); + const fetchTicks = { + ticks: fetchTicksQuery.data, + ...fetchTicksQuery, + }; + + const [switchToken, setSwitchToken] = React.useState(false); + const baseToken = switchToken ? pool?.quoteToken : pool?.baseToken; + const quoteToken = switchToken ? pool?.baseToken : pool?.quoteToken; + const address = pool?.id; + + const handleRateToggle = () => { + range.handleRateToggle(); + setSwitchToken((prev) => !prev); + amounts.reset(); + }; + + const chainId = baseToken?.chainId; + const pair = useVe33V3Pair({ + address, + baseToken, + quoteToken, + }); + const { + isRearTokenA, + address: poolAddress, + currentTick: tickCurrent, + price, + } = pair; + const sorted = !isRearTokenA; + const token0 = pair.token0Wrapped as TokenInfo; + const token1 = pair.token1Wrapped as TokenInfo; + const tokenA = sorted ? token0 : token1; + const tokenB = sorted ? token1 : token0; + + let liquidity: number | undefined; + + const { + ticksAtLimit, + priceLower, + priceUpper, + invalidRange, + outOfRange, + tickLower, + tickUpper, + getDecrementLower, + getIncrementLower, + getDecrementUpper, + getIncrementUpper, + handleSetFullRange, + onLeftRangeInput, + onRightRangeInput, + ...range + } = useSetRange({ + tickCurrent, + tickSpacing: pair.tickSpacing, + token0, + token1, + sorted, + price, + }); + + const amounts = useVe33V3Amounts({ + baseToken, + quoteToken, + sqrtRatioX96: tickCurrent + ? TickMath.getSqrtRatioAtTick(tickCurrent) + : undefined, + tickCurrent, + tickLower, + tickUpper, + }); + const addAmount0 = sorted ? amounts.baseAmount : amounts.quoteAmount; + const addAmount1 = !sorted ? amounts.baseAmount : amounts.quoteAmount; + + const { slipper, setSlipper, slipperValue, resetSlipper } = useSlipper({ + type: pool?.type, + }); + + const isInvalidPair = + !baseToken || + !quoteToken || + baseToken.chainId !== quoteToken.chainId || + baseToken.address === quoteToken.address || + !poolAddress; + + let errorMessage: React.ReactNode | undefined; + if (!account) { + errorMessage = t`Connect to a wallet`; + } + + if (isInvalidPair) { + errorMessage = errorMessage ?? t`Invalid pair`; + } + if (!amounts.readonly && (!amounts.baseAmount || !amounts.quoteAmount)) { + errorMessage = errorMessage ?? t`Enter an amount`; + } + + // if (invalidPrice) { + // errorMessage = errorMessage ?? t`Invalid price input`; + // } + + const proxyContract = chainId + ? getVE33NonfungiblePositionManagerContractAddressByChainId(chainId) + : undefined; + const baseTokenStatus = useTokenStatus(baseToken, { + amount: amounts.baseAmount, + contractAddress: proxyContract, + }); + const quoteTokenStatus = useTokenStatus(quoteToken, { + amount: amounts.quoteAmount, + contractAddress: proxyContract, + }); + + const [showConfirm, setShowConfirm] = React.useState(false); + + const onAddMutation = useAddVe33V3Liquidity(); + + const successBack = () => { + resetSlipper(); + amounts.reset(); + setShowConfirm(false); + }; + + const formattedPrice = price + ? sorted + ? price.toSignificant() + : price.invert().toSignificant() + : undefined; + + const chartData = usePoolActiveLiquidityChartData({ + token0, + token1, + tickCurrent, + liquidity, + fetchTicks, + }); + + const disabled = + !baseToken || + !quoteToken || + !amounts.baseAmount || + !amounts.quoteAmount || + !!isInvalidPair; + + return ( + <> + + + + {t`Set price range`} + + {Boolean(baseToken && quoteToken) && ( + + + + )} + + + + {t`Current price`} + + {formatReadableNumber({ input: formattedPrice ?? '' })}  + {t`per`} +   + {baseToken?.symbol ?? ''} + + + + + + {outOfRange && ( + + {t`Your position will not earn fees or be used in trades until the market price moves into your range.`} + + )} + {invalidRange && ( + + {t`Invalid range selected. The min price must be lower than the max price.`} + + )} + + + + + + + + {t`Deposit amounts`} + + + + + + + + + + + + + + + + + + + { + setShowConfirm(false); + }} + onConfirm={() => { + if ( + tickCurrent === undefined || + tickLower === undefined || + tickUpper === undefined || + !baseToken || + !quoteToken + ) + return; + const addAmount0Wei = parseUnits( + addAmount0, + token0.decimals, + ).toString(); + const addAmount1Wei = parseUnits( + addAmount1, + token1.decimals, + ).toString(); + const slippageTolerance = toSlippagePercent(slipperValue * 100); + const minimumAmounts = mintAmountsWithSlippage( + tickCurrent, + slippageTolerance, + tickLower, + tickUpper, + baseToken, + quoteToken, + addAmount0Wei, + addAmount1Wei, + ); + onAddMutation.mutate({ + pool: pair, + successBack, + amount0: addAmount0Wei, + amount1: addAmount1Wei, + amount0Min: String(minimumAmounts.amount0), + amount1Min: String(minimumAmounts.amount1), + recipient: account, + tickLower, + tickUpper, + tickSpacing: pair.tickSpacing, + // If not 0, a pool will be created + sqrtPriceX96: '0', + }); + }} + loading={onAddMutation.isPending} + inRange + /> + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx new file mode 100644 index 00000000..56686b70 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx @@ -0,0 +1,51 @@ +import { alpha, Box, BoxProps, Tooltip, useTheme } from '@dodoex/components'; +import { t } from '@lingui/macro'; + +export default function RangeBadge({ + removed, + inRange, +}: { + removed?: boolean; + inRange?: boolean; +}) { + const theme = useTheme(); + + const sx: BoxProps['sx'] = { + py: 4, + px: 8, + color: theme.palette.success.main, + borderRadius: 4, + backgroundColor: alpha(theme.palette.success.main, 0.1), + typography: 'h6', + }; + + return removed ? ( + + {t`Closed`} + + ) : inRange ? ( + + {t`In range`} + + ) : ( + + {t`Out of range`} + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/ClaimButton.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/ClaimButton.tsx new file mode 100644 index 00000000..3f82b576 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/ClaimButton.tsx @@ -0,0 +1,56 @@ +import { ChainId } from '@dodoex/api'; +import { Button } from '@dodoex/components'; +import { t } from '@lingui/macro'; +import NeedConnectButton from '../../../../components/ConnectWallet/NeedConnectButton'; + +export interface ClaimButtonProps { + chainId: ChainId; + disabled: boolean; + isLoading: boolean; + border?: boolean; + onConfirm: () => void; +} + +export const ClaimButton = ({ + chainId, + disabled, + isLoading, + border, + onConfirm, +}: ClaimButtonProps) => { + return ( + + + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/InRangeDot.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/InRangeDot.tsx new file mode 100644 index 00000000..3e3a56e8 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/InRangeDot.tsx @@ -0,0 +1,48 @@ +import { Box, Tooltip, useTheme } from '@dodoex/components'; +import { t } from '@lingui/macro'; + +export interface InRangeDotProps { + outOfRange: boolean; +} + +export const InRangeDot = ({ outOfRange }: InRangeDotProps) => { + const theme = useTheme(); + + return ( + + + {outOfRange ? ( + + + + ) : ( + + + + )} + + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/InputStepCounter.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/InputStepCounter.tsx new file mode 100644 index 00000000..c1b7cf32 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/InputStepCounter.tsx @@ -0,0 +1,223 @@ +import { Box, Button, useTheme } from '@dodoex/components'; +import { Trans } from '@lingui/macro'; +import { ReactNode, useCallback, useEffect, useState } from 'react'; +import { NumberInput } from '../../../../components/Swap/components/TokenCard/NumberInput'; + +interface StepCounterProps { + value: string; + onUserInput: (value: string) => void; + decrement: () => string; + increment: () => string; + decrementDisabled?: boolean; + incrementDisabled?: boolean; + label?: string; + locked?: boolean; // disable input + title: ReactNode; + tokenA?: string; + tokenB?: string; + border?: boolean; +} + +const StepCounter = ({ + value, + decrement, + increment, + decrementDisabled = false, + incrementDisabled = false, + locked, + onUserInput, + title, + tokenA, + tokenB, + border, +}: StepCounterProps) => { + const theme = useTheme(); + + // for focus state, styled components doesnt let you select input parent container + const [active, setActive] = useState(false); + + // let user type value and only update parent value on blur + const [localValue, setLocalValue] = useState(''); + const [useLocalValue, setUseLocalValue] = useState(false); + + // animation if parent value updates local value + const [pulsing, setPulsing] = useState(false); + + const handleOnFocus = () => { + setUseLocalValue(true); + setActive(true); + }; + + const handleOnBlur = useCallback(() => { + setUseLocalValue(false); + setActive(false); + onUserInput(localValue); // trigger update on parent value + }, [localValue, onUserInput]); + + // for button clicks + const handleDecrement = useCallback(() => { + setUseLocalValue(false); + onUserInput(decrement()); + }, [decrement, onUserInput]); + + const handleIncrement = useCallback(() => { + setUseLocalValue(false); + onUserInput(increment()); + }, [increment, onUserInput]); + + useEffect(() => { + if (localValue !== value && !useLocalValue) { + setTimeout(() => { + setLocalValue(value); // reset local value to match parent + setPulsing(true); // trigger animation + setTimeout(function () { + setPulsing(false); + }, 1800); + }, 0); + } + }, [localValue, useLocalValue, value]); + + return ( + + + + + {title} + + + + {tokenB} per {tokenA} + + + { + setLocalValue(val); + }} + readOnly={locked} + /> + + + + {!locked && ( + + )} + {!locked && ( + + )} + + + + ); +}; + +export default StepCounter; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Area.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Area.tsx new file mode 100644 index 00000000..9e1a7ed4 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Area.tsx @@ -0,0 +1,44 @@ +import { Box } from '@dodoex/components'; +import { area, curveStepAfter, ScaleLinear } from 'd3'; +import { useMemo } from 'react'; +import { ChartEntry } from './types'; +import { themeColor } from './utils'; + +export const Area = ({ + series, + xScale, + yScale, + xValue, + yValue, + fill, +}: { + series: ChartEntry[]; + xScale: ScaleLinear; + yScale: ScaleLinear; + xValue: (d: ChartEntry) => number; + yValue: (d: ChartEntry) => number; + fill?: string; +}) => + useMemo( + () => ( + xScale(xValue(d as ChartEntry))) + .y1((d: unknown) => yScale(yValue(d as ChartEntry))) + .y0(yScale(0))( + series.filter((d) => { + const value = xScale(xValue(d)); + return value > 0 && value <= window.innerWidth; + }) as Iterable<[number, number]>, + ) ?? undefined + } + /> + ), + [fill, series, xScale, xValue, yScale, yValue], + ); diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/AxisBottom.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/AxisBottom.tsx new file mode 100644 index 00000000..d9bd36fd --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/AxisBottom.tsx @@ -0,0 +1,51 @@ +import { Box } from '@dodoex/components'; +import { + NumberValue, + ScaleLinear, + axisBottom, + Axis as d3Axis, + select, +} from 'd3'; +import { useMemo } from 'react'; +import { themeColor } from './utils'; + +const Axis = ({ axisGenerator }: { axisGenerator: d3Axis }) => { + const axisRef = (axis: SVGGElement) => { + axis && + select(axis) + .call(axisGenerator) + .call((g) => g.select('.domain').remove()); + }; + + return ; +}; + +export const AxisBottom = ({ + xScale, + innerHeight, + offset = 0, +}: { + xScale: ScaleLinear; + innerHeight: number; + offset?: number; +}) => + useMemo( + () => ( + + + + ), + [innerHeight, offset, xScale], + ); diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Brush.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Brush.tsx new file mode 100644 index 00000000..59b7e6be --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Brush.tsx @@ -0,0 +1,412 @@ +import { Box } from '@dodoex/components'; +import { BrushBehavior, brushX, D3BrushEvent, ScaleLinear, select } from 'd3'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { brushHandleAccentPath, brushHandlePath, OffScreenHandle } from './svg'; +import usePrevious from './usePrevious'; +import { themeColor } from './utils'; + +const Handle = ({ color, d }: { color: string; d: string }) => { + return ( + + ); +}; + +const HandleAccent = ({ d }: { d: string }) => { + return ( + + ); +}; + +const LabelGroup = ({ + visible, + transform, + children, +}: { + visible: boolean; + transform: string; + children: React.ReactNode; +}) => { + return ( + + {children} + + ); +}; + +const TooltipBackground = ({ + y, + x, + height, + width, + rx, +}: { + y: string; + x: string; + height: string; + width: string; + rx: string; +}) => { + return ( + + ); +}; + +const Tooltip = ({ + y, + transform, + dominantBaseline, + children, +}: { + y: string; + transform?: string; + dominantBaseline: string; + children: React.ReactNode; +}) => { + return ( + + {children} + + ); +}; + +// flips the handles draggers when close to the container edges +const FLIP_HANDLE_THRESHOLD_PX = 20; + +// margin to prevent tick snapping from putting the brush off screen +const BRUSH_EXTENT_MARGIN_PX = 2; + +/** + * Returns true if every element in `a` maps to the + * same pixel coordinate as elements in `b` + */ +const compare = ( + a: [number, number], + b: [number, number], + xScale: ScaleLinear, +): boolean => { + // normalize pixels to 1 decimals + const aNorm = a.map((x) => xScale(x).toFixed(1)); + const bNorm = b.map((x) => xScale(x).toFixed(1)); + return aNorm.every((v, i) => v === bNorm[i]); +}; + +export const Brush = ({ + id, + xScale, + interactive, + brushLabelValue, + brushExtent, + setBrushExtent, + innerWidth, + innerHeight, + westHandleColor, + eastHandleColor, +}: { + id: string; + xScale: ScaleLinear; + interactive: boolean; + brushLabelValue: (d: 'w' | 'e', x: number) => string; + brushExtent: [number, number]; + setBrushExtent: (extent: [number, number], mode: string | undefined) => void; + innerWidth: number; + innerHeight: number; + westHandleColor: string; + eastHandleColor: string; +}) => { + const brushRef = useRef(null); + const brushBehavior = useRef | null>(null); + + // only used to drag the handles on brush for performance + const [localBrushExtent, setLocalBrushExtent] = useState< + [number, number] | null + >(brushExtent); + const [showLabels, setShowLabels] = useState(false); + const [hovering, setHovering] = useState(false); + + const previousBrushExtent = usePrevious(brushExtent); + + const brushed = useCallback( + (event: D3BrushEvent) => { + const { type, selection, mode } = event; + + if (!selection) { + setLocalBrushExtent(null); + return; + } + + const scaled = (selection as [number, number]).map(xScale.invert) as [ + number, + number, + ]; + + // avoid infinite render loop by checking for change + if (type === 'end' && !compare(brushExtent, scaled, xScale)) { + setBrushExtent(scaled, mode); + } + + setLocalBrushExtent(scaled); + }, + [xScale, brushExtent, setBrushExtent], + ); + + // keep local and external brush extent in sync + // i.e. snap to ticks on bruhs end + useEffect(() => { + setLocalBrushExtent(brushExtent); + }, [brushExtent]); + + // initialize the brush + useEffect(() => { + if (!brushRef.current) { + return; + } + + brushBehavior.current = brushX() + .extent([ + [Math.max(0 + BRUSH_EXTENT_MARGIN_PX, xScale(0)), 0], + [innerWidth - BRUSH_EXTENT_MARGIN_PX, innerHeight], + ]) + .handleSize(30) + .filter(() => interactive) + .on('brush end', brushed); + + brushBehavior.current(select(brushRef.current)); + + if ( + previousBrushExtent && + compare(brushExtent, previousBrushExtent, xScale) + ) { + select(brushRef.current) + .transition() + .call(brushBehavior.current.move as any, brushExtent.map(xScale)); + } + + // brush linear gradient + select(brushRef.current) + .selectAll('.selection') + .attr('stroke', 'none') + .attr('fill-opacity', '0.1') + .attr('fill', `url(#${id}-gradient-selection)`); + }, [ + brushExtent, + brushed, + id, + innerHeight, + innerWidth, + interactive, + previousBrushExtent, + xScale, + ]); + + // respond to xScale changes only + useEffect(() => { + if (!brushRef.current || !brushBehavior.current) { + return; + } + + brushBehavior.current.move( + select(brushRef.current) as any, + brushExtent.map(xScale) as any, + ); + }, [brushExtent, xScale]); + + // show labels when local brush changes + useEffect(() => { + setShowLabels(true); + const timeout = setTimeout(() => setShowLabels(false), 1500); + return () => clearTimeout(timeout); + }, [localBrushExtent]); + + // variables to help render the SVGs + const flipWestHandle = + localBrushExtent && xScale(localBrushExtent[0]) > FLIP_HANDLE_THRESHOLD_PX; + const flipEastHandle = + localBrushExtent && + xScale(localBrushExtent[1]) > innerWidth - FLIP_HANDLE_THRESHOLD_PX; + + const showWestArrow = + localBrushExtent && + (xScale(localBrushExtent[0]) < 0 || xScale(localBrushExtent[1]) < 0); + const showEastArrow = + localBrushExtent && + (xScale(localBrushExtent[0]) > innerWidth || + xScale(localBrushExtent[1]) > innerWidth); + + const westHandleInView = + localBrushExtent && + xScale(localBrushExtent[0]) >= 0 && + xScale(localBrushExtent[0]) <= innerWidth; + const eastHandleInView = + localBrushExtent && + xScale(localBrushExtent[1]) >= 0 && + xScale(localBrushExtent[1]) <= innerWidth; + + return useMemo( + () => ( + <> + + + + + + + {/* clips at exactly the svg area */} + + + + + + {/* will host the d3 brush */} + setHovering(true)} + onMouseLeave={() => setHovering(false)} + /> + + {/* custom brush handles */} + {localBrushExtent && ( + <> + {/* west handle */} + {westHandleInView ? ( + + + + + + + + + + {brushLabelValue('w', localBrushExtent[0])} + + + + ) : null} + + {/* east handle */} + {eastHandleInView ? ( + + + + + + + + + + {brushLabelValue('e', localBrushExtent[1])} + + + + ) : null} + + {showWestArrow && } + + {showEastArrow && ( + + + + )} + + )} + + ), + [ + brushLabelValue, + eastHandleColor, + eastHandleInView, + flipEastHandle, + flipWestHandle, + hovering, + id, + innerHeight, + innerWidth, + localBrushExtent, + showEastArrow, + showLabels, + showWestArrow, + westHandleColor, + westHandleInView, + xScale, + ], + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Chart.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Chart.tsx new file mode 100644 index 00000000..d3efded1 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Chart.tsx @@ -0,0 +1,189 @@ +import { Box } from '@dodoex/components'; +import { max, scaleLinear, ZoomTransform } from 'd3'; +import { useEffect, useMemo, useRef, useState } from 'react'; +import { Bound } from '../../types'; +import { Area } from './Area'; +import { AxisBottom } from './AxisBottom'; +import { Brush } from './Brush'; +import { Line } from './Line'; +import { ChartEntry, LiquidityChartRangeInputProps } from './types'; +import Zoom from './Zoom'; + +const xAccessor = (d: ChartEntry) => d.price0; +const yAccessor = (d: ChartEntry) => d.activeLiquidity; + +export function Chart({ + id = 'liquidityChartRangeInput', + data: { series, current }, + ticksAtLimit, + styles, + dimensions: { width, height }, + margins, + interactive = true, + brushDomain, + brushLabels, + onBrushDomainChange, + zoomLevels, +}: LiquidityChartRangeInputProps) { + const zoomRef = useRef(null); + + const [zoom, setZoom] = useState(null); + + const [innerHeight, innerWidth] = useMemo( + () => [ + height - margins.top - margins.bottom, + width - margins.left - margins.right, + ], + [width, height, margins], + ); + + const { xScale, yScale } = useMemo(() => { + const scales = { + xScale: scaleLinear() + .domain([ + current * zoomLevels.initialMin, + current * zoomLevels.initialMax, + ] as number[]) + .range([0, innerWidth]), + yScale: scaleLinear() + .domain([0, max(series, yAccessor)] as number[]) + .range([innerHeight, 0]), + }; + + if (zoom) { + const newXscale = zoom.rescaleX(scales.xScale); + scales.xScale.domain(newXscale.domain()); + } + + return scales; + }, [ + current, + zoomLevels.initialMin, + zoomLevels.initialMax, + innerWidth, + series, + innerHeight, + zoom, + ]); + + useEffect(() => { + // reset zoom as necessary + setZoom(null); + }, [zoomLevels]); + + useEffect(() => { + if (!brushDomain) { + onBrushDomainChange(xScale.domain() as [number, number], undefined); + } + }, [brushDomain, onBrushDomainChange, xScale]); + + return ( + <> + { + onBrushDomainChange( + [ + current * zoomLevels.initialMin, + current * zoomLevels.initialMax, + ] as [number, number], + 'reset', + ); + }} + showResetButton={Boolean( + ticksAtLimit[Bound.LOWER] || ticksAtLimit[Bound.UPPER], + )} + zoomLevels={zoomLevels} + /> + + + + + + + {brushDomain && ( + // mask to highlight selected area + + + + )} + + + + + + + {brushDomain && ( + // duplicate area chart with mask for selected area + + + + )} + + + + + + + + + + + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Line.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Line.tsx new file mode 100644 index 00000000..6f8aa34c --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Line.tsx @@ -0,0 +1,32 @@ +import { Box } from '@dodoex/components'; +import { ScaleLinear } from 'd3'; +import { useMemo } from 'react'; +import { themeColor } from './utils'; + +export const Line = ({ + value, + xScale, + innerHeight, +}: { + value: number; + xScale: ScaleLinear; + innerHeight: number; +}) => + useMemo( + () => ( + + ), + [value, xScale, innerHeight], + ); diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Zoom.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Zoom.tsx new file mode 100644 index 00000000..9b729775 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/Zoom.tsx @@ -0,0 +1,192 @@ +import { Box, Button } from '@dodoex/components'; +import { + ScaleLinear, + select, + zoom, + ZoomBehavior, + zoomIdentity, + ZoomTransform, +} from 'd3'; +import { useEffect, useMemo, useRef } from 'react'; +import { ZoomLevels } from './types'; + +export default function Zoom({ + svg, + xScale, + setZoom, + width, + height, + resetBrush, + showResetButton, + zoomLevels, +}: { + svg: SVGElement | null; + xScale: ScaleLinear; + setZoom: (transform: ZoomTransform) => void; + width: number; + height: number; + resetBrush: () => void; + showResetButton: boolean; + zoomLevels: ZoomLevels; +}) { + const zoomBehavior = useRef>(); + + const [zoomIn, zoomOut, zoomInitial, zoomReset] = useMemo( + () => [ + () => + svg && + zoomBehavior.current && + select(svg as Element) + .transition() + .call(zoomBehavior.current.scaleBy, 2), + () => + svg && + zoomBehavior.current && + select(svg as Element) + .transition() + .call(zoomBehavior.current.scaleBy, 0.5), + () => + svg && + zoomBehavior.current && + select(svg as Element) + .transition() + .call(zoomBehavior.current.scaleTo, 0.5), + () => + svg && + zoomBehavior.current && + select(svg as Element) + .call( + zoomBehavior.current.transform, + zoomIdentity.translate(0, 0).scale(1), + ) + .transition() + .call(zoomBehavior.current.scaleTo, 0.5), + ], + [svg], + ); + + useEffect(() => { + if (!svg) { + return; + } + + zoomBehavior.current = zoom() + .scaleExtent([zoomLevels.min, zoomLevels.max]) + .extent([ + [0, 0], + [width, height], + ]) + .on('zoom', ({ transform }: { transform: ZoomTransform }) => + setZoom(transform), + ); + + select(svg as Element).call(zoomBehavior.current); + }, [ + height, + width, + setZoom, + svg, + xScale, + zoomBehavior, + zoomLevels, + zoomLevels.max, + zoomLevels.min, + ]); + + useEffect(() => { + // reset zoom to initial on zoomLevel change + zoomInitial(); + }, [zoomInitial, zoomLevels]); + + return ( + + {showResetButton && ( + + )} + + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/index.tsx new file mode 100644 index 00000000..4dedf95e --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/index.tsx @@ -0,0 +1,258 @@ +import { Box, LoadingSkeleton } from '@dodoex/components'; +import { Trans } from '@lingui/macro'; +import { ReactNode, useCallback, useMemo } from 'react'; +import { batch } from 'react-redux'; +import { formatTokenAmountNumber } from '../../../../../utils'; +import { Bound } from '../../types'; +import { AutoColumn, ColumnCenter } from '../widgets'; +import { Chart } from './Chart'; +import { themeColor } from './utils'; +import { TokenInfo } from '../../../../../hooks/Token'; +import { Price } from '../../../../../utils/fractions'; +import { usePoolActiveLiquidityChartData } from '../../hooks/usePoolActiveLiquidityChartData'; + +const LOW_ZOOM_LEVEL = { + initialMin: 0.999, + initialMax: 1.001, + min: 0.00001, + max: 1.5, +}; + +function InfoBox({ message, icon }: { message?: ReactNode; icon: ReactNode }) { + return ( + + {icon} + {message && ( + + {message} + + )} + + ); +} + +function LoadingBars() { + return ; +} + +export default function LiquidityChartRangeInput({ + currencyA, + currencyB, + isSorted, + ticksAtLimit, + price, + priceLower, + priceUpper, + onLeftRangeInput, + onRightRangeInput, + interactive, + chartData, +}: { + currencyA?: TokenInfo; + currencyB?: TokenInfo; + isSorted: boolean; + ticksAtLimit: { [bound in Bound]?: boolean | undefined }; + price?: number; + priceLower?: Price; + priceUpper?: Price; + onLeftRangeInput: (typedValue: string) => void; + onRightRangeInput: (typedValue: string) => void; + interactive: boolean; + chartData: ReturnType; +}) { + const { isLoading, error, formattedData, hidden } = chartData; + + const onBrushDomainChangeEnded = useCallback( + (domain: [number, number], mode: string | undefined) => { + let leftRangeValue = Number(domain[0]); + const rightRangeValue = Number(domain[1]); + + if (leftRangeValue <= 0) { + leftRangeValue = 1 / 10 ** 6; + } + + batch(() => { + // simulate user input for auto-formatting and other validations + if ( + (!ticksAtLimit[isSorted ? Bound.LOWER : Bound.UPPER] || + mode === 'handle' || + mode === 'reset') && + leftRangeValue > 0 + ) { + onLeftRangeInput(leftRangeValue.toFixed(6)); + } + + if ( + (!ticksAtLimit[isSorted ? Bound.UPPER : Bound.LOWER] || + mode === 'reset') && + rightRangeValue > 0 + ) { + // todo: remove this check. Upper bound for large numbers + // sometimes fails to parse to tick. + if (rightRangeValue < 1e35) { + onRightRangeInput(rightRangeValue.toFixed(6)); + } + } + }); + }, + [isSorted, onLeftRangeInput, onRightRangeInput, ticksAtLimit], + ); + + interactive = interactive && Boolean(formattedData?.length); + + const brushDomain: [number, number] | undefined = useMemo(() => { + const leftPrice = isSorted ? priceLower : priceUpper?.invert(); + const rightPrice = isSorted ? priceUpper : priceLower?.invert(); + + return leftPrice && rightPrice + ? [ + parseFloat(leftPrice?.toSignificant(6)), + parseFloat(rightPrice?.toSignificant(6)), + ] + : undefined; + }, [isSorted, priceLower, priceUpper]); + + const brushLabelValue = useCallback( + (d: 'w' | 'e', x: number) => { + if (!price) { + return ''; + } + + if (d === 'w' && ticksAtLimit[isSorted ? Bound.LOWER : Bound.UPPER]) { + return '0'; + } + if (d === 'e' && ticksAtLimit[isSorted ? Bound.UPPER : Bound.LOWER]) { + return '∞'; + } + + const percent = + (x < price ? -1 : 1) * + ((Math.max(x, price) - Math.min(x, price)) / price) * + 100; + + return price + ? `${formatTokenAmountNumber({ + input: percent, + decimals: 2, + })}%` + : ''; + }, + [isSorted, price, ticksAtLimit], + ); + + const isUninitialized = + !currencyA || + !currencyB || + (formattedData === undefined && !isLoading && !error); + + if (hidden) return null; + + return ( + + {isUninitialized ? ( + Your position will appear here.} + icon={ + + + + + } + /> + ) : isLoading ? ( + + ) : error ? ( + Liquidity data not available.} + icon={ + + + + + } + /> + ) : !formattedData || formattedData.length === 0 || !price ? ( + There is no liquidity data.} + icon={ + + + + + + } + /> + ) : ( + + + + )} + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/svg.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/svg.tsx new file mode 100644 index 00000000..f8227b5c --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/svg.tsx @@ -0,0 +1,61 @@ +/** + * Generates an SVG path for the east brush handle. + * Apply `scale(-1, 1)` to generate west brush handle. + * + * |```````\ + * | | | | + * |______/ + * | + * | + * | + * | + * | + * + * https://medium.com/@dennismphil/one-side-rounded-rectangle-using-svg-fb31cf318d90 + */ +export const brushHandlePath = (height: number) => + [ + // handle + `M 0 0`, // move to origin + `v ${height}`, // vertical line + 'm 1 0', // move 1px to the right + `V 0`, // second vertical line + `M 0 1`, // move to origin + + // head + 'h 12', // horizontal line + 'q 2 0, 2 2', // rounded corner + 'v 22', // vertical line + 'q 0 2 -2 2', // rounded corner + 'h -12', // horizontal line + `z`, // close path + ].join(' ') + +export const brushHandleAccentPath = () => + [ + 'm 5 7', // move to first accent + 'v 14', // vertical line + 'M 0 0', // move to origin + 'm 9 7', // move to second accent + 'v 14', // vertical line + 'z', + ].join(' ') + +export const OffScreenHandle = ({ + color, + size = 10, + margin = 10, +}: { + color: string + size?: number + margin?: number +}) => ( + +) diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/types.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/types.ts new file mode 100644 index 00000000..e9b83055 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/types.ts @@ -0,0 +1,64 @@ +import { Bound } from '../../types'; + +export interface ChartEntry { + activeLiquidity: number; + price0: number; +} + +interface Dimensions { + width: number; + height: number; +} + +interface Margins { + top: number; + right: number; + bottom: number; + left: number; +} + +export interface ZoomLevels { + initialMin: number; + initialMax: number; + min: number; + max: number; +} + +export interface LiquidityChartRangeInputProps { + // to distringuish between multiple charts in the DOM + id?: string; + + data: { + series: ChartEntry[]; + current: number; + }; + ticksAtLimit: { [bound in Bound]?: boolean | undefined }; + + styles: { + area: { + // color of the ticks in range + selection: string; + }; + + brush: { + handle: { + west: string; + east: string; + }; + }; + }; + + dimensions: Dimensions; + margins: Margins; + + interactive?: boolean; + + brushLabels: (d: 'w' | 'e', x: number) => string; + brushDomain?: [number, number]; + onBrushDomainChange: ( + domain: [number, number], + mode: string | undefined, + ) => void; + + zoomLevels: ZoomLevels; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/usePrevious.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/usePrevious.ts new file mode 100644 index 00000000..18d5ba3d --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/usePrevious.ts @@ -0,0 +1,16 @@ +import { useEffect, useRef } from 'react' + +// modified from https://usehooks.com/usePrevious/ +export default function usePrevious(value: T) { + // The ref object is a generic container whose current property is mutable ... + // ... and can hold any value, similar to an instance property on a class + const ref = useRef() + + // Store current value in ref + useEffect(() => { + ref.current = value + }, [value]) // Only re-run if value changes + + // Return previous value (happens before update in useEffect above) + return ref.current +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/utils.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/utils.ts new file mode 100644 index 00000000..dccfd2ca --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/utils.ts @@ -0,0 +1,14 @@ +export const themeColor = { + neutral1: '#222222', + neutral2: '#7D7D7D', + accent1: '#FC72FF', + critical: 'FF5F52', + white: '#FFFFFF', + surface3: '#22222212', + opacity: { + hover: 0.6, + click: 0.4, + disabled: 0.5, + enabled: 1, + }, +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/MyLiquidity.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/MyLiquidity.tsx new file mode 100644 index 00000000..6fae7432 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/MyLiquidity.tsx @@ -0,0 +1,130 @@ +import { + Box, + BoxProps, + LoadingSkeleton, + Skeleton, + useTheme, +} from '@dodoex/components'; +import { Trans } from '@lingui/macro'; +import { LightCard } from './widgets'; +import TokenAndEtherscan from './TokenAndEtherscan'; +import { TokenInfo } from '../../../../hooks/Token'; +import { byWei, formatTokenAmountNumber } from '../../../../utils/formatter'; + +function TokenLoading() { + return ( + + + + + ); +} + +export default function MyLiquidity({ + border, + token0, + token1, + amount0, + amount1, + sx, +}: { + border?: boolean; + token0: TokenInfo | undefined; + token1: TokenInfo | undefined; + amount0: string | undefined; + amount1: string | undefined; + sx?: BoxProps['sx']; +}) { + const theme = useTheme(); + return ( + + + My Liquidity + + + + {!token0 ? ( + + ) : ( + + + + {amount0 + ? formatTokenAmountNumber({ + input: byWei(amount0, token0.decimals), + decimals: token0.decimals, + }) + : ''} + + + )} + {!token1 ? ( + + ) : ( + + + + {amount1 + ? formatTokenAmountNumber({ + input: byWei(amount1, token1.decimals), + decimals: token1.decimals, + }) + : ''} + + + )} + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/PositionPreview.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/PositionPreview.tsx new file mode 100644 index 00000000..a80855c1 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/PositionPreview.tsx @@ -0,0 +1,143 @@ +import { Box } from '@dodoex/components'; +import { ReactNode } from 'react'; +import TokenLogo from '../../../../components/TokenLogo'; +import { TokenLogoPair } from '../../../../components/TokenLogoPair'; +import { formatTokenAmountNumber } from '../../../../utils'; +import RangeBadge from './Badge/RangeBadge'; +import { PositionSelectedRangePreview } from './PositionSelectedRangePreview'; +import { AutoColumn, LightCard, RowBetween, RowFixed } from './widgets'; +import { TokenInfo } from '../../../../hooks/Token'; + +export const PositionPreview = ({ + token0, + token1, + liquidity, + amount0, + amount1, + price, + tickLower, + tickUpper, + title, + inRange, +}: { + token0: TokenInfo | undefined; + token1: TokenInfo | undefined; + liquidity: number | undefined; + amount0: string | undefined; + amount1: string | undefined; + title?: ReactNode; + price: string | undefined; + tickLower: number | undefined; + tickUpper: number | undefined; + inRange: boolean; +}) => { + const removed = !!liquidity && liquidity === 0; + + return ( + + + + + + {token0?.symbol} / {token1?.symbol} + + + + + + + + + + + + {token0?.symbol} + + + + + {formatTokenAmountNumber({ + input: amount0, + decimals: token0?.decimals, + })} + + + + + + + {token1?.symbol} + + + + {formatTokenAmountNumber({ + input: amount1, + decimals: token1?.decimals, + })} + + + + + {/* + + Fee tier + + + {formatPercentageNumber({ + input: position?.pool?.fee / (BIPS_BASE * 100), + })} + + */} + + + {!!token0 && + !!token1 && + !!price && + tickLower !== undefined && + tickUpper !== undefined && ( + + )} + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx new file mode 100644 index 00000000..9d8ce01f --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx @@ -0,0 +1,237 @@ +import { Box, LoadingSkeleton, useTheme } from '@dodoex/components'; +import { Trans } from '@lingui/macro'; +import { ReactNode, useCallback, useState } from 'react'; +import { formatTokenAmountNumber } from '../../../../utils'; +import { formatAmountWithAlphabetSymbol } from '../utils/formatTickPrice'; +import { RateToggle } from './RateToggle'; +import { AutoColumn, LightCard, RowBetween } from './widgets'; +import { TokenInfo } from '../../../../hooks/Token'; +import BigNumber from 'bignumber.js'; +import { getTickToPrice } from '../utils/getTickToPrice'; + +export const PositionSelectedRangePreview = ({ + token0, + token1, + token0Price, + tickLower, + tickUpper, + title, + border, +}: { + token0: TokenInfo; + token1: TokenInfo; + token0Price: string | undefined; + tickLower: number | undefined; + tickUpper: number | undefined; + title?: ReactNode; + border?: boolean; +}) => { + const theme = useTheme(); + + // track which currency should be base + const [baseCurrency, setBaseCurrency] = useState(token0); + + const sorted = baseCurrency.address === token0.address; + const quoteCurrency = sorted ? token1 : token0; + + const price = token0Price + ? sorted + ? token0Price + : new BigNumber(1).div(token0Price).toString() + : undefined; + const priceLower = getTickToPrice(token0, token1, tickLower); + const priceUpper = getTickToPrice(token0, token1, tickUpper); + const loading = tickLower === undefined || tickUpper === undefined; + + const handleRateChange = useCallback(() => { + setBaseCurrency(quoteCurrency); + }, [quoteCurrency]); + + return ( + + + {title ? ( + + {title} + + ) : ( +
+ )} + + + + + + + + Min price + + + + {quoteCurrency.symbol} per {baseCurrency.symbol} + + + + + {formatAmountWithAlphabetSymbol(priceLower, 6)} + + + + Your position will be 100% composed of {baseCurrency?.symbol} at + this price + + + + + + + + Max price + + + + {quoteCurrency.symbol} per {baseCurrency.symbol} + + + + + {formatAmountWithAlphabetSymbol(priceUpper, 6)} + + + + + Your position will be 100% composed of {quoteCurrency?.symbol} at + this price + + + + + + + + Current price + + + + {quoteCurrency.symbol} per {baseCurrency.symbol} + + + + {`${formatTokenAmountNumber({ + input: price, + })} `} + + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RangeRatioSelect.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RangeRatioSelect.tsx new file mode 100644 index 00000000..2c0f18cc --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RangeRatioSelect.tsx @@ -0,0 +1,101 @@ +import { Box, useTheme } from '@dodoex/components'; +import { t, Trans } from '@lingui/macro'; + +export default function RangeRatioSelect() { + const theme = useTheme(); + const options = [ + { + type: t`Narrow`, + ratio: '(±3%)', + apr: '153.8%', + borderRadius: theme.spacing(8, 0, 0, 0), + }, + { + type: t`Common`, + ratio: '(±8%)', + apr: '153.8%', + borderRadius: theme.spacing(0, 8, 0, 0), + }, + { + type: t`Wide`, + ratio: '(±15%)', + apr: '153.8%', + borderRadius: theme.spacing(0, 0, 0, 8), + }, + { + type: t`Full`, + ratio: '(∞)', + apr: '153.8%', + borderRadius: theme.spacing(0, 0, 8, 0), + }, + ]; + + return ( + + {options.map((item) => { + // @TODO: replace this + const active = item.ratio === '(∞)'; + return ( + + + {item.type} + + {item.ratio} + + + + APR + {' ' + item.apr} + + + ); + })} + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RangeSelector.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RangeSelector.tsx new file mode 100644 index 00000000..b085a1ff --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RangeSelector.tsx @@ -0,0 +1,99 @@ +import { Box } from '@dodoex/components'; +import { Bound } from '../types'; +import StepCounter from './InputStepCounter'; +import { Trans } from '@lingui/macro'; +import { TokenInfo } from '../../../../hooks/Token'; +import { Price } from '../../../../utils/fractions'; + +export interface RangeSelectorProps { + priceLower?: Price; + priceUpper?: Price; + getDecrementLower: () => string; + getIncrementLower: () => string; + getDecrementUpper: () => string; + getIncrementUpper: () => string; + onLeftRangeInput: (typedValue: string) => void; + onRightRangeInput: (typedValue: string) => void; + tokenA?: TokenInfo | null; + tokenB?: TokenInfo | null; + ticksAtLimit: { [bound in Bound]?: boolean | undefined }; + isSorted: boolean; + border?: boolean; +} + +export const RangeSelector = ({ + priceLower, + priceUpper, + onLeftRangeInput, + onRightRangeInput, + getDecrementLower, + getIncrementLower, + getDecrementUpper, + getIncrementUpper, + tokenA, + tokenB, + ticksAtLimit, + isSorted, + border, +}: RangeSelectorProps) => { + const leftPrice = isSorted ? priceLower : priceUpper?.invert(); + const rightPrice = isSorted ? priceUpper : priceLower?.invert(); + + return ( + + Low price} + tokenA={tokenA?.symbol} + tokenB={tokenB?.symbol} + border={border} + /> + High price} + border={border} + /> + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RateToggle.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RateToggle.tsx new file mode 100644 index 00000000..e7122763 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RateToggle.tsx @@ -0,0 +1,97 @@ +import { Box, BoxProps, ButtonBase, useTheme } from '@dodoex/components'; +import { TokenInfo } from '../../../../hooks/Token'; +import { sortsBefore } from '../../../../utils'; + +export interface RateToggleProps { + baseToken: TokenInfo | undefined; + quoteToken: TokenInfo | undefined; + handleRateToggle: () => void; + sx?: BoxProps['sx']; +} + +export const RateToggle = ({ + baseToken, + quoteToken, + handleRateToggle, + sx, +}: RateToggleProps) => { + const theme = useTheme(); + + const isSorted = + baseToken && quoteToken && sortsBefore(baseToken, quoteToken); + + return ( + + + + {isSorted ? baseToken.symbol : quoteToken?.symbol} + + + {isSorted ? quoteToken.symbol : baseToken?.symbol} + + + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RemoveButton.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RemoveButton.tsx new file mode 100644 index 00000000..fe0a2b9e --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RemoveButton.tsx @@ -0,0 +1,60 @@ +import { ChainId } from '@dodoex/api'; +import { Button } from '@dodoex/components'; +import { t } from '@lingui/macro'; +import NeedConnectButton from '../../../../components/ConnectWallet/NeedConnectButton'; + +export interface ButtonsProps { + chainId: ChainId; + disabled: boolean; + removed: boolean | undefined; + isLoading: boolean; + error?: React.ReactNode; + onConfirm: () => void; + border?: boolean; +} + +export const RemoveButton = ({ + chainId, + disabled, + removed, + isLoading, + error, + onConfirm, + border, +}: ButtonsProps) => { + return ( + + + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/ReviewModal.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/ReviewModal.tsx new file mode 100644 index 00000000..ecd553db --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/ReviewModal.tsx @@ -0,0 +1,96 @@ +import { Box, Button } from '@dodoex/components'; +import { t } from '@lingui/macro'; +import Dialog from '../../../../components/Dialog'; +import { useWidgetDevice } from '../../../../hooks/style/useWidgetDevice'; +import { PositionPreview } from './PositionPreview'; +import { TokenInfo } from '../../../../hooks/Token'; + +export interface ReviewModalProps { + on: boolean; + onClose: () => void; + onConfirm: () => void; + loading?: boolean; + token0: TokenInfo | undefined; + token1: TokenInfo | undefined; + liquidity: number | undefined; + amount0: string | undefined; + amount1: string | undefined; + title?: React.ReactNode; + price: string | undefined; + tickLower: number | undefined; + tickUpper: number | undefined; + inRange: boolean; +} + +export const ReviewModal = ({ + on, + onClose, + onConfirm, + loading, + token0, + token1, + liquidity, + amount0, + amount1, + price, + tickLower, + tickUpper, + title, + inRange, +}: ReviewModalProps) => { + const { isMobile } = useWidgetDevice(); + + return ( + + + + + + + + + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/TokenAndEtherscan.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/TokenAndEtherscan.tsx new file mode 100644 index 00000000..892ba520 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/TokenAndEtherscan.tsx @@ -0,0 +1,50 @@ +import { Box } from '@dodoex/components'; +import { ArrowTopRightBorder } from '@dodoex/icons'; +import TokenLogo from '../../../../components/TokenLogo'; +import { getEtherscanPage } from '../../../../utils'; +import { TokenInfo } from '../../../../hooks/Token'; + +export default function TokenAndEtherscan({ token }: { token: TokenInfo }) { + return ( + + + {token.symbol} + + + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/TokenPairSelect.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/TokenPairSelect.tsx new file mode 100644 index 00000000..d4fb3ece --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/TokenPairSelect.tsx @@ -0,0 +1,194 @@ +import { Box, ButtonBase, useTheme } from '@dodoex/components'; +import { t } from '@lingui/macro'; +import { useState } from 'react'; +import { TokenPickerDialog } from '../../../../components/Swap/components/TokenCard/TokenPickerDialog'; +import TokenLogo from '../../../../components/TokenLogo'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; +import { TokenInfo } from '../../../../hooks/Token'; +import { Actions, StateProps, Types } from '../reducer'; +import { Currency } from '../sdks/sdk-core/entities/currency'; +import { ReactComponent as Arrow } from './arrow.svg'; +import { convertBackToTokenInfo } from '../utils'; + +function TokenPickSelect({ + token, + oppositeTokenAddress, + dispatch, + tokenSelectOnChange, +}: { + token: Maybe; + oppositeTokenAddress: string; + dispatch: React.Dispatch; + tokenSelectOnChange: (value: TokenInfo) => void; +}) { + const theme = useTheme(); + const { chainId } = useWalletInfo(); + + const [tokenPickerVisible, setTokenPickerVisible] = useState(false); + + return ( + <> + { + setTokenPickerVisible(true); + }} + > + {token ? ( + + + + + {token.symbol} + + + ) : ( + + {t`Select token`} + + )} + + + + + { + setTokenPickerVisible(false); + }} + onTokenChange={(selectedToken, occupied) => { + if (Array.isArray(selectedToken)) { + return; + } + if (occupied) { + dispatch({ + type: Types.UpdateBaseTokenAndClearQuoteToken, + payload: selectedToken, + }); + setTokenPickerVisible(false); + return; + } + tokenSelectOnChange(selectedToken); + setTokenPickerVisible(false); + }} + modal + /> + + ); +} + +export interface TokenPairSelectProps { + baseToken: StateProps['baseToken']; + quoteToken: StateProps['quoteToken']; + dispatch: React.Dispatch; +} + +export const TokenPairSelect = ({ + baseToken, + quoteToken, + dispatch, +}: TokenPairSelectProps) => { + const theme = useTheme(); + + return ( + + { + dispatch({ + type: Types.UpdateBaseToken, + payload, + }); + }} + /> + { + dispatch({ + type: Types.UpdateQuoteToken, + payload, + }); + }} + /> + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/arrow.svg b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/arrow.svg new file mode 100644 index 00000000..5ac3c53e --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/arrow.svg @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/shared.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/shared.ts new file mode 100644 index 00000000..46d2b590 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/shared.ts @@ -0,0 +1,25 @@ +import { FeeAmount } from '../sdks/v3-sdk/constants'; + +export const FEE_AMOUNT_DETAIL: Record = { + [FeeAmount.LOWEST]: { + label: '0.01%', + }, + [FeeAmount.LOW_200]: { + label: '0.02%', + }, + [FeeAmount.LOW_300]: { + label: '0.03%', + }, + [FeeAmount.LOW_400]: { + label: '0.04%', + }, + [FeeAmount.LOW]: { + label: '0.05%', + }, + [FeeAmount.MEDIUM]: { + label: '0.30%', + }, + [FeeAmount.HIGH]: { + label: '1.00%', + }, +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/widgets.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/widgets.tsx new file mode 100644 index 00000000..80624267 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/widgets.tsx @@ -0,0 +1,273 @@ +import { Box, useTheme, alpha, BoxProps } from '@dodoex/components'; + +const gapValues = { + xs: '4px', + sm: '8px', + md: '12px', + lg: '24px', + xl: '32px', +}; +export type Gap = keyof typeof gapValues; + +export interface YellowCardProps { + children?: React.ReactNode; +} + +export const Card = ({ + children, + sx, +}: { + sx?: BoxProps['sx']; + children?: React.ReactNode; +}) => { + const theme = useTheme(); + + return ( + + {children} + + ); +}; + +export const LightCard = ({ + children, + border, + sx, +}: { + sx?: BoxProps['sx']; + border?: boolean; + children?: React.ReactNode; +}) => { + const theme = useTheme(); + + return ( + + {children} + + ); +}; + +export const YellowCard = ({ children }: YellowCardProps) => { + const theme = useTheme(); + + return ( + + + + + + + {children} + + + ); +}; + +export function ColumnCenter({ + gap, + flex, + children, + style, +}: { + gap?: Gap | string; + flex?: string; + children: React.ReactNode; + style?: BoxProps['sx']; +}) { + return ( + + {children} + + ); +} + +export function AutoColumn({ + gap, + justify, + grow, + children, + style, +}: { + gap?: Gap | string; + justify?: + | 'stretch' + | 'center' + | 'start' + | 'end' + | 'flex-start' + | 'flex-end' + | 'space-between'; + grow?: true; + children: React.ReactNode; + style?: BoxProps['sx']; +}) { + return ( + + {children} + + ); +} + +export function Row({ + gap, + children, + sx, +}: { + gap?: Gap | string; + children: React.ReactNode; + sx?: BoxProps['sx']; +}) { + return ( + + {children} + + ); +} + +export function RowBetween({ + children, + style, +}: { + children: React.ReactNode; + style?: BoxProps['sx']; +}) { + return ( + + {children} + + ); +} + +export function RowFixed({ + gap, + justify, + children, + sx, +}: { + gap?: string; + justify?: string; + children: React.ReactNode; + sx?: BoxProps['sx']; +}) { + return ( + + {children} + + ); +} + +export function DynamicSection({ + children, + disabled, + sx, +}: { + children: React.ReactNode; + disabled?: boolean; + sx?: BoxProps['sx']; +}) { + return ( + + {children} + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/constants/misc.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/constants/misc.ts new file mode 100644 index 00000000..17128e67 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/constants/misc.ts @@ -0,0 +1,36 @@ +import JSBI from 'jsbi'; +import { Percent } from '../../../../utils/fractions'; + +export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'; + +// TODO(WEB-1984): Convert the deadline to minutes and remove unecessary conversions from +// seconds to minutes in the codebase. +// 10 minutes, denominated in seconds +export const DEFAULT_DEADLINE_FROM_NOW = 60 * 10; +export const L2_DEADLINE_FROM_NOW = 60 * 5; + +// transaction popup dismissal amounts +export const DEFAULT_TXN_DISMISS_MS = 10000; +export const L2_TXN_DISMISS_MS = 5000; + +export const BIG_INT_ZERO = JSBI.BigInt(0); + +export const BIPS_BASE = 10_000; + +// one basis JSBI.BigInt +export const ONE_BIPS = new Percent(JSBI.BigInt(1), BIPS_BASE); + +// used for warning states +export const ALLOWED_PRICE_IMPACT_LOW: Percent = new Percent(1, 100); // 1% +export const ALLOWED_PRICE_IMPACT_MEDIUM: Percent = new Percent(3, 100); // 3% +export const ALLOWED_PRICE_IMPACT_HIGH: Percent = new Percent(5, 100); // 5% +// if the price slippage exceeds this number, force the user to type 'confirm' to execute +export const PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN: Percent = new Percent( + 10, + 100, +); // 10% +// for non expert mode disable swaps above this +export const BLOCKED_PRICE_IMPACT_NON_EXPERT: Percent = new Percent(15, 100); // 15% + +export const ZERO_PERCENT = new Percent(0); +export const ONE_HUNDRED_PERCENT = new Percent(1); diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useAddVe33V3Liquidity.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useAddVe33V3Liquidity.ts new file mode 100644 index 00000000..5cec8d27 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useAddVe33V3Liquidity.ts @@ -0,0 +1,149 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../../hooks/Submission'; +import { OpCode } from '../../../../hooks/Submission/spec'; +import { t } from '@lingui/macro'; +import { MetadataFlag } from '../../../../hooks/Submission/types'; +import { useMessageState } from '../../../../hooks/useMessageState'; +import { toHex } from '../utils/calldata'; +import { useVe33V3Pair } from './useVe33V3Pair'; +import { + encodeVE33NonfungiblePositionManagerIncreaseLiquidity, + encodeVE33NonfungiblePositionManagerMint, + encodeVE33NonfungiblePositionManagerMulticall, + encodeVE33NonfungiblePositionManagerRefundETH, + getVE33NonfungiblePositionManagerContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; + +export function useAddVe33V3Liquidity() { + const submission = useSubmission(); + + return useMutation({ + mutationFn: async ({ + recipient, + pool, + tokenId, + amount0: amount0Desired, + amount1: amount1Desired, + sqrtPriceX96, + tickSpacing, + tickLower, + tickUpper, + amount0Min, + amount1Min, + successBack, + }: { + recipient?: string; + pool?: ReturnType; + tokenId?: number | string; + amount0: string; + amount1: string; + sqrtPriceX96: string; + tickSpacing: number; + tickLower: number; + tickUpper: number; + amount0Min: string; + amount1Min: string; + successBack?: () => void; + }) => { + if (!pool?.token0Wrapped || !pool.token1Wrapped) return; + const calldatas: string[] = []; + const deadline = Math.ceil(Date.now() / 1000) + 10 * 60; + + const title = t`Add Liquidity`; + + try { + // mint + if (recipient) { + console.log({ + token0: pool.token0Wrapped.address, + token1: pool.token1Wrapped.address, + tickSpacing, + tickLower, + tickUpper, + amount0Desired: amount0Desired, + amount1Desired: amount1Desired, + amount0Min, + amount1Min, + recipient, + deadline, + sqrtPriceX96, + }); + calldatas.push( + encodeVE33NonfungiblePositionManagerMint({ + token0: pool.token0Wrapped.address, + token1: pool.token1Wrapped.address, + tickSpacing, + tickLower, + tickUpper, + amount0Desired: toHex(amount0Desired), + amount1Desired: toHex(amount1Desired), + amount0Min, + amount1Min, + recipient, + deadline, + sqrtPriceX96, + }), + ); + } else { + // increase + if (!tokenId) { + throw new Error('tokenId is undefined'); + } + calldatas.push( + encodeVE33NonfungiblePositionManagerIncreaseLiquidity({ + tokenId: toHex(tokenId), + amount0Desired: toHex(amount0Desired), + amount1Desired: toHex(amount1Desired), + amount0Min, + amount1Min, + deadline, + }), + ); + } + + let value: string = toHex(0); + + if (pool.isBaseTokenNative || pool.isQuoteTokenNative) { + let wrappedValue = amount0Desired; + if ( + pool.isRearTokenA ? pool.isBaseTokenNative : pool.isQuoteTokenNative + ) { + wrappedValue = amount1Desired; + } + + // we only need to refund if we're actually sending ETH + if (Number(wrappedValue) > 0) { + calldatas.push(encodeVE33NonfungiblePositionManagerRefundETH()); + } + + value = toHex(wrappedValue); + } + + return submission.execute( + title, + { + opcode: OpCode.TX, + to: getVE33NonfungiblePositionManagerContractAddressByChainId( + pool.chainId, + ), + value, + data: encodeVE33NonfungiblePositionManagerMulticall(calldatas), + }, + { + early: false, + metadata: { + [MetadataFlag.addLiquidityVe33V3Position]: '1', + }, + successBack, + }, + ); + } catch (e) { + console.error(e); + useMessageState.getState().toast({ + message: `${title} error: ${e}`, + type: 'error', + }); + } + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/usePoolActiveLiquidityChartData.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/usePoolActiveLiquidityChartData.ts new file mode 100644 index 00000000..e818bb1f --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/usePoolActiveLiquidityChartData.ts @@ -0,0 +1,156 @@ +import JSBI from 'jsbi'; +import { useMemo } from 'react'; +import computeSurroundingTicks from '../utils/computeSurroundingTicks'; +import { TokenInfo } from '../../../../hooks/Token'; +import { tickToPrice } from '../utils/getTickToPrice'; +import React from 'react'; +import { ChartEntry } from '../components/LiquidityChartRangeInput/types'; +import { Price } from '../../../../utils/fractions'; + +const PRICE_FIXED_DIGITS = 8; + +// Tick with fields parsed to JSBIs, and active liquidity computed. +export interface TickProcessed { + tick: number; + liquidityActive: JSBI; + liquidityNet: JSBI; + price0: string; + sdkPrice: Price; +} + +export interface FetchTicks { + ticks: + | Array<{ + id: string; + liquidityNet: string; + poolAddress?: string; + price0: string; + price1: string; + tickIdx: string; + }> + | undefined + | null; + isLoading: boolean; + isError: boolean; + refetch: () => void; +} + +export function usePoolActiveLiquidityChartData({ + tickCurrent, + liquidity, + fetchTicks, + token0, + token1, +}: { + tickCurrent: number | undefined; + liquidity: number | undefined; + fetchTicks?: FetchTicks; + token0: TokenInfo | undefined; + token1: TokenInfo | undefined; +}) { + const data = useMemo(() => { + // Find nearest valid tick for pool in case tick is not initialized. + const activeTick = tickCurrent; + if ( + !token0 || + !token1 || + activeTick === undefined || + !fetchTicks?.ticks?.length || + fetchTicks.isLoading + ) { + return undefined; + } + const ticks = fetchTicks.ticks; + + // find where the active tick would be to partition the array + // if the active tick is initialized, the pivot will be an element + // if not, take the previous tick as pivot + const pivot = + ticks.findIndex( + (tickData) => + tickData?.tickIdx && Number(tickData.tickIdx) > activeTick, + ) - 1; + + if (pivot < 0) { + // consider setting a local error + console.log( + 'usePoolTickData', + 'usePoolActiveLiquidity', + 'TickData pivot not found', + { + token0: token0.address, + token1: token1.address, + chainId: token0.chainId, + }, + ); + return undefined; + } + + const sdkPrice = tickToPrice(token0, token1, activeTick); + const activeTickProcessed: TickProcessed = { + liquidityActive: JSBI.BigInt(liquidity ?? 0), + tick: activeTick, + liquidityNet: + Number(ticks[pivot]?.tickIdx) === activeTick + ? JSBI.BigInt(ticks[pivot]?.liquidityNet ?? 0) + : JSBI.BigInt(0), + price0: sdkPrice.toFixed(PRICE_FIXED_DIGITS), + sdkPrice, + }; + + const subsequentTicks = computeSurroundingTicks( + token0, + token1, + activeTickProcessed, + ticks, + pivot, + true, + ); + + const previousTicks = computeSurroundingTicks( + token0, + token1, + activeTickProcessed, + ticks, + pivot, + false, + ); + + const ticksProcessed = previousTicks + .concat(activeTickProcessed) + .concat(subsequentTicks); + + return ticksProcessed; + }, [fetchTicks, tickCurrent, liquidity, token0, token1]); + + const formatData = React.useCallback(() => { + if (!data?.length) { + return undefined; + } + + const newData: ChartEntry[] = []; + + for (let i = 0; i < data.length; i++) { + const t: TickProcessed = data[i]; + + const chartEntry = { + activeLiquidity: parseFloat(t.liquidityActive.toString()), + price0: parseFloat(t.price0), + }; + + if (chartEntry.activeLiquidity > 0) { + newData.push(chartEntry); + } + } + + return newData; + }, [data]); + + return { + hidden: !fetchTicks, + isLoading: !!fetchTicks?.isLoading, + error: !!fetchTicks?.isError, + data, + formattedData: !fetchTicks?.isLoading ? formatData() : undefined, + }; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useSetRange.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useSetRange.ts new file mode 100644 index 00000000..db3f975d --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useSetRange.ts @@ -0,0 +1,316 @@ +import { useCallback } from 'react'; +import { TokenInfo } from '../../../../hooks/Token'; +import { tickToPrice } from '../utils/getTickToPrice'; +import React from 'react'; +import { TickMath } from '../utils/tickMath'; +import { tryParseTick } from '../utils/tryParseTick'; +import { Rounding } from '../../../../utils/fractions/types'; +import { Price } from '../../../../utils/fractions'; +import { nearestUsableTick } from '../utils/nearestUsableTick'; +import { Bound } from '../types'; + +export function useSetRange({ + tickCurrent, + token0, + token1, + sorted, + tickSpacing, + price, +}: { + tickCurrent: number | undefined; + token0: TokenInfo | undefined; + token1: TokenInfo | undefined; + sorted: boolean; + tickSpacing: number; + price?: Price; +}) { + const [leftRangeTypedValue, setLeftRangeTypedValue] = React.useState< + string | boolean + >(''); + const [rightRangeTypedValue, setRightRangeTypedValue] = React.useState< + string | boolean + >(''); + + // note to parse inputs in reverse + const invertPrice = !sorted; + + const [baseToken, quoteToken] = React.useMemo(() => { + return [sorted ? token0 : token1, sorted ? token1 : token0]; + }, [sorted, token0, token1]); + + // lower and upper limits in the tick space + const tickSpaceLimits = React.useMemo( + () => ({ + [Bound.LOWER]: tickSpacing + ? nearestUsableTick(TickMath.MIN_TICK, tickSpacing) + : undefined, + [Bound.UPPER]: tickSpacing + ? nearestUsableTick(TickMath.MAX_TICK, tickSpacing) + : undefined, + }), + [tickSpacing], + ); + + // parse typed range values and determine closest ticks + // lower should always be a smaller tick + const [tickLower, tickUpper] = React.useMemo(() => { + const tickLower = ( + (invertPrice && typeof rightRangeTypedValue === 'boolean') || + (!invertPrice && typeof leftRangeTypedValue === 'boolean') + ? tickSpaceLimits[Bound.LOWER] + : invertPrice + ? tryParseTick( + token1, + token0, + rightRangeTypedValue.toString(), + tickSpacing, + ) + : tryParseTick( + token0, + token1, + leftRangeTypedValue.toString(), + tickSpacing, + ) + ) as number; + + const tickUpper = ( + (!invertPrice && typeof rightRangeTypedValue === 'boolean') || + (invertPrice && typeof leftRangeTypedValue === 'boolean') + ? tickSpaceLimits[Bound.UPPER] + : invertPrice + ? tryParseTick( + token1, + token0, + leftRangeTypedValue.toString(), + tickSpacing, + ) + : tryParseTick( + token0, + token1, + rightRangeTypedValue.toString(), + tickSpacing, + ) + ) as number; + return [tickLower, tickUpper]; + }, [ + invertPrice, + leftRangeTypedValue, + rightRangeTypedValue, + tickSpaceLimits, + tickSpacing, + token0, + token1, + ]); + + // always returns the price with 0 as base token + const pricesAtTicks = React.useMemo(() => { + if (!token0 || !token1) + return { + [Bound.LOWER]: undefined, + [Bound.UPPER]: undefined, + }; + return { + [Bound.LOWER]: + tickLower !== undefined + ? tickToPrice(token0, token1, tickLower) + : undefined, + [Bound.UPPER]: + tickUpper !== undefined + ? tickToPrice(token0, token1, tickUpper) + : undefined, + }; + }, [token0, token1, tickLower, tickUpper]); + + // specifies whether the lower and upper ticks is at the exteme bounds + const ticksAtLimit = React.useMemo(() => { + return { + [Bound.LOWER]: tickLower === tickSpaceLimits.LOWER, + [Bound.UPPER]: tickUpper === tickSpaceLimits.UPPER, + }; + }, [tickSpaceLimits, tickLower, tickUpper]); + + const getDecrementLower = useCallback(() => { + if (baseToken && quoteToken && typeof tickLower === 'number') { + const newPrice = tickToPrice( + baseToken, + quoteToken, + tickLower - tickSpacing, + ); + return newPrice.toSignificant(5, undefined, Rounding.ROUND_UP); + } + // use pool current tick as starting tick if we have pool but no tick input + if ( + !(typeof tickLower === 'number') && + baseToken && + quoteToken && + typeof tickCurrent === 'number' + ) { + const newPrice = tickToPrice( + baseToken, + quoteToken, + tickCurrent - tickSpacing, + ); + return newPrice.toSignificant(5, undefined, Rounding.ROUND_UP); + } + return ''; + }, [baseToken, quoteToken, tickLower, tickCurrent, tickSpacing]); + + const getIncrementLower = useCallback(() => { + if (baseToken && quoteToken && typeof tickLower === 'number') { + const newPrice = tickToPrice( + baseToken, + quoteToken, + tickLower + tickSpacing, + ); + return newPrice.toSignificant(5, undefined, Rounding.ROUND_UP); + } + // use pool current tick as starting tick if we have pool but no tick input + if ( + !(typeof tickLower === 'number') && + baseToken && + quoteToken && + tickCurrent + ) { + const newPrice = tickToPrice( + baseToken, + quoteToken, + tickCurrent + tickSpacing, + ); + return newPrice.toSignificant(5, undefined, Rounding.ROUND_UP); + } + return ''; + }, [baseToken, quoteToken, tickLower, tickCurrent, tickSpacing]); + + const getDecrementUpper = useCallback(() => { + if (baseToken && quoteToken && typeof tickUpper === 'number') { + const newPrice = tickToPrice( + baseToken, + quoteToken, + tickUpper - tickSpacing, + ); + return newPrice.toSignificant(5, undefined, Rounding.ROUND_UP); + } + // use pool current tick as starting tick if we have pool but no tick input + if ( + !(typeof tickUpper === 'number') && + baseToken && + quoteToken && + tickCurrent + ) { + const newPrice = tickToPrice( + baseToken, + quoteToken, + tickCurrent - tickSpacing, + ); + return newPrice.toSignificant(5, undefined, Rounding.ROUND_UP); + } + return ''; + }, [baseToken, quoteToken, tickUpper, tickCurrent, tickSpacing]); + + const getIncrementUpper = useCallback(() => { + if (baseToken && quoteToken && typeof tickUpper === 'number') { + const newPrice = tickToPrice( + baseToken, + quoteToken, + tickUpper + tickSpacing, + ); + return newPrice.toSignificant(5, undefined, Rounding.ROUND_UP); + } + // use pool current tick as starting tick if we have pool but no tick input + if ( + !(typeof tickUpper === 'number') && + baseToken && + quoteToken && + tickCurrent + ) { + const newPrice = tickToPrice( + baseToken, + quoteToken, + tickCurrent + tickSpacing, + ); + return newPrice.toSignificant(5, undefined, Rounding.ROUND_UP); + } + return ''; + }, [baseToken, quoteToken, tickUpper, tickCurrent, tickSpacing]); + + const getSetFullRange = useCallback(() => { + setLeftRangeTypedValue(true); + setRightRangeTypedValue(true); + }, []); + + const handleSetFullRange = React.useCallback(() => { + getSetFullRange(); + // if (!token0 || !token1) { + // throw new Error('token is undefined'); + // } + + // const minPrice = tickToPrice( + // token0, + // token1, + // tickSpaceLimits[Bound.LOWER] as number, + // ); + // if (minPrice) { + // setLeftRangeTypedValue(minPrice.toSignificant(5)); + // } + // const maxPrice = tickToPrice( + // token0, + // token1, + // tickSpaceLimits[Bound.UPPER] as number, + // ); + // if (maxPrice) { + // setRightRangeTypedValue(maxPrice.toSignificant(5)); + // } + }, [getSetFullRange]); + + const { [Bound.LOWER]: priceLower, [Bound.UPPER]: priceUpper } = + pricesAtTicks; + + const handleRateToggle = () => { + if (!ticksAtLimit[Bound.LOWER] && !ticksAtLimit[Bound.UPPER]) { + setLeftRangeTypedValue( + (invertPrice ? priceLower : priceLower?.invert())?.toSignificant(6) ?? + '', + ); + setRightRangeTypedValue( + (invertPrice ? priceUpper : priceUpper?.invert())?.toSignificant(6) ?? + '', + ); + } + }; + + // mark invalid range + const invalidRange = Boolean( + typeof tickLower === 'number' && + typeof tickUpper === 'number' && + tickLower >= tickUpper, + ); + + // liquidity range warning + const outOfRange = Boolean( + !invalidRange && + price && + priceLower && + priceUpper && + (price.lessThan(priceLower) || price.greaterThan(priceUpper)), + ); + + return { + ticksAtLimit, + tickLower, + tickUpper, + priceLower, + priceUpper, + leftRangeTypedValue, + rightRangeTypedValue, + invalidRange, + outOfRange, + getDecrementLower, + getIncrementLower, + getDecrementUpper, + getIncrementUpper, + handleSetFullRange, + handleRateToggle, + onLeftRangeInput: setLeftRangeTypedValue, + onRightRangeInput: setRightRangeTypedValue, + }; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33PoolPositions.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33PoolPositions.ts new file mode 100644 index 00000000..cb6bef6b --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33PoolPositions.ts @@ -0,0 +1,27 @@ +import { getFetchVE33NonfungiblePositionManagerBalanceOfQueryOptions } from '@dodoex/dodo-contract-request'; +import { useQuery } from '@tanstack/react-query'; +import React from 'react'; +import { increaseArray } from '../../../../utils/utils'; + +export function useVe33PoolPositions({ + address, + chainId, + account, +}: { + address: string | undefined; + chainId: number | undefined; + account: string | undefined; +}) { + const balanceQuery = useQuery( + getFetchVE33NonfungiblePositionManagerBalanceOfQueryOptions( + chainId, + account, + ), + ); + const tokenIdsArgs = React.useMemo(() => { + if (!balanceQuery.data) return []; + return increaseArray(Number(balanceQuery.data)).map((_, i) => [account, i]); + }, [account, balanceQuery.data]); + + console.log(tokenIdsArgs); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33V3Amounts.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33V3Amounts.ts new file mode 100644 index 00000000..cc95fdd9 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33V3Amounts.ts @@ -0,0 +1,118 @@ +import React from 'react'; +import { TokenInfo } from '../../../../hooks/Token'; +import { byWei, sortsBefore } from '../../../../utils'; +import { + getPositionAmountFromAmount0, + getPositionAmountFromAmount1, +} from '../utils/getPositionAmount'; +import JSBI from 'jsbi'; +import { parseUnits } from '@dodoex/contract-request'; + +export function useVe33V3Amounts({ + baseToken, + quoteToken, + sqrtRatioX96, + tickCurrent, + tickLower, + tickUpper, +}: { + baseToken: TokenInfo | undefined; + quoteToken: TokenInfo | undefined; + sqrtRatioX96: JSBI | undefined; + tickCurrent: number | undefined; + tickLower: number | undefined; + tickUpper: number | undefined; +}) { + const [baseAmount, setBaseAmount] = React.useState(''); + const [quoteAmount, setQuoteAmount] = React.useState(''); + const sorted = + baseToken && quoteToken ? sortsBefore(baseToken, quoteToken) : false; + + const readonly = + !baseToken || + !quoteToken || + sqrtRatioX96 === undefined || + tickCurrent === undefined || + tickLower === undefined || + tickUpper === undefined; + + const getPositionAmounts = (value: string, isBase: boolean) => { + if (readonly) { + throw new Error('parma is undefined'); + } + const isValue0 = isBase ? sorted : !sorted; + const decimals0 = sorted ? baseToken.decimals : quoteToken.decimals; + const decimals1 = sorted ? quoteToken.decimals : baseToken.decimals; + if (isValue0) { + const amounts = getPositionAmountFromAmount0({ + sqrtRatioX96, + tickCurrent, + tickLower, + tickUpper, + amount0: parseUnits(value, decimals0).toString(), + useFullPrecision: true, // we want full precision for the theoretical position + }); + return { + amount0: byWei(amounts.amount0.toString(), decimals0), + amount1: byWei(amounts.amount1.toString(), decimals1), + }; + } else { + const amounts = getPositionAmountFromAmount1({ + sqrtRatioX96, + tickCurrent, + tickLower, + tickUpper, + amount1: parseUnits(value, decimals1).toString(), + }); + return { + amount0: byWei(amounts.amount0.toString(), decimals0), + amount1: byWei(amounts.amount1.toString(), decimals1), + }; + } + }; + + const handleChangeBaseAmount = (value: string) => { + setBaseAmount(value); + if (Number(value)) { + const amounts = getPositionAmounts(value, true); + setQuoteAmount(String(sorted ? amounts.amount1 : amounts.amount0)); + } + }; + const handleChangeQuoteAmount = (value: string) => { + setQuoteAmount(value); + if (Number(value)) { + const amounts = getPositionAmounts(value, false); + setBaseAmount(String(sorted ? amounts.amount0 : amounts.amount1)); + } + }; + + const handleBlurBaseAmount = (value: string) => { + if (Number(value)) { + const amounts = getPositionAmounts(value, true); + setBaseAmount(String(sorted ? amounts.amount0 : amounts.amount1)); + } + }; + + const handleBlurQuoteAmount = (value: string) => { + if (Number(value)) { + const amounts = getPositionAmounts(value, false); + setQuoteAmount(String(sorted ? amounts.amount1 : amounts.amount0)); + } + }; + + const reset = () => { + setBaseAmount(''); + setQuoteAmount(''); + }; + + return { + readonly, + baseAmount, + quoteAmount, + handleChangeBaseAmount, + handleChangeQuoteAmount, + handleBlurBaseAmount, + handleBlurQuoteAmount, + reset, + }; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33V3Pair.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33V3Pair.ts new file mode 100644 index 00000000..1034fe6b --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33V3Pair.ts @@ -0,0 +1,88 @@ +import { TokenInfo } from '../../../../hooks/Token'; +import { toWei } from '../../../../utils'; +import { useQuery } from '@tanstack/react-query'; +import { priceToClosestTick, tickToPrice } from '../utils/getTickToPrice'; +import { Price } from '../../../../utils/fractions'; +import { TickMath } from '../utils/tickMath'; +import { + getFetchVE33V3PairLiquidityQueryOptions, + getFetchVE33V3PairSlot0QueryOptions, + getFetchVE33V3PairTickSpacingQueryOptions, +} from '@dodoex/dodo-contract-request'; +import { usePoolTokenSort } from '../../../../hooks/Token/usePoolTokenSort'; + +export function useVe33V3Pair({ + address, + baseToken, + quoteToken, + startPriceTypedValue, +}: { + address: string | undefined; + baseToken: TokenInfo | undefined; + quoteToken: TokenInfo | undefined; + startPriceTypedValue?: string; +}) { + const tokenSort = usePoolTokenSort({ + baseToken, + quoteToken, + }); + + const fetchTickSpacing = useQuery( + getFetchVE33V3PairTickSpacingQueryOptions(tokenSort.chainId, address), + ); + const fetchGlobalState = useQuery( + getFetchVE33V3PairSlot0QueryOptions(tokenSort.chainId, address), + ); + const fetchLiquidity = useQuery( + getFetchVE33V3PairLiquidityQueryOptions(tokenSort.chainId, address), + ); + + let currentTick: number | undefined = undefined; + let currentSqrt: string | undefined = undefined; + let price: Price | undefined; + let reversePrice: string | undefined; + + const tickSpacing = fetchTickSpacing.data + ? Number(fetchTickSpacing.data) + : 60; + + if (fetchGlobalState.data) { + currentTick = Number(fetchGlobalState.data.tick); + currentSqrt = TickMath.getSqrtRatioAtTick(currentTick).toString(); + price = + fetchGlobalState.data && + tokenSort.token0Wrapped && + tokenSort.token1Wrapped + ? tickToPrice( + tokenSort.token0Wrapped, + tokenSort.token1Wrapped, + fetchGlobalState.data.tick, + ) + : undefined; + } else if (quoteToken && baseToken && Number(startPriceTypedValue)) { + const quoteAmount = toWei( + startPriceTypedValue as string, + quoteToken.decimals, + ).toString(); + const baseAmount = toWei(1, baseToken.decimals).toString(); + price = new Price(baseToken, quoteToken, baseAmount, quoteAmount); + if (tokenSort.isRearTokenA) { + price = price.invert(); + } + currentTick = priceToClosestTick(price); + currentSqrt = TickMath.getSqrtRatioAtTick(currentTick).toString(); + } + + return { + address, + fetchTickSpacing, + fetchGlobalState, + fetchLiquidity, + currentTick, + currentSqrt, + price, + reversePrice, + tickSpacing, + ...tokenSort, + }; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/index.tsx new file mode 100644 index 00000000..d7d4609d --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/index.tsx @@ -0,0 +1,300 @@ +import { + Tabs, + TabPanel, + TabsButtonGroup, + Box, + HoverOpacity, + Tooltip, + LoadingSkeleton, +} from '@dodoex/components'; +import { FailedList } from '../../../components/List/FailedList'; +import { OperateTypeE, Ve33PoolInfoI } from '../types'; +import { useLingui } from '@lingui/react'; +import { DetailBorder, Error } from '@dodoex/icons'; +import React from 'react'; +import { t, Trans } from '@lingui/macro'; +import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; +import Dialog from '../../../components/Dialog'; +import { BoxProps } from '@dodoex/components'; +import { TokenLogoPair } from '../../../components/TokenLogoPair'; +import { PoolTypeTag } from '../components/PoolTypeTag'; +import { AddressWithLinkAndCopy } from '../../../components/AddressWithLinkAndCopy'; +import TokenItem from '../../../components/Token/TokenItem'; +import { formatTokenAmountNumber } from '../../../utils'; +import { PoolOperateProps } from '../Ve33V2PoolOperate'; +import Ve33V3AddLiquidity from './Ve33V3AddLiquidity'; +import { getFetchVE33NonfungiblePositionManagerBalanceOfQueryOptions } from '@dodoex/dodo-contract-request'; +import { useQuery } from '@tanstack/react-query'; + +export default function Ve33V3PoolOperateDialog({ + modal, + ...props +}: PoolOperateProps & { + modal?: boolean; +}) { + const { isMobile } = useWidgetDevice(); + + return ( + + + + ); +} + +export function Ve33V3PoolOperate({ + sx, + pool, + operate, + account, + errorRefetch, + submittedBack, + onClose, +}: PoolOperateProps) { + const chainId = pool?.chainId; + + const balanceQuery = useQuery( + getFetchVE33NonfungiblePositionManagerBalanceOfQueryOptions( + chainId, + account, + ), + ); + + return ( + + {!pool || chainId === undefined || errorRefetch ? ( + { + // if (balanceInfo.userLpToTokenBalanceErrorRefetch) { + // balanceInfo.userLpToTokenBalanceErrorRefetch(); + // } + if (errorRefetch) { + errorRefetch(); + } + }} + sx={{ + my: 40, + height: '100%', + }} + /> + ) : ( + + + + + + + + {pool.baseToken.symbol}/{pool.quoteToken.symbol} + + + + + + + Pool Adress + + + + Gauge Adress + + + + } + > + + + + + + + + {onClose ? ( + + { + onClose(); + }} + /> + + ) : undefined} + + + + My Position + + + + {t`${balanceQuery.data?.toString() ?? 0} Position`} + + + Details + {'>'} + + + + + + + + )} + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/types.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/types.ts new file mode 100644 index 00000000..5ac919c7 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/types.ts @@ -0,0 +1,13 @@ +export enum Field { + CURRENCY_A = 'CURRENCY_A', + CURRENCY_B = 'CURRENCY_B', +} + +export enum Bound { + LOWER = 'LOWER', + UPPER = 'UPPER', +} + +export type FullRange = true; + +export type OperateType = null | 'stake' | 'unstake' | 'claim'; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/calldata.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/calldata.ts new file mode 100644 index 00000000..5437b6ef --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/calldata.ts @@ -0,0 +1,16 @@ +import JSBI from 'jsbi'; +import { BigintIsh } from './constants'; + +/** + * Converts a big int to a hex string + * @param bigintIsh + * @returns The hex encoded calldata + */ +export function toHex(bigintIsh: BigintIsh) { + const bigInt = JSBI.BigInt(bigintIsh); + let hex = bigInt.toString(16); + if (hex.length % 2 !== 0) { + hex = `0${hex}`; + } + return `0x${hex}`; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/computeSurroundingTicks.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/computeSurroundingTicks.ts new file mode 100644 index 00000000..ae358a9f --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/computeSurroundingTicks.ts @@ -0,0 +1,69 @@ +/* eslint-disable no-plusplus */ +import { Ticks } from '@dodoex/api'; +import JSBI from 'jsbi'; +import { TickProcessed } from '../hooks/usePoolTickData'; +import { TokenInfo } from '../../../../hooks/Token'; +import { tickToPrice } from './getTickToPrice'; + +const PRICE_FIXED_DIGITS = 8; + +// Computes the numSurroundingTicks above or below the active tick. +export default function computeSurroundingTicks( + token0: TokenInfo, + token1: TokenInfo, + activeTickProcessed: TickProcessed, + sortedTickData: Ticks, + pivot: number, + ascending: boolean, +): TickProcessed[] { + let previousTickProcessed: TickProcessed = { + ...activeTickProcessed, + }; + // Iterate outwards (either up or down depending on direction) from the active tick, + // building active liquidity for every tick. + let processedTicks: TickProcessed[] = []; + for ( + let i = pivot + (ascending ? 1 : -1); + ascending ? i < sortedTickData.length : i >= 0; + ascending ? i++ : i-- + ) { + const tick = Number(sortedTickData[i]?.tickIdx); + const sdkPrice = tickToPrice(token0, token1, tick); + const currentTickProcessed: TickProcessed = { + liquidityActive: previousTickProcessed.liquidityActive, + tick, + liquidityNet: JSBI.BigInt(sortedTickData[i]?.liquidityNet ?? ''), + price0: sdkPrice.toFixed(PRICE_FIXED_DIGITS), + sdkPrice, + }; + + // Update the active liquidity. + // If we are iterating ascending and we found an initialized tick we immediately apply + // it to the current processed tick we are building. + // If we are iterating descending, we don't want to apply the net liquidity until the following tick. + if (ascending) { + currentTickProcessed.liquidityActive = JSBI.add( + previousTickProcessed.liquidityActive, + JSBI.BigInt(sortedTickData[i]?.liquidityNet ?? 0), + ); + } else if ( + !ascending && + JSBI.notEqual(previousTickProcessed.liquidityNet, JSBI.BigInt(0)) + ) { + // We are iterating descending, so look at the previous tick and apply any net liquidity. + currentTickProcessed.liquidityActive = JSBI.subtract( + previousTickProcessed.liquidityActive, + previousTickProcessed.liquidityNet, + ); + } + + processedTicks.push(currentTickProcessed); + previousTickProcessed = currentTickProcessed; + } + + if (!ascending) { + processedTicks = processedTicks.reverse(); + } + + return processedTicks; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/constants.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/constants.ts new file mode 100644 index 00000000..4f32125b --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/constants.ts @@ -0,0 +1,14 @@ +import JSBI from 'jsbi'; + +export const MaxUint256 = JSBI.BigInt( + '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', +); +export const ZERO = JSBI.BigInt(0); +export const ONE = JSBI.BigInt(1); + +// used in liquidity amount math +export const Q96 = JSBI.exponentiate(JSBI.BigInt(2), JSBI.BigInt(96)); +export const Q192 = JSBI.exponentiate(Q96, JSBI.BigInt(2)); + +// exports for external consumption +export type BigintIsh = JSBI | string | number; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/encodeSqrtRatioX96.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/encodeSqrtRatioX96.ts new file mode 100644 index 00000000..36515d50 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/encodeSqrtRatioX96.ts @@ -0,0 +1,20 @@ +import JSBI from 'jsbi'; +import { BigintIsh } from './constants'; +import { sqrt } from './sqrt'; + +/** + * Returns the sqrt ratio as a Q64.96 corresponding to a given ratio of amount1 and amount0 + * @param amount1 The numerator amount i.e., the amount of token1 + * @param amount0 The denominator amount i.e., the amount of token0 + * @returns The sqrt ratio + */ + +export function encodeSqrtRatioX96( + amount1: BigintIsh, + amount0: BigintIsh, +): JSBI { + const numerator = JSBI.leftShift(JSBI.BigInt(amount1), JSBI.BigInt(192)); + const denominator = JSBI.BigInt(amount0); + const ratioX192 = JSBI.divide(numerator, denominator); + return sqrt(ratioX192); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/formatTickPrice.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/formatTickPrice.ts new file mode 100644 index 00000000..06520f1b --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/formatTickPrice.ts @@ -0,0 +1,20 @@ +export function formatAmountWithAlphabetSymbol( + amount: string | undefined, + decimals = 3, +): string { + if (amount === undefined) return ''; + const amountNum = Number(amount); + const minAmount = 1 / 10 ** decimals; + + if (amountNum === 0 || amountNum < 0.0000001) return '0'; + if (amountNum < minAmount) return `< ${minAmount}`; + if (amountNum < 1) + return (Math.floor(amountNum / minAmount) * minAmount).toFixed(decimals); + if (amountNum < 100) return (Math.floor(amountNum * 100) / 100).toString(); + if (amountNum < 10000) return Math.floor(amountNum).toString(); + + if (amountNum < 1000000000000000) + return String(Math.floor(amountNum * 100) / 100); + + return '∞'; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/fullMath.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/fullMath.ts new file mode 100644 index 00000000..1d7fb258 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/fullMath.ts @@ -0,0 +1,17 @@ +import JSBI from 'jsbi'; +import { ONE, ZERO } from './constants'; + +export abstract class FullMath { + /** + * Cannot be constructed. + */ + private constructor() {} + + public static mulDivRoundingUp(a: JSBI, b: JSBI, denominator: JSBI): JSBI { + const product = JSBI.multiply(a, b); + let result = JSBI.divide(product, denominator); + if (JSBI.notEqual(JSBI.remainder(product, denominator), ZERO)) + result = JSBI.add(result, ONE); + return result; + } +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getPositionAmount.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getPositionAmount.ts new file mode 100644 index 00000000..401dc057 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getPositionAmount.ts @@ -0,0 +1,156 @@ +import JSBI from 'jsbi'; +import { SqrtPriceMath } from './sqrtPriceMath'; +import { TickMath } from './tickMath'; +import { getLiquidityByAmounts } from './maxLiquidityForAmounts'; +import { BigintIsh, MaxUint256, ZERO } from './constants'; + +export function getPositionAmount0({ + tickCurrent, + tickLower, + tickUpper, + liquidity, + roundUp, +}: { + tickCurrent: number; + tickLower: number; + tickUpper: number; + liquidity: number | bigint | JSBI | string; + roundUp?: boolean; +}) { + const liquidityJsbi = JSBI.BigInt(liquidity.toString()); + if (tickCurrent < tickLower) { + const amount = SqrtPriceMath.getAmount0Delta( + TickMath.getSqrtRatioAtTick(tickLower), + TickMath.getSqrtRatioAtTick(tickUpper), + liquidityJsbi, + !!roundUp, + ); + return amount; + } else if (tickCurrent < tickUpper) { + const sqrtRatioX96 = TickMath.getSqrtRatioAtTick(tickCurrent); + const amount = SqrtPriceMath.getAmount0Delta( + sqrtRatioX96, + TickMath.getSqrtRatioAtTick(tickUpper), + liquidityJsbi, + !!roundUp, + ); + return amount; + } else { + return ZERO; + } +} + +export function getPositionAmount1({ + tickCurrent, + tickLower, + tickUpper, + liquidity, + roundUp, +}: { + tickCurrent: number; + tickLower: number; + tickUpper: number; + liquidity: number | bigint | JSBI | string; + roundUp?: boolean; +}) { + const liquidityJsbi = JSBI.BigInt(liquidity.toString()); + if (tickCurrent < tickLower) { + return ZERO; + } else if (tickCurrent < tickUpper) { + const sqrtRatioX96 = TickMath.getSqrtRatioAtTick(tickCurrent); + const amount = SqrtPriceMath.getAmount1Delta( + TickMath.getSqrtRatioAtTick(tickLower), + sqrtRatioX96, + liquidityJsbi, + !!roundUp, + ); + return amount; + } else { + const amount = SqrtPriceMath.getAmount1Delta( + TickMath.getSqrtRatioAtTick(tickLower), + TickMath.getSqrtRatioAtTick(tickUpper), + liquidityJsbi, + !!roundUp, + ); + return amount; + } +} + +export function getPositionAmountFromAmount0({ + sqrtRatioX96, + tickCurrent, + tickLower, + tickUpper, + amount0, + useFullPrecision, +}: { + sqrtRatioX96: JSBI; + tickCurrent: number; + tickLower: number; + tickUpper: number; + amount0: BigintIsh; + useFullPrecision: boolean; +}) { + const liquidity = getLiquidityByAmounts({ + sqrtRatioX96, + tickLower, + tickUpper, + amount0, + amount1: MaxUint256, + useFullPrecision, + }); + + return { + amount0: getPositionAmount0({ + tickCurrent, + tickLower, + tickUpper, + liquidity, + }), + amount1: getPositionAmount1({ + tickCurrent, + tickLower, + tickUpper, + liquidity, + }), + }; +} + +export function getPositionAmountFromAmount1({ + sqrtRatioX96, + tickCurrent, + tickLower, + tickUpper, + amount1, +}: { + sqrtRatioX96: JSBI; + tickCurrent: number; + tickLower: number; + tickUpper: number; + amount1: BigintIsh; +}) { + // this function always uses full precision, + const liquidity = getLiquidityByAmounts({ + sqrtRatioX96, + tickLower, + tickUpper, + amount0: MaxUint256, + amount1, + useFullPrecision: true, + }); + + return { + amount0: getPositionAmount0({ + tickCurrent, + tickLower, + tickUpper, + liquidity, + }), + amount1: getPositionAmount1({ + tickCurrent, + tickLower, + tickUpper, + liquidity, + }), + }; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getPositionAmountWithSlippage.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getPositionAmountWithSlippage.ts new file mode 100644 index 00000000..3a700b1c --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getPositionAmountWithSlippage.ts @@ -0,0 +1,138 @@ +import JSBI from 'jsbi'; +import { TickMath } from './tickMath'; +import { encodeSqrtRatioX96 } from './encodeSqrtRatioX96'; +import { getPositionAmount0, getPositionAmount1 } from './getPositionAmount'; +import { getLiquidityByAmounts } from './maxLiquidityForAmounts'; +import { tickToPrice } from './getTickToPrice'; +import { Percent, Price } from '../../../../utils/fractions'; +import { TokenInfo } from '../../../../hooks/Token'; +import { sortsBefore } from '../../../../utils'; + +/** + * Returns the lower and upper sqrt ratios if the price 'slips' up to slippage tolerance percentage + * @param slippageTolerance The amount by which the price can 'slip' before the transaction will revert + * @returns The sqrt ratios after slippage + */ +function ratiosAfterSlippage( + price: Price, + slippageTolerance: Percent, +): { + sqrtRatioX96Lower: JSBI; + sqrtRatioX96Upper: JSBI; +} { + const token0Price = sortsBefore(price.baseCurrency, price.quoteCurrency) + ? price + : price.invert(); + const priceLower = token0Price.asFraction.multiply( + new Percent(1).subtract(slippageTolerance), + ); + const priceUpper = token0Price.asFraction.multiply(slippageTolerance.add(1)); + let sqrtRatioX96Lower = encodeSqrtRatioX96( + priceLower.numerator, + priceLower.denominator, + ); + if (JSBI.lessThanOrEqual(sqrtRatioX96Lower, TickMath.MIN_SQRT_RATIO)) { + sqrtRatioX96Lower = JSBI.add(TickMath.MIN_SQRT_RATIO, JSBI.BigInt(1)); + } + let sqrtRatioX96Upper = encodeSqrtRatioX96( + priceUpper.numerator, + priceUpper.denominator, + ); + if (JSBI.greaterThanOrEqual(sqrtRatioX96Upper, TickMath.MAX_SQRT_RATIO)) { + sqrtRatioX96Upper = JSBI.subtract(TickMath.MAX_SQRT_RATIO, JSBI.BigInt(1)); + } + return { + sqrtRatioX96Lower, + sqrtRatioX96Upper, + }; +} + +/** + * Returns the minimum amounts that must be sent in order to safely mint the amount of liquidity held by the position + * with the given slippage tolerance + * @param slippageTolerance Tolerance of unfavorable slippage from the current price + * @returns The amounts, with slippage + */ +export function mintAmountsWithSlippage( + tickCurrent: number, + slippageTolerance: Percent, + tickLower: number, + tickUpper: number, + baseToken: TokenInfo, + quoteToken: TokenInfo, + amount0: string, + amount1: string, +) { + const sqrtRatioX96 = TickMath.getSqrtRatioAtTick(Number(tickCurrent)); + const price = tickToPrice(baseToken, quoteToken, tickCurrent); + // get lower/upper prices + const { sqrtRatioX96Upper, sqrtRatioX96Lower } = ratiosAfterSlippage( + price, + slippageTolerance, + ); + + const liquidity = getLiquidityByAmounts({ + sqrtRatioX96, + tickLower, + tickUpper, + amount0, + amount1, + useFullPrecision: false, + }); + const minAmount0 = getPositionAmount0({ + tickCurrent: TickMath.getTickAtSqrtRatio(sqrtRatioX96Upper), + tickLower, + tickUpper, + liquidity, + roundUp: true, + }); + const minAmount1 = getPositionAmount1({ + tickCurrent: TickMath.getTickAtSqrtRatio(sqrtRatioX96Lower), + tickLower, + tickUpper, + liquidity, + roundUp: true, + }); + + return { amount0: minAmount0, amount1: minAmount1 }; +} + +/** + * Returns the minimum amounts that should be requested in order to safely burn the amount of liquidity held by the + * position with the given slippage tolerance + * @param slippageTolerance tolerance of unfavorable slippage from the current price + * @returns The amounts, with slippage + */ +export function burnAmountsWithSlippage( + tickCurrent: number, + slippageTolerance: Percent, + tickLower: number, + tickUpper: number, + liquidity: number | bigint | JSBI | string, + baseToken: TokenInfo, + quoteToken: TokenInfo, +): Readonly<{ amount0: JSBI; amount1: JSBI }> { + const price = tickToPrice(baseToken, quoteToken, tickCurrent); + // get lower/upper prices + const { sqrtRatioX96Upper, sqrtRatioX96Lower } = ratiosAfterSlippage( + price, + slippageTolerance, + ); + + const minAmount0 = getPositionAmount0({ + tickCurrent: TickMath.getTickAtSqrtRatio(sqrtRatioX96Upper), + tickLower, + tickUpper, + liquidity, + roundUp: false, + }); + const minAmount1 = getPositionAmount1({ + tickCurrent: TickMath.getTickAtSqrtRatio(sqrtRatioX96Lower), + tickLower, + tickUpper, + liquidity, + roundUp: false, + }); + + return { amount0: minAmount0, amount1: minAmount1 }; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getTickToPrice.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getTickToPrice.ts new file mode 100644 index 00000000..d7fd7cb7 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getTickToPrice.ts @@ -0,0 +1,73 @@ +/* eslint-disable no-plusplus */ +import JSBI from 'jsbi'; +import { TickMath } from './tickMath'; +import { Q192 } from './constants'; +import { sortsBefore } from '../../../../utils'; +import { TokenInfo } from '../../../../hooks/Token'; +import BigNumber from 'bignumber.js'; +import { encodeSqrtRatioX96 } from './encodeSqrtRatioX96'; +import { Price } from '../../../../utils/fractions'; + +/** + * Returns the first tick for which the given price is greater than or equal to the tick price + * @param price for which to return the closest tick that represents a price less than or equal to the input price, + * i.e. the price of the returned tick is less than or equal to the input price + */ +export function priceToClosestTick(price: Price): number { + const sorted = sortsBefore(price.baseCurrency, price.quoteCurrency); + const sqrtRatioX96 = sorted + ? encodeSqrtRatioX96(price.numerator, price.denominator) + : encodeSqrtRatioX96(price.denominator, price.numerator); + + let tick = TickMath.getTickAtSqrtRatio(sqrtRatioX96); + const nextTickPrice = tickToPrice( + price.baseCurrency, + price.quoteCurrency, + tick + 1, + ); + if (sorted) { + if (!price.lessThan(nextTickPrice)) { + tick++; + } + } else { + if (!price.greaterThan(nextTickPrice)) { + tick++; + } + } + return tick; +} + +export function tickToPrice( + baseToken: TokenInfo, + quoteToken: TokenInfo, + tickCurrent: number | bigint, +) { + const sqrtRatioX96 = TickMath.getSqrtRatioAtTick(Number(tickCurrent)); + const ratioX192 = JSBI.multiply(sqrtRatioX96, sqrtRatioX96); + + return sortsBefore(baseToken, quoteToken) + ? new Price(baseToken, quoteToken, Q192, ratioX192) + : new Price(baseToken, quoteToken, ratioX192, Q192); +} + +export function getTickToPrice( + baseToken?: TokenInfo, + quoteToken?: TokenInfo, + tickCurrent?: number | bigint, +) { + if (!baseToken || !quoteToken || tickCurrent === undefined) { + return undefined; + } + const sqrtRatioX96 = TickMath.getSqrtRatioAtTick(Number(tickCurrent)); + const ratioX192 = JSBI.multiply(sqrtRatioX96, sqrtRatioX96); + const decimals = 10 ** quoteToken.decimals / 10 ** baseToken.decimals; + return sortsBefore(baseToken, quoteToken) + ? new BigNumber(ratioX192.toString()) + .div(Q192.toString()) + .div(decimals) + .toString() + : new BigNumber(Q192.toString()) + .div(ratioX192.toString()) + .div(decimals) + .toString(); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/maxLiquidityForAmounts.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/maxLiquidityForAmounts.ts new file mode 100644 index 00000000..5604955d --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/maxLiquidityForAmounts.ts @@ -0,0 +1,156 @@ +import JSBI from 'jsbi'; +import { BigintIsh, Q96 } from './constants'; +import { TickMath } from './tickMath'; + +/** + * Returns an imprecise maximum amount of liquidity received for a given amount of token 0. + * This function is available to accommodate LiquidityAmounts#getLiquidityForAmount0 in the v3 periphery, + * which could be more precise by at least 32 bits by dividing by Q64 instead of Q96 in the intermediate step, + * and shifting the subtracted ratio left by 32 bits. This imprecise calculation will likely be replaced in a future + * v3 router contract. + * @param sqrtRatioAX96 The price at the lower boundary + * @param sqrtRatioBX96 The price at the upper boundary + * @param amount0 The token0 amount + * @returns liquidity for amount0, imprecise + */ +function maxLiquidityForAmount0Imprecise( + sqrtRatioAX96: JSBI, + sqrtRatioBX96: JSBI, + amount0: BigintIsh, +): JSBI { + if (JSBI.greaterThan(sqrtRatioAX96, sqrtRatioBX96)) { + [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96]; + } + const intermediate = JSBI.divide( + JSBI.multiply(sqrtRatioAX96, sqrtRatioBX96), + Q96, + ); + return JSBI.divide( + JSBI.multiply(JSBI.BigInt(amount0), intermediate), + JSBI.subtract(sqrtRatioBX96, sqrtRatioAX96), + ); +} + +/** + * Returns a precise maximum amount of liquidity received for a given amount of token 0 by dividing by Q64 instead of Q96 in the intermediate step, + * and shifting the subtracted ratio left by 32 bits. + * @param sqrtRatioAX96 The price at the lower boundary + * @param sqrtRatioBX96 The price at the upper boundary + * @param amount0 The token0 amount + * @returns liquidity for amount0, precise + */ +function maxLiquidityForAmount0Precise( + sqrtRatioAX96: JSBI, + sqrtRatioBX96: JSBI, + amount0: BigintIsh, +): JSBI { + if (JSBI.greaterThan(sqrtRatioAX96, sqrtRatioBX96)) { + [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96]; + } + + const numerator = JSBI.multiply( + JSBI.multiply(JSBI.BigInt(amount0), sqrtRatioAX96), + sqrtRatioBX96, + ); + const denominator = JSBI.multiply( + Q96, + JSBI.subtract(sqrtRatioBX96, sqrtRatioAX96), + ); + + return JSBI.divide(numerator, denominator); +} + +/** + * Computes the maximum amount of liquidity received for a given amount of token1 + * @param sqrtRatioAX96 The price at the lower tick boundary + * @param sqrtRatioBX96 The price at the upper tick boundary + * @param amount1 The token1 amount + * @returns liquidity for amount1 + */ +function maxLiquidityForAmount1( + sqrtRatioAX96: JSBI, + sqrtRatioBX96: JSBI, + amount1: BigintIsh, +): JSBI { + if (JSBI.greaterThan(sqrtRatioAX96, sqrtRatioBX96)) { + [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96]; + } + return JSBI.divide( + JSBI.multiply(JSBI.BigInt(amount1), Q96), + JSBI.subtract(sqrtRatioBX96, sqrtRatioAX96), + ); +} + +/** + * Computes the maximum amount of liquidity received for a given amount of token0, token1, + * and the prices at the tick boundaries. + * @param sqrtRatioCurrentX96 the current price + * @param sqrtRatioAX96 price at lower boundary + * @param sqrtRatioBX96 price at upper boundary + * @param amount0 token0 amount + * @param amount1 token1 amount + * @param useFullPrecision if false, liquidity will be maximized according to what the router can calculate, + * not what core can theoretically support + */ +export function maxLiquidityForAmounts( + sqrtRatioCurrentX96: JSBI, + sqrtRatioAX96: JSBI, + sqrtRatioBX96: JSBI, + amount0: BigintIsh, + amount1: BigintIsh, + useFullPrecision: boolean, +): JSBI { + if (JSBI.greaterThan(sqrtRatioAX96, sqrtRatioBX96)) { + [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96]; + } + + const maxLiquidityForAmount0 = useFullPrecision + ? maxLiquidityForAmount0Precise + : maxLiquidityForAmount0Imprecise; + + if (JSBI.lessThanOrEqual(sqrtRatioCurrentX96, sqrtRatioAX96)) { + return maxLiquidityForAmount0(sqrtRatioAX96, sqrtRatioBX96, amount0); + } else if (JSBI.lessThan(sqrtRatioCurrentX96, sqrtRatioBX96)) { + const liquidity0 = maxLiquidityForAmount0( + sqrtRatioCurrentX96, + sqrtRatioBX96, + amount0, + ); + const liquidity1 = maxLiquidityForAmount1( + sqrtRatioAX96, + sqrtRatioCurrentX96, + amount1, + ); + return JSBI.lessThan(liquidity0, liquidity1) ? liquidity0 : liquidity1; + } else { + return maxLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, amount1); + } +} + +export function getLiquidityByAmounts({ + sqrtRatioX96, + tickLower, + tickUpper, + amount0, + amount1, + useFullPrecision, +}: { + sqrtRatioX96: JSBI; + tickLower: number; + tickUpper: number; + amount0: BigintIsh; + amount1: BigintIsh; + useFullPrecision: boolean; +}) { + const sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(tickLower); + const sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(tickUpper); + + return maxLiquidityForAmounts( + sqrtRatioX96, + sqrtRatioAX96, + sqrtRatioBX96, + amount0, + amount1, + useFullPrecision, + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/mostSignificantBit.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/mostSignificantBit.ts new file mode 100644 index 00000000..45ab17b6 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/mostSignificantBit.ts @@ -0,0 +1,25 @@ +import JSBI from 'jsbi'; +import invariant from 'tiny-invariant'; +import { MaxUint256, ZERO } from './constants'; + +const TWO = JSBI.BigInt(2); +const POWERS_OF_2 = [128, 64, 32, 16, 8, 4, 2, 1].map( + (pow: number): [number, JSBI] => [ + pow, + JSBI.exponentiate(TWO, JSBI.BigInt(pow)), + ], +); + +export function mostSignificantBit(x: JSBI): number { + invariant(JSBI.greaterThan(x, ZERO), 'ZERO'); + invariant(JSBI.lessThanOrEqual(x, MaxUint256), 'MAX'); + + let msb: number = 0; + for (const [power, min] of POWERS_OF_2) { + if (JSBI.greaterThanOrEqual(x, min)) { + x = JSBI.signedRightShift(x, JSBI.BigInt(power)); + msb += power; + } + } + return msb; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/nearestUsableTick.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/nearestUsableTick.ts new file mode 100644 index 00000000..90b4839d --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/nearestUsableTick.ts @@ -0,0 +1,17 @@ +import invariant from 'tiny-invariant' +import { TickMath } from './tickMath' + +/** + * Returns the closest tick that is nearest a given tick and usable for the given tick spacing + * @param tick the target tick + * @param tickSpacing the spacing of the pool + */ +export function nearestUsableTick(tick: number, tickSpacing: number) { + invariant(Number.isInteger(tick) && Number.isInteger(tickSpacing), 'INTEGERS') + invariant(tickSpacing > 0, 'TICK_SPACING') + invariant(tick >= TickMath.MIN_TICK && tick <= TickMath.MAX_TICK, 'TICK_BOUND') + const rounded = Math.round(tick / tickSpacing) * tickSpacing + if (rounded < TickMath.MIN_TICK) return rounded + tickSpacing + else if (rounded > TickMath.MAX_TICK) return rounded - tickSpacing + else return rounded +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/slippage.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/slippage.ts new file mode 100644 index 00000000..06fb9a85 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/slippage.ts @@ -0,0 +1,17 @@ +import BigNumber from 'bignumber.js'; +import { Percent } from '../../../../utils/fractions'; + +const PRECISION = 10_000; +const DENOMINATOR = PRECISION * 100; + +// turn "0.5" into Percent representing 0.5% +export function toSlippagePercent(slippage: string | number): Percent { + const numerator = Math.floor(Number(slippage) * PRECISION); + return new Percent(numerator, DENOMINATOR); +} + +// turn "0.5" into Percent representing 0.5% +export function toSlippagePercentNumber(slippage: string | number): number { + const numerator = Math.floor(Number(slippage) * PRECISION); + return new BigNumber(numerator).div(DENOMINATOR).toNumber(); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/sqrt.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/sqrt.ts new file mode 100644 index 00000000..f49a6739 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/sqrt.ts @@ -0,0 +1,31 @@ +import JSBI from 'jsbi' +import invariant from 'tiny-invariant' + +export const MAX_SAFE_INTEGER = JSBI.BigInt(Number.MAX_SAFE_INTEGER) + +const ZERO = JSBI.BigInt(0) +const ONE = JSBI.BigInt(1) +const TWO = JSBI.BigInt(2) + +/** + * Computes floor(sqrt(value)) + * @param value the value for which to compute the square root, rounded down + */ +export function sqrt(value: JSBI): JSBI { + invariant(JSBI.greaterThanOrEqual(value, ZERO), 'NEGATIVE') + + // rely on built in sqrt if possible + if (JSBI.lessThan(value, MAX_SAFE_INTEGER)) { + return JSBI.BigInt(Math.floor(Math.sqrt(JSBI.toNumber(value)))) + } + + let z: JSBI + let x: JSBI + z = value + x = JSBI.add(JSBI.divide(value, TWO), ONE) + while (JSBI.lessThan(x, z)) { + z = x + x = JSBI.divide(JSBI.add(JSBI.divide(value, x), x), TWO) + } + return z +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/sqrtPriceMath.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/sqrtPriceMath.ts new file mode 100644 index 00000000..f6424873 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/sqrtPriceMath.ts @@ -0,0 +1,174 @@ +import JSBI from 'jsbi'; +import invariant from 'tiny-invariant'; +import { MaxUint256, ONE, Q96, ZERO } from './constants'; +import { FullMath } from './fullMath'; + +const MaxUint160 = JSBI.subtract( + JSBI.exponentiate(JSBI.BigInt(2), JSBI.BigInt(160)), + ONE, +); + +function multiplyIn256(x: JSBI, y: JSBI): JSBI { + const product = JSBI.multiply(x, y); + return JSBI.bitwiseAnd(product, MaxUint256); +} + +function addIn256(x: JSBI, y: JSBI): JSBI { + const sum = JSBI.add(x, y); + return JSBI.bitwiseAnd(sum, MaxUint256); +} + +export abstract class SqrtPriceMath { + /** + * Cannot be constructed. + */ + private constructor() {} + + public static getAmount0Delta( + sqrtRatioAX96: JSBI, + sqrtRatioBX96: JSBI, + liquidity: JSBI, + roundUp: boolean, + ): JSBI { + if (JSBI.greaterThan(sqrtRatioAX96, sqrtRatioBX96)) { + [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96]; + } + + const numerator1 = JSBI.leftShift(liquidity, JSBI.BigInt(96)); + const numerator2 = JSBI.subtract(sqrtRatioBX96, sqrtRatioAX96); + + return roundUp + ? FullMath.mulDivRoundingUp( + FullMath.mulDivRoundingUp(numerator1, numerator2, sqrtRatioBX96), + ONE, + sqrtRatioAX96, + ) + : JSBI.divide( + JSBI.divide(JSBI.multiply(numerator1, numerator2), sqrtRatioBX96), + sqrtRatioAX96, + ); + } + + public static getAmount1Delta( + sqrtRatioAX96: JSBI, + sqrtRatioBX96: JSBI, + liquidity: JSBI, + roundUp: boolean, + ): JSBI { + if (JSBI.greaterThan(sqrtRatioAX96, sqrtRatioBX96)) { + [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96]; + } + + return roundUp + ? FullMath.mulDivRoundingUp( + liquidity, + JSBI.subtract(sqrtRatioBX96, sqrtRatioAX96), + Q96, + ) + : JSBI.divide( + JSBI.multiply(liquidity, JSBI.subtract(sqrtRatioBX96, sqrtRatioAX96)), + Q96, + ); + } + + public static getNextSqrtPriceFromInput( + sqrtPX96: JSBI, + liquidity: JSBI, + amountIn: JSBI, + zeroForOne: boolean, + ): JSBI { + invariant(JSBI.greaterThan(sqrtPX96, ZERO)); + invariant(JSBI.greaterThan(liquidity, ZERO)); + + return zeroForOne + ? this.getNextSqrtPriceFromAmount0RoundingUp( + sqrtPX96, + liquidity, + amountIn, + true, + ) + : this.getNextSqrtPriceFromAmount1RoundingDown( + sqrtPX96, + liquidity, + amountIn, + true, + ); + } + + public static getNextSqrtPriceFromOutput( + sqrtPX96: JSBI, + liquidity: JSBI, + amountOut: JSBI, + zeroForOne: boolean, + ): JSBI { + invariant(JSBI.greaterThan(sqrtPX96, ZERO)); + invariant(JSBI.greaterThan(liquidity, ZERO)); + + return zeroForOne + ? this.getNextSqrtPriceFromAmount1RoundingDown( + sqrtPX96, + liquidity, + amountOut, + false, + ) + : this.getNextSqrtPriceFromAmount0RoundingUp( + sqrtPX96, + liquidity, + amountOut, + false, + ); + } + + private static getNextSqrtPriceFromAmount0RoundingUp( + sqrtPX96: JSBI, + liquidity: JSBI, + amount: JSBI, + add: boolean, + ): JSBI { + if (JSBI.equal(amount, ZERO)) return sqrtPX96; + const numerator1 = JSBI.leftShift(liquidity, JSBI.BigInt(96)); + + if (add) { + const product = multiplyIn256(amount, sqrtPX96); + if (JSBI.equal(JSBI.divide(product, amount), sqrtPX96)) { + const denominator = addIn256(numerator1, product); + if (JSBI.greaterThanOrEqual(denominator, numerator1)) { + return FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator); + } + } + + return FullMath.mulDivRoundingUp( + numerator1, + ONE, + JSBI.add(JSBI.divide(numerator1, sqrtPX96), amount), + ); + } else { + const product = multiplyIn256(amount, sqrtPX96); + + invariant(JSBI.equal(JSBI.divide(product, amount), sqrtPX96)); + invariant(JSBI.greaterThan(numerator1, product)); + const denominator = JSBI.subtract(numerator1, product); + return FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator); + } + } + + private static getNextSqrtPriceFromAmount1RoundingDown( + sqrtPX96: JSBI, + liquidity: JSBI, + amount: JSBI, + add: boolean, + ): JSBI { + if (add) { + const quotient = JSBI.lessThanOrEqual(amount, MaxUint160) + ? JSBI.divide(JSBI.leftShift(amount, JSBI.BigInt(96)), liquidity) + : JSBI.divide(JSBI.multiply(amount, Q96), liquidity); + + return JSBI.add(sqrtPX96, quotient); + } else { + const quotient = FullMath.mulDivRoundingUp(amount, Q96, liquidity); + + invariant(JSBI.greaterThan(sqrtPX96, quotient)); + return JSBI.subtract(sqrtPX96, quotient); + } + } +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/tickMath.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/tickMath.ts new file mode 100644 index 00000000..2073a275 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/tickMath.ts @@ -0,0 +1,173 @@ +import JSBI from 'jsbi'; +import invariant from 'tiny-invariant'; +import { MaxUint256, ONE, ZERO } from './constants'; +import { mostSignificantBit } from './mostSignificantBit'; + +function mulShift(val: JSBI, mulBy: string): JSBI { + return JSBI.signedRightShift( + JSBI.multiply(val, JSBI.BigInt(mulBy)), + JSBI.BigInt(128), + ); +} + +const Q32 = JSBI.exponentiate(JSBI.BigInt(2), JSBI.BigInt(32)); + +export abstract class TickMath { + /** + * Cannot be constructed. + */ + private constructor() {} + + /** + * The minimum tick that can be used on any pool. + */ + public static MIN_TICK: number = -887272; + /** + * The maximum tick that can be used on any pool. + */ + public static MAX_TICK: number = -TickMath.MIN_TICK; + + /** + * The sqrt ratio corresponding to the minimum tick that could be used on any pool. + */ + public static MIN_SQRT_RATIO: JSBI = JSBI.BigInt('4295128739'); + /** + * The sqrt ratio corresponding to the maximum tick that could be used on any pool. + */ + public static MAX_SQRT_RATIO: JSBI = JSBI.BigInt( + '1461446703485210103287273052203988822378723970342', + ); + + /** + * Returns the sqrt ratio as a Q64.96 for the given tick. The sqrt ratio is computed as sqrt(1.0001)^tick + * @param tick the tick for which to compute the sqrt ratio + */ + public static getSqrtRatioAtTick(tick: number): JSBI { + invariant( + tick >= TickMath.MIN_TICK && + tick <= TickMath.MAX_TICK && + Number.isInteger(tick), + 'TICK', + ); + const absTick: number = tick < 0 ? tick * -1 : tick; + + let ratio: JSBI = + (absTick & 0x1) !== 0 + ? JSBI.BigInt('0xfffcb933bd6fad37aa2d162d1a594001') + : JSBI.BigInt('0x100000000000000000000000000000000'); + if ((absTick & 0x2) !== 0) + ratio = mulShift(ratio, '0xfff97272373d413259a46990580e213a'); + if ((absTick & 0x4) !== 0) + ratio = mulShift(ratio, '0xfff2e50f5f656932ef12357cf3c7fdcc'); + if ((absTick & 0x8) !== 0) + ratio = mulShift(ratio, '0xffe5caca7e10e4e61c3624eaa0941cd0'); + if ((absTick & 0x10) !== 0) + ratio = mulShift(ratio, '0xffcb9843d60f6159c9db58835c926644'); + if ((absTick & 0x20) !== 0) + ratio = mulShift(ratio, '0xff973b41fa98c081472e6896dfb254c0'); + if ((absTick & 0x40) !== 0) + ratio = mulShift(ratio, '0xff2ea16466c96a3843ec78b326b52861'); + if ((absTick & 0x80) !== 0) + ratio = mulShift(ratio, '0xfe5dee046a99a2a811c461f1969c3053'); + if ((absTick & 0x100) !== 0) + ratio = mulShift(ratio, '0xfcbe86c7900a88aedcffc83b479aa3a4'); + if ((absTick & 0x200) !== 0) + ratio = mulShift(ratio, '0xf987a7253ac413176f2b074cf7815e54'); + if ((absTick & 0x400) !== 0) + ratio = mulShift(ratio, '0xf3392b0822b70005940c7a398e4b70f3'); + if ((absTick & 0x800) !== 0) + ratio = mulShift(ratio, '0xe7159475a2c29b7443b29c7fa6e889d9'); + if ((absTick & 0x1000) !== 0) + ratio = mulShift(ratio, '0xd097f3bdfd2022b8845ad8f792aa5825'); + if ((absTick & 0x2000) !== 0) + ratio = mulShift(ratio, '0xa9f746462d870fdf8a65dc1f90e061e5'); + if ((absTick & 0x4000) !== 0) + ratio = mulShift(ratio, '0x70d869a156d2a1b890bb3df62baf32f7'); + if ((absTick & 0x8000) !== 0) + ratio = mulShift(ratio, '0x31be135f97d08fd981231505542fcfa6'); + if ((absTick & 0x10000) !== 0) + ratio = mulShift(ratio, '0x9aa508b5b7a84e1c677de54f3e99bc9'); + if ((absTick & 0x20000) !== 0) + ratio = mulShift(ratio, '0x5d6af8dedb81196699c329225ee604'); + if ((absTick & 0x40000) !== 0) + ratio = mulShift(ratio, '0x2216e584f5fa1ea926041bedfe98'); + if ((absTick & 0x80000) !== 0) + ratio = mulShift(ratio, '0x48a170391f7dc42444e8fa2'); + + if (tick > 0) ratio = JSBI.divide(MaxUint256, ratio); + + // back to Q96 + return JSBI.greaterThan(JSBI.remainder(ratio, Q32), ZERO) + ? JSBI.add(JSBI.divide(ratio, Q32), ONE) + : JSBI.divide(ratio, Q32); + } + + /** + * Returns the tick corresponding to a given sqrt ratio, s.t. #getSqrtRatioAtTick(tick) <= sqrtRatioX96 + * and #getSqrtRatioAtTick(tick + 1) > sqrtRatioX96 + * @param sqrtRatioX96 the sqrt ratio as a Q64.96 for which to compute the tick + */ + public static getTickAtSqrtRatio(sqrtRatioX96: JSBI): number { + invariant( + JSBI.greaterThanOrEqual(sqrtRatioX96, TickMath.MIN_SQRT_RATIO) && + JSBI.lessThan(sqrtRatioX96, TickMath.MAX_SQRT_RATIO), + 'SQRT_RATIO', + ); + + const sqrtRatioX128 = JSBI.leftShift(sqrtRatioX96, JSBI.BigInt(32)); + + const msb = mostSignificantBit(sqrtRatioX128); + + let r: JSBI; + if (JSBI.greaterThanOrEqual(JSBI.BigInt(msb), JSBI.BigInt(128))) { + r = JSBI.signedRightShift(sqrtRatioX128, JSBI.BigInt(msb - 127)); + } else { + r = JSBI.leftShift(sqrtRatioX128, JSBI.BigInt(127 - msb)); + } + + let log_2: JSBI = JSBI.leftShift( + JSBI.subtract(JSBI.BigInt(msb), JSBI.BigInt(128)), + JSBI.BigInt(64), + ); + + for (let i = 0; i < 14; i++) { + r = JSBI.signedRightShift(JSBI.multiply(r, r), JSBI.BigInt(127)); + const f = JSBI.signedRightShift(r, JSBI.BigInt(128)); + log_2 = JSBI.bitwiseOr(log_2, JSBI.leftShift(f, JSBI.BigInt(63 - i))); + r = JSBI.signedRightShift(r, f); + } + + const log_sqrt10001 = JSBI.multiply( + log_2, + JSBI.BigInt('255738958999603826347141'), + ); + + const tickLow = JSBI.toNumber( + JSBI.signedRightShift( + JSBI.subtract( + log_sqrt10001, + JSBI.BigInt('3402992956809132418596140100660247210'), + ), + JSBI.BigInt(128), + ), + ); + const tickHigh = JSBI.toNumber( + JSBI.signedRightShift( + JSBI.add( + log_sqrt10001, + JSBI.BigInt('291339464771989622907027621153398088495'), + ), + JSBI.BigInt(128), + ), + ); + + return tickLow === tickHigh + ? tickLow + : JSBI.lessThanOrEqual( + TickMath.getSqrtRatioAtTick(tickHigh), + sqrtRatioX96, + ) + ? tickHigh + : tickLow; + } +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/tryParseTick.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/tryParseTick.ts new file mode 100644 index 00000000..dfba9f97 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/tryParseTick.ts @@ -0,0 +1,70 @@ +import JSBI from 'jsbi'; +import { TokenInfo } from '../../../../hooks/Token'; +import { encodeSqrtRatioX96 } from './encodeSqrtRatioX96'; +import { TickMath } from './tickMath'; +import { priceToClosestTick } from './getTickToPrice'; +import { sortsBefore } from '../../../../utils/address'; +import { nearestUsableTick } from './nearestUsableTick'; +import { Price } from '../../../../utils/fractions'; + +export function tryParsePrice( + baseToken?: TokenInfo, + quoteToken?: TokenInfo, + value?: string, +) { + if (!baseToken || !quoteToken || !value) { + return undefined; + } + + if (!value.match(/^\d*\.?\d+$/)) { + return undefined; + } + + const [whole, fraction] = value.split('.'); + + const decimals = fraction?.length ?? 0; + const withoutDecimals = JSBI.BigInt((whole ?? '') + (fraction ?? '')); + + return new Price( + baseToken, + quoteToken, + JSBI.multiply( + JSBI.BigInt(10 ** decimals), + JSBI.BigInt(10 ** baseToken.decimals), + ), + JSBI.multiply(withoutDecimals, JSBI.BigInt(10 ** quoteToken.decimals)), + ); +} + +export function tryParseTick( + baseToken?: TokenInfo, + quoteToken?: TokenInfo, + value?: string, + tickSpacing?: number, +): number | undefined { + if (!baseToken || !quoteToken || !value || tickSpacing === undefined) { + return undefined; + } + + const price = tryParsePrice(baseToken, quoteToken, value); + + if (!price) { + return undefined; + } + + let tick: number; + + // check price is within min/max bounds, if outside return min/max + const sqrtRatioX96 = encodeSqrtRatioX96(price.numerator, price.denominator); + + if (JSBI.greaterThanOrEqual(sqrtRatioX96, TickMath.MAX_SQRT_RATIO)) { + tick = TickMath.MAX_TICK; + } else if (JSBI.lessThanOrEqual(sqrtRatioX96, TickMath.MIN_SQRT_RATIO)) { + tick = TickMath.MIN_TICK; + } else { + // this function is agnostic to the base, will always return the correct tick + tick = priceToClosestTick(price); + } + + return nearestUsableTick(tick, tickSpacing); +} diff --git a/yarn.lock b/yarn.lock index 28f0bec5..64c832a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1857,10 +1857,10 @@ ethers "^6.13.2" https-proxy-agent "^7.0.5" -"@dodoex/dodo-contract-request@1.15.0-morph-holesky.2": - version "1.15.0-morph-holesky.2" - resolved "https://registry.yarnpkg.com/@dodoex/dodo-contract-request/-/dodo-contract-request-1.15.0-morph-holesky.2.tgz#c3de12ccdd221e35f32abb0abba5e7f019c4997c" - integrity sha512-n/MKkLKH5fSY8hsTVw+98EQDyoYvsHR8li+uO3DkYKeJmGtK2e0CCOKyJwR37dtuaw5ynQCvoJm9WsaveCUuqQ== +"@dodoex/dodo-contract-request@1.15.0-morph-holesky.3": + version "1.15.0-morph-holesky.3" + resolved "https://registry.yarnpkg.com/@dodoex/dodo-contract-request/-/dodo-contract-request-1.15.0-morph-holesky.3.tgz#cd281b75212c3a43c076eaa05384d4d9aa186095" + integrity sha512-sov8qxRSrrzPqPyoWZfPL/ec41azeSRvEuya52CfVf7uQvCPtsyx3YK+YY7cIBdOradWQZdjEHYyOjxI62D8gg== dependencies: typescript "^5" From 53b1ef5e46715f1eaca4d0952b2046fb153715b1 Mon Sep 17 00:00:00 2001 From: JunJie Date: Fri, 4 Jul 2025 20:33:46 +0800 Subject: [PATCH 16/18] feat: add ticks && add apr --- packages/dodoex-api/src/gql/gql.ts | 8 + packages/dodoex-api/src/gql/graphql.ts | 372 ++++++++++++++++-- .../src/services/pool/graphqlQuery.ts | 18 + .../src/Input/SearchInput.tsx | 6 +- .../widgets/ve33/Ve33PoolDetail/PoolInfo.tsx | 163 ++++++++ .../src/widgets/ve33/Ve33PoolDetail/index.tsx | 45 +-- .../widgets/ve33/Ve33PoolList/TableList.tsx | 4 +- .../Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx | 61 ++- .../components/PositionPreview.tsx | 2 +- .../components/RangeRatioSelect.tsx | 76 ++-- .../components/ReviewModal.tsx | 2 +- .../hooks/usePoolActiveLiquidityChartData.ts | 2 +- .../hooks/usePriceRangeRatioSelect.ts | 182 +++++++++ .../Ve33V3PoolOperate/hooks/useSetRange.ts | 5 +- .../widgets/ve33/VotePoolList/TableList.tsx | 4 +- .../src/widgets/ve33/components/PoolHead.tsx | 12 +- 16 files changed, 815 insertions(+), 147 deletions(-) create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/usePriceRangeRatioSelect.ts diff --git a/packages/dodoex-api/src/gql/gql.ts b/packages/dodoex-api/src/gql/gql.ts index d2195f20..7c11cfdd 100644 --- a/packages/dodoex-api/src/gql/gql.ts +++ b/packages/dodoex-api/src/gql/gql.ts @@ -52,6 +52,8 @@ const documents = { types.Ve33_GetPoolDocument, '\n query Ve33_getVotePoolList($where: Ve33VotePoolInput) {\n ve33_getVotePoolList(where: $where) {\n id\n title\n version\n\n gaugeAddress\n feeRate\n apr {\n fees\n incentives\n }\n tvl\n\n token0Address\n token0Name\n token0Symbol\n token0Decimals\n\n token1Address\n token1Name\n token1Symbol\n token1Decimals\n\n totalValueLockedUSD\n totalValueLockedToken0\n totalValueLockedToken1\n\n feesUSD\n feesToken0\n feesToken1\n\n incentives {\n amount\n token\n usd\n }\n votes {\n token\n weight\n }\n }\n }\n ': types.Ve33_GetVotePoolListDocument, + '\n query Ve33_getTicksData($where: Ve33getTicksDataInput) {\n ve33_getTicksData(where: $where) {\n ticks {\n id\n poolAddress\n tickIdx\n price0\n price1\n liquidityGross\n liquidityNet\n protocolPosition\n tickArrayLower\n tickArrayUpper\n }\n }\n }\n ': + types.Ve33_GetTicksDataDocument, '\n query FetchUserSwapOrderHistories($where: User_swapswapFilter) {\n user_swap_orderHistories(where: $where) {\n count\n page\n list {\n chainId\n createdAt\n fromAmount\n fromTokenDecimals\n fromTokenPrice\n fromTokenSymbol\n fromTokenAddress\n fromTokenLogoImg\n hash\n status\n toAmount\n toTokenDecimals\n toTokenPrice\n toTokenSymbol\n toTokenAddress\n toTokenLogoImg\n minAmount\n nonce\n extra\n user\n }\n }\n }\n ': types.FetchUserSwapOrderHistoriesDocument, '\n query FetchNoticeCenterTransactionList(\n $where: Notice_centertransactionListFilter\n ) {\n notice_center_transactionList(where: $where) {\n list {\n chainId\n createTime\n extend\n from\n id\n key\n type\n }\n count\n limit\n page\n }\n }\n ': @@ -182,6 +184,12 @@ export function graphql( export function graphql( source: '\n query Ve33_getVotePoolList($where: Ve33VotePoolInput) {\n ve33_getVotePoolList(where: $where) {\n id\n title\n version\n\n gaugeAddress\n feeRate\n apr {\n fees\n incentives\n }\n tvl\n\n token0Address\n token0Name\n token0Symbol\n token0Decimals\n\n token1Address\n token1Name\n token1Symbol\n token1Decimals\n\n totalValueLockedUSD\n totalValueLockedToken0\n totalValueLockedToken1\n\n feesUSD\n feesToken0\n feesToken1\n\n incentives {\n amount\n token\n usd\n }\n votes {\n token\n weight\n }\n }\n }\n ', ): typeof import('./graphql').Ve33_GetVotePoolListDocument; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql( + source: '\n query Ve33_getTicksData($where: Ve33getTicksDataInput) {\n ve33_getTicksData(where: $where) {\n ticks {\n id\n poolAddress\n tickIdx\n price0\n price1\n liquidityGross\n liquidityNet\n protocolPosition\n tickArrayLower\n tickArrayUpper\n }\n }\n }\n ', +): typeof import('./graphql').Ve33_GetTicksDataDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/packages/dodoex-api/src/gql/graphql.ts b/packages/dodoex-api/src/gql/graphql.ts index 93087dbc..d5beb249 100644 --- a/packages/dodoex-api/src/gql/graphql.ts +++ b/packages/dodoex-api/src/gql/graphql.ts @@ -35,6 +35,7 @@ export type Scalars = { /** Bytes custom scalar type */ Bytes: { input: any; output: any }; Dodochain_earnBytes: { input: any; output: any }; + /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */ JSON: { input: any; output: any }; LiquidityBytes: { input: any; output: any }; }; @@ -2004,35 +2005,38 @@ export type Cross_Chain_SwapToolDetail = { }; export type Cross_Chain_Swap_ZetachainCrossChainOrderCreate = { - createdAt?: Maybe; - fromAddress?: Maybe; - fromAmount?: Maybe; - fromChainId?: Maybe; - fromHash?: Maybe; - fromTokenAddress?: Maybe; - id?: Maybe; - status?: Maybe; - toAddress?: Maybe; - toAmount?: Maybe; - toChainId?: Maybe; - toHash?: Maybe; - toTokenAddress?: Maybe; - updatedAt?: Maybe; + success?: Maybe; }; export type Cross_Chain_Swap_ZetachainCrossChainOrderList = { createdAt?: Maybe; - extend?: Maybe; + endTime?: Maybe; externalId?: Maybe; + fees?: Maybe; fromAddress?: Maybe; fromAmount?: Maybe; + fromAmountUSD?: Maybe; + fromAmountWithOutDecimals?: Maybe; fromChainId?: Maybe; fromHash?: Maybe; fromTokenAddress?: Maybe; id?: Maybe; + omniPlan?: Maybe; + refundAmount?: Maybe; + refundChainId?: Maybe; + refundCridgeContract?: Maybe; + refundHash?: Maybe; + refundToken?: Maybe; + refundUser?: Maybe; + slippage?: Maybe; + startTime?: Maybe; status?: Maybe; + statusCode?: Maybe; + subStatus?: Maybe; toAddress?: Maybe; toAmount?: Maybe; + toAmountUSD?: Maybe; + toAmountWithOutDecimals?: Maybe; toChainId?: Maybe; toHash?: Maybe; toTokenAddress?: Maybe; @@ -2047,14 +2051,22 @@ export type Cross_Chain_Swap_ZetachainCrossChainOrderResult = { export type Cross_Chain_Swap_ZetachainCrossChainRoute = { approveTarget?: Maybe; - asset?: Maybe; encodeParams?: Maybe; fees?: Maybe; + fromAddress?: Maybe; fromAmount?: Maybe; + fromAmountUSD?: Maybe; + fromAmountWithOutDecimals?: Maybe; fromChainId?: Maybe; fromTokenAddress?: Maybe; - step?: Maybe; + min?: Maybe; + omniPlan?: Maybe; + routeId?: Maybe; + slippage?: Maybe; + toAddress?: Maybe; toAmount?: Maybe; + toAmountUSD?: Maybe; + toAmountWithOutDecimals?: Maybe; toChainId?: Maybe; toTokenAddress?: Maybe; }; @@ -2067,33 +2079,68 @@ export type Cross_Chain_Swap_ZetachainCrossChainTransactionEncode = { value?: Maybe; }; +export type Cross_Chain_Swap_ZetachainSwapOrderList = { + chainId?: Maybe; + createdAt?: Maybe; + extra?: Maybe; + fromAmount?: Maybe; + fromTokenAddress?: Maybe; + fromTokenDecimals?: Maybe; + fromTokenPrice?: Maybe; + fromTokenSymbol?: Maybe; + hash?: Maybe; + key?: Maybe; + maxAmount?: Maybe; + minAmount?: Maybe; + nonce?: Maybe; + status?: Maybe; + toAmount?: Maybe; + toTokenAddress?: Maybe; + toTokenDecimals?: Maybe; + toTokenPrice?: Maybe; + toTokenSymbol?: Maybe; + user?: Maybe; +}; + +export type Cross_Chain_Swap_ZetachainSwapOrderResult = { + count?: Maybe; + list?: Maybe>>; + page?: Maybe; + pageSize?: Maybe; +}; + export type Cross_Chain_Swap_ZetachainorderCreateData = { - extend?: InputMaybe; + calldata?: InputMaybe; + fees?: InputMaybe; fromAddress?: InputMaybe; fromAmount?: InputMaybe; + fromAmountUSD?: InputMaybe; + fromAmountWithOutDecimals?: InputMaybe; fromChainId?: InputMaybe; + fromHash?: InputMaybe; fromTokenAddress?: InputMaybe; - hash?: InputMaybe; + omniPlan?: InputMaybe; + routeId?: InputMaybe; slippage?: InputMaybe; toAddress?: InputMaybe; toAmount?: InputMaybe; + toAmountUSD?: InputMaybe; + toAmountWithOutDecimals?: InputMaybe; toChainId?: InputMaybe; toTokenAddress?: InputMaybe; }; -export type Cross_Chain_Swap_ZetachainorderCreateDataExtend = { - asset?: InputMaybe; - step?: InputMaybe; +export type Cross_Chain_Swap_ZetachainorderDetailData = { + fromChainId?: InputMaybe; + fromHash?: InputMaybe; + refreshNow?: InputMaybe; }; export type Cross_Chain_Swap_ZetachainorderListData = { - chainId?: InputMaybe; - limit?: InputMaybe; page?: InputMaybe; - product?: InputMaybe; + pageSize?: InputMaybe; refreshNow?: InputMaybe; - source?: InputMaybe; - status?: InputMaybe; + type?: InputMaybe; user?: InputMaybe; }; @@ -2109,6 +2156,14 @@ export type Cross_Chain_Swap_ZetachainrouteParams = { toTokenAddress?: InputMaybe; }; +export type Cross_Chain_Swap_ZetachainswapOrderListData = { + chainId?: InputMaybe; + page?: InputMaybe; + pageSize?: InputMaybe; + refreshNow?: InputMaybe; + userAddress?: InputMaybe; +}; + export type Cross_Chain_Swap_ZetachaintransactionEncodeParams = { interfaceParams?: InputMaybe; refreshNow?: InputMaybe; @@ -2283,6 +2338,163 @@ export type Cross_Chain_TokentokenlistFilter = { refreshNow?: InputMaybe; }; +export type Cross_Chain_TransferAttributeLabelV2 = { + key?: Maybe; + name?: Maybe; + status?: Maybe; +}; + +export type Cross_Chain_TransferCrossChainOrder = { + createdAt?: Maybe; + duration?: Maybe; + endTime?: Maybe; + fee?: Maybe; + feeUsd?: Maybe; + fromAmount?: Maybe; + fromChainId?: Maybe; + fromHash?: Maybe; + fromTokenAddress?: Maybe; + fromTokenDecimals?: Maybe; + fromTokenName?: Maybe; + fromTokenSymbol?: Maybe; + gas?: Maybe; + gasUsd?: Maybe; + id?: Maybe; + status?: Maybe; + toAddress?: Maybe; + toAmount?: Maybe; + toChainId?: Maybe; + toHash?: Maybe; + toTokenAddress?: Maybe; + toTokenDecimals?: Maybe; + toTokenName?: Maybe; + toTokenSymbol?: Maybe; + updatedAt?: Maybe; + user?: Maybe; +}; + +export type Cross_Chain_TransferCrossChainOrderList = { + currentPage?: Maybe; + list?: Maybe>>; + total?: Maybe; +}; + +export type Cross_Chain_TransferDomain = { + env?: Maybe; + name?: Maybe; +}; + +export type Cross_Chain_TransferErc20V2List = { + address?: Maybe; + attributeLabels?: Maybe>>; + chainId?: Maybe; + crossChainSymbol?: Maybe; + decimals?: Maybe; + domains?: Maybe>>; + erc20Extend?: Maybe; + funcLabels?: Maybe>>; + id?: Maybe; + logoImg?: Maybe; + name?: Maybe; + position?: Maybe; + slippage?: Maybe; + symbol?: Maybe; + tokenlists?: Maybe>>; +}; + +export type Cross_Chain_TransferFuncLabelV2 = { + key?: Maybe; + name?: Maybe; + status?: Maybe; +}; + +export type Cross_Chain_TransferOrderDetailFilter = { + orderId: Scalars['String']['input']; +}; + +export type Cross_Chain_TransferOrderListFilter = { + chainId?: InputMaybe; + page?: InputMaybe; + pageSize?: InputMaybe; + status?: InputMaybe; + user?: InputMaybe; +}; + +export type Cross_Chain_TransferQuoteResponse = { + amount: Scalars['String']['output']; + amountFormatted: Scalars['String']['output']; + bestQuote: Scalars['String']['output']; + bestQuoteFormatted: Scalars['String']['output']; + crossChainSymbol: Scalars['String']['output']; + fixedFee: Scalars['String']['output']; + fixedFeeFormatted: Scalars['String']['output']; + fixedFeeUsd: Scalars['String']['output']; + gasFee: Scalars['String']['output']; + gasFeeFormatted: Scalars['String']['output']; + gasFeeUsd: Scalars['String']['output']; + gasTokenPrice: Scalars['String']['output']; + minReceiveQuote: Scalars['String']['output']; + minReceiveQuoteFormatted: Scalars['String']['output']; + orderId: Scalars['String']['output']; + rateFee: Scalars['String']['output']; + rateFeeFormatted: Scalars['String']['output']; + rateFeeUsd: Scalars['String']['output']; + recipient: Scalars['String']['output']; + sourceChainId: Scalars['Int']['output']; + sourceTokenAddress: Scalars['String']['output']; + sourceTokenDecimals: Scalars['Int']['output']; + sourceTokenName: Scalars['String']['output']; + sourceTokenPrice: Scalars['String']['output']; + sourceTokenSymbol: Scalars['String']['output']; + targetChainId: Scalars['Int']['output']; + targetTokenAddress: Scalars['String']['output']; + targetTokenDecimals: Scalars['Int']['output']; + targetTokenName: Scalars['String']['output']; + targetTokenSymbol: Scalars['String']['output']; + timestamp: Scalars['String']['output']; + totalFee: Scalars['String']['output']; + totalFeeFormatted: Scalars['String']['output']; + totalFeeUsd: Scalars['String']['output']; + transactionData: Cross_Chain_TransferQuoteResponseTransactionDataDto; + userAddress: Scalars['String']['output']; + version: Scalars['String']['output']; +}; + +export type Cross_Chain_TransferQuoteResponseTransactionDataDto = { + data: Scalars['String']['output']; + from: Scalars['String']['output']; + gas: Scalars['String']['output']; + maxFeePerGas?: Maybe; + maxPriorityFeePerGas?: Maybe; + to: Scalars['String']['output']; + value: Scalars['String']['output']; +}; + +export type Cross_Chain_TransferTokenListV2 = { + chainId?: Maybe; + name?: Maybe; + status?: Maybe; +}; + +export type Cross_Chain_TransferlistV2Filter = { + chainId?: InputMaybe; + chainIds?: InputMaybe; + page?: InputMaybe; + pageSize?: InputMaybe; + refreshNow?: InputMaybe; +}; + +export type Cross_Chain_TransferquoteFilter = { + amount: Scalars['String']['input']; + crossChainSymbol: Scalars['String']['input']; + recipient: Scalars['String']['input']; + sourceChainId: Scalars['Int']['input']; + sourceTokenAddress: Scalars['String']['input']; + targetChainId: Scalars['Int']['input']; + targetTokenAddress: Scalars['String']['input']; + userAddress: Scalars['String']['input']; +}; + export type Cross_Chain_Zetachain_TokenCrossChainTokenlist = { address?: Maybe; chainId?: Maybe; @@ -12406,11 +12618,19 @@ export type Query = { cross_chain_swap_routesV2?: Maybe; cross_chain_swap_transactionEncode?: Maybe; cross_chain_swap_zetachain_orderCreate?: Maybe; + cross_chain_swap_zetachain_orderDetail?: Maybe; cross_chain_swap_zetachain_orderList?: Maybe; cross_chain_swap_zetachain_routes?: Maybe; + cross_chain_swap_zetachain_swapOrderList?: Maybe; cross_chain_swap_zetachain_transactionEncode?: Maybe; cross_chain_token_list?: Maybe; cross_chain_token_tokenPair?: Maybe; + cross_chain_transfer_getOrderDetail?: Maybe; + cross_chain_transfer_getOrderList: Cross_Chain_TransferCrossChainOrderList; + cross_chain_transfer_getTokenList?: Maybe< + Array> + >; + cross_chain_transfer_quote: Cross_Chain_TransferQuoteResponse; cross_chain_zetachain_token_list?: Maybe< Array> >; @@ -12828,6 +13048,8 @@ export type Query = { ve33_getPool?: Maybe; /** 池子列表 */ ve33_getPoolList: Array>; + /** 获取amm ticks */ + ve33_getTicksData: Ve33TicksDataResult; /** 锁仓信息 */ ve33_getUserLock: Array>; /** 用户投资列表 */ @@ -13240,6 +13462,10 @@ export type QueryCross_Chain_Swap_Zetachain_OrderCreateArgs = { data?: InputMaybe; }; +export type QueryCross_Chain_Swap_Zetachain_OrderDetailArgs = { + where?: InputMaybe; +}; + export type QueryCross_Chain_Swap_Zetachain_OrderListArgs = { where?: InputMaybe; }; @@ -13248,6 +13474,10 @@ export type QueryCross_Chain_Swap_Zetachain_RoutesArgs = { where?: InputMaybe; }; +export type QueryCross_Chain_Swap_Zetachain_SwapOrderListArgs = { + where?: InputMaybe; +}; + export type QueryCross_Chain_Swap_Zetachain_TransactionEncodeArgs = { data?: InputMaybe; }; @@ -13260,6 +13490,22 @@ export type QueryCross_Chain_Token_TokenPairArgs = { where?: InputMaybe; }; +export type QueryCross_Chain_Transfer_GetOrderDetailArgs = { + where?: InputMaybe; +}; + +export type QueryCross_Chain_Transfer_GetOrderListArgs = { + where?: InputMaybe; +}; + +export type QueryCross_Chain_Transfer_GetTokenListArgs = { + where?: InputMaybe; +}; + +export type QueryCross_Chain_Transfer_QuoteArgs = { + where?: InputMaybe; +}; + export type QueryCross_Chain_Zetachain_Token_ListArgs = { where?: InputMaybe; }; @@ -15078,6 +15324,10 @@ export type QueryVe33_GetPoolListArgs = { where?: InputMaybe; }; +export type QueryVe33_GetTicksDataArgs = { + where?: InputMaybe; +}; + export type QueryVe33_GetUserLockArgs = { where: Ve33UserInput; }; @@ -20593,6 +20843,26 @@ export type Ve33PortfolioLock = { weight: Scalars['BigDecimal']['output']; }; +export type Ve33Tick = { + id: Scalars['String']['output']; + liquidityGross: Scalars['BigDecimal']['output']; + liquidityNet: Scalars['BigDecimal']['output']; + poolAddress: Scalars['String']['output']; + price0: Scalars['BigDecimal']['output']; + price1: Scalars['BigDecimal']['output']; + protocolPosition?: Maybe; + tickArrayLower?: Maybe; + tickArrayUpper?: Maybe; + tickIdx: Scalars['BigDecimal']['output']; +}; + +export type Ve33TicksDataResult = { + first?: Maybe; + pool: Scalars['String']['output']; + skip?: Maybe; + ticks: Array>; +}; + export type Ve33TokenFilterPaginationInput = { page?: InputMaybe; size?: InputMaybe; @@ -20663,6 +20933,12 @@ export type Ve33_TokenlistFilter = { pageSize?: InputMaybe; }; +export type Ve33getTicksDataInput = { + first?: InputMaybe; + pool: Scalars['String']['input']; + skip?: InputMaybe; +}; + export type WithdrawFundHistory = { chain: Scalars['String']['output']; /** id hash-logindex */ @@ -21922,6 +22198,27 @@ export type Ve33_GetVotePoolListQuery = { } | null>; }; +export type Ve33_GetTicksDataQueryVariables = Exact<{ + where?: InputMaybe; +}>; + +export type Ve33_GetTicksDataQuery = { + ve33_getTicksData: { + ticks: Array<{ + id: string; + poolAddress: string; + tickIdx: any; + price0: any; + price1: any; + liquidityGross: any; + liquidityNet: any; + protocolPosition?: string | null; + tickArrayLower?: string | null; + tickArrayUpper?: string | null; + } | null>; + }; +}; + export type FetchUserSwapOrderHistoriesQueryVariables = Exact<{ where?: InputMaybe; }>; @@ -22965,6 +23262,27 @@ export const Ve33_GetVotePoolListDocument = new TypedDocumentString(` Ve33_GetVotePoolListQuery, Ve33_GetVotePoolListQueryVariables >; +export const Ve33_GetTicksDataDocument = new TypedDocumentString(` + query Ve33_getTicksData($where: Ve33getTicksDataInput) { + ve33_getTicksData(where: $where) { + ticks { + id + poolAddress + tickIdx + price0 + price1 + liquidityGross + liquidityNet + protocolPosition + tickArrayLower + tickArrayUpper + } + } +} + `) as unknown as TypedDocumentString< + Ve33_GetTicksDataQuery, + Ve33_GetTicksDataQueryVariables +>; export const FetchUserSwapOrderHistoriesDocument = new TypedDocumentString(` query FetchUserSwapOrderHistories($where: User_swapswapFilter) { user_swap_orderHistories(where: $where) { diff --git a/packages/dodoex-api/src/services/pool/graphqlQuery.ts b/packages/dodoex-api/src/services/pool/graphqlQuery.ts index df18f0dc..fe695877 100644 --- a/packages/dodoex-api/src/services/pool/graphqlQuery.ts +++ b/packages/dodoex-api/src/services/pool/graphqlQuery.ts @@ -603,4 +603,22 @@ export const poolGraphqlQuery = { } } `), + fetchVe33TicksData: graphql(` + query Ve33_getTicksData($where: Ve33getTicksDataInput) { + ve33_getTicksData(where: $where) { + ticks { + id + poolAddress + tickIdx + price0 + price1 + liquidityGross + liquidityNet + protocolPosition + tickArrayLower + tickArrayUpper + } + } + } + `), }; diff --git a/packages/dodoex-components/src/Input/SearchInput.tsx b/packages/dodoex-components/src/Input/SearchInput.tsx index 02a6a8f5..e2c1d696 100644 --- a/packages/dodoex-components/src/Input/SearchInput.tsx +++ b/packages/dodoex-components/src/Input/SearchInput.tsx @@ -37,10 +37,10 @@ export default function SearchInput({ viewBox="0 0 18 18" fill="none" > - + diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx new file mode 100644 index 00000000..b1bc9431 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx @@ -0,0 +1,163 @@ +import { Box, LoadingSkeleton, useTheme } from '@dodoex/components'; +import { Ve33PoolInfoI } from '../types'; +import { t, Trans } from '@lingui/macro'; +import { formatReadableNumber, formatApy } from '../../../utils'; + +export default function PoolInfo({ + poolInfo, + isLoading, +}: { + poolInfo?: Ve33PoolInfoI; + isLoading?: boolean; +}) { + const theme = useTheme(); + + return ( + + + + + TVL + + + {formatReadableNumber({ + input: poolInfo?.totalValueLockedUSD, + })} + + + + + + APR + + + {formatApy( + Number(poolInfo?.apr.fees) + Number(poolInfo?.apr.incentives), + )} + + + + + + {t`Total ${poolInfo?.baseToken.symbol}`} + {t`Total ${poolInfo?.quoteToken.symbol}`} + + + + {formatReadableNumber({ + input: poolInfo?.totalValueLockedToken0, + })} + + + {formatReadableNumber({ + input: poolInfo?.quoteTokenAmount, + })} + + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx index f2665ad8..d62aa0e8 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx @@ -9,6 +9,9 @@ import { GoBack } from '../components/GoBack'; import { PoolHead } from '../components/PoolHead'; import { CardContainer } from '../components/widgets'; import { compositePoolInfo } from '../utils'; +import { Trans } from '@lingui/macro'; +import { formatApy, formatReadableNumber } from '../../../utils'; +import PoolInfo from './PoolInfo'; export interface Ve33PoolDetailProps { id: string; @@ -112,44 +115,10 @@ export const Ve33PoolDetail = ({ - - - - a - - - b - - + My Assets diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx index fd51d988..90125309 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx @@ -230,8 +230,8 @@ export const TableList = ({ fill="none" > diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx index 73db8434..12749d6b 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx @@ -36,6 +36,8 @@ import { ReviewModal } from './components/ReviewModal'; import { formatReadableNumber } from '../../../utils'; import RangeRatioSelect from './components/RangeRatioSelect'; import { useQuery } from '@tanstack/react-query'; +import { useGraphQLRequests } from '../../../hooks/useGraphQLRequests'; +import { PoolApi } from '@dodoex/api'; export default function Ve33V3AddLiquidity({ pool, @@ -46,35 +48,17 @@ export default function Ve33V3AddLiquidity({ const theme = useTheme(); const { isMobile } = useWidgetDevice(); + const graphQLRequests = useGraphQLRequests(); const fetchTicksQuery = useQuery({ - queryKey: ['test'], - queryFn: () => { - return new Promise((resolve) => { - setTimeout(() => { - resolve([ - { - id: '0x37afbad94db04a96f9fbe86cb4048664941f6233#-887270', - poolAddress: '0x2f63a87bf42dc4c021af8be085cece16269e3b67', - tickIdx: '-887270', - liquidityNet: '6049724999999999999', - price0: '0.99980002999600049994000699920009', - price1: '1.00020001', - }, - { - id: '0x37afbad94db04a96f9fbe86cb4048664941f6233#887270', - poolAddress: '0x2f63a87bf42dc4c021af8be085cece16269e3b67', - tickIdx: '887270', - liquidityNet: '-6049724999999999999', - price0: '1.00020001', - price1: '0.99980002999600049994000699920009', - }, - ]); - }, 1000); - }); - }, + ...graphQLRequests.getQuery(PoolApi.graphql.fetchVe33TicksData, { + where: { + pool: pool?.id ?? '', + }, + }), + enabled: !!pool?.id, }); const fetchTicks = { - ticks: fetchTicksQuery.data, + ticks: fetchTicksQuery.data?.ve33_getTicksData?.ticks ?? [], ...fetchTicksQuery, }; @@ -107,8 +91,6 @@ export default function Ve33V3AddLiquidity({ const tokenA = sorted ? token0 : token1; const tokenB = sorted ? token1 : token0; - let liquidity: number | undefined; - const { ticksAtLimit, priceLower, @@ -117,6 +99,7 @@ export default function Ve33V3AddLiquidity({ outOfRange, tickLower, tickUpper, + tickSpaceLimits, getDecrementLower, getIncrementLower, getDecrementUpper, @@ -206,7 +189,7 @@ export default function Ve33V3AddLiquidity({ token0, token1, tickCurrent, - liquidity, + liquidity: pair.fetchLiquidity?.data?.toString(), fetchTicks, }); @@ -217,6 +200,10 @@ export default function Ve33V3AddLiquidity({ !amounts.quoteAmount || !!isInvalidPair; + const totalApr = pool + ? BigInt(pool.apr.fees) + BigInt(pool.apr.incentives) + : undefined; + return ( <> @@ -298,7 +285,19 @@ export default function Ve33V3AddLiquidity({ - + {options.map((item) => { - // @TODO: replace this - const active = item.ratio === '(∞)'; + const { active, borderRadius, type, ratio, apr } = item; return ( - {item.type} + {type} - {item.ratio} + {ratio} APR - {' ' + item.apr} + {' ' + apr} ); diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/ReviewModal.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/ReviewModal.tsx index ecd553db..d14c608b 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/ReviewModal.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/ReviewModal.tsx @@ -12,7 +12,7 @@ export interface ReviewModalProps { loading?: boolean; token0: TokenInfo | undefined; token1: TokenInfo | undefined; - liquidity: number | undefined; + liquidity: number | string | undefined; amount0: string | undefined; amount1: string | undefined; title?: React.ReactNode; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/usePoolActiveLiquidityChartData.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/usePoolActiveLiquidityChartData.ts index e818bb1f..8db2e1e1 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/usePoolActiveLiquidityChartData.ts +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/usePoolActiveLiquidityChartData.ts @@ -43,7 +43,7 @@ export function usePoolActiveLiquidityChartData({ token1, }: { tickCurrent: number | undefined; - liquidity: number | undefined; + liquidity: string | undefined; fetchTicks?: FetchTicks; token0: TokenInfo | undefined; token1: TokenInfo | undefined; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/usePriceRangeRatioSelect.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/usePriceRangeRatioSelect.ts new file mode 100644 index 00000000..eefd3f27 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/usePriceRangeRatioSelect.ts @@ -0,0 +1,182 @@ +import { t } from '@lingui/macro'; +import { Price } from '../../../../utils/fractions'; +import { useTheme } from '@dodoex/components'; +import BigNumber from 'bignumber.js'; +import { TickMath } from '../utils/tickMath'; +import { TokenInfo } from '../../../../hooks/Token'; +import { tryParseTick } from '../utils/tryParseTick'; +import { Bound } from '../types'; +import { tickToPrice } from '../utils/getTickToPrice'; + +export interface PriceRangeRatioSelectProps { + totalApr: bigint | undefined; + currentPrice?: string; + tickSpacing?: number; + priceLower: Price | undefined; + priceUpper: Price | undefined; + token0: TokenInfo | undefined; + token1: TokenInfo | undefined; + tickSpaceLimits: { [bound in Bound]?: number | undefined }; + onLeftRangeInput: (typedValue: string) => void; + onRightRangeInput: (typedValue: string) => void; + handleSetFullRange: () => void; +} +export function usePriceRangeRatioSelect({ + totalApr, + currentPrice, + tickSpacing, + priceLower, + priceUpper, + token0, + token1, + tickSpaceLimits, + onLeftRangeInput, + onRightRangeInput, + handleSetFullRange, +}: PriceRangeRatioSelectProps) { + const theme = useTheme(); + const currentPriceBg = currentPrice ? new BigNumber(currentPrice) : undefined; + + const ratioOptions = [ + { type: t`Narrow`, ratio: 0.03 }, + { type: t`Common`, ratio: 0.08 }, + { type: t`Wide`, ratio: 0.15 }, + { type: t`Full`, ratio: 1 }, + ]; + + const options = ratioOptions.map(({ type, ratio }, index) => { + const borderRadius = theme.spacing( + index === 0 ? 8 : 0, + index === 1 ? 8 : 0, + index === 3 ? 8 : 0, + index === 2 ? 8 : 0, + ); + + const { low, high, ratioText, active, apr } = getPriceRanger({ + price: currentPriceBg, + priceLower, + priceUpper, + totalApr, + tickSpacing, + ratio, + token0, + token1, + tickSpaceLimits, + }); + + return { + type, + ratio: ratioText, + apr, + borderRadius, + active, + onClick: () => { + if (ratio === 1) { + handleSetFullRange(); + return; + } + onLeftRangeInput(low?.toString() ?? ''); + onRightRangeInput(high?.toString() ?? ''); + }, + }; + }); + + return { options }; +} + +function getPriceRanger({ + totalApr, + price, + priceLower, + priceUpper, + tickSpacing, + token0, + token1, + ratio, + tickSpaceLimits, +}: { + totalApr: bigint | undefined; + price: BigNumber | undefined; + priceLower: Price | undefined; + priceUpper: Price | undefined; + tickSpacing: number | undefined; + token0: TokenInfo | undefined; + token1: TokenInfo | undefined; + ratio: number; + tickSpaceLimits: { [bound in Bound]?: number | undefined }; +}) { + if (!token0 || !token1 || !tickSpacing || !price) { + return { + low: undefined, + high: undefined, + ratioText: '', + active: false, + apr: '', + }; + } + let newTickLower: number | undefined; + let newTickUpper: number | undefined; + let low: BigNumber | undefined; + let high: BigNumber | undefined; + if (ratio === 1) { + newTickLower = tickSpaceLimits[Bound.LOWER]; + newTickUpper = tickSpaceLimits[Bound.UPPER]; + } else { + low = price?.times(1 - ratio); + high = price?.times(1 + ratio); + newTickLower = tryParseTick(token0, token1, low.toString(), tickSpacing); + newTickUpper = tryParseTick(token0, token1, high.toString(), tickSpacing); + } + const apr = calculateLpApr(totalApr, tickSpacing, newTickLower, newTickUpper); + const newPriceLower = + newTickLower !== undefined + ? tickToPrice(token0, token1, newTickLower) + : undefined; + const newPriceUpper = + newTickUpper !== undefined + ? tickToPrice(token0, token1, newTickUpper) + : undefined; + + const active = Boolean( + priceLower && + priceUpper && + newPriceLower?.equalTo(priceLower) && + newPriceUpper?.equalTo(priceUpper), + ); + const ratioText = ratio === 1 ? '(∞)' : `(±${ratio * 100}%)`; + + return { + low, + high, + ratioText, + active, + apr: apr ? `${apr.toString()}%` : '0%', + }; +} + +const MAX_TICK_BIGINT = BigInt(TickMath.MAX_TICK * 2); +function calculateLpApr( + totalApr: bigint | undefined, + tickSpacing: number, + positionTickLower: number | undefined, + positionTickUpper: number | undefined, +) { + if (tickSpacing < 1) return totalApr; + + if ( + positionTickLower === positionTickUpper || + !totalApr || + !positionTickLower || + !positionTickUpper + ) { + return BigInt(0); + } + + // Calculate the tick number covered by the position + const coveredTicks = Math.round( + (positionTickUpper - positionTickLower) / tickSpacing, + ); + + if (coveredTicks < 1) return BigInt(0); + return (totalApr * MAX_TICK_BIGINT) / BigInt(coveredTicks) / MAX_TICK_BIGINT; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useSetRange.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useSetRange.ts index db3f975d..d5b49474 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useSetRange.ts +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useSetRange.ts @@ -268,11 +268,11 @@ export function useSetRange({ const handleRateToggle = () => { if (!ticksAtLimit[Bound.LOWER] && !ticksAtLimit[Bound.UPPER]) { setLeftRangeTypedValue( - (invertPrice ? priceLower : priceLower?.invert())?.toSignificant(6) ?? + (invertPrice ? priceLower : priceUpper?.invert())?.toSignificant(6) ?? '', ); setRightRangeTypedValue( - (invertPrice ? priceUpper : priceUpper?.invert())?.toSignificant(6) ?? + (invertPrice ? priceUpper : priceLower?.invert())?.toSignificant(6) ?? '', ); } @@ -295,6 +295,7 @@ export function useSetRange({ ); return { + tickSpaceLimits, ticksAtLimit, tickLower, tickUpper, diff --git a/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/TableList.tsx b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/TableList.tsx index 78751179..548a1f8d 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/TableList.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/TableList.tsx @@ -199,8 +199,8 @@ export const TableList = ({ fill="none" > diff --git a/packages/dodoex-widgets/src/widgets/ve33/components/PoolHead.tsx b/packages/dodoex-widgets/src/widgets/ve33/components/PoolHead.tsx index 027aaf6f..a50737fb 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/components/PoolHead.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/components/PoolHead.tsx @@ -22,7 +22,7 @@ export const PoolHead = ({ const isSmall = size === 'small'; const tokenLogoWidth = isSmall ? 28 : 36; - const typography = isSmall ? 'body1' : 'h3'; + const typography = isSmall ? 'body1' : 'h4'; return ( From d56fec02d087e657c7b7ac92eef4fbed8edf7be1 Mon Sep 17 00:00:00 2001 From: JunJie Date: Fri, 29 Aug 2025 11:21:54 +0800 Subject: [PATCH 17/18] feat: add lock --- .../doc/src/stories/widgets/Pool.stories.tsx | 4 +- .../src/stories/widgets/Ve33Lock.stories.tsx | 66 ++ .../widgets/Ve33PoolDetail.stories.tsx | 3 +- packages/dodoex-api/src/gql/gql.ts | 8 + packages/dodoex-api/src/gql/graphql.ts | 297 +++++- .../src/services/pool/graphqlQuery.ts | 12 + .../src/Loading/LoadingSkeleton.tsx | 2 + .../dodoex-components/src/Slider/index.tsx | 37 +- .../dodoex-components/src/Switch/index.tsx | 17 +- .../dodoex-components/src/Tooltip/Tooltip.tsx | 4 +- packages/dodoex-widgets/package.json | 5 +- .../src/components/Swap/components/Dialog.tsx | 15 +- .../Swap/components/TokenCard/TokenLpCard.tsx | 283 ++++++ .../Swap/components/TokenCard/index.tsx | 3 +- .../src/components/TokenStatusButton.tsx | 8 +- .../src/hooks/Submission/types.ts | 18 + packages/dodoex-widgets/src/index.tsx | 2 + .../widgets/ve33/Ve33LockList/CardList.tsx | 358 +++++++ .../ve33/Ve33LockList/ClaimLockDialog.tsx | 125 +++ .../ve33/Ve33LockList/LockManageDialog.tsx | 604 ++++++++++++ .../widgets/ve33/Ve33LockList/MergeDialog.tsx | 359 +++++++ .../widgets/ve33/Ve33LockList/TableList.tsx | 334 +++++++ .../ve33/Ve33LockList/hooks/useClaimBribes.ts | 69 ++ .../Ve33LockList/hooks/useClaimRebases.ts | 61 ++ .../ve33/Ve33LockList/hooks/useExtendLock.ts | 76 ++ .../Ve33LockList/hooks/useFetchUserLocks.ts | 100 ++ .../Ve33LockList/hooks/useIncreaseLock.ts | 67 ++ .../ve33/Ve33LockList/hooks/useMergeLock.ts | 65 ++ .../Ve33LockList/hooks/useTransferLock.ts | 73 ++ .../src/widgets/ve33/Ve33LockList/index.tsx | 142 +++ .../Ve33LockOperate/hooks/useCreateLock.ts | 72 ++ .../hooks/useFetchUserTotalVeNFT.ts | 40 + .../widgets/ve33/Ve33LockOperate/index.tsx | 285 ++++++ .../src/widgets/ve33/Ve33LockOperate/utils.ts | 71 ++ .../widgets/ve33/Ve33PoolDetail/MyAssets.tsx | 562 +++++++++++ .../ve33/Ve33PoolDetail/MyPosition.tsx | 896 ++++++++++++++++++ .../widgets/ve33/Ve33PoolDetail/PoolInfo.tsx | 299 +++++- .../src/widgets/ve33/Ve33PoolDetail/index.tsx | 90 +- .../ve33/Ve33PoolDetail/useVe33V3Positions.ts | 171 ++++ .../src/widgets/ve33/Ve33StakeDialog.tsx | 800 ++++++++++++++++ .../components/SliderPercentageCard.tsx | 59 +- .../hooks/useVe33V2BalanceInfo.ts | 7 +- .../widgets/ve33/Ve33V2PoolOperate/index.tsx | 5 + .../Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx | 3 + .../components/PositionManage.tsx | 690 ++++++++++++++ .../components/RangeRatioSelect.tsx | 4 +- .../components/RemoveButton.tsx | 4 +- .../hooks/useAddVe33V3Liquidity.ts | 4 +- .../hooks/useRemoveVe33V3Liquidity.ts | 110 +++ .../hooks/useVe33PoolPositions.ts | 27 - .../utils/getPositionAmount.ts | 12 +- .../widgets/ve33/components/LockSlider.tsx | 36 + .../src/widgets/ve33/components/PoolHead.tsx | 13 +- .../src/widgets/ve33/components/widgets.tsx | 2 +- .../src/widgets/ve33/hooks/usePoolColors.ts | 10 +- .../ve33/hooks/useVe33PositionAmounts.ts | 100 ++ .../ve33/hooks/useVe33V2ClaimEmissions.ts | 57 ++ .../ve33/hooks/useVe33V2ClaimTradingFees.ts | 58 ++ .../src/widgets/ve33/hooks/useVe33V2Stake.ts | 54 ++ .../widgets/ve33/hooks/useVe33V2UnStake.ts | 54 ++ .../ve33/hooks/useVe33V3ClaimEmissions.ts | 57 ++ .../ve33/hooks/useVe33V3ClaimTradingFees.ts | 76 ++ .../src/widgets/ve33/hooks/useVe33V3Stake.ts | 57 ++ .../ve33/hooks/useVe33V3StakeApproveStatus.ts | 94 ++ .../widgets/ve33/hooks/useVe33V3UnStake.ts | 57 ++ yarn.lock | 8 +- 66 files changed, 8029 insertions(+), 132 deletions(-) create mode 100644 packages/doc/src/stories/widgets/Ve33Lock.stories.tsx create mode 100644 packages/dodoex-widgets/src/components/Swap/components/TokenCard/TokenLpCard.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/CardList.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/ClaimLockDialog.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/LockManageDialog.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/MergeDialog.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/TableList.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useClaimBribes.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useClaimRebases.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useExtendLock.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useFetchUserLocks.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useIncreaseLock.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useMergeLock.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useTransferLock.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/index.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/hooks/useCreateLock.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/hooks/useFetchUserTotalVeNFT.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/index.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/utils.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/useVe33V3Positions.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33StakeDialog.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useRemoveVe33V3Liquidity.ts delete mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33PoolPositions.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/components/LockSlider.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33PositionAmounts.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2ClaimEmissions.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2ClaimTradingFees.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2Stake.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2UnStake.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3ClaimEmissions.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3ClaimTradingFees.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3Stake.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3StakeApproveStatus.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3UnStake.ts diff --git a/packages/doc/src/stories/widgets/Pool.stories.tsx b/packages/doc/src/stories/widgets/Pool.stories.tsx index cfc2b052..7f479236 100644 --- a/packages/doc/src/stories/widgets/Pool.stories.tsx +++ b/packages/doc/src/stories/widgets/Pool.stories.tsx @@ -1,4 +1,4 @@ -import { SwapWidgetApi } from '@dodoex/api'; +import { ChainId, SwapWidgetApi } from '@dodoex/api'; import { PoolWidget, SwapWidgetProps } from '@dodoex/widgets'; import React from 'react'; @@ -62,5 +62,5 @@ Primary.args = { routerPage: undefined, supportAMMV2: true, supportAMMV3: true, - onlyChainId: 2810, + onlyChainId: ChainId.PHAROS_TESTNET, }; diff --git a/packages/doc/src/stories/widgets/Ve33Lock.stories.tsx b/packages/doc/src/stories/widgets/Ve33Lock.stories.tsx new file mode 100644 index 00000000..c79ffee2 --- /dev/null +++ b/packages/doc/src/stories/widgets/Ve33Lock.stories.tsx @@ -0,0 +1,66 @@ +import { ChainId } from '@dodoex/api'; +import { Box } from '@dodoex/components'; +import { + Ve33LockOperate, + Ve33LockList, + Widget, + WidgetProps, +} from '@dodoex/widgets'; + +export default { + title: 'Widgets/Ve33Lock', + component: 'div', +}; + +export const Primary = (props: WidgetProps) => { + const { apikey, ...other } = props; + + return ( + { + window.alert('onClickGoBack'); + }} + > + + + + + + ); +}; + +Primary.args = { + projectId: 'project2', + apikey: 'ee53d6b75b12aceed4', + apiDomain: process.env.STORYBOOK_API_DOMAIN, + width: '100%', + height: '100%', + routerPage: undefined, + onlyChainId: ChainId.MORPH_HOLESKY_TESTNET, + noUI: true, +}; diff --git a/packages/doc/src/stories/widgets/Ve33PoolDetail.stories.tsx b/packages/doc/src/stories/widgets/Ve33PoolDetail.stories.tsx index a9b747d7..4252b568 100644 --- a/packages/doc/src/stories/widgets/Ve33PoolDetail.stories.tsx +++ b/packages/doc/src/stories/widgets/Ve33PoolDetail.stories.tsx @@ -29,7 +29,8 @@ export const Primary = (props: WidgetProps) => { ]} {...other} apikey={apikey} - id="0x98ecc0d3f774a7bda38918bf5830a476dd5a606c" + id="0x2f63a87bf42dc4c021af8be085cece16269e3b67" + // id="0x98ecc0d3f774a7bda38918bf5830a476dd5a606c" chainId={ChainId.MORPH_HOLESKY_TESTNET} onClickGoBack={() => { window.alert('onClickGoBack'); diff --git a/packages/dodoex-api/src/gql/gql.ts b/packages/dodoex-api/src/gql/gql.ts index 7c11cfdd..4f20b32c 100644 --- a/packages/dodoex-api/src/gql/gql.ts +++ b/packages/dodoex-api/src/gql/gql.ts @@ -54,6 +54,8 @@ const documents = { types.Ve33_GetVotePoolListDocument, '\n query Ve33_getTicksData($where: Ve33getTicksDataInput) {\n ve33_getTicksData(where: $where) {\n ticks {\n id\n poolAddress\n tickIdx\n price0\n price1\n liquidityGross\n liquidityNet\n protocolPosition\n tickArrayLower\n tickArrayUpper\n }\n }\n }\n ': types.Ve33_GetTicksDataDocument, + '\n query Ve33_getUserLock($where: Ve33UserInput!) {\n ve33_getUserLock(where: $where) {\n id\n value\n votingPower\n lockedEnd\n isPermanent\n isVoted\n }\n }\n ': + types.Ve33_GetUserLockDocument, '\n query FetchUserSwapOrderHistories($where: User_swapswapFilter) {\n user_swap_orderHistories(where: $where) {\n count\n page\n list {\n chainId\n createdAt\n fromAmount\n fromTokenDecimals\n fromTokenPrice\n fromTokenSymbol\n fromTokenAddress\n fromTokenLogoImg\n hash\n status\n toAmount\n toTokenDecimals\n toTokenPrice\n toTokenSymbol\n toTokenAddress\n toTokenLogoImg\n minAmount\n nonce\n extra\n user\n }\n }\n }\n ': types.FetchUserSwapOrderHistoriesDocument, '\n query FetchNoticeCenterTransactionList(\n $where: Notice_centertransactionListFilter\n ) {\n notice_center_transactionList(where: $where) {\n list {\n chainId\n createTime\n extend\n from\n id\n key\n type\n }\n count\n limit\n page\n }\n }\n ': @@ -190,6 +192,12 @@ export function graphql( export function graphql( source: '\n query Ve33_getTicksData($where: Ve33getTicksDataInput) {\n ve33_getTicksData(where: $where) {\n ticks {\n id\n poolAddress\n tickIdx\n price0\n price1\n liquidityGross\n liquidityNet\n protocolPosition\n tickArrayLower\n tickArrayUpper\n }\n }\n }\n ', ): typeof import('./graphql').Ve33_GetTicksDataDocument; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql( + source: '\n query Ve33_getUserLock($where: Ve33UserInput!) {\n ve33_getUserLock(where: $where) {\n id\n value\n votingPower\n lockedEnd\n isPermanent\n isVoted\n }\n }\n ', +): typeof import('./graphql').Ve33_GetUserLockDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/packages/dodoex-api/src/gql/graphql.ts b/packages/dodoex-api/src/gql/graphql.ts index d5beb249..59a650b7 100644 --- a/packages/dodoex-api/src/gql/graphql.ts +++ b/packages/dodoex-api/src/gql/graphql.ts @@ -34,8 +34,8 @@ export type Scalars = { BigNumber: { input: any; output: any }; /** Bytes custom scalar type */ Bytes: { input: any; output: any }; + Curve_stableswap_ngBytes: { input: any; output: any }; Dodochain_earnBytes: { input: any; output: any }; - /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */ JSON: { input: any; output: any }; LiquidityBytes: { input: any; output: any }; }; @@ -2144,6 +2144,11 @@ export type Cross_Chain_Swap_ZetachainorderListData = { user?: InputMaybe; }; +export type Cross_Chain_Swap_ZetachainorderRefundClaimedData = { + externalId?: InputMaybe; + hash?: InputMaybe; +}; + export type Cross_Chain_Swap_ZetachainrouteParams = { fromAddress?: InputMaybe; fromAmount?: InputMaybe; @@ -2402,6 +2407,34 @@ export type Cross_Chain_TransferErc20V2List = { tokenlists?: Maybe>>; }; +export type Cross_Chain_TransferExplorerAllSections = { + lastUpdated: Scalars['String']['output']; + sections: Array; +}; + +export type Cross_Chain_TransferExplorerProject = { + estimatedDate?: Maybe; + id: Scalars['Int']['output']; + launchDate?: Maybe; + projectLogo?: Maybe; + projectName: Scalars['String']['output']; + sections: Array; + sortOrder: Scalars['Int']['output']; + supportedChains?: Maybe>; + tags?: Maybe>; + tgeDate?: Maybe; + totalRaised?: Maybe; + twitterUrl?: Maybe; + websiteUrl?: Maybe; +}; + +export type Cross_Chain_TransferExplorerSectionProjects = { + projects: Array; + section: Scalars['String']['output']; + sectionName: Scalars['String']['output']; + total: Scalars['Int']['output']; +}; + export type Cross_Chain_TransferFuncLabelV2 = { key?: Maybe; name?: Maybe; @@ -2414,6 +2447,10 @@ export type Cross_Chain_TransferOrderDetailFilter = { export type Cross_Chain_TransferOrderListFilter = { chainId?: InputMaybe; + destChainId?: InputMaybe; + maxAmount?: InputMaybe; + minAmount?: InputMaybe; + origChainId?: InputMaybe; page?: InputMaybe; pageSize?: InputMaybe; status?: InputMaybe; @@ -2470,6 +2507,11 @@ export type Cross_Chain_TransferQuoteResponseTransactionDataDto = { value: Scalars['String']['output']; }; +export type Cross_Chain_TransferSupportedChain = { + chainId: Scalars['Int']['output']; + chainName: Scalars['String']['output']; +}; + export type Cross_Chain_TransferTokenListV2 = { chainId?: Maybe; name?: Maybe; @@ -2504,11 +2546,13 @@ export type Cross_Chain_Zetachain_TokenCrossChainTokenlist = { name?: Maybe; position?: Maybe; slippage?: Maybe; + supportTargetChain?: Maybe; symbol?: Maybe; }; export type Cross_Chain_Zetachain_TokentokenlistFilter = { chainId?: InputMaybe; + pageSize?: InputMaybe; refreshNow?: InputMaybe; }; @@ -3383,6 +3427,142 @@ export type Crowd_Poolinglist_Filter = { top?: InputMaybe; }; +export type Curve_Stableswap_NgFilterState = { + poolAddress?: InputMaybe; + poolName?: InputMaybe; + tokenAddress?: InputMaybe; +}; + +export type Curve_Stableswap_NgLp = { + id?: Maybe; + liquidityTokenBalance?: Maybe; + lpTokens?: Maybe>>; +}; + +export type Curve_Stableswap_NgLiquidityHistory = { + action: Scalars['String']['output']; + assets?: Maybe>; + id: Scalars['ID']['output']; + time: Scalars['BigInt']['output']; + user: Scalars['String']['output']; +}; + +export type Curve_Stableswap_NgLiquidityHistoryAsset = { + amount: Scalars['BigDecimal']['output']; + token: Curve_Stableswap_NgToken; +}; + +export type Curve_Stableswap_NgLiquidityHistoryListInfo = { + currentPage?: Maybe; + liquidityHistories?: Maybe>; + pageSize?: Maybe; + totalCount?: Maybe; +}; + +export type Curve_Stableswap_NgListInfo = { + chainId?: Maybe; + currentPage?: Maybe; + lqList?: Maybe>>; + pageSize?: Maybe; + totalCount?: Maybe; + user?: Maybe; +}; + +export type Curve_Stableswap_NgLqList = { + id?: Maybe; + isMyLiquidity?: Maybe; + liquidityPositions?: Maybe>>; + pool?: Maybe; +}; + +export type Curve_Stableswap_NgOrder = { + /** updatedAt tvl apy liquidity */ + orderBy?: InputMaybe; + /** desc asc' */ + orderDirection?: InputMaybe; +}; + +export type Curve_Stableswap_NgPool = { + a: Scalars['BigInt']['output']; + address: Scalars['String']['output']; + apy: Scalars['BigDecimal']['output']; + coins: Array; + dailyVolumeUsd: Scalars['BigDecimal']['output']; + daoFee: Scalars['BigDecimal']['output']; + decimals: Scalars['Int']['output']; + fee: Scalars['BigDecimal']['output']; + fees: Scalars['BigDecimal']['output']; + id: Scalars['ID']['output']; + liquidityUtilization: Scalars['BigDecimal']['output']; + name: Scalars['String']['output']; + offpegFeeMultiplier: Scalars['BigInt']['output']; + poolType: Scalars['String']['output']; + reserves?: Maybe>>; + symbol: Scalars['String']['output']; + totalSupply: Scalars['BigDecimal']['output']; + traderCount: Scalars['BigInt']['output']; + tvl: Scalars['BigDecimal']['output']; + virtualPrice: Scalars['BigDecimal']['output']; + volume: Scalars['BigDecimal']['output']; +}; + +export type Curve_Stableswap_NgPoolReserve = { + amount: Scalars['BigDecimal']['output']; + ratio: Scalars['BigDecimal']['output']; + token: Curve_Stableswap_NgToken; +}; + +export type Curve_Stableswap_NgSwap = { + id: Scalars['ID']['output']; + paidAmount: Scalars['BigDecimal']['output']; + paidToken: Curve_Stableswap_NgToken; + receivedAmount: Scalars['BigDecimal']['output']; + receivedToken: Curve_Stableswap_NgToken; + time: Scalars['BigInt']['output']; + user: Scalars['String']['output']; +}; + +export type Curve_Stableswap_NgSwapListInfo = { + currentPage?: Maybe; + pageSize?: Maybe; + swaps?: Maybe>; + totalCount?: Maybe; +}; + +export type Curve_Stableswap_NgToken = { + address: Scalars['String']['output']; + decimals: Scalars['Int']['output']; + id: Scalars['ID']['output']; + /** token logo img */ + logoImg?: Maybe; + name: Scalars['String']['output']; + symbol: Scalars['String']['output']; + tokenIndex?: Maybe; +}; + +export type Curve_Stableswap_NgUserToken = { + address: Scalars['String']['output']; + amount: Scalars['BigDecimal']['output']; + decimals: Scalars['Int']['output']; + id: Scalars['ID']['output']; + name: Scalars['String']['output']; + symbol: Scalars['String']['output']; +}; + +export type Curve_Stableswap_Nglist_Filter = { + chainId?: InputMaybe; + currentPage?: InputMaybe; + filterState?: InputMaybe; + order?: InputMaybe; + pageSize?: InputMaybe; + user?: InputMaybe; +}; + +export type Curve_Stableswap_Ngpool_Info_Filter = { + chainId: Scalars['Int']['input']; + poolAddress: Scalars['String']['input']; +}; + export type D3mmAsset = { lpToken: D3mmToken; token: D3mmToken; @@ -9111,6 +9291,22 @@ export type MintHistory_OrderBy = | 'timestamp' | 'user'; +export type Native_SignerdepositData = { + amount?: InputMaybe; + token?: InputMaybe; + user?: InputMaybe; +}; + +export type Native_SignerredeemData = { + sharesToBurn?: InputMaybe; + token?: InputMaybe; + user?: InputMaybe; +}; + +export type Native_SignersignatureResult = { + transaction?: Maybe; +}; + export type Nft = { chain: Scalars['String']['output']; id: Scalars['ID']['output']; @@ -12620,11 +12816,13 @@ export type Query = { cross_chain_swap_zetachain_orderCreate?: Maybe; cross_chain_swap_zetachain_orderDetail?: Maybe; cross_chain_swap_zetachain_orderList?: Maybe; + cross_chain_swap_zetachain_orderRefundClaimed?: Maybe; cross_chain_swap_zetachain_routes?: Maybe; cross_chain_swap_zetachain_swapOrderList?: Maybe; cross_chain_swap_zetachain_transactionEncode?: Maybe; cross_chain_token_list?: Maybe; cross_chain_token_tokenPair?: Maybe; + cross_chain_transfer_getExplorerAllSections: Cross_Chain_TransferExplorerAllSections; cross_chain_transfer_getOrderDetail?: Maybe; cross_chain_transfer_getOrderList: Cross_Chain_TransferCrossChainOrderList; cross_chain_transfer_getTokenList?: Maybe< @@ -12656,6 +12854,16 @@ export type Query = { crowd_pooling_voteList?: Maybe< Array> >; + /** 获取所有池子列表 */ + curve_stableswap_ng_getAllPools?: Maybe; + /** 获取我的流动性列表 */ + curve_stableswap_ng_getMyLiquidity?: Maybe; + /** 获取池子详情信息 */ + curve_stableswap_ng_getPoolInfo?: Maybe; + /** 获取池子流动性操作历史列表 */ + curve_stableswap_ng_getPoolLiquidityHistory?: Maybe; + /** 获取池子交易信息列表 */ + curve_stableswap_ng_getPoolSwapInfo?: Maybe; /** 资产每日收益折线图 */ d3mm_getAssetDailyInterests: Array>; /** 资产详情信息, 如果资产不存在则返回null */ @@ -12874,6 +13082,8 @@ export type Query = { mining_list?: Maybe; mintHistories: Array; mintHistory?: Maybe; + native_signer_deposit?: Maybe; + native_signer_redeem?: Maybe; nft?: Maybe; nftCollateralVault?: Maybe; nftCollateralVaults: Array; @@ -12975,6 +13185,9 @@ export type Query = { swap?: Maybe; swaps: Array; third_party_token_list?: Maybe>>; + third_party_token_zetachain_list?: Maybe< + Array> + >; tick?: Maybe; ticks: Array; token?: Maybe; @@ -13470,6 +13683,10 @@ export type QueryCross_Chain_Swap_Zetachain_OrderListArgs = { where?: InputMaybe; }; +export type QueryCross_Chain_Swap_Zetachain_OrderRefundClaimedArgs = { + data?: InputMaybe; +}; + export type QueryCross_Chain_Swap_Zetachain_RoutesArgs = { where?: InputMaybe; }; @@ -13591,6 +13808,26 @@ export type QueryCrowd_Pooling_VoteListArgs = { where?: InputMaybe; }; +export type QueryCurve_Stableswap_Ng_GetAllPoolsArgs = { + where?: InputMaybe; +}; + +export type QueryCurve_Stableswap_Ng_GetMyLiquidityArgs = { + where?: InputMaybe; +}; + +export type QueryCurve_Stableswap_Ng_GetPoolInfoArgs = { + where?: InputMaybe; +}; + +export type QueryCurve_Stableswap_Ng_GetPoolLiquidityHistoryArgs = { + where?: InputMaybe; +}; + +export type QueryCurve_Stableswap_Ng_GetPoolSwapInfoArgs = { + where?: InputMaybe; +}; + export type QueryD3mm_GetAssetDailyInterestsArgs = { where?: InputMaybe; }; @@ -14373,6 +14610,14 @@ export type QueryMintHistoryArgs = { where?: InputMaybe; }; +export type QueryNative_Signer_DepositArgs = { + data?: InputMaybe; +}; + +export type QueryNative_Signer_RedeemArgs = { + data?: InputMaybe; +}; + export type QueryNftArgs = { block?: InputMaybe; id: Scalars['ID']['input']; @@ -14879,6 +15124,10 @@ export type QueryThird_Party_Token_ListArgs = { data?: InputMaybe; }; +export type QueryThird_Party_Token_Zetachain_ListArgs = { + data?: InputMaybe; +}; + export type QueryTickArgs = { block?: InputMaybe; id: Scalars['ID']['input']; @@ -17120,6 +17369,22 @@ export type Third_Party_TokenList = { symbol?: Maybe; }; +export type Third_Party_Token_ZetachainList = { + address?: Maybe; + chainId?: Maybe; + decimals?: Maybe; + from?: Maybe; + id?: Maybe; + logoURI?: Maybe; + name?: Maybe; + symbol?: Maybe; +}; + +export type Third_Party_Token_ZetachainlistData = { + chainId?: InputMaybe; + fromNames?: InputMaybe>>; +}; + export type Third_Party_TokenlistData = { chainId?: InputMaybe; fromNames?: InputMaybe>>; @@ -22219,6 +22484,21 @@ export type Ve33_GetTicksDataQuery = { }; }; +export type Ve33_GetUserLockQueryVariables = Exact<{ + where: Ve33UserInput; +}>; + +export type Ve33_GetUserLockQuery = { + ve33_getUserLock: Array<{ + id: string; + value: any; + votingPower: any; + lockedEnd: any; + isPermanent: boolean; + isVoted: boolean; + } | null>; +}; + export type FetchUserSwapOrderHistoriesQueryVariables = Exact<{ where?: InputMaybe; }>; @@ -23283,6 +23563,21 @@ export const Ve33_GetTicksDataDocument = new TypedDocumentString(` Ve33_GetTicksDataQuery, Ve33_GetTicksDataQueryVariables >; +export const Ve33_GetUserLockDocument = new TypedDocumentString(` + query Ve33_getUserLock($where: Ve33UserInput!) { + ve33_getUserLock(where: $where) { + id + value + votingPower + lockedEnd + isPermanent + isVoted + } +} + `) as unknown as TypedDocumentString< + Ve33_GetUserLockQuery, + Ve33_GetUserLockQueryVariables +>; export const FetchUserSwapOrderHistoriesDocument = new TypedDocumentString(` query FetchUserSwapOrderHistories($where: User_swapswapFilter) { user_swap_orderHistories(where: $where) { diff --git a/packages/dodoex-api/src/services/pool/graphqlQuery.ts b/packages/dodoex-api/src/services/pool/graphqlQuery.ts index fe695877..808b88cb 100644 --- a/packages/dodoex-api/src/services/pool/graphqlQuery.ts +++ b/packages/dodoex-api/src/services/pool/graphqlQuery.ts @@ -621,4 +621,16 @@ export const poolGraphqlQuery = { } } `), + fetchVe33UserLocks: graphql(` + query Ve33_getUserLock($where: Ve33UserInput!) { + ve33_getUserLock(where: $where) { + id + value + votingPower + lockedEnd + isPermanent + isVoted + } + } + `), }; diff --git a/packages/dodoex-components/src/Loading/LoadingSkeleton.tsx b/packages/dodoex-components/src/Loading/LoadingSkeleton.tsx index 9c72d740..af6dc225 100644 --- a/packages/dodoex-components/src/Loading/LoadingSkeleton.tsx +++ b/packages/dodoex-components/src/Loading/LoadingSkeleton.tsx @@ -18,6 +18,7 @@ const LoadingSkeleton = forwardRef( // @ts-ignore ( )} > ) { const { children, ...other } = props; + + const ownerState = (other as any)?.ownerState as SliderProps | undefined; + + if (ownerState?.tooltip) { + return ( + + + {children} + + + + + + ); + } + return ( {children} @@ -118,13 +146,16 @@ function ThumbComponent(props: React.HTMLAttributes) { ); } -export interface SliderProps extends BaseSliderProps {} -export const Slider = (other: SliderProps) => { +export interface SliderProps extends BaseSliderProps { + tooltip?: string; +} +export const Slider = ({ tooltip, ...other }: SliderProps) => { return ( ); diff --git a/packages/dodoex-components/src/Switch/index.tsx b/packages/dodoex-components/src/Switch/index.tsx index 1bee5c6e..4d92900b 100644 --- a/packages/dodoex-components/src/Switch/index.tsx +++ b/packages/dodoex-components/src/Switch/index.tsx @@ -4,7 +4,9 @@ import { Box, BoxProps } from '../Box'; type SwitchProps = { sx?: BoxProps['sx']; size?: number; + padding?: number; checked?: boolean; + disabled?: boolean; onChange?: ( evt: React.ChangeEvent, checked: boolean, @@ -12,12 +14,11 @@ type SwitchProps = { }; export const Switch = React.forwardRef( - function Switch({ sx, onChange, size: sizeProps, ...other }, ref) { - const size = sizeProps ?? 12; // 使用高度作为基准尺寸 - const thumbSize = 8; // 滑块大小固定为 8x8 - const trackWidth = 22; // 固定宽度 22px - const trackHeight = size; // 固定高度 12px - const gap = 2; // 2px 间距 + function Switch({ sx, onChange, size, padding, ...other }, ref) { + const gap = padding ?? 2; + const thumbSize = size ?? 8; + const trackHeight = thumbSize + gap + gap; + const trackWidth = trackHeight * 2; return ( ( position: 'relative', width: trackWidth, height: trackHeight, - cursor: 'pointer', + opacity: other.disabled ? 0.6 : undefined, ...sx, }} > @@ -48,7 +49,7 @@ export const Switch = React.forwardRef( width: '100%', height: '100%', opacity: 0, - cursor: 'pointer', + cursor: other.disabled ? 'default' : 'pointer', zIndex: 1, }} /> diff --git a/packages/dodoex-components/src/Tooltip/Tooltip.tsx b/packages/dodoex-components/src/Tooltip/Tooltip.tsx index a3e5e302..b3693207 100644 --- a/packages/dodoex-components/src/Tooltip/Tooltip.tsx +++ b/packages/dodoex-components/src/Tooltip/Tooltip.tsx @@ -44,6 +44,7 @@ export interface TooltipProps { leaveDelay?: number; arrow?: boolean; disabled?: boolean; + offset?: [number, number]; } export const tooltipClasses = { @@ -99,6 +100,7 @@ export default function Tooltip({ onClose, disabled, placement = 'top', + offset, ...attrs }: TooltipProps) { const theme = useTheme(); @@ -210,7 +212,7 @@ export default function Tooltip({ { name: 'offset', options: { - offset: [0, 8], + offset: offset ?? [0, 8], }, }, { diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index b3c64092..9457ddaa 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -61,7 +61,7 @@ "@dodoex/api": "3.0.4-ve33.4", "@dodoex/components": "3.0.4-ve33.3", "@dodoex/contract-request": "^1.3.0", - "@dodoex/dodo-contract-request": "1.15.0-morph-holesky.3", + "@dodoex/dodo-contract-request": "1.15.0-morph-holesky.6", "@dodoex/icons": "^2.0.2", "@emotion/react": "^11.10.0", "@emotion/styled": "^11.10.0", @@ -154,4 +154,5 @@ "ts-jest": "^29.0.1", "typescript": "^5.6.3" } -} \ No newline at end of file +} + diff --git a/packages/dodoex-widgets/src/components/Swap/components/Dialog.tsx b/packages/dodoex-widgets/src/components/Swap/components/Dialog.tsx index 262b41de..5afa6ce8 100644 --- a/packages/dodoex-widgets/src/components/Swap/components/Dialog.tsx +++ b/packages/dodoex-widgets/src/components/Swap/components/Dialog.tsx @@ -1,4 +1,4 @@ -import { Box, Modal } from '@dodoex/components'; +import { Box, BoxProps, Modal, useMediaDevices } from '@dodoex/components'; import { Error } from '@dodoex/icons'; import { createPortal } from 'react-dom'; import { useUserOptions } from '../../UserOptionsProvider'; @@ -27,6 +27,8 @@ export interface DialogProps { children: React.ReactNode; height?: number | string; testId?: string; + headerSx?: BoxProps['sx']; + pcWidth?: number | string; } function DialogBase({ @@ -39,7 +41,11 @@ function DialogBase({ children, height, testId, + headerSx, + pcWidth, }: DialogProps) { + const { isMobile } = useMediaDevices(); + return ( {title ? ( @@ -130,6 +142,7 @@ function ModalDialog({ alignItems: 'center', justifyContent: 'space-between', p: 20, + ...headerSx, }} > void; + tokenPair?: [TokenInfo | null | undefined, TokenInfo | null | undefined]; + decimals?: number; + onInputChange?: (v: string) => void; + onInputFocus?: () => void; + onInputBlur?: (v: string) => void; + showChainLogo?: boolean; + showChainName?: boolean; + overrideBalance?: BigNumber | null; + overrideBalanceLoading?: boolean; + balanceText?: React.ReactNode; + showPercentage?: boolean; + inputReadonlyTooltip?: React.ReactNode; + inputTypography?: string; + chainId?: ChainId; + hideToken?: boolean; + checkLogBalance?: BalanceData; +} + +export function TokenLpCard({ + sx, + inputSx, + amt, + tokenPair, + decimals, + readOnly, + showMaxBtn, + canClickBalance, + onMaxClick, + fiatPriceTxt, + onInputFocus, + onInputBlur, + onInputChange, + showChainLogo, + showChainName, + overrideBalance, + overrideBalanceLoading, + balanceText, + showPercentage, + inputReadonlyTooltip, + inputTypography, + chainId, + hideToken, + checkLogBalance, +}: TokenCardProps) { + const theme = useTheme(); + const balance = overrideBalance ?? null; + const { isTokenLoading } = useBalanceUpdateLoading(); + let balanceLoading = overrideBalanceLoading; + if (!balanceLoading && balance) { + if (checkLogBalance) { + balanceLoading = Object.entries(checkLogBalance).some(([key, value]) => { + return isTokenLoading(key, value); + }); + } + } + + const [percentage, setPercentage] = useState(0); + const percentageSetValue = useRef(''); + + /** After amt is changed, the percentage no matches, so clear it. */ + useEffect(() => { + if (amt !== percentageSetValue.current) { + setPercentage(0); + } + }, [amt]); + + const showInputNumber = !!onInputChange || !!inputReadonlyTooltip; + const [baseToken, quoteToken] = tokenPair ?? []; + + return ( + + + {hideToken ? ( + + ) : ( + + {!!(baseToken && quoteToken) && ( + + )} + + + {`${baseToken?.symbol ?? ''}-${quoteToken?.symbol ?? ''} LP`} + + + + )} + + { + if (onMaxClick) { + onMaxClick(v); + } else if (onInputChange) { + onInputChange(v); + } + if (percentage !== 0 && percentage !== 1) { + setPercentage(1); + percentageSetValue.current = v; + } + } + } + showMaxBtn={showMaxBtn} + canClickBalance={canClickBalance} + address="address" + decimals={decimals} + loading={balanceLoading} + /> + + + {showInputNumber && + (readOnly && inputReadonlyTooltip ? ( + + + + + + ) : ( + { + onInputChange(v); + setPercentage(0); + } + : undefined + } + readOnly={readOnly} + withClear + typography={inputTypography} + sx={{ + mt: 12, + }} + /> + ))} + + {!readOnly && showPercentage ? ( + { + if (balance) { + setPercentage(part); + if (part === 1) { + const maxValue = balance.toString(); + if (onMaxClick) { + onMaxClick(maxValue); + } else if (onInputChange) { + onInputChange(maxValue); + } + percentageSetValue.current = maxValue; + } else if (onInputChange) { + const newValue = balance + .multipliedBy(part) + .dp(decimals ?? 18) + .toString(); + onInputChange(newValue); + percentageSetValue.current = newValue; + } + } + } + : undefined + } + /> + ) : ( + '' + )} + + {/* Current Price */} + {fiatPriceTxt !== undefined ? ( + + {fiatPriceTxt} + + ) : ( + '' + )} + + ); +} diff --git a/packages/dodoex-widgets/src/components/Swap/components/TokenCard/index.tsx b/packages/dodoex-widgets/src/components/Swap/components/TokenCard/index.tsx index 8d86cb29..ee24b121 100644 --- a/packages/dodoex-widgets/src/components/Swap/components/TokenCard/index.tsx +++ b/packages/dodoex-widgets/src/components/Swap/components/TokenCard/index.tsx @@ -4,6 +4,7 @@ import { useTheme, Button, TooltipToast, + Skeleton, } from '@dodoex/components'; import { Plus } from '@dodoex/icons'; import { TokenLogoCollapse } from './TokenLogoCollapse'; @@ -202,7 +203,7 @@ export function TokenCard({ > {hideToken ? ( - ) : ( + ) : !token && !onTokenChange ? : ( ; buttonProps?: ButtonProps; }>) { if (!status.needShowTokenStatusButton && children) return <>{children}; + const { disabled, isLoading, ...buttonProps } = buttonPropsOrigin ?? {}; + if (status.insufficientBalance) { return ( + onManage(data!)} + > + + + + + + + ); +} + +function InfoItem({ + label, + children, +}: React.PropsWithChildren<{ + label: React.ReactNode; +}>) { + return ( + + + {label} + + {children} + + ); +} + +function TokenAmountValue({ + symbol, + amount, + isLoading, +}: { + symbol: string | undefined; + amount: string | undefined; + isLoading: boolean; +}) { + return ( + + + {amount} + + {` ${symbol}`} + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/ClaimLockDialog.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/ClaimLockDialog.tsx new file mode 100644 index 00000000..cb1764fe --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/ClaimLockDialog.tsx @@ -0,0 +1,125 @@ +import { Box, LoadingSkeleton, Tooltip } from '@dodoex/components'; +import Dialog from '../../../components/Dialog'; +import { t } from '@lingui/macro'; +import { Lock } from './hooks/useFetchUserLocks'; +import TokenLogo from '../../../components/TokenLogo'; +import { + getUnlockTimeText, + getUnlockTimeTextShort, +} from '../Ve33LockOperate/utils'; +import NeedConnectButton from '../../../components/ConnectWallet/NeedConnectButton'; +import { useQuery } from '@tanstack/react-query'; +import { getFetchVE33RewardsDistributorClaimableQueryOptions } from '@dodoex/dodo-contract-request'; +import { useClaimRebases } from './hooks/useClaimRebases'; +import { formatTokenAmountNumber } from '../../../utils'; +import { formatUnits } from '@dodoex/contract-request'; +import { FailedList } from '../../../components/List/FailedList'; + +export default function ClaimLockDialog({ + open, + onClose, + lock, +}: { + open: boolean; + onClose: () => void; + lock: Lock | null; +}) { + const isUnlock = !!lock && lock?.lockedEnd < Date.now(); + const title = isUnlock ? t`Claim` : t`Claim & Lock`; + const fetchRebases = useQuery( + getFetchVE33RewardsDistributorClaimableQueryOptions( + lock?.chainId, + lock?.tokenId, + ), + ); + const claimMutation = useClaimRebases({ + refetch: () => { + fetchRebases.refetch(); + onClose(); + }, + }); + + return ( + + + {fetchRebases.isError && } + + + + {lock && fetchRebases.data !== undefined + ? formatTokenAmountNumber({ + input: formatUnits(fetchRebases.data, lock?.token?.decimals), + decimals: lock.token?.decimals, + }) + : ''} + + + {lock?.token?.symbol} + + + + + {title + ' '} + {t`into Lock`} + {`#${lock?.tokenId}`} +
+ {t`until`}{' '} + {!!lock && ( + + {getUnlockTimeTextShort(lock?.lockedEnd)} + + )} +
+ + { + if (!lock) return; + claimMutation.mutate({ + tokenId: lock?.tokenId, + }); + }} + >{t`Confirm`} +
+
+ ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/LockManageDialog.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/LockManageDialog.tsx new file mode 100644 index 00000000..36aa90fc --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/LockManageDialog.tsx @@ -0,0 +1,604 @@ +import { + alpha, + Box, + Input, + LoadingSkeleton, + Switch, + TabPanel, + Tabs, + TabsButtonGroup, + Tooltip, + useTheme, +} from '@dodoex/components'; +import { t, Trans } from '@lingui/macro'; +import Dialog from '../../../components/Dialog'; +import { Lock, Point } from './hooks/useFetchUserLocks'; +import { + formatReadableNumber, + formatTokenAmountNumber, + toWei, +} from '../../../utils'; +import { + getLockDurationByPointHistory, + getLockDurationRemainder, + getUnlockTimeText, + getUnlockTimeTextShort, + getVotingPowerByPointHistory, + iMAXTIME, +} from '../Ve33LockOperate/utils'; +import React from 'react'; +import { TokenCard } from '../../../components/Swap/components/TokenCard'; +import BigNumber from 'bignumber.js'; +import { useFetchFiatPriceBatch } from '../../../hooks/useFetchFiatPriceBatch'; +import { useIncreaesLock } from './hooks/useIncreaseLock'; +import { useQuery, useQueryClient } from '@tanstack/react-query'; +import { + getFetchVE33VotingEscrowBalanceOfNFTQueryOptions, + getFetchVE33VotingEscrowUserPointEpochQueryOptions, + getFetchVE33VotingEscrowUserPointHistoryQueryOptions, +} from '@dodoex/dodo-contract-request'; +import { useExtendLock } from './hooks/useExtendLock'; +import LockSlider, { MAX_LOCK_DURATION } from '../components/LockSlider'; +import { useTransferLock } from './hooks/useTransferLock'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; +import NeedConnectButton from '../../../components/ConnectWallet/NeedConnectButton'; + +export default function LockManageDialog({ + open, + onClose, + lock: lockProps, + refetch: refetchProps, +}: { + open: boolean; + onClose: () => void; + lock?: Lock | null; + refetch?: () => void; +}) { + const [manageTab, setManageTab] = React.useState(ManageTab.Increase); + const lock = { ...lockProps } as Lock | undefined; + const fetchPointEpoch = useQuery( + getFetchVE33VotingEscrowUserPointEpochQueryOptions( + lock?.chainId, + lock?.tokenId, + ), + ); + const fetchPointHistory = useQuery( + getFetchVE33VotingEscrowUserPointHistoryQueryOptions( + lock?.chainId, + lock?.tokenId, + fetchPointEpoch.data !== undefined + ? Number(fetchPointEpoch.data) + : undefined, + ), + ); + const token = lock?.token; + if (fetchPointHistory.data && lock) { + const nowTime = Math.floor(Date.now() / 1000); + const { bias, slope, permanent } = fetchPointHistory.data; + lock.isPermanent = !!permanent; + if (!lock.isPermanent) { + const lockDuration = getLockDurationByPointHistory(bias, slope); + lock.lockedEnd = (nowTime + lockDuration.toNumber()) * 1000; + } + if (token) { + lock.votingPower = getVotingPowerByPointHistory( + fetchPointHistory.data, + nowTime, + ) + .div(10 ** token?.decimals) + .toString(); + lock.value = lock.isPermanent + ? lock.votingPower + : new BigNumber(slope.toString()) + .times(iMAXTIME) + .div(10 ** token.decimals) + .toString(); + } + } + const fetchFiatPrice = useFetchFiatPriceBatch({ + tokens: token ? [token] : [], + }); + const tokenUsd = token ? fetchFiatPrice.data?.get(token?.address) : undefined; + const tokenUsdBg = tokenUsd !== undefined ? new BigNumber(tokenUsd) : null; + + const tabs = [ + { key: ManageTab.Increase, value: t`Increase` }, + { key: ManageTab.Extend, value: t`Extend` }, + { key: ManageTab.Transfer, value: t`Transfer` }, + ]; + const queryClient = useQueryClient(); + const refetch = () => { + onClose(); + queryClient.invalidateQueries({ + queryKey: getFetchVE33VotingEscrowBalanceOfNFTQueryOptions( + lock?.chainId, + lock?.tokenId, + ).queryKey, + }); + fetchPointEpoch.refetch(); + refetchProps?.(); + }; + + return ( + {t`Lock #${lock?.tokenId ?? ''}`}
} + headerSx={{ + pb: 8, + }} + > + + +
+ {`${formatTokenAmountNumber({ input: lock?.value, decimals: lock?.token?.decimals })} ${lock?.token?.symbol} ${t`Locked Until`}`}{' '} + {lock ? ( + lock.isPermanent ? ( + `Max-Lock` + ) : ( + + {getUnlockTimeTextShort(lock?.lockedEnd)} + + ) + ) : ( + '' + )} +
+
+ + + {formatTokenAmountNumber({ + input: lock?.votingPower, + decimals: token?.decimals, + })} + + + {` ve${lock?.token?.symbol} ${t`Voting Power Granted`}`} +
+
+ setManageTab(v as ManageTab)} + > + + {!!lock && ( + <> + + + + + + + + + + + )} + +
+ + ); +} + +enum ManageTab { + Increase = 1, + Extend, + Transfer, +} + +function IncreaseLock({ lock, refetch }: { lock: Lock; refetch: () => void }) { + const theme = useTheme(); + const [amount, setAmount] = React.useState(''); + const token = lock.token; + const fetchFiatPrice = useFetchFiatPriceBatch({ + tokens: token ? [token] : [], + }); + const tokenUsd = token ? fetchFiatPrice.data?.get(token?.address) : undefined; + const tokenUsdBg = tokenUsd !== undefined ? new BigNumber(tokenUsd) : null; + const fiatPrice = tokenUsdBg && amount ? tokenUsdBg.times(amount) : 0; + const increaesMutation = useIncreaesLock({ + refetch, + }); + + return ( + + {t`Add To Lock`} + + {`$${formatReadableNumber({ + input: fiatPrice, + showDecimals: 1, + })}`} + + ) + } + /> + {t`Depositing into the lock will increase your voting power. You can also extend the lock time.`} + + { + if (!token) return; + increaesMutation.mutate({ + tokenId: lock.tokenId, + amount: toWei(amount, token?.decimals).toS, + }); + }} + >{t`Increase`} + + + ); +} + +function ExtendLock({ + lock, + refetch, + point, +}: { + lock: Lock; + refetch: () => void; + point: Point | undefined; +}) { + const theme = useTheme(); + const [isAutoMax, setIsAutoMax] = React.useState(false); + const [lockDurationWeek, setLockDurationWeek] = React.useState(0); + const token = lock.token; + const fetchFiatPrice = useFetchFiatPriceBatch({ + tokens: token ? [token] : [], + }); + const tokenUsd = token ? fetchFiatPrice.data?.get(token?.address) : undefined; + const tokenUsdBg = tokenUsd !== undefined ? new BigNumber(tokenUsd) : null; + const lockData = React.useMemo(() => { + const decimals = lock.token?.decimals; + if (decimals == undefined || !point) return null; + const lockDuration = getLockDurationByPointHistory( + point?.bias.toString(), + point?.slope.toString(), + ); + const ts = new BigNumber(point?.ts.toString()); + return { + lockDuration, + ts, + unlockTime: lockDuration.plus(ts), + isPermanent: !!point.permanent, + }; + }, [lock.token?.decimals, point]); + const nowTime = Math.floor(Date.now() / 1000); + const minLockDuration = React.useRef(0); + React.useEffect(() => { + if (lockData?.lockDuration && lockData?.lockDuration.gt(lockDurationWeek)) { + const toNowTimeDuration = nowTime - lockData.ts.toNumber(); + const newLockDuration = lockData.lockDuration.minus(toNowTimeDuration); + minLockDuration.current = newLockDuration + .plus( + getLockDurationRemainder(newLockDuration.plus(nowTime).toNumber()), + ) + .toNumber(); + setLockDurationWeek(minLockDuration.current); + } + }, [lockData]); + const isLoading = !point || !lockData?.lockDuration; + const lockDuration = lockDurationWeek; + const unlockTime = (nowTime + lockDuration) * 1000; + const nftPowerBg = + point && token + ? new BigNumber(point.slope.toString()) + .times(lockDuration) + .div(10 ** token?.decimals) + : null; + + const extendMutation = useExtendLock({ + refetch, + }); + const isPermanent = lock.isPermanent || lockData?.isPermanent; + + return ( + + + + {t`Auto Max-Lock Mode`} + { + setIsAutoMax(v); + if (v) { + setLockDurationWeek(MAX_LOCK_DURATION); + } + }} + disabled={isLoading || isPermanent} + /> + + {t`When activated, it sets the lock to maximum unlock time, until disabled. Once disabled, the regular vesting unlock time will apply. Maximum unlock time gives a 1-to-1 voting power to the amount of locked tokens.`} + + + {!lock.isPermanent && ( + + + Extend to + + + {getUnlockTimeTextShort(unlockTime)} + + +
+ for + + + {formatTokenAmountNumber({ + input: nftPowerBg, + decimals: token?.decimals, + })} + + +  {`ve${token?.symbol} `} + voting power +
+ { + const value = v as number; + if (value < minLockDuration.current) { + setLockDurationWeek(minLockDuration.current); + } else { + setLockDurationWeek(value); + } + }} + /> +
+ )} + {t`You can extend the lock or increase the lock amount. These actions will increase your voting power. The maximum lock time is 1 years!`} + + { + extendMutation.mutate({ + tokenId: lock.tokenId, + lockDuration: isAutoMax ? 0 : lockDurationWeek, + }); + }} + > + {isAutoMax ? t`Enable Auto Max-Lock` : t`Extend`} + + +
+ ); +} + +function TransferLock({ lock, refetch }: { lock: Lock; refetch: () => void }) { + const theme = useTheme(); + const { account } = useWalletInfo(); + const [address, setAddress] = React.useState(''); + + const transferMutation = useTransferLock({ + refetch, + }); + + return ( + + {t`Wallet address where the lock will be transferred`} + setAddress(evt.target.value)} + height={48} + fullWidth + placeholder="0x" + sx={{ + mt: 8, + }} + /> + {t`Transferring a lock will also transfer any rewards and rebases! Before continuing, please make sure you have claimed all available rewards`} + + { + transferMutation.mutate({ + tokenId: lock.tokenId, + fromAddress: account ?? '', + toAddress: address, + }); + }} + > + {t`Transfer`} + + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/MergeDialog.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/MergeDialog.tsx new file mode 100644 index 00000000..44b10fd5 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/MergeDialog.tsx @@ -0,0 +1,359 @@ +import { t } from '@lingui/macro'; +import { + alpha, + Box, + Button, + ButtonBase, + LoadingSkeleton, + Tooltip, + useMediaDevices, + useTheme, +} from '@dodoex/components'; +import Dialog from '../../../components/Dialog'; +import TokenLogo from '../../../components/TokenLogo'; +import { ChainId } from '@dodoex/api'; +import { Alarm, ArrowBack, Switch } from '@dodoex/icons'; +import { QuestionTooltip } from '../../../components/Tooltip'; +import NeedConnectButton from '../../../components/ConnectWallet/NeedConnectButton'; +import { useMergeLock } from './hooks/useMergeLock'; +import { useQuery, useQueryClient } from '@tanstack/react-query'; +import { + getFetchVE33RewardsDistributorClaimableQueryOptions, + getFetchVE33VotingEscrowBalanceOfNFTQueryOptions, +} from '@dodoex/dodo-contract-request'; +import { Lock } from './hooks/useFetchUserLocks'; +import { + getUnlockTimeText, + getUnlockTimeTextShort, +} from '../Ve33LockOperate/utils'; +import React from 'react'; +import { useClaimRebases } from './hooks/useClaimRebases'; + +export default function MergeDialog({ + open, + onClose, + locks, + refetch, +}: { + open: boolean; + onClose: () => void; + locks: [Lock | undefined, Lock | undefined]; + refetch?: () => void; +}) { + const theme = useTheme(); + const { isMobile } = useMediaDevices(); + const chainId = ChainId.MORPH_HOLESKY_TESTNET; + const queryClient = useQueryClient(); + const [isSwitch, setIsSwitch] = React.useState(false); + const [fromLock, toLock] = isSwitch ? [locks[1], locks[0]] : locks; + const fromTokenId = fromLock?.tokenId; + const toTokenId = toLock?.tokenId; + const fetchRebases = useQuery( + getFetchVE33RewardsDistributorClaimableQueryOptions( + fromLock?.chainId, + fromLock?.tokenId, + ), + ); + + const claimRebasesMutation = useClaimRebases({ + refetch: () => { + fetchRebases.refetch(); + }, + }); + + const mergeLockMutation = useMergeLock({ + fromTokenId, + toTokenId, + refetch: () => { + onClose(); + refetch?.(); + queryClient.invalidateQueries({ + queryKey: getFetchVE33VotingEscrowBalanceOfNFTQueryOptions( + chainId, + fromTokenId, + ).queryKey, + }); + queryClient.invalidateQueries({ + queryKey: getFetchVE33VotingEscrowBalanceOfNFTQueryOptions( + chainId, + toTokenId, + ).queryKey, + }); + }, + }); + + return ( + + + + {/* Before */} + + + + + + {t`Before`} + + {/* icon */} + + + + {/* After */} + + + setIsSwitch((prev) => !prev)} + /> + + + {t`After`} + + + + + + {fetchRebases.isLoading || fetchRebases.data ? ( + + + + {t`Claim Lock#${fromLock?.tokenId} rewards before merge.`} + + + + ) : ( + '' + )} + + + + + + {t`*Merging an Auto Max-Lockis not allowed.`} + + + + ); +} + +function LockItem({ + lock, + border, + onSwitch, +}: { + lock: Lock | undefined; + border?: boolean; + onSwitch?: () => void; +}) { + return ( + + + + + {t`Lock`} + {` #${lock?.tokenId}`} + {!!onSwitch && ( + onSwitch()} + > + + + )} + + + {`${lock?.value} ${lock?.token?.symbol} Locked Until\n`} + {lock?.lockedEnd ? ( + + {getUnlockTimeTextShort(lock?.lockedEnd)} + + ) : null} + + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/TableList.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/TableList.tsx new file mode 100644 index 00000000..2308920a --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/TableList.tsx @@ -0,0 +1,334 @@ +import { + Box, + Button, + ButtonBase, + Checkbox, + LoadingSkeleton, + Skeleton, + Tooltip, + useTheme, +} from '@dodoex/components'; +import LiquidityTable from '../../PoolWidget/PoolList/components/LiquidityTable'; +import { t, Trans } from '@lingui/macro'; +import TokenLogo from '../../../components/TokenLogo'; +import { formatTokenAmountNumber } from '../../../utils'; +import { Lock, useFetchUserLocks } from './hooks/useFetchUserLocks'; +import { + getUnlockTimeText, + getUnlockTimeTextShort, +} from '../Ve33LockOperate/utils'; + +export interface TableListProps { + inSelected: boolean; + selectedId: number[]; + setSelectedId: React.Dispatch>; + fetchUserLocks: ReturnType; + onManage: (lock: Lock) => void; + onClaim: (lock: Lock) => void; +} + +export const TableList = ({ + inSelected, + selectedId, + setSelectedId, + fetchUserLocks, + onManage, + onClaim, +}: TableListProps) => { + return ( + + + + {inSelected && } + + Lock + + + Rebase APR + + + Locked Amount + + + Voting Power + + + Unlock Date + + + Rebases + + + + + + {fetchUserLocks.isLoading ? ( + + ) : ( + fetchUserLocks.userLocks?.map((item, i) => { + return ( + + ); + }) + )} + + + ); +}; + +function TableTr({ + inSelected, + selectedId, + setSelectedId, + data, + onManage, + onClaim, +}: Pick< + TableListProps, + 'inSelected' | 'selectedId' | 'setSelectedId' | 'onManage' | 'onClaim' +> & { + data?: Lock; +}) { + const theme = useTheme(); + const hoverBg = theme.palette.background.tag; + const checked = !!data && selectedId.includes(data.tokenId); + const token = data?.token; + const isUnlock = !!data && data?.lockedEnd < Date.now(); + const claimText = isUnlock ? t`Claim` : t`Claim & Lock`; + + return ( + + {inSelected && !!data && ( + + 1 && !checked} + checked={checked} + onChange={(evt: React.ChangeEvent) => { + const { checked } = evt.target; + if (checked) { + setSelectedId((prev) => { + if (prev.length < 2 && !prev.includes(data.tokenId)) { + return [...prev, data.tokenId]; + } + return prev; + }); + } else { + setSelectedId((prev) => { + const index = prev.indexOf(data.tokenId); + if (index > -1) { + const result = [...prev]; + result.splice(index, 1); + return result; + } + return prev; + }); + } + }} + /> + + )} + + + {!data || !token ? ( + + ) : ( + + )} + {t`Lock` + ` #${data?.tokenId ?? ''}`} + + + + + {/* {formatPercentageNumber({ input: 0.0211307 })} */} + + + + + {formatTokenAmountNumber({ + input: data?.value!, + decimals: token?.decimals, + })} + {' '} + + {token?.symbol} + + + + + {formatTokenAmountNumber({ + input: data?.votingPower, + decimals: token?.decimals, + })} + {' '} + + ve{token?.symbol} + + + + {data?.lockedEnd ? ( + + {getUnlockTimeTextShort(data?.lockedEnd)} + + ) : null} + + + {' '} + + {token?.symbol} + + + + + + onManage(data!)} + > + + + + + + + + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useClaimBribes.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useClaimBribes.ts new file mode 100644 index 00000000..7f3eba11 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useClaimBribes.ts @@ -0,0 +1,69 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../../hooks/Submission/spec'; +import { useMessageState } from '../../../../hooks/useMessageState'; +import { + encodeVE33VoterClaimBribes, + getVE33RewardsDistributorContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; +import { + ExecutionResult, + MetadataFlag, +} from '../../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../../hooks/contract'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; + +export function useClaimBribes({ + refetch, +}: { + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + const { account, chainId } = useWalletInfo(); + return useMutation({ + mutationFn: async ({ + tokenId, + bribes, + tokens, + }: { + tokenId: number; + bribes: string[]; + tokens: string[]; + }) => { + const to = getVE33RewardsDistributorContractAddressByChainId(chainId); + try { + if (!account || !to || !tokenId) { + throw new Error('params is not valid.'); + } + const data = encodeVE33VoterClaimBribes(bribes, [tokens], tokenId); + const result = await submission.execute( + t`Claim`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.claimBribes]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to Claim:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useClaimRebases.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useClaimRebases.ts new file mode 100644 index 00000000..a4b267d4 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useClaimRebases.ts @@ -0,0 +1,61 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../../hooks/Submission/spec'; +import { useMessageState } from '../../../../hooks/useMessageState'; +import { + encodeVE33RewardsDistributorClaim, + getVE33RewardsDistributorContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; +import { + ExecutionResult, + MetadataFlag, +} from '../../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../../hooks/contract'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; + +export function useClaimRebases({ + refetch, +}: { + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + const { account, chainId } = useWalletInfo(); + return useMutation({ + mutationFn: async ({ tokenId }: { tokenId: number }) => { + const to = getVE33RewardsDistributorContractAddressByChainId(chainId); + try { + if (!account || !to || !tokenId) { + throw new Error('params is not valid.'); + } + const data = encodeVE33RewardsDistributorClaim(tokenId); + const result = await submission.execute( + t`Claim`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.claimRebases]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to Claim:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useExtendLock.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useExtendLock.ts new file mode 100644 index 00000000..064ffe4c --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useExtendLock.ts @@ -0,0 +1,76 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../../hooks/Submission/spec'; +import { useMessageState } from '../../../../hooks/useMessageState'; +import { + encodeVE33VotingEscrowIncreaseUnlockTime, + encodeVE33VotingEscrowLockPermanent, + getVE33VotingEscrowContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; +import { + ExecutionResult, + MetadataFlag, +} from '../../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../../hooks/contract'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; + +export function useExtendLock({ + refetch, +}: { + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + const { account, chainId } = useWalletInfo(); + return useMutation({ + mutationFn: async ({ + tokenId, + lockDuration, + }: { + tokenId: number; + lockDuration: number; + }) => { + const to = getVE33VotingEscrowContractAddressByChainId(chainId); + try { + if (!account || !to || !tokenId) { + throw new Error('params is not valid.'); + } + let data = ''; + if (lockDuration) { + data = encodeVE33VotingEscrowIncreaseUnlockTime( + tokenId, + lockDuration, + ); + } else { + data = encodeVE33VotingEscrowLockPermanent(tokenId); + } + const result = await submission.execute( + t`Extend Lock`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.extendVe33Lock]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to Extend:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useFetchUserLocks.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useFetchUserLocks.ts new file mode 100644 index 00000000..fe973bf2 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useFetchUserLocks.ts @@ -0,0 +1,100 @@ +import { useQuery } from '@tanstack/react-query'; +import { useGraphQLRequests } from '../../../../hooks/useGraphQLRequests'; +import { PoolApi } from '@dodoex/api'; +import React from 'react'; +import { + getFetchVE33VotingEscrowTokenQueryOptions, + getFetchVE33VotingEscrowUserPointHistoryQueryOptions, +} from '@dodoex/dodo-contract-request'; +import { tokenApi } from '../../../../constants/api'; +import { byWei } from '../../../../utils'; + +export function useFetchUserLocks({ + account, + chainId, +}: { + account: string | undefined; + chainId?: number; +}) { + const grahqlRequest = useGraphQLRequests(); + const fetchUserLocks = useQuery({ + enabled: !!account, + // ...grahqlRequest.getQuery(PoolApi.graphql.fetchVe33UserLocks, { + // where: { + // user: account?.toLocaleLowerCase() ?? '', + // }, + // }), + queryKey: ['test1'], + queryFn: async () => { + return { + ve33_getUserLock: [ + { + id: '3', + value: '1000000000000000000', + votingPower: '0', + lockedEnd: '1756339200', + isPermanent: false, + isVoted: false, + }, + { + id: '4', + value: '1000000000000000000', + votingPower: '0', + lockedEnd: '1759968000', + isPermanent: false, + isVoted: false, + }, + ], + }; + }, + }); + // const fetchTokenAddress = useQuery( + // getFetchVE33VotingEscrowTokenQueryOptions(chainId), + // ); + const tokenQuery = useQuery({ + // ...tokenApi.getFetchTokenQuery(chainId, fetchTokenAddress.data, account), + queryKey: ['test2'], + queryFn: () => { + return { + address: '0x42EDf453F8483c7168c158d28D610A58308517D1', + symbol: 'MOMO', + decimals: 18, + name: 'MOMO', + chainId, + }; + }, + }); + + const userLocks = React.useMemo(() => { + const token = tokenQuery.data; + return fetchUserLocks.data?.ve33_getUserLock?.map((item) => { + return { + tokenId: Number(item?.id!), + value: token ? byWei(item?.value, token?.decimals).toString() : '', + votingPower: item?.votingPower ?? '', + lockedEnd: Number(item?.lockedEnd + '000'), + isPermanent: !!item?.isPermanent, + isVoted: !!item?.isVoted, + chainId: token?.chainId, + token, + }; + }); + }, [fetchUserLocks.data, tokenQuery.data]); + + return { + ...fetchUserLocks, + userLocks, + }; +} + +export type Lock = NonNullable< + ReturnType['userLocks'] +>['0']; + +export type Point = Awaited< + ReturnType< + ReturnType< + typeof getFetchVE33VotingEscrowUserPointHistoryQueryOptions + >['queryFn'] + > +>; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useIncreaseLock.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useIncreaseLock.ts new file mode 100644 index 00000000..7b11b001 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useIncreaseLock.ts @@ -0,0 +1,67 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../../hooks/Submission/spec'; +import { useMessageState } from '../../../../hooks/useMessageState'; +import { + encodeVE33VotingEscrowIncreaseAmount, + getVE33VotingEscrowContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; +import { + ExecutionResult, + MetadataFlag, +} from '../../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../../hooks/contract'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; + +export function useIncreaesLock({ + refetch, +}: { + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + const { account, chainId } = useWalletInfo(); + return useMutation({ + mutationFn: async ({ + amount, + tokenId, + }: { + amount: string; + tokenId: number; + }) => { + const to = getVE33VotingEscrowContractAddressByChainId(chainId); + try { + if (!account || !to || !amount || !tokenId) { + throw new Error('params is not valid.'); + } + const data = encodeVE33VotingEscrowIncreaseAmount(tokenId, amount); + const result = await submission.execute( + t`Increase Lock`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.increaseVe33Lock]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to Increase:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useMergeLock.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useMergeLock.ts new file mode 100644 index 00000000..81afc853 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useMergeLock.ts @@ -0,0 +1,65 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../../hooks/Submission/spec'; +import { useMessageState } from '../../../../hooks/useMessageState'; +import { + encodeVE33VotingEscrowMerge, + getVE33VotingEscrowContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; +import { + ExecutionResult, + MetadataFlag, +} from '../../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../../hooks/contract'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; + +export function useMergeLock({ + fromTokenId, + toTokenId, + refetch, +}: { + fromTokenId: number | undefined; + toTokenId: number | undefined; + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + const { account, chainId } = useWalletInfo(); + return useMutation({ + mutationFn: async () => { + const to = getVE33VotingEscrowContractAddressByChainId(chainId); + try { + if (!account || !to || !fromTokenId || !toTokenId) { + throw new Error('params is not valid.'); + } + const data = encodeVE33VotingEscrowMerge(fromTokenId, toTokenId); + const result = await submission.execute( + t`Merge Lock`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.mergeVe33Lock]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to Merge:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useTransferLock.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useTransferLock.ts new file mode 100644 index 00000000..631695a8 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useTransferLock.ts @@ -0,0 +1,73 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../../hooks/Submission/spec'; +import { useMessageState } from '../../../../hooks/useMessageState'; +import { + encodeVE33VotingEscrowTransferFrom, + getVE33VotingEscrowContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; +import { + ExecutionResult, + MetadataFlag, +} from '../../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../../hooks/contract'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; + +export function useTransferLock({ + refetch, +}: { + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + const { account, chainId } = useWalletInfo(); + return useMutation({ + mutationFn: async ({ + tokenId, + fromAddress, + toAddress, + }: { + tokenId: number; + fromAddress: string; + toAddress: string; + }) => { + const to = getVE33VotingEscrowContractAddressByChainId(chainId); + try { + if (!account || !to || !tokenId || !fromAddress || !toAddress) { + throw new Error('params is not valid.'); + } + const data = encodeVE33VotingEscrowTransferFrom( + fromAddress, + toAddress, + tokenId, + ); + const result = await submission.execute( + t`Transfer Lock`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.transferVe33Lock]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to Transfer:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/index.tsx new file mode 100644 index 00000000..31fc34a8 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/index.tsx @@ -0,0 +1,142 @@ +import { + Box, + Button, + LoadingSkeleton, + useMediaDevices, +} from '@dodoex/components'; +import { Trans } from '@lingui/macro'; +import { TableList } from './TableList'; +import React from 'react'; +import MergeDialog from './MergeDialog'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; +import { useUserOptions } from '../../../components/UserOptionsProvider'; +import { Lock, useFetchUserLocks } from './hooks/useFetchUserLocks'; +import LockManageDialog from './LockManageDialog'; +import ClaimLockDialog from './ClaimLockDialog'; +import { CardList } from './CardList'; + +export default function Ve33LockList() { + const [selectedId, setSelectedId] = React.useState([]); + const [inSelected, setInSelected] = React.useState(false); + const selectedLen = selectedId.length; + const [openMerge, setOpenMerge] = React.useState(false); + const { onlyChainId } = useUserOptions(); + const { chainId: connectedChainId, account } = useWalletInfo(); + const chainId = onlyChainId ?? connectedChainId; + const fetchUserLocks = useFetchUserLocks({ + chainId, + account, + }); + const { isMobile } = useMediaDevices(); + + const [manageLock, setManageLock] = React.useState(null); + const [showClaimLock, setShowClaimLock] = React.useState(null); + + if (!account) return; + + const fromLock = fetchUserLocks.userLocks?.find( + (item) => item.tokenId === selectedId[0], + ); + const toLock = fetchUserLocks.userLocks?.find( + (item) => item.tokenId === selectedId[1], + ); + + return ( + + + + My Locks( + + {fetchUserLocks.userLocks?.length} + + ) + + + {!!selectedLen && ( + + {selectedLen} Lock selected + + )} + + + + + {isMobile ? ( + setManageLock(lock)} + onClaim={(lock) => setShowClaimLock(lock)} + /> + ) : ( + setManageLock(lock)} + onClaim={(lock) => setShowClaimLock(lock)} + /> + )} + setOpenMerge(false)} + locks={[fromLock, toLock]} + refetch={() => { + fetchUserLocks.refetch(); + }} + /> + setManageLock(null)} + lock={manageLock} + refetch={() => { + fetchUserLocks.refetch(); + }} + /> + setShowClaimLock(null)} + lock={showClaimLock} + /> + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/hooks/useCreateLock.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/hooks/useCreateLock.ts new file mode 100644 index 00000000..a16f3aa6 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/hooks/useCreateLock.ts @@ -0,0 +1,72 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../../hooks/Submission/spec'; +import { useMessageState } from '../../../../hooks/useMessageState'; +import { + encodeVE33V2GaugeGetReward, + encodeVE33VotingEscrowCreateLock, + getVE33VotingEscrowContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; +import { + ExecutionResult, + MetadataFlag, +} from '../../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../../hooks/contract'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; +import { toWei } from '../../../../utils'; + +export function useCreateLock({ + amount, + decimals, + symbol, + lockDuration, + refetch, +}: { + amount: string; + decimals: number | undefined; + symbol?: string; + lockDuration: number; + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + const { account, chainId } = useWalletInfo(); + return useMutation({ + mutationFn: async () => { + const to = getVE33VotingEscrowContractAddressByChainId(chainId); + try { + if (!account || !to || decimals === undefined || !symbol) { + throw new Error('params is not valid.'); + } + const amountWei = toWei(amount, decimals).toString(); + const data = encodeVE33VotingEscrowCreateLock(amountWei, lockDuration); + const result = await submission.execute( + t`Lock` + ` ${symbol}`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.createVe33Lock]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to Create:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/hooks/useFetchUserTotalVeNFT.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/hooks/useFetchUserTotalVeNFT.ts new file mode 100644 index 00000000..40e95b68 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/hooks/useFetchUserTotalVeNFT.ts @@ -0,0 +1,40 @@ +import { getFetchVE33VotingEscrowBalanceOfNFTQueryOptions, getFetchVE33VotingEscrowBalanceOfQueryOptions, getFetchVE33VotingEscrowOwnerToNFTokenIdListQueryOptions } from "@dodoex/dodo-contract-request"; +import { useQueries, useQuery } from "@tanstack/react-query"; +import { increaseArray } from "../../../../utils/utils"; +import React from "react"; + +export function useFetchUserTotalVeNFT(chainId: number | undefined, account: string | undefined) { + const fetchBalanceOf = useQuery(getFetchVE33VotingEscrowBalanceOfQueryOptions(chainId, account)) + + const fetchTokenIds = useQueries({ + queries: increaseArray(fetchBalanceOf.data ? Number(fetchBalanceOf.data) :0).map((_, i) => getFetchVE33VotingEscrowOwnerToNFTokenIdListQueryOptions(chainId, account, i)) + }); + + const tokenIds = fetchTokenIds.map(item => item.data ? Number(item.data) : 0).filter(tokenId => !!tokenId) + + const fetchBalanceOfNFT = useQueries({ + queries: tokenIds.map(id => getFetchVE33VotingEscrowBalanceOfNFTQueryOptions(chainId, id)) + }); + + const totalNFT = React.useMemo(() => { + let result = BigInt(0); + fetchBalanceOfNFT.forEach(item => { + if (item.data) { + result += item.data; + } + }) + return result; + }, [fetchBalanceOfNFT]); + + return { + totalNFT, + isLoading: fetchBalanceOf.isLoading || fetchTokenIds.some(item => item.isLoading) || fetchBalanceOfNFT.some(item => item.isLoading), + refetch: () => { + fetchBalanceOf.refetch(); + fetchBalanceOfNFT.forEach(item => item.refetch()) + }, + fetchBalanceOf, + fetchTokenIds, + fetchBalanceOfNFT, + } +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/index.tsx new file mode 100644 index 00000000..cf4b8754 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/index.tsx @@ -0,0 +1,285 @@ +import { + alpha, + BoxProps, + Button, + LoadingSkeleton, + Tooltip, + useTheme, +} from '@dodoex/components'; +import { Box } from '@dodoex/components'; +import { TokenCard } from '../../../components/Swap/components/TokenCard'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; +import { useUserOptions } from '../../../components/UserOptionsProvider'; +import React from 'react'; +import { useFetchFiatPriceBatch } from '../../../hooks/useFetchFiatPriceBatch'; +import { + formatReadableNumber, + formatTokenAmountNumber, +} from '../../../utils/formatter'; +import BigNumber from 'bignumber.js'; +import { Trans } from '@lingui/macro'; +import LockSlider from '../components/LockSlider'; +import { + getCreateLockNftPower, + getLockDurationRemainder, + getUnlockTimeText, + getUnlockTimeTextShort, +} from './utils'; +import { useCreateLock } from './hooks/useCreateLock'; +import { useQuery } from '@tanstack/react-query'; +import { + getFetchVE33VotingEscrowTokenQueryOptions, + getVE33VotingEscrowContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; +import { tokenApi } from '../../../constants/api'; +import { useTokenStatus } from '../../../hooks/Token/useTokenStatus'; +import TokenStatusButton from '../../../components/TokenStatusButton'; +import NeedConnectButton from '../../../components/ConnectWallet/NeedConnectButton'; +import { useFetchUserTotalVeNFT } from './hooks/useFetchUserTotalVeNFT'; +import { formatUnits } from '@dodoex/contract-request'; + +export default function Ve33LockOperate({ sx }: { sx?: BoxProps['sx'] }) { + const theme = useTheme(); + const [amt, setAmt] = React.useState(''); + const { onlyChainId } = useUserOptions(); + const { chainId: connectedChainId, account } = useWalletInfo(); + const chainId = onlyChainId ?? connectedChainId; + const fetchTokenAddress = useQuery( + getFetchVE33VotingEscrowTokenQueryOptions(chainId), + ); + const proxyContractAddress = + getVE33VotingEscrowContractAddressByChainId(chainId); + const tokenQuery = useQuery({ + ...tokenApi.getFetchTokenQuery( + chainId, + fetchTokenAddress.data, + account, + proxyContractAddress, + ), + }); + const token = tokenQuery.data; + const tokenStatus = useTokenStatus(token, { + amount: amt, + contractAddress: proxyContractAddress, + }); + const fetchFiatPrice = useFetchFiatPriceBatch({ + tokens: token ? [token] : [], + }); + const tokenUsd = token ? fetchFiatPrice.data?.get(token?.address) : undefined; + const tokenUsdBg = tokenUsd !== undefined ? new BigNumber(tokenUsd) : null; + const fiatPrice = tokenUsdBg && amt ? tokenUsdBg.times(amt) : 0; + const [lockDurationWeek, setLockDurationWeek] = React.useState(0); + const nowTime = Math.floor(Date.now() / 1000); + const lockDuration = lockDurationWeek + getLockDurationRemainder(nowTime); + const nftPowerBg = getCreateLockNftPower(amt, lockDuration); + const unlockTime = (nowTime + lockDuration) * 1000; + + const fetchTotalNFT = useFetchUserTotalVeNFT(chainId, account); + const refetch = React.useCallback(async () => { + setAmt(''); + setLockDurationWeek(0); + const time = setTimeout(() => { + fetchTotalNFT.refetch(); + }, 1000); + return () => { + clearTimeout(time); + }; + }, []); + + const createMutation = useCreateLock({ + amount: amt, + lockDuration, + decimals: token?.decimals, + symbol: token?.symbol, + refetch: () => { + refetch(); + }, + }); + + return ( + + + + My total {`ve${token?.symbol}`} + + + + {account + ? formatTokenAmountNumber({ + input: formatUnits(fetchTotalNFT.totalNFT, token?.decimals), + decimals: token?.decimals, + }) + : '-'} + + + Lock More, Vote Stronger, Earn More + + + + + + {`$${formatReadableNumber({ + input: fiatPrice, + showDecimals: 1, + })}`} + + ) + } + /> + + + Locking for + + + {getUnlockTimeTextShort(unlockTime)} + + + for + + + {formatTokenAmountNumber({ + input: nftPowerBg, + decimals: token?.decimals, + })} + + +  {`ve${token?.symbol} `} + voting power + + setLockDurationWeek(v as number)} + /> + + + + + Locking will give you an NFT, referred to as a veNFT. You can + increase the Lock amount or extend the Lock time at any point + after. + + + + + + + + + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/utils.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/utils.ts new file mode 100644 index 00000000..01ae8dee --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/utils.ts @@ -0,0 +1,71 @@ +import BigNumber from 'bignumber.js'; +import dayjs from 'dayjs'; + +export const iMAXTIME = 1 * 365 * 86400; +export const WEEK = 604800; + +export function getLockDurationRemainder(nowTime: number) { + const remainder = nowTime % WEEK; + return WEEK - remainder; +} + +/** + * @see https://github.com/velodrome-finance/contracts/blob/main/contracts/VotingEscrow.sol#L589 + */ +export function getCreateLockNftPower(amount: string, lockDuration: number) { + const slope = new BigNumber(amount).div(iMAXTIME); + const bias = slope.times(lockDuration); + return bias; +} + +export function getLockDurationByPointHistory( + bias: string | BigNumber | bigint, + slope: string | BigNumber | bigint, +) { + const biasBg = BigNumber.isBigNumber(bias) + ? bias + : new BigNumber(bias.toString()); + return biasBg.div(slope.toString()).dp(0, BigNumber.ROUND_DOWN); +} + +export function getAmountByPointHistory(slope: string | BigNumber | bigint) { + const slopeBg = BigNumber.isBigNumber(slope) + ? slope + : new BigNumber(slope.toString()); + return slopeBg.div(iMAXTIME).dp(0); +} + +/** + * @see https://github.com/velodrome-finance/contracts/blob/main/contracts/libraries/BalanceLogicLibrary.sol#L90 + */ +export function getVotingPowerByPointHistory( + point: { + bias: bigint; + slope: bigint; + ts: bigint; + permanent: bigint; + }, + nowTime: number, +) { + if (point.permanent) { + return new BigNumber(point.permanent.toString()); + } + const biasBg = new BigNumber(point.bias.toString()); + const slopeBg = new BigNumber(point.slope.toString()); + return biasBg.minus(slopeBg.times(nowTime - Number(point.ts))); +} + +export function getUnlockTimeTextShort(unlockTime: number) { + return dayjs(unlockTime).format('YYYY-MM-DD'); +} + +export function getUnlockTimeText(unlockTime: number) { + const date = dayjs(unlockTime); + const formatText = date.format('YYYY-MM-DD HH:mm:ss'); + let utc = -(date.toDate().getTimezoneOffset() / 60); + let utcText = String(utc); + if (utc && Math.abs(utc) < 10) { + utcText = '0' + utcText; + } + return `${formatText} UTC+${utcText}`; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx new file mode 100644 index 00000000..f9474375 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx @@ -0,0 +1,562 @@ +import { + alpha, + Box, + ButtonBase, + LoadingSkeleton, + useTheme, +} from '@dodoex/components'; +import { t, Trans } from '@lingui/macro'; +import TokenLogo from '../../../components/TokenLogo'; +import { Ve33PoolInfoI } from '../types'; +import { formatTokenAmountNumber } from '../../../utils'; +import React from 'react'; +import { QuestionTooltip } from '../../../components/Tooltip'; +import { basicTokenMap } from '@dodoex/api'; +import { useVe33V2BalanceInfo } from '../Ve33V2PoolOperate/hooks/useVe33V2BalanceInfo'; +import { FailedList } from '../../../components/List/FailedList'; +import { useQuery } from '@tanstack/react-query'; +import { + getFetchVE33V2GaugeBalanceOfQueryOptions, + getFetchVE33V2GaugeEarnedQueryOptions, + getFetchVE33V2PairClaimable0QueryOptions, + getFetchVE33V2PairClaimable1QueryOptions, +} from '@dodoex/dodo-contract-request'; +import { TokenInfo } from '../../../hooks/Token'; +import BigNumber from 'bignumber.js'; +import Ve33StakeDialog, { + OperateType as StakeOperateType, +} from '../Ve33StakeDialog'; +import { useVe33V2ClaimEmissions } from '../hooks/useVe33V2ClaimEmissions'; +import { useVe33V2ClaimTradingFees } from '../hooks/useVe33V2ClaimTradingFees'; +import { Loading } from '@dodoex/icons'; +import { formatUnits } from '@dodoex/contract-request'; +import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; + +export default function MyAssets({ + poolInfo, + account, +}: { + poolInfo?: Ve33PoolInfoI; + account?: string; +}) { + const theme = useTheme(); + const { isMobile } = useWidgetDevice(); + const basicToken = poolInfo ? basicTokenMap[poolInfo.chainId] : undefined; + const [showStakeType, setShowStakeType] = + React.useState(null); + const balanceInfo = useVe33V2BalanceInfo({ + pool: poolInfo, + account, + }); + const fetchStakedBalance = useQuery( + getFetchVE33V2GaugeBalanceOfQueryOptions( + poolInfo?.chainId, + poolInfo?.gaugeAddress, + account, + ), + ); + + const lpDecimals = 18; + const stakedBalance = fetchStakedBalance.data + ? formatUnits(fetchStakedBalance.data, lpDecimals) + : undefined; + const tradingFeeToken0Query = useQuery( + getFetchVE33V2PairClaimable0QueryOptions( + poolInfo?.chainId, + poolInfo?.id, + account, + ), + ); + const tradingFeeToken1Query = useQuery( + getFetchVE33V2PairClaimable1QueryOptions( + poolInfo?.chainId, + poolInfo?.id, + account, + ), + ); + const emissionsQuery = useQuery( + getFetchVE33V2GaugeEarnedQueryOptions( + poolInfo?.chainId, + poolInfo?.gaugeAddress, + account, + ), + ); + + const claimEmissionsMutation = useVe33V2ClaimEmissions({ + gaugeAddress: poolInfo?.gaugeAddress, + refetch: async () => { + await emissionsQuery.refetch(); + }, + }); + const claimTradingFeesMutation = useVe33V2ClaimTradingFees({ + address: poolInfo?.id, + refetch: async () => { + tradingFeeToken0Query.refetch(); + tradingFeeToken1Query.refetch(); + }, + }); + + if (balanceInfo.userLpToTokenBalanceErrorRefetch) { + return ( + { + balanceInfo.userLpToTokenBalanceErrorRefetch?.(); + }} + sx={{ + my: 40, + height: '100%', + }} + /> + ); + } + + return ( + + + + + + + +
+ + Total liquidity + + + + {!isMobile && } + + +
+
+ + {/* detail */} + + setShowStakeType(StakeOperateType.Stake)} + > + Stake + + } + > + + {!isMobile && } + + + setShowStakeType(StakeOperateType.UnStake)} + > + UnStake + + } + > + + {!isMobile && } + + + claimTradingFeesMutation.mutate()} + > + Claim + + } + > + + {!isMobile && } + + + claimEmissionsMutation.mutate()} + > + Claim + + } + > + + {!!basicToken && ( + + )} + + {t`Lock ${basicToken?.symbol} to get ve${basicToken?.symbol}. You can use ve${basicToken?.symbol} to vote for more rewards.`} +
+
+ {t`Lock ${basicToken?.symbol} >`} +
+ } + sx={{ + ml: 4, + }} + /> +
+ +
+ {showStakeType && ( + { + setShowStakeType(null); + balanceInfo.refetch(); + fetchStakedBalance.refetch(); + }} + /> + )} +
+ ); +} + +function DetailItem({ + label, + children, + singleLine, + operate, +}: React.PropsWithChildren<{ + label: React.ReactNode; + singleLine?: boolean; + operate?: React.ReactNode; +}>) { + const { isMobile } = useWidgetDevice(); + + return ( + + {label} + {singleLine ? ( + + {children} + + ) : ( + children + )} + + ); +} + +function DetailItemSingleContent({ + children, + operate, +}: React.PropsWithChildren<{ + operate?: React.ReactNode; +}>) { + const { isMobile } = useWidgetDevice(); + + if (isMobile) { + return ( + + + {children} + + {operate} + + ); + } + return ( + + {children} + {operate} + + ); +} + +function OperateBtn({ + sx, + disabled, + children, + isLoading, + ...props +}: Parameters[0] & { + isLoading?: boolean; +}) { + const theme = useTheme(); + + return ( + + {isLoading && ( + + )} + {children} + + ); +} + +function TokenAndAmount({ + amount, + token, + loading, + logoSize, +}: { + amount: string | number | BigNumber | null | undefined; + token: TokenInfo | undefined; + loading?: boolean; + logoSize?: number; +}) { + return ( + + {!!logoSize && ( + + )} + + {formatTokenAmountNumber({ + input: amount, + decimals: token?.decimals, + })} + + {token?.symbol} + + ); +} + +function SplitLine() { + return ( + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx new file mode 100644 index 00000000..82fd0d92 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx @@ -0,0 +1,896 @@ +import { + alpha, + Box, + Button, + ButtonBase, + LoadingSkeleton, + useTheme, +} from '@dodoex/components'; +import { Ve33PoolInfoI } from '../types'; +import { t, Trans } from '@lingui/macro'; +import { useQuery } from '@tanstack/react-query'; +import { + getFetchVE33V3GaugeEarnedQueryOptions, + getFetchVE33V3PairTickSpacingQueryOptions, +} from '@dodoex/dodo-contract-request'; +import { tickToPrice } from '../Ve33V3PoolOperate/utils/getTickToPrice'; +import BigNumber from 'bignumber.js'; +import { TokenInfo } from '../../../hooks/Token/type'; +import TokenLogo from '../../../components/TokenLogo'; +import { + formatReadableNumber, + formatTokenAmountNumber, +} from '../../../utils/formatter'; +import { basicTokenMap } from '@dodoex/api'; +import { QuestionTooltip } from '../../../components/Tooltip'; +import { useVe33V3Positions } from './useVe33V3Positions'; +import { FailedList } from '../../../components/List/FailedList'; +import React from 'react'; +import { Bound } from '../Ve33V3PoolOperate/types'; +import { nearestUsableTick } from '../Ve33V3PoolOperate/utils/nearestUsableTick'; +import { TickMath } from '../Ve33V3PoolOperate/utils/tickMath'; +import PositionManage from '../Ve33V3PoolOperate/components/PositionManage'; +import Ve33StakeDialog, { + OperateType as StakeOperateType, +} from '../Ve33StakeDialog'; +import { useFetchFiatPriceBatch } from '../../../hooks/useFetchFiatPriceBatch'; +import { useVe33V3ClaimEmissions } from '../hooks/useVe33V3ClaimEmissions'; +import { useVe33V3ClaimTradingFees } from '../hooks/useVe33V3ClaimTradingFees'; +import { Loading } from '@dodoex/icons'; +import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; + +export default function MyPosition({ + poolInfo, + account, +}: { + poolInfo?: Ve33PoolInfoI; + account: string; +}) { + const theme = useTheme(); + const { isMobile } = useWidgetDevice(); + const { fetchBalance, positionsQuery, fetchStakedValues } = + useVe33V3Positions({ + poolInfo, + account, + }); + const usdLoading = + fetchBalance.isLoading || + positionsQuery.some((item) => item.isLoading) || + fetchStakedValues.isLoading; + let unStakedUSD = 0, + stakedUSD = 0; + const fetchFiatPrice = useFetchFiatPriceBatch({ + tokens: poolInfo ? [poolInfo.baseToken, poolInfo.quoteToken] : [], + }); + if (fetchFiatPrice.data?.size === 2 && fetchStakedValues.data) { + positionsQuery.forEach((item) => { + if (item.data) { + const usd = new BigNumber(item.data.amount0) + .times(fetchFiatPrice.data?.get(poolInfo?.baseToken.address!) ?? 0) + .plus( + new BigNumber(item.data.amount1).times( + fetchFiatPrice.data?.get(poolInfo?.quoteToken.address!) ?? 0, + ), + ) + .toNumber(); + if (fetchStakedValues.data.includes(BigInt(item.data.tokenId))) { + stakedUSD += usd; + } else { + unStakedUSD += usd; + } + } + }); + } + + return ( + + + + + + {fetchBalance.data !== undefined && + fetchStakedValues.data !== undefined + ? Number(fetchBalance.data) + fetchStakedValues.data?.length || + 0 + : 0} + {' '} + Position + + + (${formatReadableNumber({ input: unStakedUSD + stakedUSD })}) + + + + + + {fetchBalance.data?.toString() || 0} + {' '} + Unstake position + + + (${formatReadableNumber({ input: unStakedUSD })}) + + + + + + {fetchStakedValues.data?.length || 0} + {' '} + Stake position + + + (${formatReadableNumber({ input: stakedUSD })}) + + + + + {/* position */} + {fetchBalance.isLoading || fetchStakedValues.isLoading ? ( + + ) : ( + positionsQuery.map((positionQuery, i) => { + if (positionQuery.errorRefetch) + return ; + if (positionQuery.isLoading) + return ( + + ); + + const isStaked = positionQuery.data + ? fetchStakedValues.data?.includes( + BigInt(positionQuery.data?.tokenId), + ) + : false; + return ( + { + fetchStakedValues.refetch(); + fetchBalance.refetch(); + await positionQuery.refetch(); + }} + /> + ); + }) + )} + + ); +} + +function PositionItem({ + poolInfo, + account, + position, + isStaked, + refetchPosition, +}: { + poolInfo?: Ve33PoolInfoI; + account: string; + position?: ReturnType['positionsQuery'][0]['data']; + isStaked?: boolean; + refetchPosition?: () => void | Promise; +}) { + const theme = useTheme(); + const { isMobile } = useWidgetDevice(); + const [showManage, setManage] = React.useState(false); + const [showStakeType, setShowStakeType] = + React.useState(null); + const basicToken = poolInfo ? basicTokenMap[poolInfo?.chainId] : undefined; + const tokenId = position?.tokenId; + const emissionsQuery = useQuery( + getFetchVE33V3GaugeEarnedQueryOptions( + poolInfo?.chainId, + poolInfo?.gaugeAddress, + account, + tokenId, + ), + ); + const fetchTickSpacing = useQuery( + getFetchVE33V3PairTickSpacingQueryOptions(poolInfo?.chainId, poolInfo?.id), + ); + const [priceLower, priceUpper] = React.useMemo(() => { + const tickSpaceLimits = { + [Bound.LOWER]: fetchTickSpacing.data + ? nearestUsableTick(TickMath.MIN_TICK, Number(fetchTickSpacing.data)) + : undefined, + [Bound.UPPER]: fetchTickSpacing.data + ? nearestUsableTick(TickMath.MAX_TICK, Number(fetchTickSpacing.data)) + : undefined, + }; + const priceLower = poolInfo + ? tickToPrice( + poolInfo.baseToken, + poolInfo.quoteToken, + position?.tickLower ?? 0, + ) + : null; + const priceUpper = poolInfo + ? tickToPrice( + poolInfo.baseToken, + poolInfo.quoteToken, + position?.tickUpper ?? 0, + ) + : null; + + return [ + Number(position?.tickLower) === tickSpaceLimits[Bound.LOWER] + ? '0' + : priceLower?.toSignificant(), + Number(position?.tickUpper) === tickSpaceLimits[Bound.UPPER] + ? '∞' + : priceUpper?.toSignificant(), + ]; + }, [fetchTickSpacing.data]); + + const fetchFiatPrice = useFetchFiatPriceBatch({ + tokens: poolInfo ? [poolInfo.baseToken, poolInfo.quoteToken] : [], + }); + const usd = new BigNumber(position?.amount0 ?? 0) + .times(fetchFiatPrice.data?.get(poolInfo?.baseToken.address!) ?? 0) + .plus( + new BigNumber(position?.amount1 ?? 0).times( + fetchFiatPrice.data?.get(poolInfo?.quoteToken.address!) ?? 0, + ), + ) + .toNumber(); + + const claimEmissionsMutation = useVe33V3ClaimEmissions({ + tokenId, + gaugeAddress: poolInfo?.gaugeAddress, + refetch: async () => { + await emissionsQuery.refetch(); + }, + }); + const claimTradingFeesMutation = useVe33V3ClaimTradingFees({ + tokenId, + refetch: async () => { + await refetchPosition?.(); + }, + }); + + return ( + <> + + + + + Position + {tokenId ? ` #${tokenId}` : ''} + {` - $${usd}`} + + + + In Range + + + + {priceLower} + + + + + + + + {priceUpper} + + + + + + + + + + + + + +
+ + Total liquidity + + + + {!isMobile && } + + +
+
+ + {/* detail */} + + setShowStakeType(StakeOperateType.Stake)} + disabled={isStaked || !position?.liquidity} + > + Stake + + } + > + + {!isMobile && } + + + setShowStakeType(StakeOperateType.UnStake)} + > + UnStake + + } + > + + {!isMobile && } + + + claimTradingFeesMutation.mutate()} + > + Claim + + } + > + + {!isMobile && } + + + claimEmissionsMutation.mutate()} + > + Claim + + } + > + + {!!basicToken && ( + + )} + + {t`Lock ${basicToken?.symbol} to get ve${basicToken?.symbol}. You can use ve${basicToken?.symbol} to vote for more rewards.`} +
+
+ {t`Lock ${basicToken?.symbol} >`} +
+ } + sx={{ + ml: 4, + }} + /> +
+ +
+
+ {showManage && ( + setManage(false)} + dialog + /> + )} + {showStakeType && ( + { + setShowStakeType(null); + refetchPosition?.(); + }} + /> + )} + + ); +} + +function DetailItem({ + label, + children, + singleLine, + operate, +}: React.PropsWithChildren<{ + label: React.ReactNode; + singleLine?: boolean; + operate?: React.ReactNode; +}>) { + const { isMobile } = useWidgetDevice(); + + return ( + + {label} + {singleLine ? ( + + {children} + + ) : ( + children + )} + + ); +} + +function DetailItemSingleContent({ + children, + operate, +}: React.PropsWithChildren<{ + operate?: React.ReactNode; +}>) { + const { isMobile } = useWidgetDevice(); + + if (isMobile) { + return ( + + + {children} + + {operate} + + ); + } + return ( + + {children} + {operate} + + ); +} + +function OperateBtn({ + sx, + disabled, + children, + isLoading, + ...props +}: Parameters[0] & { + isLoading?: boolean; +}) { + const theme = useTheme(); + + return ( + + {isLoading && ( + + )} + {children} + + ); +} + +function TokenAndAmount({ + amount, + token, + loading, + logoSize, +}: { + amount: string | number | BigNumber | null | undefined; + token: TokenInfo | undefined; + loading?: boolean; + logoSize?: number; +}) { + return ( + + {!!logoSize && ( + + )} + + {formatTokenAmountNumber({ + input: amount, + decimals: token?.decimals, + })} + + {token?.symbol} + + ); +} + +function SplitLine() { + return ( + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx index b1bc9431..8f9e5280 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx @@ -1,7 +1,23 @@ -import { Box, LoadingSkeleton, useTheme } from '@dodoex/components'; -import { Ve33PoolInfoI } from '../types'; +import { + alpha, + Box, + LoadingSkeleton, + Skeleton, + useTheme, +} from '@dodoex/components'; +import { PoolTypeE, Ve33PoolInfoI } from '../types'; import { t, Trans } from '@lingui/macro'; -import { formatReadableNumber, formatApy } from '../../../utils'; +import { + formatApy, + formatShortNumber, + formatTokenAmountNumber, +} from '../../../utils'; +import TokenLogo from '../../../components/TokenLogo'; +import { useFetchFiatPriceBatch } from '../../../hooks/useFetchFiatPriceBatch'; +import BigNumber from 'bignumber.js'; +import { useVe33V3Positions } from './useVe33V3Positions'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; +import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; export default function PoolInfo({ poolInfo, @@ -11,6 +27,48 @@ export default function PoolInfo({ isLoading?: boolean; }) { const theme = useTheme(); + const fiatQuery = useFetchFiatPriceBatch({ + tokens: poolInfo ? [poolInfo.baseToken, poolInfo.quoteToken] : [], + }); + const isV3 = poolInfo?.type === PoolTypeE.CLPool; + const { account } = useWalletInfo(); + const { isMobile } = useWidgetDevice(); + const fetchPositions = useVe33V3Positions({ + poolInfo, + account, + }); + const isFetchPositionsLoading = fetchPositions.positionsQuery.some( + (item) => item.isLoading, + ); + let myBaseTVL = 0, + myQuoteTVL = 0; + fetchPositions.positionsQuery.forEach((position) => { + myBaseTVL += position.data?.amount0 ?? 0; + myQuoteTVL += position.data?.amount1 ?? 0; + }); + + const baseTVL = Number(poolInfo?.totalValueLockedToken0) || 0; + const quoteTVL = Number(poolInfo?.totalValueLockedToken1) || 0; + let baseTVLUsd = 0; + let quoteTVLUsd = 0; + let totalUSD = 0; + if (poolInfo) { + baseTVLUsd = new BigNumber( + fiatQuery.data?.get(poolInfo?.baseToken.address) ?? 0, + ) + .times(baseTVL) + .toNumber(); + quoteTVLUsd = new BigNumber( + fiatQuery.data?.get(poolInfo?.quoteToken.address) ?? 0, + ) + .times(quoteTVL) + .toNumber(); + totalUSD = baseTVLUsd + quoteTVLUsd; + } + const basePercentage = + totalUSD && baseTVLUsd ? (baseTVLUsd / totalUSD) * 100 : 0; + const quotePercentage = + totalUSD && quoteTVLUsd ? (quoteTVLUsd / totalUSD) * 100 : 0; return ( @@ -53,12 +111,13 @@ export default function PoolInfo({ width: 100, }} sx={{ - typography: 'caption', + typography: isMobile ? 'body1' : 'caption', fontWeight: 600, }} > - {formatReadableNumber({ - input: poolInfo?.totalValueLockedUSD, + {formatTokenAmountNumber({ + input: totalUSD || poolInfo?.totalValueLockedUSD, + decimals: 18, })} @@ -85,7 +144,7 @@ export default function PoolInfo({ > @@ -97,7 +156,7 @@ export default function PoolInfo({ width: 100, }} sx={{ - typography: 'caption', + typography: isMobile ? 'body1' : 'caption', fontWeight: 600, }} > @@ -113,7 +172,7 @@ export default function PoolInfo({ display: 'flex', justifyContent: 'space-between', mt: 20, - typography: 'body2', + typography: isMobile ? 'h6' : 'body2', color: theme.palette.text.secondary, }} > @@ -126,7 +185,6 @@ export default function PoolInfo({ justifyContent: 'space-between', mt: 8, typography: 'body2', - borderRadius: 12, }} > - {formatReadableNumber({ - input: poolInfo?.totalValueLockedToken0, - })} + + {formatTokenAmountNumber({ + input: baseTVL, + decimals: poolInfo?.baseToken.decimals, + })} + + + ~${baseTVLUsd ? formatShortNumber(baseTVLUsd) : 0} + - {formatReadableNumber({ - input: poolInfo?.quoteTokenAmount, - })} + + ~${quoteTVLUsd ? formatShortNumber(quoteTVLUsd) : 0} + + + {formatTokenAmountNumber({ + input: quoteTVL, + decimals: poolInfo?.quoteToken.decimals, + })} + + {isLoading ? ( + + ) : ( + + + + {basePercentage}% + + + + {quotePercentage}% + + + )} + + {isV3 && account && ( + <> + + {t`My ${poolInfo?.baseToken.symbol}`} + {t`My ${poolInfo?.quoteToken.symbol}`} + + + + + {formatTokenAmountNumber({ + input: myBaseTVL, + decimals: poolInfo?.baseToken.decimals, + })} + + + ~$ + {myBaseTVL + ? formatShortNumber( + new BigNumber( + fiatQuery.data?.get(poolInfo?.baseToken.address) ?? 0, + ).times(myBaseTVL), + ) + : 0} + + + + + ~ + {myQuoteTVL + ? formatShortNumber( + new BigNumber( + fiatQuery.data?.get(poolInfo?.quoteToken.address) ?? 0, + ).times(myQuoteTVL), + ) + : 0} + + + {formatTokenAmountNumber({ + input: myQuoteTVL, + decimals: poolInfo?.quoteToken.decimals, + })} + + + + + )} ); } diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx index d62aa0e8..e4bda98c 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx @@ -1,7 +1,7 @@ import { ChainId, PoolApi } from '@dodoex/api'; -import { Box, Skeleton, useTheme } from '@dodoex/components'; +import { Box, Button, Skeleton, useTheme } from '@dodoex/components'; import { useQuery } from '@tanstack/react-query'; -import { useRef } from 'react'; +import React, { useRef } from 'react'; import { FailedList } from '../../../components/List/FailedList'; import WidgetContainer from '../../../components/WidgetContainer'; import { useGraphQLRequests } from '../../../hooks/useGraphQLRequests'; @@ -12,6 +12,12 @@ import { compositePoolInfo } from '../utils'; import { Trans } from '@lingui/macro'; import { formatApy, formatReadableNumber } from '../../../utils'; import PoolInfo from './PoolInfo'; +import MyAssets from './MyAssets'; +import Ve33PoolOperateDialog from '../Ve33PoolOperate'; +import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; +import MyPosition from './MyPosition'; +import { OperateTypeE, PoolTypeE } from '../types'; export interface Ve33PoolDetailProps { id: string; @@ -26,6 +32,11 @@ export const Ve33PoolDetail = ({ }: Ve33PoolDetailProps) => { const graphQLRequests = useGraphQLRequests(); const theme = useTheme(); + const { isMobile } = useWidgetDevice(); + const { account } = useWalletInfo(); + const [showOperate, setShowOperate] = React.useState( + null, + ); const scrollParentRef = useRef(null); @@ -42,6 +53,7 @@ export const Ve33PoolDetail = ({ const poolInfo = fetchResult.data?.ve33_getPool ? compositePoolInfo(fetchResult.data.ve33_getPool, chainId) : null; + const isV3 = poolInfo?.type === PoolTypeE.CLPool; return ( @@ -61,6 +74,7 @@ export const Ve33PoolDetail = ({ display: 'flex', alignItems: 'flex-start', gap: 20, + flexDirection: isMobile ? 'column' : undefined, }} > {fetchResult.error ? ( @@ -78,6 +92,7 @@ export const Ve33PoolDetail = ({ sx={{ flex: 1, borderRadius: 24, + maxWidth: '100%', }} /> @@ -99,6 +115,7 @@ export const Ve33PoolDetail = ({ overflow: 'hidden', height: 'max-content', maxHeight: '100%', + maxWidth: '100%', }} > - - My Assets - - - My Position - - - - {poolInfo?.title} + {!!account && + (isV3 ? ( + + + + ) : ( + + + + ))} + setShowOperate(null)} + account={account} + errorRefetch={ + fetchResult.isError ? fetchResult.refetch : undefined + } + /> )} + {isMobile && ( + + {isV3 ? ( + + ) : ( + <> + + + + )} + + )} ); }; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/useVe33V3Positions.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/useVe33V3Positions.ts new file mode 100644 index 00000000..6f166b11 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/useVe33V3Positions.ts @@ -0,0 +1,171 @@ +import { + getFetchVE33NonfungiblePositionManagerBalanceOfQueryOptions, + getFetchVE33NonfungiblePositionManagerTokenOfOwnerByIndexQueryOptions, + getFetchVE33NonfungiblePositionManagerPositionsQueryOptions, + getFetchVE33V3PairSlot0QueryOptions, + getFetchVE33V3GaugeStakedValuesQueryOptions, +} from '@dodoex/dodo-contract-request'; +import { useQueries, useQuery } from '@tanstack/react-query'; +import { increaseArray } from '../../../utils/utils'; +import { PoolTypeE, Ve33PoolInfoI } from '../types'; +import React from 'react'; +import { + getPositionAmount0, + getPositionAmount1, +} from '../Ve33V3PoolOperate/utils/getPositionAmount'; +import BigNumber from 'bignumber.js'; + +export function useVe33V3Positions({ + poolInfo, + account, +}: { + poolInfo?: Ve33PoolInfoI; + account?: string; +}) { + const isV3 = poolInfo?.type === PoolTypeE.CLPool; + const fetchBalance = useQuery({ + ...getFetchVE33NonfungiblePositionManagerBalanceOfQueryOptions( + isV3 ? poolInfo?.chainId : undefined, + account, + ), + refetchOnMount: false, + }); + const fetchTokenIds = useQueries({ + queries: (fetchBalance.data + ? increaseArray(Number(fetchBalance.data)) + : [] + ).map((_, i) => { + return getFetchVE33NonfungiblePositionManagerTokenOfOwnerByIndexQueryOptions( + poolInfo?.chainId, + account, + i, + ); + }), + }); + const fetchStakedValues = useQuery({ + ...getFetchVE33V3GaugeStakedValuesQueryOptions( + isV3 ? poolInfo?.chainId : undefined, + poolInfo?.gaugeAddress, + account, + ), + refetchOnMount: false, + }); + const tokenIds = React.useMemo(() => { + const result = fetchStakedValues.data?.map((id) => Number(id)) ?? []; + fetchTokenIds.forEach((tokenIdQuery) => { + const id = Number(tokenIdQuery.data); + if (tokenIdQuery.data !== undefined && !result.includes(id)) { + result.push(id); + } + }); + return result; + }, [fetchTokenIds, fetchStakedValues.data]); + + const fetchPositions = useQueries({ + queries: tokenIds.map((tokenId) => { + return getFetchVE33NonfungiblePositionManagerPositionsQueryOptions( + poolInfo?.chainId, + tokenId, + ); + }), + }); + + const fetchGlobalState = useQuery( + getFetchVE33V3PairSlot0QueryOptions(poolInfo?.chainId, poolInfo?.id), + ); + + const positionsQuery = React.useMemo(() => { + return fetchPositions.map((positionQuery, i) => { + const tokenId = tokenIds[i]; + const position = convertPositionData(positionQuery.data); + const tickCurrent = Number(fetchGlobalState.data?.tick); + const amount0 = + position && tickCurrent + ? getPositionAmount0({ + tickCurrent, + tickLower: Number(position?.tickLower), + tickUpper: Number(position?.tickUpper), + liquidity: position?.liquidity?.toString() || '0', + roundUp: false, + sqrtRatioX96: fetchGlobalState.data?.sqrtPriceX96, + }) + : null; + const amount1 = + position && tickCurrent + ? getPositionAmount1({ + tickCurrent, + tickLower: Number(position?.tickLower), + tickUpper: Number(position?.tickUpper), + liquidity: position?.liquidity?.toString() || '0', + roundUp: false, + sqrtRatioX96: fetchGlobalState.data?.sqrtPriceX96, + }) + : null; + return { + isLoading: positionQuery.isLoading || fetchGlobalState.isLoading, + refetch: positionQuery.refetch, + errorRefetch: + positionQuery.isError || fetchGlobalState.isError + ? () => { + if (positionQuery.isError) { + positionQuery.refetch(); + } + if (fetchGlobalState.isError) { + fetchGlobalState.refetch(); + } + } + : undefined, + data: + position && amount0 && amount1 && poolInfo + ? { + ...position, + tokenId, + amount0: new BigNumber(amount0.toString()) + .div(10 ** poolInfo.baseToken.decimals) + .toNumber(), + amount1: new BigNumber(amount1.toString()) + .div(10 ** poolInfo.quoteToken.decimals) + .toNumber(), + tickCurrent, + } + : null, + }; + }); + }, [tokenIds, fetchPositions, fetchGlobalState, poolInfo]); + + return { + positionsQuery, + fetchBalance, + fetchPositions, + fetchGlobalState, + fetchStakedValues, + }; +} + +export function convertPositionData( + data: + | Awaited< + ReturnType< + ReturnType< + typeof getFetchVE33NonfungiblePositionManagerPositionsQueryOptions + >['queryFn'] + > + > + | undefined, +) { + return data + ? { + feeGrowthInside0LastX128: data.feeGrowthInside0LastX128, + feeGrowthInside1LastX128: data.feeGrowthInside1LastX128, + liquidity: data.liquidity, + nonce: data.nonce, + operator: data.operator, + tickLower: data.tickLower, + tickUpper: data.tickUpper, + token0: data.token0, + token1: data.token1, + tokensOwed0: data.tokensOwed0, + tokensOwed1: data.tokensOwed1, + } + : null; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33StakeDialog.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33StakeDialog.tsx new file mode 100644 index 00000000..2e91348b --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33StakeDialog.tsx @@ -0,0 +1,800 @@ +import { + getFetchVE33V2GaugeBalanceOfQueryOptions, + getFetchVE33V2PairBalanceOfQueryOptions, + getFetchVE33V3GaugeStakedContainsQueryOptions, +} from '@dodoex/dodo-contract-request'; +import { useQuery } from '@tanstack/react-query'; +import { Error } from '@dodoex/icons'; +import { PoolTypeE, Ve33PoolInfoI } from './types'; +import Dialog from '../../components/Dialog'; +import { useWidgetDevice } from '../../hooks/style/useWidgetDevice'; +import { + Box, + Button, + TabPanel, + Tabs, + TabsButtonGroup, + useTheme, +} from '@dodoex/components'; +import { RemoveButton } from './Ve33V3PoolOperate/components/RemoveButton'; +import { FailedList } from '../../components/List/FailedList'; +import { + CardPlusConnected, + TokenCard, +} from '../../components/Swap/components/TokenCard'; +import { t, Trans } from '@lingui/macro'; +import React from 'react'; +import { PoolHead } from './components/PoolHead'; +import NeedConnectButton from '../../components/ConnectWallet/NeedConnectButton'; +import BigNumber from 'bignumber.js'; +import TokenStatusButton from '../../components/TokenStatusButton'; +import useVe33V3StakeApproveStatus from './hooks/useVe33V3StakeApproveStatus'; +import { + getPositionAmount0, + getPositionAmount1, +} from './Ve33V3PoolOperate/utils/getPositionAmount'; +import { TokenInfo } from '../../hooks/Token'; +import { SliderPercentageCard } from './Ve33V2PoolOperate/components/SliderPercentageCard'; +import { useVe33V3Stake } from './hooks/useVe33V3Stake'; +import { useVe33V3UnStake } from './hooks/useVe33V3UnStake'; +import { useVe33PositionAmounts } from './hooks/useVe33PositionAmounts'; +import { useWalletInfo } from '../../hooks/ConnectWallet/useWalletInfo'; +import { useTokenStatus } from '../../hooks/Token/useTokenStatus'; +import { useVe33V2Stake } from './hooks/useVe33V2Stake'; +import { TokenLpCard } from '../../components/Swap/components/TokenCard/TokenLpCard'; +import { formatUnits } from '@dodoex/contract-request'; +import { useVe33V2UnStake } from './hooks/useVe33V2UnStake'; +import { byWei } from '../../utils'; + +export enum OperateType { + Stake = 1, + UnStake, +} + +export default function Ve33StakeDialog({ + poolInfo, + tokenId, + operateType: operateTypeProps, + onClose, +}: { + poolInfo?: Ve33PoolInfoI; + tokenId?: number; + operateType?: OperateType; + onClose: () => void; +}) { + const { isMobile } = useWidgetDevice(); + const theme = useTheme(); + + const [operateType, setOperateType] = React.useState( + operateTypeProps ?? OperateType.Stake, + ); + React.useEffect(() => { + if (operateTypeProps) { + setOperateType(operateTypeProps); + } + }, [operateTypeProps]); + const operateTypes = [ + { key: OperateType.Stake, value: t`Stake` }, + { key: OperateType.UnStake, value: t`UnStake` }, + ]; + + const isV2 = poolInfo?.type === PoolTypeE.Pool; + + return ( + + + + {poolInfo && ( + + )} + + {onClose ? ( + + { + onClose(); + }} + /> + + ) : undefined} + + + { + setOperateType(value as OperateType); + }} + > + + + {isV2 ? ( + + ) : ( + + )} + + + {isV2 ? ( + + ) : ( + + )} + + + + + ); +} + +function StakeV3Panel({ + poolInfo, + tokenId, + onClose, +}: { + poolInfo?: Ve33PoolInfoI; + tokenId?: number; + onClose: () => void; +}) { + const theme = useTheme(); + const [percentage, setPercentage] = React.useState(100); + const stakeTokenStatus = useVe33V3StakeApproveStatus({ + poolInfo, + tokenId, + }); + const { account } = useWalletInfo(); + const fetchStakedContains = useQuery( + getFetchVE33V3GaugeStakedContainsQueryOptions( + poolInfo?.chainId, + poolInfo?.gaugeAddress, + account, + tokenId, + ), + ); + + const { + isLoading: isLoadingPositionAmounts, + liquidity, + tickCurrent, + tickLower, + tickUpper, + sqrtPriceX96, + amount0Bg, + amount1Bg, + refetch: refetchPositionAmounts, + errorRefetch: errorRefetchPositionAmounts, + } = useVe33PositionAmounts({ + poolInfo, + tokenId, + }); + const isLoading = isLoadingPositionAmounts || fetchStakedContains.isLoading; + const errorRefetch = + errorRefetchPositionAmounts || fetchStakedContains.isError + ? () => { + errorRefetchPositionAmounts?.(); + if (fetchStakedContains.isError) { + fetchStakedContains.refetch(); + } + } + : undefined; + const refetch = () => { + refetchPositionAmounts(); + fetchStakedContains.refetch(); + }; + + const addLiquidity = + !fetchStakedContains.data && liquidity + ? new BigNumber(liquidity.toString()).times(percentage / 100) + : null; + + const addAmount0 = + addLiquidity && tickCurrent + ? new BigNumber( + getPositionAmount0({ + tickCurrent, + tickLower: tickLower!, + tickUpper: tickUpper!, + liquidity: addLiquidity?.toString() || '0', + roundUp: false, + sqrtRatioX96: sqrtPriceX96, + }).toString(), + ) + .div(10 ** poolInfo?.baseToken.decimals!) + .toString() + : ''; + const addAmount1 = + addLiquidity && tickCurrent + ? new BigNumber( + getPositionAmount1({ + tickCurrent, + tickLower: tickLower!, + tickUpper: tickUpper!, + liquidity: addLiquidity?.toString() || '0', + roundUp: false, + sqrtRatioX96: sqrtPriceX96, + }).toString(), + ) + .div(10 ** poolInfo?.quoteToken.decimals!) + .toString() + : ''; + + const stakeMutation = useVe33V3Stake({ + gaugeAddress: poolInfo?.gaugeAddress, + tokenId, + refetch: () => { + refetch(); + onClose(); + }, + }); + + return ( + <> + {!!errorRefetch && } + + + + + + + + + + + + + ); +} + +function UnStakeV3Panel({ + poolInfo, + tokenId, + onClose, +}: { + poolInfo?: Ve33PoolInfoI; + tokenId?: number; + onClose: () => void; +}) { + const theme = useTheme(); + const [percentage, setPercentage] = React.useState(100); + const { account } = useWalletInfo(); + const fetchStakedContains = useQuery( + getFetchVE33V3GaugeStakedContainsQueryOptions( + poolInfo?.chainId, + poolInfo?.gaugeAddress, + account, + tokenId, + ), + ); + + const { + isLoading: isLoadingPositionAmounts, + liquidity, + tickCurrent, + tickLower, + tickUpper, + sqrtPriceX96, + amount0Bg, + amount1Bg, + refetch: refetchPositionAmounts, + errorRefetch: errorRefetchPositionAmounts, + } = useVe33PositionAmounts({ + poolInfo, + tokenId, + }); + const isLoading = isLoadingPositionAmounts || fetchStakedContains.isLoading; + const errorRefetch = + errorRefetchPositionAmounts || fetchStakedContains.isError + ? () => { + errorRefetchPositionAmounts?.(); + if (fetchStakedContains.isError) { + fetchStakedContains.refetch(); + } + } + : undefined; + const refetch = () => { + refetchPositionAmounts(); + fetchStakedContains.refetch(); + }; + + const removeLiquidity = + fetchStakedContains.data && liquidity + ? new BigNumber(liquidity.toString()).times(percentage / 100) + : null; + const removeAmount0 = + removeLiquidity && tickCurrent + ? new BigNumber( + getPositionAmount0({ + tickCurrent, + tickLower: tickLower!, + tickUpper: tickUpper!, + liquidity: removeLiquidity?.toString() || '0', + roundUp: false, + sqrtRatioX96: sqrtPriceX96, + }).toString(), + ) + .div(10 ** poolInfo?.baseToken.decimals!) + .toString() + : ''; + const removeAmount1 = + removeLiquidity && tickCurrent + ? new BigNumber( + getPositionAmount1({ + tickCurrent, + tickLower: tickLower!, + tickUpper: tickUpper!, + liquidity: removeLiquidity?.toString() || '0', + roundUp: false, + sqrtRatioX96: sqrtPriceX96, + }).toString(), + ) + .div(10 ** poolInfo?.quoteToken.decimals!) + .toString() + : ''; + + const unStakeMutation = useVe33V3UnStake({ + gaugeAddress: poolInfo?.gaugeAddress, + tokenId, + refetch: () => { + refetch(); + onClose(); + }, + }); + + const removed = !liquidity; + + return ( + <> + {!!errorRefetch && } + + + + + + + + + ); +} + +function StakeV2Panel({ + poolInfo, + onClose, +}: { + poolInfo?: Ve33PoolInfoI; + onClose: () => void; +}) { + const theme = useTheme(); + const [percentage, setPercentage] = React.useState(100); + const { account } = useWalletInfo(); + const fetchLiquidity = useQuery( + getFetchVE33V2PairBalanceOfQueryOptions( + poolInfo?.chainId, + poolInfo?.id, + account, + ), + ); + const isLoading = fetchLiquidity.isLoading; + const errorRefetch = fetchLiquidity.isError + ? () => { + if (fetchLiquidity.isError) { + fetchLiquidity.refetch(); + } + } + : undefined; + const refetch = () => { + fetchLiquidity.refetch(); + }; + + const liquidity = fetchLiquidity.data; + const addLiquidity = liquidity + ? new BigNumber(liquidity.toString()).times(percentage / 100) + : null; + + const stakeTokenStatus = useTokenStatus( + poolInfo + ? { + symbol: `vAMM-${poolInfo.baseToken.symbol}/${poolInfo.quoteToken.symbol}`, + name: `Volatile AMM - ${poolInfo.baseToken.symbol}/${poolInfo.quoteToken.symbol}`, + decimals: 18, + address: poolInfo.id, + chainId: poolInfo.chainId, + } + : null, + { + contractAddress: poolInfo?.gaugeAddress, + amount: addLiquidity?.toString(), + overrideBalance: liquidity + ? new BigNumber(liquidity?.toString()) + : undefined, + }, + ); + + const stakeMutation = useVe33V2Stake({ + gaugeAddress: poolInfo?.gaugeAddress, + amount: addLiquidity?.toString() ?? '', + refetch: () => { + refetch(); + onClose(); + }, + }); + + return ( + <> + {!!errorRefetch && } + + + {}} + overrideBalance={ + liquidity ? new BigNumber(formatUnits(liquidity, 18)) : undefined + } + overrideBalanceLoading={isLoading} + /> + + + + + + + + + + + ); +} + +function UnStakeV2Panel({ + poolInfo, + onClose, +}: { + poolInfo?: Ve33PoolInfoI; + onClose: () => void; +}) { + const theme = useTheme(); + const [percentage, setPercentage] = React.useState(100); + const { account } = useWalletInfo(); + const fetchLiquidity = useQuery( + getFetchVE33V2GaugeBalanceOfQueryOptions( + poolInfo?.chainId, + poolInfo?.gaugeAddress, + account, + ), + ); + const isLoading = fetchLiquidity.isLoading; + const errorRefetch = fetchLiquidity.isError + ? () => { + if (fetchLiquidity.isError) { + fetchLiquidity.refetch(); + } + } + : undefined; + const refetch = () => { + fetchLiquidity.refetch(); + }; + + const liquidity = fetchLiquidity.data; + const removeLiquidity = liquidity + ? new BigNumber(liquidity.toString()).times(percentage / 100) + : null; + + const unStakeMutation = useVe33V2UnStake({ + gaugeAddress: poolInfo?.gaugeAddress, + amount: removeLiquidity?.toString() ?? '', + refetch: () => { + refetch(); + onClose(); + }, + }); + + const removed = !liquidity; + + return ( + <> + {!!errorRefetch && } + + + {}} + overrideBalance={ + liquidity ? new BigNumber(formatUnits(liquidity, 18)) : undefined + } + overrideBalanceLoading={isLoading} + /> + + + + + + + ); +} + +function InputGroup({ + amt0, + amt1, + percentage, + onChangePercentage, + overrideBalance0, + overrideBalance1, + overrideBalanceLoading, + baseToken, + quoteToken, + disabled, +}: { + amt0: string; + amt1: string; + percentage: number; + onChangePercentage: (p: number) => void; + overrideBalance0: BigNumber | null; + overrideBalance1: BigNumber | null; + overrideBalanceLoading: boolean; + baseToken: TokenInfo | undefined; + quoteToken: TokenInfo | undefined; + disabled?: boolean; +}) { + return ( + <> + + {}} + /> + + {}} + /> + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/components/SliderPercentageCard.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/components/SliderPercentageCard.tsx index 1a7179a8..a2aa9e5a 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/components/SliderPercentageCard.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/components/SliderPercentageCard.tsx @@ -29,46 +29,52 @@ export function SliderPercentageCard({ value, onChange, sx, + hideNumberInput, }: { disabled?: boolean; value: number; onChange: (val: number) => void; sx?: BoxProps['sx']; + hideNumberInput?: boolean; }) { return ( - onChange(+str)} - readOnly - readonlyShowSuffix - suffix={ - - % - - } - sx={{ - mt: 12, - '& input': { - pl: 0, - typography: 'h1', - }, - }} - /> + {!hideNumberInput && ( + onChange(+str)} + readOnly + readonlyShowSuffix + suffix={ + + % + + } + sx={{ + mt: 12, + '& input': { + pl: 0, + typography: 'h1', + }, + }} + /> + )} onChange(newVal as number)} + tooltip={hideNumberInput ? '%' : undefined} /> diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2BalanceInfo.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2BalanceInfo.ts index f0277a7a..e6c54bc1 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2BalanceInfo.ts +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2BalanceInfo.ts @@ -60,7 +60,7 @@ export function useVe33V2BalanceInfo({ ? new BigNumber(formatUnits(reserveQuery.data._reserve1, token1Decimals)) : undefined; - const [_, userLpToToken0] = getLpToTokenBalance( + const [baseLpToTokenProportion, userLpToToken0] = getLpToTokenBalance( userLp, totalLp, token0Reserve, @@ -69,7 +69,7 @@ export function useVe33V2BalanceInfo({ undefined, lpDecimals, ); - const [__, userLpToToken1] = getLpToTokenBalance( + const [quoteLpToTokenProportion, userLpToToken1] = getLpToTokenBalance( userLp, totalLp, token1Reserve, @@ -183,6 +183,9 @@ export function useVe33V2BalanceInfo({ totalLpQuery, reserveQuery, + baseLpToTokenProportion, + quoteLpToTokenProportion, + userLp, totalLp, token0Reserve, diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/index.tsx index ba28bfef..dd0d3c6c 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/index.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V2PoolOperate/index.tsx @@ -67,6 +67,11 @@ export function Ve33V2PoolOperate({ }: PoolOperateProps) { const { operateTab, operateTabs, handleChangeTab } = usePoolOperateTabs(operate); + React.useEffect(() => { + if (operate && operate !== operateTab) { + handleChangeTab(operate); + } + }, [operate]); const chainId = pool?.chainId; const balanceInfo = useVe33V2BalanceInfo({ diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx index 12749d6b..a794403e 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx @@ -410,6 +410,9 @@ export default function Ve33V3AddLiquidity({ void) | undefined; + dialog?: boolean; +} + +enum OperateType { + Add = 1, + Remove, +} + +export default function PositionManage({ + dialog, + ...props +}: AMMV3PositionManageProps) { + const { isMobile } = useWidgetDevice(); + + if (dialog || isMobile) { + return ( + + + + + + ); + } + + return ; +} + +function PositionManageInner({ + poolInfo, + tokenId, + onClose, +}: AMMV3PositionManageProps) { + const theme = useTheme(); + const { chainId, baseToken, quoteToken } = poolInfo || {}; + + const { account } = useWalletInfo(); + + const [operateType, setOperateType] = useState(OperateType.Add); + const [showConfirm, setShowConfirm] = useState(false); + + const { slipper, setSlipper, slipperValue, resetSlipper } = useSlipper({ + type: PoolTypeE.CLPool, + }); + + const pair = useVe33V3Pair({ + address: poolInfo?.id, + baseToken, + quoteToken, + }); + const { + isRearTokenA, + address: poolAddress, + currentTick: tickCurrent, + price, + } = pair; + const sorted = !isRearTokenA; + const token0 = pair.token0Wrapped as TokenInfo; + const token1 = pair.token1Wrapped as TokenInfo; + const fetchPosition = useQuery( + getFetchVE33NonfungiblePositionManagerPositionsQueryOptions( + chainId, + tokenId ? Number(tokenId) : undefined, + ), + ); + const existingPositionDetails = convertPositionData(fetchPosition.data); + let existsPoolAmount0: JSBI | undefined; + let existsPoolAmount1: JSBI | undefined; + let tickLower: number | undefined; + let tickUpper: number | undefined; + if (tickCurrent && existingPositionDetails) { + tickLower = Number(existingPositionDetails.tickLower); + tickUpper = Number(existingPositionDetails.tickUpper); + existsPoolAmount0 = getPositionAmount0({ + tickCurrent, + tickLower, + tickUpper, + liquidity: existingPositionDetails.liquidity, + }); + existsPoolAmount1 = getPositionAmount1({ + tickCurrent, + tickLower, + tickUpper, + liquidity: existingPositionDetails.liquidity, + }); + } + + const amounts = useVe33V3Amounts({ + baseToken, + quoteToken, + sqrtRatioX96: tickCurrent + ? TickMath.getSqrtRatioAtTick(tickCurrent) + : undefined, + tickCurrent, + tickLower, + tickUpper, + }); + const addAmount0 = sorted ? amounts.baseAmount : amounts.quoteAmount; + const addAmount1 = !sorted ? amounts.baseAmount : amounts.quoteAmount; + + const [sliderPercentage, setSliderPercentage] = + useState(initSliderPercentage); + let removeAmount0Bg: BigNumber | undefined; + let removeAmount1Bg: BigNumber | undefined; + if (sliderPercentage === 100) { + removeAmount0Bg = existsPoolAmount0 + ? new BigNumber(existsPoolAmount0.toString()) + : undefined; + removeAmount1Bg = existsPoolAmount1 + ? new BigNumber(existsPoolAmount1.toString()) + : undefined; + } else { + removeAmount0Bg = existsPoolAmount0 + ? new BigNumber(existsPoolAmount0.toString()) + .times(sliderPercentage / 100) + .dp(0, BigNumber.ROUND_DOWN) + : undefined; + removeAmount1Bg = existsPoolAmount1 + ? new BigNumber(existsPoolAmount1.toString()) + .times(sliderPercentage / 100) + .dp(0, BigNumber.ROUND_DOWN) + : undefined; + } + const removed = existingPositionDetails?.liquidity === BigInt(0); + const isInvalidPair = + !baseToken || + !quoteToken || + baseToken.chainId !== quoteToken.chainId || + baseToken.address === quoteToken.address || + !poolAddress; + let errorMessage: React.ReactNode | undefined; + if (!account) { + errorMessage = t`Connect to a wallet`; + } + + if (isInvalidPair) { + errorMessage = errorMessage ?? t`Invalid pair`; + } + if (!amounts.readonly && (!amounts.baseAmount || !amounts.quoteAmount)) { + errorMessage = errorMessage ?? t`Enter an amount`; + } + + const proxyContract = chainId + ? getVE33NonfungiblePositionManagerContractAddressByChainId(chainId) + : undefined; + const baseTokenStatus = useTokenStatus(baseToken, { + amount: amounts.baseAmount, + contractAddress: proxyContract, + }); + const quoteTokenStatus = useTokenStatus(quoteToken, { + amount: amounts.quoteAmount, + contractAddress: proxyContract, + }); + + const onAddMutation = useAddVe33V3Liquidity(); + + const onRemoveMutation = useRemoveVe33V3Liquidity(); + + const operateTypes = [ + { key: OperateType.Add, value: t`Add` }, + { key: OperateType.Remove, value: t`Remove` }, + ]; + + const loading = + pair.fetchGlobalState.isLoading || + fetchPosition.isLoading || + pair.fetchLiquidity.isLoading || + pair.fetchTickSpacing.isLoading; + + const successBack = () => { + resetSlipper(); + amounts.reset(); + setShowConfirm(false); + }; + + let errorRefetch: undefined | (() => void); + if (fetchPosition.isError) { + errorRefetch = fetchPosition.refetch; + } else if (pair.fetchGlobalState.isError) { + errorRefetch = pair.fetchGlobalState.refetch; + } else if (pair.fetchTickSpacing.isError) { + errorRefetch = pair.fetchTickSpacing.refetch; + } else if (pair.fetchLiquidity.isError) { + errorRefetch = pair.fetchLiquidity.refetch; + } + + const disabledStake = + !baseToken || + !quoteToken || + !amounts.baseAmount || + !amounts.quoteAmount || + !!isInvalidPair || + loading; + + return ( + + + {poolInfo && ( + + )} + + {onClose ? ( + + { + onClose(); + }} + /> + + ) : undefined} + + + { + setOperateType(value as OperateType); + }} + > + + + {!!errorRefetch && } + + + + + + + {t`Add more liquidity`} + + + + + + + + + + + + + + + + + + { + setShowConfirm(false); + }} + onConfirm={() => { + if ( + tickCurrent === undefined || + tickLower === undefined || + tickUpper === undefined || + !baseToken || + !quoteToken + ) + return; + const addAmount0Wei = parseUnits( + addAmount0, + token0.decimals, + ).toString(); + const addAmount1Wei = parseUnits( + addAmount1, + token1.decimals, + ).toString(); + const slippageTolerance = toSlippagePercent(slipperValue * 100); + const minimumAmounts = mintAmountsWithSlippage( + tickCurrent, + slippageTolerance, + tickLower, + tickUpper, + baseToken, + quoteToken, + addAmount0Wei, + addAmount1Wei, + ); + onAddMutation.mutate({ + pool: pair, + successBack, + amount0: addAmount0Wei, + amount1: addAmount1Wei, + amount0Min: String(minimumAmounts.amount0), + amount1Min: String(minimumAmounts.amount1), + recipient: account, + tickLower, + tickUpper, + tickSpacing: pair.tickSpacing, + // If not 0, a pool will be created + sqrtPriceX96: '0', + }); + }} + loading={onAddMutation.isPending} + inRange + /> + + + + {fetchPosition.isLoading ? ( + + {increaseArray(4).map((_, i) => ( + + ))} + + ) : fetchPosition.isError ? ( + + ) : ( + setSliderPercentage(v)} + /> + )} + + + + + Receive + + + + + {removeAmount0Bg + ? formatTokenAmountNumber({ + input: byWei(removeAmount0Bg, token0.decimals), + decimals: token0.decimals, + }) + : '-'} + +  {token0?.symbol} + + + + {removeAmount1Bg + ? formatTokenAmountNumber({ + input: byWei(removeAmount1Bg, token1.decimals), + decimals: token1.decimals, + }) + : '-'} + +  {token1?.symbol} + + + + + { + if ( + !existingPositionDetails || + tickCurrent === undefined || + tickLower === undefined || + tickUpper === undefined || + !removeAmount0Bg || + !removeAmount1Bg || + !account + ) + return; + const newLiquidity = + sliderPercentage === 100 + ? existingPositionDetails.liquidity.toString() + : new BigNumber( + existingPositionDetails.liquidity.toString(), + ) + .times(sliderPercentage / 100) + .toFixed(0, BigNumber.ROUND_DOWN); + const slippageTolerance = toSlippagePercent(slipperValue * 100); + const minimumAmounts = burnAmountsWithSlippage( + tickCurrent, + slippageTolerance, + tickLower, + tickUpper, + newLiquidity, + baseToken!, + quoteToken!, + ); + onRemoveMutation.mutate({ + chainId, + tokenId, + successBack, + amount0Min: String(minimumAmounts.amount0), + amount1Min: String(minimumAmounts.amount1), + newLiquidity, + collectOptions: { + expectedCurrencyOwed0: removeAmount0Bg, + expectedCurrencyOwed1: removeAmount1Bg, + recipient: account, + }, + }); + }} + isLoading={onRemoveMutation.isPending} + /> + + + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RangeRatioSelect.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RangeRatioSelect.tsx index 96c0a1e3..f30d60c8 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RangeRatioSelect.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RangeRatioSelect.tsx @@ -60,10 +60,10 @@ export default function RangeRatioSelect({ backgroundColor: 'background.paperDarkContrast', } : { - '&:nth-child(odd)': { + '&:nth-of-type(odd)': { borderRightWidth: 0, }, - '&:not(:nth-child(-n + 2))': { + '&:not(:nth-of-type(-n + 2))': { borderTopWidth: 0, }, }), diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RemoveButton.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RemoveButton.tsx index fe0a2b9e..9556c96a 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RemoveButton.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/components/RemoveButton.tsx @@ -11,6 +11,7 @@ export interface ButtonsProps { error?: React.ReactNode; onConfirm: () => void; border?: boolean; + removeText?: React.ReactNode; } export const RemoveButton = ({ @@ -21,6 +22,7 @@ export const RemoveButton = ({ error, onConfirm, border, + removeText, }: ButtonsProps) => { return ( - {removed ? t`Closed` : (error ?? t`Remove`)} + {removed ? t`Closed` : (error ?? removeText ?? t`Remove`)} ); diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useAddVe33V3Liquidity.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useAddVe33V3Liquidity.ts index 5cec8d27..b2548a15 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useAddVe33V3Liquidity.ts +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useAddVe33V3Liquidity.ts @@ -13,9 +13,11 @@ import { encodeVE33NonfungiblePositionManagerRefundETH, getVE33NonfungiblePositionManagerContractAddressByChainId, } from '@dodoex/dodo-contract-request'; +import { useUserOptions } from '../../../../components/UserOptionsProvider'; export function useAddVe33V3Liquidity() { const submission = useSubmission(); + const { deadLine: ddl } = useUserOptions(); return useMutation({ mutationFn: async ({ @@ -47,7 +49,7 @@ export function useAddVe33V3Liquidity() { }) => { if (!pool?.token0Wrapped || !pool.token1Wrapped) return; const calldatas: string[] = []; - const deadline = Math.ceil(Date.now() / 1000) + 10 * 60; + const deadline = Math.ceil(Date.now() / 1000) + (ddl ?? 10 * 60); const title = t`Add Liquidity`; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useRemoveVe33V3Liquidity.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useRemoveVe33V3Liquidity.ts new file mode 100644 index 00000000..e397b656 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useRemoveVe33V3Liquidity.ts @@ -0,0 +1,110 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../../hooks/Submission'; +import { OpCode } from '../../../../hooks/Submission/spec'; +import { t } from '@lingui/macro'; +import { MetadataFlag } from '../../../../hooks/Submission/types'; +import { useMessageState } from '../../../../hooks/useMessageState'; +import { toHex } from '../utils/calldata'; +import { + encodeVE33NonfungiblePositionManagerCollect, + encodeVE33NonfungiblePositionManagerDecreaseLiquidity, + encodeVE33NonfungiblePositionManagerMulticall, + getVE33NonfungiblePositionManagerContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; +import BigNumber from 'bignumber.js'; +import { useUserOptions } from '../../../../components/UserOptionsProvider'; + +export function useRemoveVe33V3Liquidity() { + const submission = useSubmission(); + const { deadLine: ddl } = useUserOptions(); + + return useMutation({ + mutationFn: async ({ + chainId, + tokenId: tokenIdProps, + amount0Min, + amount1Min, + newLiquidity, + collectOptions, + successBack, + }: { + chainId?: number; + tokenId?: number | string; + amount0Min: string; + amount1Min: string; + newLiquidity: string; + collectOptions: { + expectedCurrencyOwed0: BigNumber; + expectedCurrencyOwed1: BigNumber; + recipient: string; + }; + successBack?: () => void; + }) => { + if (!tokenIdProps || !chainId) return; + const calldatas: string[] = []; + const tokenId = toHex(tokenIdProps); + const deadline = Math.ceil(Date.now() / 1000) + (ddl ?? 10 * 60); + + const title = t`Remove Liquidity`; + + try { + // if (permit) { + // } + + // remove liquidity + calldatas.push( + encodeVE33NonfungiblePositionManagerDecreaseLiquidity({ + tokenId, + liquidity: toHex(newLiquidity), + amount0Min: toHex(amount0Min), + amount1Min: toHex(amount1Min), + deadline, + }), + ); + + calldatas.push( + encodeVE33NonfungiblePositionManagerCollect({ + tokenId, + recipient: collectOptions.recipient, + amount0Max: collectOptions.expectedCurrencyOwed0 + .plus(amount0Min) + .toString(), + amount1Max: collectOptions.expectedCurrencyOwed1 + .plus(amount1Min) + .toString(), + }), + ); + + // if (options.liquidityPercentage.equalTo(ONE)) { + // } + + const value: string = toHex(0); + + return submission.execute( + title, + { + opcode: OpCode.TX, + to: getVE33NonfungiblePositionManagerContractAddressByChainId( + chainId, + ), + value, + data: encodeVE33NonfungiblePositionManagerMulticall(calldatas), + }, + { + early: false, + metadata: { + [MetadataFlag.removeLiquidityVe33V3Position]: '1', + }, + successBack, + }, + ); + } catch (e) { + console.error(e); + useMessageState.getState().toast({ + message: `${title} error: ${e}`, + type: 'error', + }); + } + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33PoolPositions.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33PoolPositions.ts deleted file mode 100644 index cb6bef6b..00000000 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/hooks/useVe33PoolPositions.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { getFetchVE33NonfungiblePositionManagerBalanceOfQueryOptions } from '@dodoex/dodo-contract-request'; -import { useQuery } from '@tanstack/react-query'; -import React from 'react'; -import { increaseArray } from '../../../../utils/utils'; - -export function useVe33PoolPositions({ - address, - chainId, - account, -}: { - address: string | undefined; - chainId: number | undefined; - account: string | undefined; -}) { - const balanceQuery = useQuery( - getFetchVE33NonfungiblePositionManagerBalanceOfQueryOptions( - chainId, - account, - ), - ); - const tokenIdsArgs = React.useMemo(() => { - if (!balanceQuery.data) return []; - return increaseArray(Number(balanceQuery.data)).map((_, i) => [account, i]); - }, [account, balanceQuery.data]); - - console.log(tokenIdsArgs); -} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getPositionAmount.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getPositionAmount.ts index 401dc057..b8a3a4ad 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getPositionAmount.ts +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33V3PoolOperate/utils/getPositionAmount.ts @@ -10,12 +10,14 @@ export function getPositionAmount0({ tickUpper, liquidity, roundUp, + sqrtRatioX96: sqrtRatioX96Props, }: { tickCurrent: number; tickLower: number; tickUpper: number; liquidity: number | bigint | JSBI | string; roundUp?: boolean; + sqrtRatioX96?: JSBI | bigint; }) { const liquidityJsbi = JSBI.BigInt(liquidity.toString()); if (tickCurrent < tickLower) { @@ -27,7 +29,9 @@ export function getPositionAmount0({ ); return amount; } else if (tickCurrent < tickUpper) { - const sqrtRatioX96 = TickMath.getSqrtRatioAtTick(tickCurrent); + const sqrtRatioX96 = sqrtRatioX96Props + ? JSBI.BigInt(sqrtRatioX96Props.toString()) + : TickMath.getSqrtRatioAtTick(tickCurrent); const amount = SqrtPriceMath.getAmount0Delta( sqrtRatioX96, TickMath.getSqrtRatioAtTick(tickUpper), @@ -46,18 +50,22 @@ export function getPositionAmount1({ tickUpper, liquidity, roundUp, + sqrtRatioX96: sqrtRatioX96Props, }: { tickCurrent: number; tickLower: number; tickUpper: number; liquidity: number | bigint | JSBI | string; roundUp?: boolean; + sqrtRatioX96?: bigint; }) { const liquidityJsbi = JSBI.BigInt(liquidity.toString()); if (tickCurrent < tickLower) { return ZERO; } else if (tickCurrent < tickUpper) { - const sqrtRatioX96 = TickMath.getSqrtRatioAtTick(tickCurrent); + const sqrtRatioX96 = sqrtRatioX96Props + ? JSBI.BigInt(sqrtRatioX96Props.toString()) + : TickMath.getSqrtRatioAtTick(tickCurrent); const amount = SqrtPriceMath.getAmount1Delta( TickMath.getSqrtRatioAtTick(tickLower), sqrtRatioX96, diff --git a/packages/dodoex-widgets/src/widgets/ve33/components/LockSlider.tsx b/packages/dodoex-widgets/src/widgets/ve33/components/LockSlider.tsx new file mode 100644 index 00000000..1bbd23f8 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/components/LockSlider.tsx @@ -0,0 +1,36 @@ +import { SliderProps } from '@dodoex/components'; +import { Slider } from '@dodoex/components'; +import { WEEK } from '../Ve33LockOperate/utils'; + +export default function LockSlider({ + currentValue, + ...props +}: SliderProps & { + currentValue?: boolean; +}) { + return ; +} + +export const MAX_LOCK_DURATION = 31536000; +const marks = [ + { + value: 0, + label: 'Min', + }, + { + value: 7776000, + label: '3 months', + }, + { + value: 15552000, + label: '6 months', + }, + { + value: 23328000, + label: '9 months', + }, + { + value: MAX_LOCK_DURATION, + label: '1 year', + }, +]; diff --git a/packages/dodoex-widgets/src/widgets/ve33/components/PoolHead.tsx b/packages/dodoex-widgets/src/widgets/ve33/components/PoolHead.tsx index a50737fb..d15d3138 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/components/PoolHead.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/components/PoolHead.tsx @@ -5,6 +5,7 @@ import { TokenLogoPair } from '../../../components/TokenLogoPair'; import { WIDGET_CLASS_NAME } from '../../../components/Widget'; import { Ve33PoolInfoI } from '../types'; import { PoolTypeTag } from './PoolTypeTag'; +import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; export interface PoolHeadProps { chainId: ChainId; @@ -19,10 +20,16 @@ export const PoolHead = ({ }: PoolHeadProps) => { const { baseToken, quoteToken } = poolInfo; const theme = useTheme(); + const { isMobile } = useWidgetDevice(); const isSmall = size === 'small'; - const tokenLogoWidth = isSmall ? 28 : 36; - const typography = isSmall ? 'body1' : 'h4'; + let tokenLogoWidth = isSmall ? 28 : 36; + let typography = isSmall ? 'body1' : 'h4'; + if (isMobile) { + tokenLogoWidth = isSmall ? 18 : 28; + typography = isSmall ? 'body1' : 'h5'; + } + return ( @@ -49,6 +57,7 @@ export const PoolHead = ({ sx={{ display: 'flex', alignItems: 'center', + flexWrap: 'wrap', gap: 4, typography, fontWeight: 600, diff --git a/packages/dodoex-widgets/src/widgets/ve33/components/widgets.tsx b/packages/dodoex-widgets/src/widgets/ve33/components/widgets.tsx index fa4e5827..dca1b741 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/components/widgets.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/components/widgets.tsx @@ -18,7 +18,7 @@ export const CardContainer = ({ title, children }: CardContainerProps) => { { + if (fetchGlobalState.isError) { + fetchGlobalState.refetch(); + } + if (fetchPosition.isError) { + fetchPosition.refetch(); + } + } + : undefined; + + return { + liquidity: existingPositionDetails?.liquidity, + isLoading: fetchGlobalState.isLoading || fetchPosition.isLoading, + tickCurrent, + tickLower, + tickUpper, + sqrtPriceX96: fetchGlobalState.data?.sqrtPriceX96, + amount0Bg, + amount1Bg, + refetch: () => { + fetchGlobalState.refetch(); + fetchPosition.refetch(); + }, + errorRefetch, + }; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2ClaimEmissions.ts b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2ClaimEmissions.ts new file mode 100644 index 00000000..ffb75f07 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2ClaimEmissions.ts @@ -0,0 +1,57 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../hooks/Submission/spec'; +import { useMessageState } from '../../../hooks/useMessageState'; +import { encodeVE33V2GaugeGetReward } from '@dodoex/dodo-contract-request'; +import { ExecutionResult, MetadataFlag } from '../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../hooks/contract'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; + +export function useVe33V2ClaimEmissions({ + gaugeAddress, + refetch, +}: { + gaugeAddress?: string; + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + const { account } = useWalletInfo(); + return useMutation({ + mutationFn: async () => { + const to = gaugeAddress || ''; + try { + if (!account) { + throw new Error('account is undefined'); + } + const data = await encodeVE33V2GaugeGetReward(account); + const result = await submission.execute( + t`Claim`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.claimEmissionsVe33V2Position]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to Claim:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2ClaimTradingFees.ts b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2ClaimTradingFees.ts new file mode 100644 index 00000000..35801045 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2ClaimTradingFees.ts @@ -0,0 +1,58 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../hooks/Submission/spec'; +import { useMessageState } from '../../../hooks/useMessageState'; +import { ExecutionResult, MetadataFlag } from '../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../hooks/contract'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; +import { encodeVE33V2PairClaimFees } from '@dodoex/dodo-contract-request'; + +export function useVe33V2ClaimTradingFees({ + address, + refetch, +}: { + address?: string; + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + const { chainId, account } = useWalletInfo(); + return useMutation({ + mutationFn: async () => { + if (chainId === undefined || !account) return; + const to = address ?? ''; + try { + if (!to) { + throw new Error('pool address is undefined'); + } + const data = await encodeVE33V2PairClaimFees(); + const result = await submission.execute( + t`Claim`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.claimTradingFeesVe33V2Position]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to Claim:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2Stake.ts b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2Stake.ts new file mode 100644 index 00000000..79989549 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2Stake.ts @@ -0,0 +1,54 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../hooks/Submission/spec'; +import { useMessageState } from '../../../hooks/useMessageState'; +import { encodeVE33V2GaugeDeposit2 } from '@dodoex/dodo-contract-request'; +import { ExecutionResult, MetadataFlag } from '../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../hooks/contract'; + +export function useVe33V2Stake({ + amount, + gaugeAddress, + refetch, +}: { + amount: string; + gaugeAddress?: string; + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + return useMutation({ + mutationFn: async () => { + const to = gaugeAddress || ''; + try { + const data = await encodeVE33V2GaugeDeposit2(amount); + const result = await submission.execute( + t`Stake`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.stakeVe33V2Position]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to Stake:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2UnStake.ts b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2UnStake.ts new file mode 100644 index 00000000..1f2d5364 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V2UnStake.ts @@ -0,0 +1,54 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../hooks/Submission/spec'; +import { useMessageState } from '../../../hooks/useMessageState'; +import { encodeVE33V2GaugeWithdraw } from '@dodoex/dodo-contract-request'; +import { ExecutionResult, MetadataFlag } from '../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../hooks/contract'; + +export function useVe33V2UnStake({ + amount, + gaugeAddress, + refetch, +}: { + amount: string; + gaugeAddress?: string; + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + return useMutation({ + mutationFn: async () => { + const to = gaugeAddress || ''; + try { + const data = await encodeVE33V2GaugeWithdraw(amount); + const result = await submission.execute( + t`UnStake`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.unStakeVe33V2Position]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to unStake:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3ClaimEmissions.ts b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3ClaimEmissions.ts new file mode 100644 index 00000000..0450d37e --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3ClaimEmissions.ts @@ -0,0 +1,57 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../hooks/Submission/spec'; +import { useMessageState } from '../../../hooks/useMessageState'; +import { encodeVE33V3GaugeGetReward } from '@dodoex/dodo-contract-request'; +import { ExecutionResult, MetadataFlag } from '../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../hooks/contract'; + +export function useVe33V3ClaimEmissions({ + tokenId, + gaugeAddress, + refetch, +}: { + tokenId?: number; + gaugeAddress?: string; + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + return useMutation({ + mutationFn: async () => { + const to = gaugeAddress || ''; + try { + if (!tokenId) { + throw new Error('tokenId is undefined'); + } + const data = await encodeVE33V3GaugeGetReward(tokenId); + const result = await submission.execute( + t`Claim`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.claimEmissionsVe33V3Position]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to Claim:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3ClaimTradingFees.ts b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3ClaimTradingFees.ts new file mode 100644 index 00000000..b1e71a26 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3ClaimTradingFees.ts @@ -0,0 +1,76 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../hooks/Submission/spec'; +import { useMessageState } from '../../../hooks/useMessageState'; +import { + encodeVE33NonfungiblePositionManagerCollect, + getVE33NonfungiblePositionManagerContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; +import { ExecutionResult, MetadataFlag } from '../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../hooks/contract'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; +import { toHex } from '../Ve33V3PoolOperate/utils/calldata'; +import JSBI from 'jsbi'; + +const MaxUint128 = toHex( + JSBI.subtract( + JSBI.exponentiate(JSBI.BigInt(2), JSBI.BigInt(128)), + JSBI.BigInt(1), + ), +); + +export function useVe33V3ClaimTradingFees({ + tokenId, + refetch, +}: { + tokenId?: number; + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + const { chainId, account } = useWalletInfo(); + return useMutation({ + mutationFn: async () => { + if (chainId === undefined || !account) return; + const to = + getVE33NonfungiblePositionManagerContractAddressByChainId(chainId); + try { + if (!tokenId) { + throw new Error('tokenId is undefined'); + } + const data = await encodeVE33NonfungiblePositionManagerCollect({ + tokenId, + recipient: account, + amount0Max: MaxUint128, + amount1Max: MaxUint128, + }); + const result = await submission.execute( + t`Claim`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.claimTradingFeesVe33V3Position]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to Claim:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3Stake.ts b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3Stake.ts new file mode 100644 index 00000000..62b7f115 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3Stake.ts @@ -0,0 +1,57 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../hooks/Submission/spec'; +import { useMessageState } from '../../../hooks/useMessageState'; +import { encodeVE33V3GaugeDeposit } from '@dodoex/dodo-contract-request'; +import { ExecutionResult, MetadataFlag } from '../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../hooks/contract'; + +export function useVe33V3Stake({ + tokenId, + gaugeAddress, + refetch, +}: { + tokenId?: number; + gaugeAddress?: string; + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + return useMutation({ + mutationFn: async () => { + const to = gaugeAddress || ''; + try { + if (!tokenId) { + throw new Error('tokenId is undefined'); + } + const data = await encodeVE33V3GaugeDeposit(tokenId); + const result = await submission.execute( + t`Stake`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.stakeVe33V3Position]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to Stake:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3StakeApproveStatus.ts b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3StakeApproveStatus.ts new file mode 100644 index 00000000..29f9c8cf --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3StakeApproveStatus.ts @@ -0,0 +1,94 @@ +import { + encodeVE33NonfungiblePositionManagerApprove, + getFetchVE33NonfungiblePositionManagerGetApprovedQueryOptions, + getVE33NonfungiblePositionManagerContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; +import { t } from '@lingui/macro'; +import { useQuery, useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../hooks/Submission'; +import { OpCode } from '../../../hooks/Submission/spec'; +import { MetadataFlag, ExecutionResult } from '../../../hooks/Submission/types'; +import { useTokenStatus } from '../../../hooks/Token/useTokenStatus'; +import { Ve33PoolInfoI } from '../types'; +import { useFetchBlockNumber } from '../../../hooks/contract'; +import { useMessageState } from '../../../hooks/useMessageState'; + +export default function useVe33V3StakeApproveStatus({ + poolInfo, + tokenId, +}: { + poolInfo: Ve33PoolInfoI | undefined; + tokenId: number | undefined; +}) { + const fetchStakeApproved = useQuery( + getFetchVE33NonfungiblePositionManagerGetApprovedQueryOptions( + poolInfo?.chainId, + tokenId, + ), + ); + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + const approveTitle = t`Approve ${poolInfo?.baseToken?.symbol}-${poolInfo?.quoteToken.symbol} LP`; + const submitStakeApproveMutation = useMutation({ + mutationFn: async () => { + if (!poolInfo || tokenId === undefined) { + return; + } + try { + const to = getVE33NonfungiblePositionManagerContractAddressByChainId( + poolInfo?.chainId, + ); + if (!to) { + throw new Error( + 'VE33 Nonfungible Position Manager contract address not found', + ); + } + const spender = poolInfo.gaugeAddress; + const data = await encodeVE33NonfungiblePositionManagerApprove( + spender, + tokenId, + ); + const result = await submission.execute( + approveTitle, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.approve]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + console.error(e); + useMessageState.getState().toast({ + message: `${t`Failed to Approve:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await fetchStakeApproved.refetch(); + }, + }); + + const needApprove = + fetchStakeApproved.data?.toLowerCase() !== + poolInfo?.gaugeAddress?.toLowerCase(); + const stakeTokenStatus = { + isApproving: submitStakeApproveMutation.isPending, + needApprove, + needShowTokenStatusButton: needApprove, + loading: fetchStakeApproved.isLoading, + approveTitle, + submitApprove: () => submitStakeApproveMutation.mutateAsync(), + } as ReturnType; + + return stakeTokenStatus; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3UnStake.ts b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3UnStake.ts new file mode 100644 index 00000000..f200fc54 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/hooks/useVe33V3UnStake.ts @@ -0,0 +1,57 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../hooks/Submission/spec'; +import { useMessageState } from '../../../hooks/useMessageState'; +import { encodeVE33V3GaugeWithdraw } from '@dodoex/dodo-contract-request'; +import { ExecutionResult, MetadataFlag } from '../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../hooks/contract'; + +export function useVe33V3UnStake({ + tokenId, + gaugeAddress, + refetch, +}: { + tokenId?: number; + gaugeAddress?: string; + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + return useMutation({ + mutationFn: async () => { + const to = gaugeAddress || ''; + try { + if (!tokenId) { + throw new Error('tokenId is undefined'); + } + const data = await encodeVE33V3GaugeWithdraw(tokenId); + const result = await submission.execute( + t`UnStake`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.unStakeVe33V3Position]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to unStake:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/yarn.lock b/yarn.lock index 64c832a1..efdfa720 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1857,10 +1857,10 @@ ethers "^6.13.2" https-proxy-agent "^7.0.5" -"@dodoex/dodo-contract-request@1.15.0-morph-holesky.3": - version "1.15.0-morph-holesky.3" - resolved "https://registry.yarnpkg.com/@dodoex/dodo-contract-request/-/dodo-contract-request-1.15.0-morph-holesky.3.tgz#cd281b75212c3a43c076eaa05384d4d9aa186095" - integrity sha512-sov8qxRSrrzPqPyoWZfPL/ec41azeSRvEuya52CfVf7uQvCPtsyx3YK+YY7cIBdOradWQZdjEHYyOjxI62D8gg== +"@dodoex/dodo-contract-request@1.15.0-morph-holesky.6": + version "1.15.0-morph-holesky.6" + resolved "https://registry.yarnpkg.com/@dodoex/dodo-contract-request/-/dodo-contract-request-1.15.0-morph-holesky.6.tgz#691757837d9d531bd0c4fcd5effe7ccd234128cf" + integrity sha512-dpY18RrxVNYfbSPQj0WlCDQIRndtFplP2Fyroa8M4t/8663d67Hm3jsbcpToQc1LskUPv/Wkq53SsQ0VGfKz1Q== dependencies: typescript "^5" From bcf2184d04ea9988b49c45e60ff5302f79f2a160 Mon Sep 17 00:00:00 2001 From: JunJie Date: Sat, 11 Oct 2025 14:33:37 +0800 Subject: [PATCH 18/18] feat: add ve33 --- .../doc/src/components/theme/WithMuiTheme.tsx | 8 +- .../widgets/Ve33Incentives.stories.tsx | 76 ++ .../stories/widgets/VotePoolList.stories.tsx | 49 +- packages/dodoex-components/package.json | 5 +- .../dodoex-components/src/Select/index.tsx | 11 +- packages/dodoex-widgets/package.json | 7 +- .../src/components/CardWidgets.tsx | 3 + .../src/components/Message/index.tsx | 1 + .../src/components/SimpleItemInfo.tsx | 22 + .../src/components/Swap/components/Dialog.tsx | 1 + .../src/components/Token/TokenItem.tsx | 20 +- .../src/components/TokenSelect.tsx | 44 +- .../src/components/Widget/index.tsx | 2 +- .../src/hooks/Submission/types.ts | 2 + .../src/hooks/useGraphQLRequests.ts | 2 +- packages/dodoex-widgets/src/index.tsx | 2 + packages/dodoex-widgets/src/locales/en-US.js | 2 +- packages/dodoex-widgets/src/locales/en-US.po | 710 +++++++++++++++-- packages/dodoex-widgets/src/locales/zh-CN.js | 2 +- packages/dodoex-widgets/src/locales/zh-CN.po | 710 +++++++++++++++-- .../AddIncentiveDialog.tsx | 260 ++++++ .../ve33/Ve33IncentiveDetail/Dashboard.tsx | 166 ++++ .../ve33/Ve33IncentiveDetail/PoolInfo.tsx | 420 ++++++++++ .../ve33/Ve33IncentiveDetail/distributed.svg | 3 + .../ve33/Ve33IncentiveDetail/incentives.svg | 3 + .../ve33/Ve33IncentiveDetail/index.tsx | 177 +++++ .../widgets/ve33/Ve33IncentiveDetail/star.svg | 48 ++ .../ve33/Ve33IncentiveDetail/votes.svg | 3 + .../ve33/Ve33IncentiveList/CardList.tsx | 106 +++ .../ve33/Ve33IncentiveList/TableList.tsx | 108 +++ .../widgets/ve33/Ve33IncentiveList/index.tsx | 238 ++++++ .../widgets/ve33/Ve33LockList/CardList.tsx | 6 +- .../ve33/Ve33LockList/LockManageDialog.tsx | 2 +- .../Ve33LockList/hooks/useFetchUserLocks.ts | 51 +- .../src/widgets/ve33/Ve33LockList/index.tsx | 118 +-- .../src/widgets/ve33/Ve33LockOperate/utils.ts | 7 + .../src/widgets/ve33/Ve33PoolDetail/index.tsx | 5 +- .../widgets/ve33/Ve33PoolList/CardList.tsx | 300 +++++++ .../widgets/ve33/Ve33PoolList/TableList.tsx | 139 +--- .../src/widgets/ve33/Ve33PoolList/index.tsx | 142 ++-- .../widgets/ve33/VotePoolList/CardList.tsx | 161 ++++ .../ve33/VotePoolList/SetVotePowerDialog.tsx | 436 ++++++++++ .../widgets/ve33/VotePoolList/TableList.tsx | 289 +------ .../ve33/VotePoolList/hooks/useVoteVe33.ts | 69 ++ .../src/widgets/ve33/VotePoolList/index.tsx | 746 ++++++++++++++---- .../src/widgets/ve33/VotePoolList/widgets.tsx | 605 ++++++++++++++ .../widgets/ve33/components/PoolTokenInfo.tsx | 184 +++++ .../src/widgets/ve33/hooks/useAddIncentive.ts | 93 +++ .../ve33/hooks/useVe33V3ClaimEmissions.ts | 2 +- yarn.lock | 8 +- 50 files changed, 5646 insertions(+), 928 deletions(-) create mode 100644 packages/doc/src/stories/widgets/Ve33Incentives.stories.tsx create mode 100644 packages/dodoex-widgets/src/components/SimpleItemInfo.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/AddIncentiveDialog.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/Dashboard.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/distributed.svg create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/incentives.svg create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/index.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/star.svg create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/votes.svg create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveList/CardList.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveList/TableList.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveList/index.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/CardList.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/VotePoolList/CardList.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/VotePoolList/hooks/useVoteVe33.ts create mode 100644 packages/dodoex-widgets/src/widgets/ve33/VotePoolList/widgets.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/components/PoolTokenInfo.tsx create mode 100644 packages/dodoex-widgets/src/widgets/ve33/hooks/useAddIncentive.ts diff --git a/packages/doc/src/components/theme/WithMuiTheme.tsx b/packages/doc/src/components/theme/WithMuiTheme.tsx index b1e86ccf..51bef0ca 100644 --- a/packages/doc/src/components/theme/WithMuiTheme.tsx +++ b/packages/doc/src/components/theme/WithMuiTheme.tsx @@ -32,7 +32,13 @@ export function WithMuiTheme({ children }: { children: React.ReactNode }) { return ( - + {children} ); diff --git a/packages/doc/src/stories/widgets/Ve33Incentives.stories.tsx b/packages/doc/src/stories/widgets/Ve33Incentives.stories.tsx new file mode 100644 index 00000000..6b1c1cf7 --- /dev/null +++ b/packages/doc/src/stories/widgets/Ve33Incentives.stories.tsx @@ -0,0 +1,76 @@ +import { ChainId } from '@dodoex/api'; +import { Box } from '@dodoex/components'; +import { + Ve33IncentiveList, + Ve33IncentiveDetail, + Widget, + WidgetProps, +} from '@dodoex/widgets'; +import React from 'react'; + +export default { + title: 'Widgets/Ve33Incentive', + component: 'div', +}; + +export const Primary = (props: WidgetProps) => { + const { apikey, ...other } = props; + const [showDetail, setShowDetail] = React.useState({ + id: '0x98ecc0d3f774a7bda38918bf5830a476dd5a606c', + chainId: 2810, + }); + + return ( + + + {showDetail ? ( + setShowDetail(null)} + /> + ) : ( + setShowDetail(pool)} + /> + )} + + + ); +}; + +Primary.args = { + projectId: 'project2', + apikey: 'ee53d6b75b12aceed4', + apiDomain: process.env.STORYBOOK_API_DOMAIN, + width: '100%', + height: '100%', + routerPage: undefined, + onlyChainId: ChainId.MORPH_HOLESKY_TESTNET, + noUI: true, +}; diff --git a/packages/doc/src/stories/widgets/VotePoolList.stories.tsx b/packages/doc/src/stories/widgets/VotePoolList.stories.tsx index 2186b86b..83800acf 100644 --- a/packages/doc/src/stories/widgets/VotePoolList.stories.tsx +++ b/packages/doc/src/stories/widgets/VotePoolList.stories.tsx @@ -1,4 +1,5 @@ import { ChainId } from '@dodoex/api'; +import { Box } from '@dodoex/components'; import { VotePoolListWidget, WidgetProps } from '@dodoex/widgets'; export default { @@ -10,26 +11,34 @@ export const Primary = (props: WidgetProps) => { const { apikey, ...other } = props; return ( - + + + ); }; diff --git a/packages/dodoex-components/package.json b/packages/dodoex-components/package.json index 44432ef8..91fd8194 100644 --- a/packages/dodoex-components/package.json +++ b/packages/dodoex-components/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/components", - "version": "3.0.4-ve33.3", + "version": "3.0.4-ve33.4", "description": "UI component library", "source": "src/index.ts", "types": "dist/types/index.d.ts", @@ -71,4 +71,5 @@ "tslib": "^2.4.0", "typescript": "^5.6.3" } -} \ No newline at end of file +} + diff --git a/packages/dodoex-components/src/Select/index.tsx b/packages/dodoex-components/src/Select/index.tsx index 7591bea2..c084dc87 100644 --- a/packages/dodoex-components/src/Select/index.tsx +++ b/packages/dodoex-components/src/Select/index.tsx @@ -39,13 +39,13 @@ const Listbox = styled('ul')( box-shadow: 0px 2px 4px ${ theme.palette.mode === 'dark' ? 'rgba(0,0,0, 0.5)' : 'rgba(0,0,0, 0.05)' }; - + .closed & { opacity: 0; transform: scale(0.95, 0.8); transition: opacity 200ms ease-in, transform 200ms ease-in; } - + .open & { opacity: 1; transform: scale(1, 1); @@ -123,6 +123,7 @@ const Button = React.forwardRef(function Button< {other.children} ) { +}: Props & { + listBoxSx?: BoxProps['sx']; +}) { const theme = useTheme(); return ( @@ -254,6 +258,7 @@ export function Select< style: { borderRadius: popupOffset ? 12 : theme.spacing(0, 0, 12, 12), }, + sx: listBoxSx, }, }} {...props} diff --git a/packages/dodoex-widgets/package.json b/packages/dodoex-widgets/package.json index 9457ddaa..2a76e391 100644 --- a/packages/dodoex-widgets/package.json +++ b/packages/dodoex-widgets/package.json @@ -1,6 +1,6 @@ { "name": "@dodoex/widgets", - "version": "3.0.4-ve33.10", + "version": "3.0.4-ve33.13", "description": "DODO Widgets", "source": "src/index.tsx", "types": "dist/types/index.d.ts", @@ -59,9 +59,9 @@ "dependencies": { "@babel/runtime": "^7.17.0", "@dodoex/api": "3.0.4-ve33.4", - "@dodoex/components": "3.0.4-ve33.3", + "@dodoex/components": "3.0.4-ve33.4", "@dodoex/contract-request": "^1.3.0", - "@dodoex/dodo-contract-request": "1.15.0-morph-holesky.6", + "@dodoex/dodo-contract-request": "1.15.0-morph-holesky.7", "@dodoex/icons": "^2.0.2", "@emotion/react": "^11.10.0", "@emotion/styled": "^11.10.0", @@ -155,4 +155,3 @@ "typescript": "^5.6.3" } } - diff --git a/packages/dodoex-widgets/src/components/CardWidgets.tsx b/packages/dodoex-widgets/src/components/CardWidgets.tsx index d366ebba..6f21db3c 100644 --- a/packages/dodoex-widgets/src/components/CardWidgets.tsx +++ b/packages/dodoex-widgets/src/components/CardWidgets.tsx @@ -28,15 +28,18 @@ export function CardStatus({ hasSearch, children, refetch, + loadingCard, }: React.PropsWithChildren<{ isMobile?: boolean; loading: boolean; empty: boolean; hasSearch?: boolean; refetch?: () => void; + loadingCard?: React.ReactNode; }>) { const height = 320; if (loading) { + if (loadingCard) return <>{loadingCard}; return ( ) { + return ( + + {label} + {children} + + ); +} diff --git a/packages/dodoex-widgets/src/components/Swap/components/Dialog.tsx b/packages/dodoex-widgets/src/components/Swap/components/Dialog.tsx index 5afa6ce8..ae9e8564 100644 --- a/packages/dodoex-widgets/src/components/Swap/components/Dialog.tsx +++ b/packages/dodoex-widgets/src/components/Swap/components/Dialog.tsx @@ -133,6 +133,7 @@ function ModalDialog({ flexDirection: 'column', height, width: isMobile ? undefined : pcWidth, + maxWidth: '100vw', }} > {title ? ( diff --git a/packages/dodoex-widgets/src/components/Token/TokenItem.tsx b/packages/dodoex-widgets/src/components/Token/TokenItem.tsx index 16363ead..cfb03a36 100644 --- a/packages/dodoex-widgets/src/components/Token/TokenItem.tsx +++ b/packages/dodoex-widgets/src/components/Token/TokenItem.tsx @@ -9,6 +9,7 @@ export default function TokenItem({ size, offset, rightContent, + hideLogo, }: { chainId: number; address: string; @@ -16,6 +17,7 @@ export default function TokenItem({ size: number; offset?: number; rightContent?: React.ReactNode; + hideLogo?: boolean; }) { const LogoAndSymbol = ( - + {!hideLogo && ( + + )} {showName} ); diff --git a/packages/dodoex-widgets/src/components/TokenSelect.tsx b/packages/dodoex-widgets/src/components/TokenSelect.tsx index 5d8ab182..4fac9f6a 100644 --- a/packages/dodoex-widgets/src/components/TokenSelect.tsx +++ b/packages/dodoex-widgets/src/components/TokenSelect.tsx @@ -1,4 +1,4 @@ -import { Box, ButtonBase, useTheme } from '@dodoex/components'; +import { Box, BoxProps, ButtonBase, useTheme } from '@dodoex/components'; import { TokenInfo } from '../hooks/Token/type'; import { chainListMap } from '../constants/chainList'; import { selectTokenBtn } from '../constants/testId'; @@ -10,6 +10,26 @@ import { useUserOptions } from './UserOptionsProvider'; import { ChainId } from '@dodoex/api'; import { transitionTime } from './Swap/components/Dialog'; +export interface TokenSelectProps { + token?: TokenInfo | null; + chainId?: ChainId; + showChainLogo?: boolean; + readonly?: boolean; + showChainName?: boolean; + logoSize?: number; + chainLogoSize?: number; + side?: TokenInfo['side']; + occupiedToken?: TokenInfo; + defaultLoadBalance?: boolean; + notTokenPickerModal?: boolean; + border?: boolean; + px?: number; + py?: number; + highlightDefault?: boolean; + sx?: BoxProps['sx']; + onTokenClick?: () => void; + onTokenChange?: (token: TokenInfo, isOccupied: boolean) => void; +} export default function TokenSelect({ token, chainId: chainIdProps, @@ -26,27 +46,10 @@ export default function TokenSelect({ px = 20, py = 8, highlightDefault, + sx, onTokenClick, onTokenChange, -}: { - token?: TokenInfo | null; - chainId?: ChainId; - showChainLogo?: boolean; - readonly?: boolean; - showChainName?: boolean; - logoSize?: number; - chainLogoSize?: number; - side?: TokenInfo['side']; - occupiedToken?: TokenInfo; - defaultLoadBalance?: boolean; - notTokenPickerModal?: boolean; - border?: boolean; - px?: number; - py?: number; - highlightDefault?: boolean; - onTokenClick?: () => void; - onTokenChange?: (token: TokenInfo, isOccupied: boolean) => void; -}) { +}: TokenSelectProps) { const { onlyChainId } = useUserOptions(); const chainId = chainIdProps || onlyChainId; const theme = useTheme(); @@ -84,6 +87,7 @@ export default function TokenSelect({ opacity: 0.8, }, }), + ...sx, }} onClick={() => { if (readonly) return; diff --git a/packages/dodoex-widgets/src/components/Widget/index.tsx b/packages/dodoex-widgets/src/components/Widget/index.tsx index 4c26f552..94ac0108 100644 --- a/packages/dodoex-widgets/src/components/Widget/index.tsx +++ b/packages/dodoex-widgets/src/components/Widget/index.tsx @@ -265,7 +265,7 @@ export function UnstyleWidget(props: PropsWithChildren) { {...{ ...props, widgetRef: props.widgetRef ?? widgetRef, - apiDomain: props.apiDomain ?? 'dodoex.io', + apiDomain: props.apiDomain, }} > diff --git a/packages/dodoex-widgets/src/hooks/Submission/types.ts b/packages/dodoex-widgets/src/hooks/Submission/types.ts index 58c07e4a..0672827a 100644 --- a/packages/dodoex-widgets/src/hooks/Submission/types.ts +++ b/packages/dodoex-widgets/src/hooks/Submission/types.ts @@ -51,6 +51,8 @@ export enum MetadataFlag { transferVe33Lock = 'transferVe33Lock', claimRebases = 'claimRebases', claimBribes = 'claimBribes', + voteVe33 = 'voteVe33', + addIncentive = 'addIncentive', } export type Metadata = Record; diff --git a/packages/dodoex-widgets/src/hooks/useGraphQLRequests.ts b/packages/dodoex-widgets/src/hooks/useGraphQLRequests.ts index 2fcc40aa..e4848903 100644 --- a/packages/dodoex-widgets/src/hooks/useGraphQLRequests.ts +++ b/packages/dodoex-widgets/src/hooks/useGraphQLRequests.ts @@ -12,7 +12,7 @@ export function useGraphQLRequests() { if (!graphQLRequestsLocal) { graphQLRequestsLocal = new GraphQLRequests({ - url: `https://gateway.${apiDomain}/graphql`, + url: `https://gateway${apiDomain ?? '.dodoex.io'}/graphql`, }); } diff --git a/packages/dodoex-widgets/src/index.tsx b/packages/dodoex-widgets/src/index.tsx index 722c8761..87b4e634 100644 --- a/packages/dodoex-widgets/src/index.tsx +++ b/packages/dodoex-widgets/src/index.tsx @@ -47,6 +47,8 @@ export { Ve33PoolList } from './widgets/ve33/Ve33PoolList'; export { VotePoolList } from './widgets/ve33/VotePoolList'; export { default as Ve33LockOperate } from './widgets/ve33/Ve33LockOperate'; export { default as Ve33LockList } from './widgets/ve33/Ve33LockList'; +export { default as Ve33IncentiveList } from './widgets/ve33/Ve33IncentiveList'; +export { default as Ve33IncentiveDetail } from './widgets/ve33/Ve33IncentiveDetail'; export type SwapWidgetProps = WidgetProps & SwapProps; diff --git a/packages/dodoex-widgets/src/locales/en-US.js b/packages/dodoex-widgets/src/locales/en-US.js index c3f09247..1a8032bb 100644 --- a/packages/dodoex-widgets/src/locales/en-US.js +++ b/packages/dodoex-widgets/src/locales/en-US.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"Transaction Time:\",\"+uZnU3\":\"Cross Chain\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"The current slippage protection coefficient set exceeds \",[\"maxSlippageWarning\"],\"%, which may result in losses.\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"Opening \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"To\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/mfICu\":\"Fees\",\"/nzjSF\":[[\"0\"],\" pending\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"Balance:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"Dismiss\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"Due to the market condition, market price and estimated price may have a slight difference\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" confirmed\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"The current network is inconsistent with the wallet - please switch in wallet\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"Current price impact\",\"6UYTy8\":\"Minute\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"Hour\",\"6lss/t\":\"Pricing Model\",\"6nlY4n\":\"Gauge Adress\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"Enter the token symbol or address\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"Fee includes: Cross Chain fees + Swap fees. Gas fee not included.\",\"7VpPHA\":\"Confirm\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"This token is on\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"Estimated service provider fees\",\"93m8jT\":\"Basic Fee\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"Price impact exceeds the slippage tolerance you set. Try increasing the slippage tolerance.\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"s\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"This CP has been settled by other addrs\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"Max\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"Slippage\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"Insufficient funds - Please retry after depositing more \",[\"EtherTokenSymbol\"],\" into your wallet\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dizb6O\":\"Incentives\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"Are you sure swapping to another chain?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"Destination\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"Unapproved\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"Insufficient cross-chain fees, need at least \",[\"0\"],\" \",[\"1\"]],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"Transaction Pending\",\"Fdp03t\":\"on\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"GXkFCl\":\"Total Vote\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"Day\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HXOnT6\":\"Failed to remove\",\"HuVZMK\":\"Days\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"Connecting...\",\"J39pAJ\":\"Additional Fee\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"Fetching best price...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"Review Swap\",\"K/PgcA\":\"Select Cross Chain\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"Attention: High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"Select Tokens\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"The setting has been switched to swap mode\",\"NVAuTg\":\"Quote not available\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"Fetching Price...\",\"OfhWJH\":\"Reset\",\"OgKD6h\":\"Best offer\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"Confirming\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"Fee\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"Confirm Cross Chain\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"Estimated Time\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"Swap summary\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"Tx\",\"S8G1qk\":\"Single\",\"SXnevP\":\"Review Cross Chain\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"Price Impact\",\"T0Y2+3\":\"Select a token\",\"TFOxRM\":\"Mins\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"Wallet incompatibility\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"Settings\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"Connect to your \",[\"0\"],\" Wallet\"],\"V+rJKF\":\"Seconds\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"Swap Detail\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"For\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"YcpWhR\":\"vAPR\",\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YpVMk+\":\"Pool Adress\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"On\",\"Z7ZXbT\":\"Approve\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"Additional routing fees set by the Widget user\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"Maximum slippage do not exceed 50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"Minutes\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"Cancel\",\"dI46oG\":\"Auto switch network\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"Min\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"Transaction rejected.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"Service update, please wait and try again\",\"gz+9Rb\":\"Gas price is too low, please adjust in your wallet and try again\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC node data exception\",\"h5FVz1\":\"Estimated transaction time\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"Connect to your wallet\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"Enter an amount\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"Approving\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"Something went wrong.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"Second\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"Confirm swap\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"Slippage Tolerance\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"Send to:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"Unable to SETTLE during the cooling-off period\",\"qLkska\":\"The setting has been switched to cross chain mode\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"Connect to a wallet\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"Detail\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"SELECT TOKEN\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"Cross Chain Summary\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20: low-level call failed. Please contact the DODO team.\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"Unsupported network - switch to trade\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"Swap\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"Source\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"User denied transaction signature.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop exception\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"Hours\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"Close\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"Transaction Deadline\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"Insufficient balance\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"Transaction Time:\",\"+WJnK7\":\"Will be distributed\",\"+uZnU3\":\"Cross Chain\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"The current slippage protection coefficient set exceeds \",[\"maxSlippageWarning\"],\"%, which may result in losses.\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"Opening \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"To\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/mfICu\":\"Fees\",\"/nzjSF\":[[\"0\"],\" pending\"],\"0+31GV\":\"Removing\",\"06ngc1\":\"My voted / My total veMOMO\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"Balance:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1+deUQ\":\"Current voting round ends in\",\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1F1kH+\":\"Allocate 100% of your votes above.\",\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"Dismiss\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1pncBm\":\"Locked Amount\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2Ae5JX\":\"Failed to Approve:\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3G9uEL\":\"Lock More, Vote Stronger, Earn More\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3cu5xD\":[\"Total \",[\"0\"]],\"3dP8Wx\":\"Search by address\",\"3dpMtQ\":\"Failed to unStake:\",\"3ggd2j\":\"Asset ratio within the pool\",\"3wazI1\":\"Failed to Add incentive:\",\"3wh6hp\":\"By providing an incentive, you draw more liquidity providers to this pool.\",\"4Hd0O8\":\"Fees + Incentives APR\",\"4V0i3R\":\"Locking will give you an NFT, referred to as a veNFT. You can increase the Lock amount or extend the Lock time at any point after.\",\"4bekmo\":\"Warning: The incentivize feature is mainly used by protocols. Please make sure you understand how it works before using it as any transaction is final and cannot be reverted.\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"Due to the market condition, market price and estimated price may have a slight difference\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" confirmed\"],\"52uNwk\":\"Creation Time\",\"54SO/B\":\"Extend\",\"54ffaC\":\"The current network is inconsistent with the wallet - please switch in wallet\",\"58+81B\":\"Narrow\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5LdByC\":\"Unstake position\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5hZSb0\":\"*Merging an Auto Max-Lockis not allowed.\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"Current price impact\",\"6LVEDo\":\"Enable Auto Max-Lock\",\"6MgE5W\":\"Est. Rewards\",\"6N0PaE\":\"Locked Until\",\"6RDwJM\":\"Tokens\",\"6UYTy8\":\"Minute\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"Hour\",\"6lss/t\":\"Pricing Model\",\"6nlY4n\":\"Gauge Adress\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"Enter the token symbol or address\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"Fee includes: Cross Chain fees + Swap fees. Gas fee not included.\",\"7VpPHA\":\"Confirm\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"This token is on\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"Estimated service provider fees\",\"93m8jT\":\"Basic Fee\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9EMpdc\":\"Incentive\",\"9QHoGr\":\"Current votes\",\"9QjAGB\":\"FeeRevenue\",\"9SlhBs\":[\"Claim Lock#\",[\"0\"],\" rewards before merge.\"],\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"Price impact exceeds the slippage tolerance you set. Try increasing the slippage tolerance.\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"s\",\"B0YDoE\":\"Yes, I am sure\",\"B17Qsa\":\"voting power\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"This CP has been settled by other addrs\",\"C1qIFl\":\"Liquidity Supplied\",\"C51N+0\":\"until\",\"CA3JN5\":\"Stake position\",\"CCLNBo\":[\"Approve \",[\"0\"],\"-\",[\"1\"],\" LP\"],\"CK1KXz\":\"Max\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"Slippage\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"Insufficient funds - Please retry after depositing more \",[\"EtherTokenSymbol\"],\" into your wallet\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DR09xO\":\"Create position\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"DdvqCA\":\"Trading Fees\",\"Dizb6O\":\"Incentives\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EP8fRI\":\"UnStake\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"Are you sure swapping to another chain?\",\"EWu8rM\":\"Failed to Merge:\",\"EatqP4\":\"Swaps\",\"EcDng3\":\"Depositing into the lock will increase your voting power. You can also extend the lock time.\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"EmSrGB\":\"Before\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"Destination\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"Unapproved\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"Insufficient cross-chain fees, need at least \",[\"0\"],\" \",[\"1\"]],\"FHKsZF\":\"TVL\",\"FKEUBg\":\"Failed to Increase:\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"Transaction Pending\",\"Fdp03t\":\"on\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"G/Ghx2\":\"Claim & Lock\",\"GAypnX\":\"High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"GXkFCl\":\"Total Vote\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"Day\",\"H9HlDe\":\"minutes\",\"HD2Tiz\":\"Lock\",\"HFf4kn\":\"Epoch ends in\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HXOnT6\":\"Failed to remove\",\"HZFm5R\":\"and\",\"HuVZMK\":\"Days\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"I5S9ZE\":\"Wide\",\"IMZSJM\":\"Add incentive\",\"IUhMSS\":[\"Total \",[\"selectedPoolListLen\"]],\"IeO7us\":\"Voted\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"Connecting...\",\"J39pAJ\":\"Additional Fee\",\"J7M/DA\":\"Pegged\",\"JQKTEd\":\"Set vote power\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"Fetching best price...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JiW45G\":\"Failed to Stake:\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"Review Swap\",\"K/PgcA\":\"Select Cross Chain\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"Attention: High slippage tolerance will increase the success rate of transaction, but might not get the best quote.\",\"KRnA5J\":\"Set pool parameters\",\"KV5EXs\":\"When activated, it sets the lock to maximum unlock time, until disabled. Once disabled, the regular vesting unlock time will apply. Maximum unlock time gives a 1-to-1 voting power to the amount of locked tokens.\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"Select Tokens\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M4DUXY\":\"Emissions\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MmL2Ms\":\"My Vote\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"The setting has been switched to swap mode\",\"NVAuTg\":\"Quote not available\",\"NXZdrO\":\"My pool share\",\"NawEr2\":\"After\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"Nv/YSg\":\"Unlock Date\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"Fetching Price...\",\"OfhWJH\":\"Reset\",\"OgKD6h\":\"Best offer\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OsGa0F\":\"My Locks\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"Confirming\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"Fee\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"Confirm Cross Chain\",\"PgAmKs\":\"VAPR\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"Price impact reaches <0>\",[\"priceImpact\"],\"%, accept the quote\"],\"Q2sBg1\":\"Add To Lock\",\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"Estimated Time\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"Swap summary\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R/Pvst\":\"Transfer Lock\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"RUoVGi\":\"Failed to Transfer:\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RhUkkQ\":\"into Lock\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"Tx\",\"S8G1qk\":\"Single\",\"SXnevP\":\"Review Cross Chain\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"Price Impact\",\"T0Y2+3\":\"Select a token\",\"TFOxRM\":\"Mins\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"Wallet incompatibility\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"Settings\",\"UE2beD\":\"Creator\",\"UJgc2U\":\"Transferring a lock will also transfer any rewards and rebases! Before continuing, please make sure you have claimed all available rewards\",\"UN0Nip\":\"Reward Rules\",\"UNBt+9\":[\"My \",[\"0\"]],\"UODtG8\":\"Merge\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"Connect to your \",[\"0\"],\" Wallet\"],\"V+rJKF\":\"Seconds\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VN09QB\":\"Rebases\",\"VXTSOE\":\"Suitable for most situations.\",\"VaIT1Z\":\"Failed to Claim:\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"Swap Detail\",\"Xpkm7d\":\"No ForceStop access\",\"XvTURb\":\"Extend to\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"For\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"YcpWhR\":\"vAPR\",\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YpVMk+\":\"Pool Adress\",\"YujLa9\":\"I understand I will NOT be able to withdraw incentives\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"On\",\"Z7ZXbT\":\"Approve\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"Additional routing fees set by the Widget user\",\"Zeo2hK\":\"Locking for\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"Maximum slippage do not exceed 50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a3AecA\":\"Fees rewards + Incentives rewards\",\"a7u1N9\":\"Price\",\"aHx11G\":\"In Range\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"Minutes\",\"aqFIWP\":\"Common\",\"az8lvo\":\"Off\",\"b+1u9w\":\"You can extend the lock or increase the lock amount. These actions will increase your voting power. The maximum lock time is 1 years!\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"c7vayV\":\"Total liquidity\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"Cancel\",\"dI46oG\":\"Auto switch network\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"Min\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"Transaction rejected.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fDBXqq\":[\"Lock #\",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g2Tj8R\":\"Full\",\"g3x+cF\":\"Service update, please wait and try again\",\"gEScsa\":\"Extend Lock\",\"gtntD6\":[\"My total ve\",[\"0\"]],\"gz+9Rb\":\"Gas price is too low, please adjust in your wallet and try again\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC node data exception\",\"h5FVz1\":\"Estimated transaction time\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"Connect to your wallet\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hcyj7U\":\"Increase Lock\",\"hdIg7i\":\"Select Pool Version\",\"hoB91Y\":\"Available Pools\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"Enter an amount\",\"iWxcGQ\":\"Auto Max-Lock Mode\",\"iaocTt\":\"Ratio\",\"itTjLi\":[[\"selectedLen\"],\" Lock selected\"],\"iyvxqf\":\"Merging two locks will inherit the longest lock time of the two and will increase the final Lock (veNFT) voting power by adding up the two underlying locked amounts based on the new lock time.\",\"j2Uisd\":\"Approving\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"Something went wrong.\",\"kj3p6e\":\"Daily Rewards\",\"ksgLoF\":\"Failed to Vote:\",\"ku//5b\":\"Second\",\"l4Za6X\":\"Total Swap Volume\",\"l87tbQ\":\"Failed to Extend:\",\"l9qKkK\":\"Merge Lock\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lNqpw6\":\"Add Incentive\",\"lQ6r7x\":\"Confirm swap\",\"lQXQKs\":\"Vote\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"Slippage Tolerance\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"Send to:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"oeWZFc\":\"Wallet address where the lock will be transferred\",\"ohwRU8\":\"selected Lock to vote\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p/78dY\":\"Position\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pQl1d2\":\"My Position\",\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"pdcS9C\":\"Voting Power\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pmldYR\":[\"Lock \",[\"0\"],\" >\"],\"pwUZo2\":\"Confirming...\",\"pxFAp/\":\"Increase\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"q6lAbz\":\"Staked\",\"qDhDFK\":\"Traders\",\"qK7wuW\":\"Unable to SETTLE during the cooling-off period\",\"qLkska\":\"The setting has been switched to cross chain mode\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"qn6AdK\":\"Your incentive will be released linearly over the remaining time of the current epoch.\",\"r7ScnQ\":\"Connect to a wallet\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"Detail\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"SELECT TOKEN\",\"sK+T3q\":\"Voting Power Granted\",\"sNaLCG\":\"Add Token\",\"sQv06Y\":\"for\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sWvFkC\":\"Current Incentives\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"Cross Chain Summary\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20: low-level call failed. Please contact the DODO team.\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"Unsupported network - switch to trade\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"utnUX2\":[\"Lock \",[\"0\"],\" to get ve\",[\"1\"],\". You can use ve\",[\"2\"],\" to vote for more rewards.\"],\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vD30Os\":\"Distribute equally\",\"vH2C/2\":\"Swap\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vk13cx\":[[\"0\"],\" Position\"],\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wStucr\":\"Voters earn a share of transaction fees and incentives for helping govern how emissions are distributed.\",\"wSvvA3\":\"Select A Lock\",\"waRRI1\":\"Select pool pair you want to incentive\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"Source\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xCJdfg\":\"Clear\",\"xEbi+8\":\"User denied transaction signature.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yKYfcT\":\"Failed to Create:\",\"yM82Jw\":\"ForceStop exception\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"Hours\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"Close\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zPGNJm\":\"Transfer\",\"zSMRJ/\":\"Transaction Deadline\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"Insufficient balance\",\"zvFyrN\":\"Rebase APR\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file diff --git a/packages/dodoex-widgets/src/locales/en-US.po b/packages/dodoex-widgets/src/locales/en-US.po index ea8d00c1..6036dc1c 100644 --- a/packages/dodoex-widgets/src/locales/en-US.po +++ b/packages/dodoex-widgets/src/locales/en-US.po @@ -22,6 +22,10 @@ msgstr "The smaller the slippage coefficient, the lower the slippage for traders msgid "Transaction Time:" msgstr "Transaction Time:" +#: src/widgets/ve33/Ve33IncentiveDetail/Dashboard.tsx:86 +msgid "Will be distributed" +msgstr "Will be distributed" + #: src/hooks/Bridge/useExecuteBridgeRoute.tsx:127 msgid "Cross Chain" msgstr "Cross Chain" @@ -47,7 +51,9 @@ msgid "Total Number of Traders" msgstr "Total Number of Traders" #: src/widgets/PoolWidget/PoolDetail/components/ChartInfo.tsx:43 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:61 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:97 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:149 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:62 msgid "Volume" msgstr "Volume" @@ -56,12 +62,15 @@ msgid "To" msgstr "To" #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:416 -#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:287 +#: src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx:287 msgid "Receive {0}" msgstr "Receive {0}" -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:64 -#: src/widgets/ve33/VotePoolList/TableList.tsx:56 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:101 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:171 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:65 +#: src/widgets/ve33/VotePoolList/CardList.tsx:111 +#: src/widgets/ve33/VotePoolList/TableList.tsx:57 msgid "Fees" msgstr "Fees" @@ -72,10 +81,14 @@ msgstr "{0} pending" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:449 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:343 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:713 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:88 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:89 msgid "Removing" msgstr "Removing" +#: src/widgets/ve33/VotePoolList/index.tsx:319 +msgid "My voted / My total veMOMO" +msgstr "My voted / My total veMOMO" + #: src/components/chart/i18n.ts:31 msgid "Traders sold ‪{0}‬ {1}, price in the pool increased to {2}" msgstr "Traders sold ‪{0}‬ {1}, price in the pool increased to {2}" @@ -86,6 +99,7 @@ msgid "Balance:" msgstr "Balance:" #: src/widgets/PoolWidget/AMMV3/components/TokenPairSelect.tsx:100 +#: src/widgets/ve33/Ve33V3PoolOperate/components/TokenPairSelect.tsx:100 msgid "Select token" msgstr "Select token" @@ -99,7 +113,7 @@ msgid "Staking Rules" msgstr "Staking Rules" #: src/widgets/PoolWidget/PoolOperate/components/OperateBtn.tsx:76 -#: src/widgets/ve33/Ve33PoolOperate/components/OperateBtn.tsx:76 +#: src/widgets/ve33/Ve33V2PoolOperate/components/OperateBtn.tsx:76 msgid "Loading info..." msgstr "Loading info..." @@ -111,7 +125,12 @@ msgstr "* Please note that the Fee Rate cannot be modified after the pool is cre msgid "Switch to {0}" msgstr "Switch to {0}" +#: src/widgets/ve33/VotePoolList/index.tsx:275 +msgid "Current voting round ends in" +msgstr "Current voting round ends in" + #: src/widgets/PoolWidget/AMMV3/components/InputStepCounter.tsx:124 +#: src/widgets/ve33/Ve33V3PoolOperate/components/InputStepCounter.tsx:129 msgid "{tokenB} per {tokenA}" msgstr "{tokenB} per {tokenA}" @@ -125,6 +144,10 @@ msgstr "Create Liquidity Mining" msgid "By adding liquidity you’ll earn <0>{0} of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity." msgstr "By adding liquidity you’ll earn <0>{0} of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity." +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:158 +msgid "Allocate 100% of your votes above." +msgstr "Allocate 100% of your votes above." + #: src/widgets/MiningWidget/MiningCreate/components/RewardDetailList.tsx:159 #: src/widgets/MiningWidget/MiningCreate/operate-widgets/RewardForm.tsx:306 #: src/widgets/MiningWidget/MiningDetail/RewardCard.tsx:229 @@ -148,10 +171,15 @@ msgstr "Pool Type" msgid "Unstaking" msgstr "Unstaking" +#: src/widgets/ve33/Ve33LockList/CardList.tsx:203 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:50 +msgid "Locked Amount" +msgstr "Locked Amount" + #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:452 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:346 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:716 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:91 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:92 msgid "Adding" msgstr "Adding" @@ -163,6 +191,10 @@ msgstr "Deposit Ratio" msgid "Ended" msgstr "Ended" +#: src/widgets/ve33/hooks/useVe33V3StakeApproveStatus.ts:72 +msgid "Failed to Approve:" +msgstr "Failed to Approve:" + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/RewardForm.tsx:389 msgid "The end time must be later than the start time." msgstr "The end time must be later than the start time." @@ -183,12 +215,18 @@ msgstr "Single-Token" msgid "Select Pool" msgstr "Select Pool" +#: src/widgets/ve33/Ve33LockOperate/index.tsx:148 +msgid "Lock More, Vote Stronger, Earn More" +msgstr "Lock More, Vote Stronger, Earn More" + #: src/widgets/PoolWidget/PoolCreate/hooks/useValidation.ts:43 msgid "he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1." msgstr "he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1." #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:539 #: src/widgets/PoolWidget/AMMV3/components/ReviewModal.tsx:65 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:344 +#: src/widgets/ve33/Ve33V3PoolOperate/components/ReviewModal.tsx:78 msgid "Selected Range" msgstr "Selected Range" @@ -198,18 +236,51 @@ msgstr "Do not remind again" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:372 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:266 +#: src/widgets/ve33/Ve33V3PoolOperate/hooks/useRemoveVe33V3Liquidity.ts:48 msgid "Remove Liquidity" msgstr "Remove Liquidity" +#: src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx:179 +#: src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx:180 +#: src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx:179 +#: src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx:180 +msgid "Total {0}" +msgstr "Total {0}" + #: src/widgets/MiningWidget/MiningCreate/components/PoolPicker.tsx:474 msgid "Search by address" msgstr "Search by address" +#: src/widgets/ve33/hooks/useVe33V2UnStake.ts:46 +#: src/widgets/ve33/hooks/useVe33V3UnStake.ts:49 +msgid "Failed to unStake:" +msgstr "Failed to unStake:" + #: src/widgets/PoolWidget/PoolCreate/components/StepTitle.tsx:45 #: src/widgets/PoolWidget/PoolCreate/index.tsx:335 msgid "Asset ratio within the pool" msgstr "Asset ratio within the pool" +#: src/widgets/ve33/hooks/useAddIncentive.ts:85 +msgid "Failed to Add incentive:" +msgstr "Failed to Add incentive:" + +#: src/widgets/ve33/Ve33IncentiveDetail/Dashboard.tsx:62 +msgid "By providing an incentive, you draw more liquidity providers to this pool." +msgstr "By providing an incentive, you draw more liquidity providers to this pool." + +#: src/widgets/ve33/VotePoolList/widgets.tsx:51 +msgid "Fees + Incentives APR" +msgstr "Fees + Incentives APR" + +#: src/widgets/ve33/Ve33LockOperate/index.tsx:252 +msgid "Locking will give you an NFT, referred to as a veNFT. You can increase the Lock amount or extend the Lock time at any point after." +msgstr "Locking will give you an NFT, referred to as a veNFT. You can increase the Lock amount or extend the Lock time at any point after." + +#: src/widgets/ve33/Ve33IncentiveList/index.tsx:151 +msgid "Warning: The incentivize feature is mainly used by protocols. Please make sure you understand how it works before using it as any transaction is final and cannot be reverted." +msgstr "Warning: The incentivize feature is mainly used by protocols. Please make sure you understand how it works before using it as any transaction is final and cannot be reverted." + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/RewardForm.tsx:118 #: src/widgets/MiningWidget/MiningList/operate-area/AssociatedMine.tsx:155 #: src/widgets/MiningWidget/MiningList/operate-area/RewardListCard.tsx:49 @@ -248,11 +319,21 @@ msgstr "{0} confirmed" msgid "Creation Time" msgstr "Creation Time" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:106 +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:529 +msgid "Extend" +msgstr "Extend" + #: src/components/Swap/index.tsx:527 msgid "The current network is inconsistent with the wallet - please switch in wallet" msgstr "The current network is inconsistent with the wallet - please switch in wallet" +#: src/widgets/ve33/Ve33V3PoolOperate/hooks/usePriceRangeRatioSelect.ts:41 +msgid "Narrow" +msgstr "Narrow" + #: src/widgets/PoolWidget/AMMV3/AddLiquidityV3.tsx:401 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:226 msgid "Set price range" msgstr "Set price range" @@ -260,6 +341,10 @@ msgstr "Set price range" msgid "Full range" msgstr "Full range" +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:151 +msgid "Unstake position" +msgstr "Unstake position" + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/RewardForm.tsx:594 msgid "*Depending on the block time, the real amount of Daily Rewards may deviate slightly." msgstr "*Depending on the block time, the real amount of Daily Rewards may deviate slightly." @@ -278,9 +363,14 @@ msgid "The token amount is calculated by initial price." msgstr "The token amount is calculated by initial price." #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:159 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:154 msgid "Max price" msgstr "Max price" +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:277 +msgid "*Merging an Auto Max-Lockis not allowed." +msgstr "*Merging an Auto Max-Lockis not allowed." + #: src/widgets/MiningWidget/MiningCreate/components/StakingRules.tsx:91 msgid "Staked Tokens" msgstr "Staked Tokens" @@ -289,6 +379,24 @@ msgstr "Staked Tokens" msgid "Current price impact" msgstr "Current price impact" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:529 +msgid "Enable Auto Max-Lock" +msgstr "Enable Auto Max-Lock" + +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:251 +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:371 +msgid "Est. Rewards" +msgstr "Est. Rewards" + +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:147 +#: src/widgets/ve33/VotePoolList/widgets.tsx:601 +msgid "Locked Until" +msgstr "Locked Until" + +#: src/widgets/ve33/VotePoolList/widgets.tsx:141 +msgid "Tokens" +msgstr "Tokens" + #: src/utils/time.ts:17 msgid "Minute" msgstr "Minute" @@ -311,7 +419,8 @@ msgstr "Hour" msgid "Pricing Model" msgstr "Pricing Model" -#: src/widgets/ve33/Ve33PoolOperate/index.tsx:198 +#: src/widgets/ve33/Ve33V2PoolOperate/index.tsx:203 +#: src/widgets/ve33/Ve33V3PoolOperate/index.tsx:181 msgid "Gauge Adress" msgstr "Gauge Adress" @@ -323,7 +432,16 @@ msgstr "Liquidity" #: src/widgets/MiningWidget/MiningDetail/MiningInfo.tsx:146 #: src/widgets/MiningWidget/MiningDetail/MiningInfo.tsx:213 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:55 +#: src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx:151 +#: src/widgets/ve33/Ve33IncentiveList/CardList.tsx:65 +#: src/widgets/ve33/Ve33IncentiveList/TableList.tsx:39 +#: src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx:151 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:87 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:108 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:56 +#: src/widgets/ve33/Ve33V3PoolOperate/components/RangeRatioSelect.tsx:97 +#: src/widgets/ve33/VotePoolList/CardList.tsx:97 +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:357 msgid "APR" msgstr "APR" @@ -332,6 +450,7 @@ msgid "Enter the token symbol or address" msgstr "Enter the token symbol or address" #: src/widgets/PoolWidget/AMMV3/components/LiquidityChartRangeInput/index.tsx:211 +#: src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/index.tsx:183 msgid "Liquidity data not available." msgstr "Liquidity data not available." @@ -359,7 +478,10 @@ msgstr "Fee includes: Cross Chain fees + Swap fees. Gas fee not included." #: src/widgets/PoolWidget/PoolCreate/operate-widgets/SlippageCoefficientSetting.tsx:240 #: src/widgets/PoolWidget/PoolModify/operate-widgets/BottomButtonGroup.tsx:74 #: src/widgets/PoolWidget/PoolModify/operate-widgets/FeeRateSetting.tsx:197 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:251 +#: src/widgets/ve33/Ve33LockList/ClaimLockDialog.tsx:121 +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:268 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:251 +#: src/widgets/ve33/Ve33V3PoolOperate/components/ReviewModal.tsx:91 msgid "Confirm" msgstr "Confirm" @@ -374,6 +496,9 @@ msgstr "Fees (24H)" #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:109 #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:167 #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:221 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:103 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:162 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:217 msgid "{0} per {1}" msgstr "{0} per {1}" @@ -425,10 +550,22 @@ msgstr "LP Balance" msgid "The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only." msgstr "The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only." +#: src/widgets/ve33/Ve33IncentiveDetail/AddIncentiveDialog.tsx:131 +msgid "Incentive" +msgstr "Incentive" + +#: src/widgets/ve33/Ve33IncentiveDetail/Dashboard.tsx:72 +msgid "Current votes" +msgstr "Current votes" + #: src/widgets/PoolWidget/PoolDetail/components/ChartInfo.tsx:44 msgid "FeeRevenue" msgstr "FeeRevenue" +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:229 +msgid "Claim Lock#{0} rewards before merge." +msgstr "Claim Lock#{0} rewards before merge." + #: src/widgets/PoolWidget/PoolList/components/TokenAndPoolFilter.tsx:58 msgid "Search" msgstr "Search" @@ -454,7 +591,7 @@ msgid "Active" msgstr "Active" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:56 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:60 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:60 msgid "You will receive" msgstr "You will receive" @@ -479,8 +616,10 @@ msgstr "No results found" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:388 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:297 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:595 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:52 -#: src/widgets/ve33/VotePoolList/TableList.tsx:47 +#: src/widgets/ve33/Ve33IncentiveList/TableList.tsx:36 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:53 +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:248 +#: src/widgets/ve33/VotePoolList/TableList.tsx:48 msgid "Pair" msgstr "Pair" @@ -492,11 +631,17 @@ msgstr "s" msgid "Yes, I am sure" msgstr "Yes, I am sure" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:478 +#: src/widgets/ve33/Ve33LockOperate/index.tsx:234 +msgid "voting power" +msgstr "voting power" + #: src/widgets/PoolWidget/PoolDetail/components/TitleInfo.tsx:199 msgid "Add liquidity to obtain LP tokens for mining" msgstr "Add liquidity to obtain LP tokens for mining" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:563 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:371 msgid "Add more liquidity" msgstr "Add more liquidity" @@ -508,6 +653,18 @@ msgstr "This CP has been settled by other addrs" msgid "Liquidity Supplied" msgstr "Liquidity Supplied" +#: src/widgets/ve33/Ve33LockList/ClaimLockDialog.tsx:102 +msgid "until" +msgstr "until" + +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:186 +msgid "Stake position" +msgstr "Stake position" + +#: src/widgets/ve33/hooks/useVe33V3StakeApproveStatus.ts:31 +msgid "Approve {0}-{1} LP" +msgstr "Approve {0}-{1} LP" + #: src/components/Swap/components/TokenCard/BalanceText.tsx:84 msgid "Max" msgstr "Max" @@ -551,6 +708,8 @@ msgstr "The pool’s market-making price is fixed" #: src/widgets/PoolWidget/AMMV3/components/Badge/RangeBadge.tsx:30 #: src/widgets/PoolWidget/AMMV3/components/RemoveButton.tsx:32 +#: src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx:30 +#: src/widgets/ve33/Ve33V3PoolOperate/components/RemoveButton.tsx:58 msgid "Closed" msgstr "Closed" @@ -563,6 +722,10 @@ msgstr "Done" msgid "Results in a relatively fixed price." msgstr "Results in a relatively fixed price." +#: src/widgets/ve33/Ve33PoolDetail/index.tsx:179 +msgid "Create position" +msgstr "Create position" + #: src/widgets/PoolWidget/AMMV3/components/Buttons.tsx:72 #: src/widgets/PoolWidget/AMMV3/components/Buttons.tsx:88 msgid "Approving {0}..." @@ -571,6 +734,8 @@ msgstr "Approving {0}..." #: src/widgets/PoolWidget/AMMV3/AddLiquidityV3.tsx:552 #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:213 #: src/widgets/PoolWidget/AMMV3/components/PositionViewCard.tsx:233 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:209 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:273 msgid "Current price" msgstr "Current price" @@ -588,7 +753,13 @@ msgstr "Pool not found. Please switch to another network and retry." msgid "Daily Rewards" msgstr "Daily Rewards" -#: src/widgets/ve33/VotePoolList/TableList.tsx:59 +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:268 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:595 +msgid "Trading Fees" +msgstr "Trading Fees" + +#: src/widgets/ve33/VotePoolList/CardList.tsx:114 +#: src/widgets/ve33/VotePoolList/TableList.tsx:60 msgid "Incentives" msgstr "Incentives" @@ -624,23 +795,33 @@ msgstr "Add Initial Liquidity" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:481 #: src/widgets/PoolWidget/AMMV3/components/ReviewModal.tsx:40 #: src/widgets/PoolWidget/hooks/useAMMV2AddLiquidity.ts:174 -#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2AddLiquidity.ts:140 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2AddLiquidity.ts:140 +#: src/widgets/ve33/Ve33V3PoolOperate/components/ReviewModal.tsx:48 msgid "Add liquidity" msgstr "Add liquidity" +#: src/widgets/ve33/hooks/useVe33V2UnStake.ts:27 +#: src/widgets/ve33/hooks/useVe33V3UnStake.ts:30 +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:231 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:576 +#: src/widgets/ve33/Ve33StakeDialog.tsx:78 +msgid "UnStake" +msgstr "UnStake" + #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:101 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:95 msgid "Min price" msgstr "Min price" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:229 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:223 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:223 msgid "Pool address" msgstr "Pool address" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:198 #: src/widgets/PoolWidget/AMMV3/components/FeeSelector.tsx:54 #: src/widgets/PoolWidget/AMMV3/components/PositionPreview.tsx:122 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:192 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:192 msgid "Fee tier" msgstr "Fee tier" @@ -648,10 +829,18 @@ msgstr "Fee tier" msgid "Are you sure swapping to another chain?" msgstr "Are you sure swapping to another chain?" +#: src/widgets/ve33/Ve33LockList/hooks/useMergeLock.ts:57 +msgid "Failed to Merge:" +msgstr "Failed to Merge:" + #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/index.tsx:25 msgid "Swaps" msgstr "Swaps" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:283 +msgid "Depositing into the lock will increase your voting power. You can also extend the lock time." +msgstr "Depositing into the lock will increase your voting power. You can also extend the lock time." + #: src/components/WithExecutionDialog/index.tsx:320 msgid "{0} Submitted" msgstr "{0} Submitted" @@ -665,6 +854,10 @@ msgstr "Edit" msgid "PMM Pool" msgstr "PMM Pool" +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:136 +msgid "Before" +msgstr "Before" + #. js-lingui-explicit-id #: src/widgets/MiningWidget/MiningList/my-created/RewardCard.tsx:218 msgid "End Time" @@ -715,11 +908,22 @@ msgstr "Insufficient cross-chain fees, need at least {0} {1}" #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:300 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:345 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:604 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:58 -#: src/widgets/ve33/VotePoolList/TableList.tsx:53 +#: src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx:106 +#: src/widgets/ve33/Ve33IncentiveList/CardList.tsx:90 +#: src/widgets/ve33/Ve33IncentiveList/TableList.tsx:42 +#: src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx:106 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:94 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:127 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:59 +#: src/widgets/ve33/VotePoolList/CardList.tsx:108 +#: src/widgets/ve33/VotePoolList/TableList.tsx:54 msgid "TVL" msgstr "TVL" +#: src/widgets/ve33/Ve33LockList/hooks/useIncreaseLock.ts:59 +msgid "Failed to Increase:" +msgstr "Failed to Increase:" + #: src/widgets/PoolWidget/AMMV3/AMMV3PositionsView.tsx:187 #: src/widgets/PoolWidget/AMMV3/AMMV3PositionsView.tsx:233 msgid "Add Position" @@ -745,6 +949,12 @@ msgstr "on" msgid "Suitable for stablecoins with price fluctuations within 2%" msgstr "Suitable for stablecoins with price fluctuations within 2%" +#: src/widgets/ve33/Ve33LockList/CardList.tsx:90 +#: src/widgets/ve33/Ve33LockList/ClaimLockDialog.tsx:28 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:124 +msgid "Claim & Lock" +msgstr "Claim & Lock" + #: src/components/Swap/components/ReviewDialog.tsx:363 msgid "High slippage tolerance will increase the success rate of transaction, but might not get the best quote." msgstr "High slippage tolerance will increase the success rate of transaction, but might not get the best quote." @@ -761,7 +971,10 @@ msgstr "Canceled" msgid "The fee rate must be between 0.01% to 10%" msgstr "The fee rate must be between 0.01% to 10%" -#: src/widgets/ve33/VotePoolList/TableList.tsx:62 +#: src/widgets/ve33/VotePoolList/CardList.tsx:122 +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:250 +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:368 +#: src/widgets/ve33/VotePoolList/TableList.tsx:63 msgid "Total Vote" msgstr "Total Vote" @@ -786,6 +999,19 @@ msgstr "Day" msgid "minutes" msgstr "minutes" +#: src/widgets/ve33/Ve33LockList/CardList.tsx:173 +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:319 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:44 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:191 +#: src/widgets/ve33/Ve33LockOperate/hooks/useCreateLock.ts:45 +#: src/widgets/ve33/VotePoolList/widgets.tsx:561 +msgid "Lock" +msgstr "Lock" + +#: src/widgets/ve33/Ve33IncentiveDetail/AddIncentiveDialog.tsx:154 +msgid "Epoch ends in" +msgstr "Epoch ends in" + #: src/widgets/PoolWidget/PoolCreate/hooks/useVersionList.ts:46 msgid "You can set the minimum selling price for single-token pools." msgstr "You can set the minimum selling price for single-token pools." @@ -794,10 +1020,14 @@ msgstr "You can set the minimum selling price for single-token pools." msgid "Invalid price input" msgstr "Invalid price input" -#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2RemoveLiquidity.ts:137 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2RemoveLiquidity.ts:137 msgid "Failed to remove" msgstr "Failed to remove" +#: src/widgets/ve33/VotePoolList/widgets.tsx:136 +msgid "and" +msgstr "and" + #: src/utils/time.ts:27 msgid "Days" msgstr "Days" @@ -810,6 +1040,23 @@ msgstr "Price Impact: {0}" msgid "Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price" msgstr "Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price" +#: src/widgets/ve33/Ve33V3PoolOperate/hooks/usePriceRangeRatioSelect.ts:43 +msgid "Wide" +msgstr "Wide" + +#: src/widgets/ve33/hooks/useAddIncentive.ts:63 +#: src/widgets/ve33/Ve33IncentiveDetail/index.tsx:171 +msgid "Add incentive" +msgstr "Add incentive" + +#: src/widgets/ve33/VotePoolList/index.tsx:650 +msgid "Total {selectedPoolListLen}" +msgstr "Total {selectedPoolListLen}" + +#: src/widgets/ve33/VotePoolList/widgets.tsx:590 +msgid "Voted" +msgstr "Voted" + #. js-lingui-explicit-id #: src/widgets/MiningWidget/MiningList/components/UnknownUSDPopover.tsx:22 msgid "Insufficient market depth to capture the dollar value of [ {{symbols}} ]" @@ -821,6 +1068,7 @@ msgid "Invite" msgstr "Invite" #: src/widgets/PoolWidget/AMMV3/components/Badge/RangeBadge.tsx:40 +#: src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx:40 msgid "The price of this pool is outside of your selected range. Your position is not currently earning fees." msgstr "The price of this pool is outside of your selected range. Your position is not currently earning fees." @@ -841,6 +1089,10 @@ msgstr "Additional Fee" msgid "Pegged" msgstr "Pegged" +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:94 +msgid "Set vote power" +msgstr "Set vote power" + #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/ParametersTable.tsx:634 msgid "Equilibrium target" msgstr "Equilibrium target" @@ -858,13 +1110,20 @@ msgstr "End release time before adjustment" #: src/widgets/MiningWidget/OperateArea/index.tsx:72 #: src/widgets/MiningWidget/OperateArea/StakeButton.tsx:80 #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:451 +#: src/widgets/ve33/hooks/useVe33V2Stake.ts:27 +#: src/widgets/ve33/hooks/useVe33V3Stake.ts:30 +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:204 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:549 +#: src/widgets/ve33/Ve33StakeDialog.tsx:77 +#: src/widgets/ve33/Ve33StakeDialog.tsx:342 +#: src/widgets/ve33/Ve33StakeDialog.tsx:629 msgid "Stake" msgstr "Stake" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:281 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:568 -#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:233 -#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:425 +#: src/widgets/ve33/Ve33V2PoolOperate/AddPoolOperate.tsx:233 +#: src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx:425 msgid "Price discrepancy {lqAndDodoCompareText} between liquidity pool and the quote price on DODO." msgstr "Price discrepancy {lqAndDodoCompareText} between liquidity pool and the quote price on DODO." @@ -874,9 +1133,15 @@ msgid "Fetching best price..." msgstr "Fetching best price..." #: src/widgets/PoolWidget/AMMV3/AddLiquidityV3.tsx:496 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:322 msgid "Invalid range selected. The min price must be lower than the max price." msgstr "Invalid range selected. The min price must be lower than the max price." +#: src/widgets/ve33/hooks/useVe33V2Stake.ts:46 +#: src/widgets/ve33/hooks/useVe33V3Stake.ts:49 +msgid "Failed to Stake:" +msgstr "Failed to Stake:" + #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/LiquidityProvidersTable.tsx:91 msgid "Liquidity Provider" msgstr "Liquidity Provider" @@ -918,6 +1183,10 @@ msgstr "Attention: High slippage tolerance will increase the success rate of tra msgid "Set pool parameters" msgstr "Set pool parameters" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:414 +msgid "When activated, it sets the lock to maximum unlock time, until disabled. Once disabled, the regular vesting unlock time will apply. Maximum unlock time gives a 1-to-1 voting power to the amount of locked tokens." +msgstr "When activated, it sets the lock to maximum unlock time, until disabled. Once disabled, the regular vesting unlock time will apply. Maximum unlock time gives a 1-to-1 voting power to the amount of locked tokens." + #: src/widgets/PoolWidget/PoolOperate/components/Ratio.tsx:251 msgid "Any Ratio" msgstr "Any Ratio" @@ -977,12 +1246,18 @@ msgstr "Time" msgid "Owner" msgstr "Owner" +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:296 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:621 +msgid "Emissions" +msgstr "Emissions" + #: src/widgets/PoolWidget/PoolCreate/hooks/useVersionList.ts:36 msgid "The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1." msgstr "The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1." #: src/widgets/PoolWidget/AMMV2Create/index.tsx:278 #: src/widgets/PoolWidget/AMMV3/AddLiquidityV3.tsx:593 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:367 msgid "Deposit amounts" msgstr "Deposit amounts" @@ -991,6 +1266,7 @@ msgid "Disable Indirect Routing" msgstr "Disable Indirect Routing" #: src/widgets/PoolWidget/AMMV3/components/Badge/RangeBadge.tsx:23 +#: src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx:23 msgid "Your position has 0 liquidity, and is not earning fees." msgstr "Your position has 0 liquidity, and is not earning fees." @@ -999,6 +1275,11 @@ msgstr "Your position has 0 liquidity, and is not earning fees." msgid "Mining Pool" msgstr "Mining Pool" +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:252 +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:375 +msgid "My Vote" +msgstr "My Vote" + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/TokenPairSelect.tsx:121 msgid "No pools yet? Create one!" msgstr "No pools yet? Create one!" @@ -1031,6 +1312,10 @@ msgstr "Quote not available" msgid "My pool share" msgstr "My pool share" +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:198 +msgid "After" +msgstr "After" + #: src/components/Swap/components/SwapSettingsDialog/SlippageSetting.tsx:122 #: src/widgets/PoolWidget/PoolCreate/operate-widgets/InitPriceSetting.tsx:112 msgid "Learn More" @@ -1049,6 +1334,11 @@ msgstr "Stake LP tokens and receive mining rewards." msgid "No LP pools match your criteria" msgstr "No LP pools match your criteria" +#: src/widgets/ve33/Ve33LockList/CardList.tsx:223 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:56 +msgid "Unlock Date" +msgstr "Unlock Date" + #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:220 #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:560 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:260 @@ -1059,6 +1349,7 @@ msgstr "Fee rate" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:305 #: src/widgets/PoolWidget/PoolList/hooks/usePoolListTabs.ts:25 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:140 +#: src/widgets/ve33/Ve33V3PoolOperate/hooks/useAddVe33V3Liquidity.ts:54 msgid "Add Liquidity" msgstr "Add Liquidity" @@ -1070,6 +1361,10 @@ msgstr "Add Liquidity" #: src/widgets/MiningWidget/OperateArea/index.tsx:73 #: src/widgets/MiningWidget/OperateArea/UnstakeButton.tsx:70 #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:452 +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:197 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:541 +#: src/widgets/ve33/Ve33StakeDialog.tsx:494 +#: src/widgets/ve33/Ve33StakeDialog.tsx:733 msgid "Unstake" msgstr "Unstake" @@ -1083,6 +1378,7 @@ msgid "If there are no participants before the end, the rewards cannot be taken msgstr "If there are no participants before the end, the rewards cannot be taken out anymore." #: src/widgets/PoolWidget/AMMV3/components/LiquidityChartRangeInput/index.tsx:189 +#: src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/index.tsx:161 msgid "Your position will appear here." msgstr "Your position will appear here." @@ -1092,6 +1388,7 @@ msgstr "Fetching Price..." #: src/hooks/Token/useGetTokenStatus.ts:60 #: src/hooks/Token/useTokenStatus.ts:134 +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:173 msgid "Reset" msgstr "Reset" @@ -1108,6 +1405,10 @@ msgstr "Fresh Mining" msgid "LP Fee" msgstr "LP Fee" +#: src/widgets/ve33/Ve33LockList/index.tsx:62 +msgid "My Locks" +msgstr "My Locks" + #: src/widgets/PoolWidget/PoolCreate/operate-widgets/RatioSetting.tsx:208 msgid "Ratio Settings" msgstr "Ratio Settings" @@ -1123,7 +1424,7 @@ msgid "The initial price needs to be greater than {min} and less than 100,000,00 msgstr "The initial price needs to be greater than {min} and less than 100,000,000" #: src/widgets/PoolWidget/PoolOperate/hooks/usePercentageRemove.ts:98 -#: src/widgets/ve33/Ve33PoolOperate/hooks/usePercentageRemove.ts:95 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/usePercentageRemove.ts:95 msgid "Quantity model" msgstr "Quantity model" @@ -1144,11 +1445,19 @@ msgstr "Position on" msgid "Confirm Cross Chain" msgstr "Confirm Cross Chain" +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:249 +msgid "VAPR" +msgstr "VAPR" + #. js-lingui-explicit-id #: src/components/Swap/components/ReviewDialog.tsx:424 msgid "Price impact reaches <0>{priceImpact}%, accept the quote" msgstr "Price impact reaches <0>{priceImpact}%, accept the quote" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:248 +msgid "Add To Lock" +msgstr "Add To Lock" + #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:324 #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:403 msgid "Volume (1D)" @@ -1175,8 +1484,14 @@ msgstr "You will also claim all rewards from this pool." msgid "The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more" msgstr "The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more" +#: src/widgets/ve33/Ve33LockList/hooks/useTransferLock.ts:46 +msgid "Transfer Lock" +msgstr "Transfer Lock" + #: src/widgets/PoolWidget/AMMV2Create/index.tsx:389 #: src/widgets/PoolWidget/AMMV3/hooks/useV3DerivedMintInfo.tsx:523 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:214 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:150 msgid "Invalid pair" msgstr "Invalid pair" @@ -1184,6 +1499,10 @@ msgstr "Invalid pair" msgid "Auto" msgstr "Auto" +#: src/widgets/ve33/Ve33LockList/hooks/useTransferLock.ts:65 +msgid "Failed to Transfer:" +msgstr "Failed to Transfer:" + #. js-lingui-explicit-id #: src/widgets/MiningWidget/MiningList/my-created/RewardCard.tsx:198 msgid "Remaining rewards/Total" @@ -1197,6 +1516,10 @@ msgstr "Remaining rewards/Total" msgid "Rewards" msgstr "Rewards" +#: src/widgets/ve33/Ve33LockList/ClaimLockDialog.tsx:99 +msgid "into Lock" +msgstr "into Lock" + #: src/components/DateTimePickerInput/components/MobileDateTimePicker.tsx:237 msgid "Last" msgstr "Last" @@ -1225,7 +1548,7 @@ msgstr "Review Cross Chain" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:225 #: src/widgets/PoolWidget/AMMV2Create/Ratio.tsx:213 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:219 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:219 msgid "Share of pool" msgstr "Share of pool" @@ -1316,11 +1639,27 @@ msgstr "Settings" msgid "Creator" msgstr "Creator" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:576 +msgid "Transferring a lock will also transfer any rewards and rebases! Before continuing, please make sure you have claimed all available rewards" +msgstr "Transferring a lock will also transfer any rewards and rebases! Before continuing, please make sure you have claimed all available rewards" + #: src/widgets/MiningWidget/MiningCreate/components/StepTitle.tsx:49 #: src/widgets/MiningWidget/MiningCreate/index.tsx:139 msgid "Reward Rules" msgstr "Reward Rules" +#: src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx:328 +#: src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx:329 +#: src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx:328 +#: src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx:329 +msgid "My {0}" +msgstr "My {0}" + +#: src/widgets/ve33/Ve33LockList/index.tsx:99 +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:89 +msgid "Merge" +msgstr "Merge" + #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/SwapsTable.tsx:168 msgid "Trader" msgstr "Trader" @@ -1330,11 +1669,12 @@ msgstr "Trader" #: src/widgets/MiningWidget/OperateArea/AssociateMine.tsx:269 #: src/widgets/PoolWidget/AMMV3/components/PositionAmountPreview.tsx:195 #: src/widgets/PoolWidget/PoolOperate/components/LiquidityInfo.tsx:400 +#: src/widgets/ve33/Ve33V3PoolOperate/index.tsx:283 msgid "Details" msgstr "Details" #: src/widgets/PoolWidget/PoolOperate/components/OperateBtn.tsx:69 -#: src/widgets/ve33/Ve33PoolOperate/components/OperateBtn.tsx:69 +#: src/widgets/ve33/Ve33V2PoolOperate/components/OperateBtn.tsx:69 msgid "Pending" msgstr "Pending" @@ -1361,10 +1701,24 @@ msgstr "Seconds" msgid "Single-Token Stake Mining" msgstr "Single-Token Stake Mining" +#: src/widgets/ve33/Ve33LockList/CardList.tsx:236 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:59 +msgid "Rebases" +msgstr "Rebases" + #: src/widgets/PoolWidget/PoolCreate/hooks/useSlippageCoefficientList.ts:69 msgid "Suitable for most situations." msgstr "Suitable for most situations." +#: src/widgets/ve33/hooks/useVe33V2ClaimEmissions.ts:49 +#: src/widgets/ve33/hooks/useVe33V2ClaimTradingFees.ts:50 +#: src/widgets/ve33/hooks/useVe33V3ClaimEmissions.ts:49 +#: src/widgets/ve33/hooks/useVe33V3ClaimTradingFees.ts:68 +#: src/widgets/ve33/Ve33LockList/hooks/useClaimBribes.ts:61 +#: src/widgets/ve33/Ve33LockList/hooks/useClaimRebases.ts:53 +msgid "Failed to Claim:" +msgstr "Failed to Claim:" + #: src/components/List/FailedList.tsx:47 msgid "Something went wrong…<0>Refresh again" msgstr "Something went wrong…<0>Refresh again" @@ -1385,6 +1739,8 @@ msgstr "End mining" #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:132 #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:191 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:126 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:186 msgid "Your position will be 100% composed of {0} at this price" msgstr "Your position will be 100% composed of {0} at this price" @@ -1409,6 +1765,10 @@ msgstr "Swap Detail" msgid "No ForceStop access" msgstr "No ForceStop access" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:435 +msgid "Extend to" +msgstr "Extend to" + #: src/components/Swap/components/SwapSettingsDialog/index.tsx:297 msgid "Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens." msgstr "Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens." @@ -1437,8 +1797,8 @@ msgstr "Price Range" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:154 #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:177 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:148 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:171 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:148 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:171 msgid "{0} deposited" msgstr "{0} deposited" @@ -1448,7 +1808,8 @@ msgstr "{0} deposited" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:454 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:613 #: src/widgets/PoolWidget/PoolOperate/components/LiquidityInfo.tsx:430 -#: src/widgets/ve33/Ve33PoolOperate/index.tsx:277 +#: src/widgets/ve33/Ve33V2PoolOperate/index.tsx:282 +#: src/widgets/ve33/Ve33V3PoolOperate/components/MyLiquidity.tsx:55 msgid "My Liquidity" msgstr "My Liquidity" @@ -1457,11 +1818,11 @@ msgid "For" msgstr "For" #: src/widgets/PoolWidget/PoolOperate/components/ComparePrice.tsx:52 -#: src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx:52 +#: src/widgets/ve33/Ve33V2PoolOperate/components/ComparePrice.tsx:52 msgid "{lqAndDodoCompareText} Price Difference" msgstr "{lqAndDodoCompareText} Price Difference" -#: src/widgets/ve33/VotePoolList/TableList.tsx:50 +#: src/widgets/ve33/VotePoolList/TableList.tsx:51 msgid "vAPR" msgstr "vAPR" @@ -1475,10 +1836,15 @@ msgstr "You are not currently providing liquidity for any LP pools." msgid "You have not create any mining" msgstr "You have not create any mining" -#: src/widgets/ve33/Ve33PoolOperate/index.tsx:177 +#: src/widgets/ve33/Ve33V2PoolOperate/index.tsx:182 +#: src/widgets/ve33/Ve33V3PoolOperate/index.tsx:160 msgid "Pool Adress" msgstr "Pool Adress" +#: src/widgets/ve33/Ve33IncentiveDetail/AddIncentiveDialog.tsx:211 +msgid "I understand I will NOT be able to withdraw incentives" +msgstr "I understand I will NOT be able to withdraw incentives" + #: src/components/chart/i18n.ts:27 msgid "The area of the chart indicates the buy/sell volume of {0} that can be carried by the market when the current price changes to the hover price." msgstr "The area of the chart indicates the buy/sell volume of {0} that can be carried by the market when the current price changes to the hover price." @@ -1508,12 +1874,16 @@ msgstr "Share" msgid "Additional routing fees set by the Widget user" msgstr "Additional routing fees set by the Widget user" +#: src/widgets/ve33/Ve33LockOperate/index.tsx:202 +msgid "Locking for" +msgstr "Locking for" + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/RewardForm.tsx:344 msgid "The start time is too soon, please set a later time" msgstr "The start time is too soon, please set a later time" #: src/widgets/PoolWidget/PoolOperate/components/ComparePrice.tsx:61 -#: src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx:61 +#: src/widgets/ve33/Ve33V2PoolOperate/components/ComparePrice.tsx:61 msgid "Current liquidity pool token price" msgstr "Current liquidity pool token price" @@ -1534,16 +1904,25 @@ msgstr "Maximum slippage do not exceed 50%" msgid "For those who are looking to sell tokens and only need ask-side liquidity." msgstr "For those who are looking to sell tokens and only need ask-side liquidity." +#: src/widgets/ve33/VotePoolList/widgets.tsx:45 +msgid "Fees rewards + Incentives rewards" +msgstr "Fees rewards + Incentives rewards" + #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/SwapsTable.tsx:177 msgid "Price" msgstr "Price" +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:391 +msgid "In Range" +msgstr "In Range" + #: src/widgets/PoolWidget/AMMV3/components/Badge/RangeBadge.tsx:34 +#: src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx:34 msgid "The price of this pool is within your selected range. Your position is currently earning fees." msgstr "The price of this pool is within your selected range. Your position is currently earning fees." #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:58 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:62 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:62 msgid "You are creating a pool" msgstr "You are creating a pool" @@ -1560,15 +1939,25 @@ msgstr "Medium" msgid "Minutes" msgstr "Minutes" +#: src/widgets/ve33/Ve33V3PoolOperate/hooks/usePriceRangeRatioSelect.ts:42 +msgid "Common" +msgstr "Common" + #: src/components/TextSwitch.tsx:61 msgid "Off" msgstr "Off" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:505 +msgid "You can extend the lock or increase the lock amount. These actions will increase your voting power. The maximum lock time is 1 years!" +msgstr "You can extend the lock or increase the lock amount. These actions will increase your voting power. The maximum lock time is 1 years!" + #: src/widgets/PoolWidget/AMMV3/AddLiquidityV3.tsx:491 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:317 msgid "Your position will not earn fees or be used in trades until the market price moves into your range." msgstr "Your position will not earn fees or be used in trades until the market price moves into your range." #: src/widgets/PoolWidget/AMMV3/AddLiquidityV3.tsx:554 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:282 msgid "per" msgstr "per" @@ -1578,8 +1967,8 @@ msgstr "Suitable for stablecoins with price fluctuations within 10%" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:275 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:562 -#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:227 -#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:419 +#: src/widgets/ve33/Ve33V2PoolOperate/AddPoolOperate.tsx:227 +#: src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx:419 msgid "Confirm submission" msgstr "Confirm submission" @@ -1605,12 +1994,17 @@ msgstr "Pool share" msgid "Mining Type" msgstr "Mining Type" +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:157 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:500 +msgid "Total liquidity" +msgstr "Total liquidity" + #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/ParametersTable.tsx:548 msgid "Settler" msgstr "Settler" #: src/widgets/PoolWidget/hooks/useAMMV2RemoveLiquidity.ts:164 -#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2RemoveLiquidity.ts:144 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2RemoveLiquidity.ts:144 msgid "Remove liquidity" msgstr "Remove liquidity" @@ -1720,6 +2114,10 @@ msgstr "Transaction rejected." msgid "\"Created by {0}" msgstr "\"Created by {0}" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:128 +msgid "Lock #{0}" +msgstr "Lock #{0}" + #: src/widgets/PoolWidget/PoolCreate/hooks/useSlippageCoefficientList.ts:85 msgid "Results in a more volatile price." msgstr "Results in a more volatile price." @@ -1746,7 +2144,7 @@ msgstr "Approve {0}" #: src/components/Swap/SwapOrderHistory/index.tsx:105 #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:204 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:198 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:198 msgid "Rate" msgstr "Rate" @@ -1759,10 +2157,22 @@ msgstr "Balance" msgid "fee tier" msgstr "fee tier" +#: src/widgets/ve33/Ve33V3PoolOperate/hooks/usePriceRangeRatioSelect.ts:44 +msgid "Full" +msgstr "Full" + #: src/hooks/Submission/getExecutionErrorMsg.ts:66 msgid "Service update, please wait and try again" msgstr "Service update, please wait and try again" +#: src/widgets/ve33/Ve33LockList/hooks/useExtendLock.ts:49 +msgid "Extend Lock" +msgstr "Extend Lock" + +#: src/widgets/ve33/Ve33LockOperate/index.tsx:117 +msgid "My total ve{0}" +msgstr "My total ve{0}" + #: src/hooks/Submission/getExecutionErrorMsg.ts:44 msgid "Gas price is too low, please adjust in your wallet and try again" msgstr "Gas price is too low, please adjust in your wallet and try again" @@ -1781,6 +2191,7 @@ msgid "Estimated transaction time" msgstr "Estimated transaction time" #: src/widgets/PoolWidget/AMMV3/components/ClaimButton.tsx:28 +#: src/widgets/ve33/Ve33V3PoolOperate/components/ClaimButton.tsx:52 msgid "Collect fees" msgstr "Collect fees" @@ -1814,22 +2225,46 @@ msgstr "Create" msgid "Token Amount" msgstr "Token Amount" +#: src/widgets/ve33/Ve33LockList/hooks/useIncreaseLock.ts:40 +msgid "Increase Lock" +msgstr "Increase Lock" + #: src/widgets/PoolWidget/PoolCreate/components/StepTitle.tsx:20 #: src/widgets/PoolWidget/PoolCreate/index.tsx:246 #: src/widgets/PoolWidget/PoolModify/index.tsx:237 msgid "Select Pool Version" msgstr "Select Pool Version" +#: src/widgets/ve33/Ve33IncentiveList/index.tsx:189 +msgid "Available Pools" +msgstr "Available Pools" + #: src/widgets/MiningWidget/hooks/useClaimMiningSubmit.ts:46 #: src/widgets/MiningWidget/MiningDetail/MiningInfo.tsx:465 #: src/widgets/MiningWidget/MiningList/operate-area/index.tsx:204 #: src/widgets/MiningWidget/OperateArea/index.tsx:74 #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:453 +#: src/widgets/ve33/hooks/useVe33V2ClaimEmissions.ts:30 +#: src/widgets/ve33/hooks/useVe33V2ClaimTradingFees.ts:31 +#: src/widgets/ve33/hooks/useVe33V3ClaimEmissions.ts:30 +#: src/widgets/ve33/hooks/useVe33V3ClaimTradingFees.ts:49 +#: src/widgets/ve33/Ve33LockList/CardList.tsx:90 +#: src/widgets/ve33/Ve33LockList/ClaimLockDialog.tsx:28 +#: src/widgets/ve33/Ve33LockList/hooks/useClaimBribes.ts:42 +#: src/widgets/ve33/Ve33LockList/hooks/useClaimRebases.ts:34 +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:249 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:124 +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:279 +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:305 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:604 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:630 msgid "Claim" msgstr "Claim" #: src/widgets/PoolWidget/AMMV3/components/Badge/RangeBadge.tsx:48 #: src/widgets/PoolWidget/AMMV3/components/InRangeDot.tsx:12 +#: src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx:48 +#: src/widgets/ve33/Ve33V3PoolOperate/components/InRangeDot.tsx:12 msgid "Out of range" msgstr "Out of range" @@ -1848,16 +2283,30 @@ msgstr "Dynamic slippage is {recommendSlippage}%,the current slippage setting is #: src/components/Swap/index.tsx:706 #: src/widgets/PoolWidget/AMMV3/hooks/useV3DerivedMintInfo.tsx:534 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:217 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:153 msgid "Enter an amount" msgstr "Enter an amount" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:395 +msgid "Auto Max-Lock Mode" +msgstr "Auto Max-Lock Mode" + #: src/widgets/PoolWidget/PoolDetail/components/TotalLiquidity.tsx:180 msgid "Ratio" msgstr "Ratio" +#: src/widgets/ve33/Ve33LockList/index.tsx:78 +msgid "{selectedLen} Lock selected" +msgstr "{selectedLen} Lock selected" + +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:200 +msgid "Merging two locks will inherit the longest lock time of the two and will increase the final Lock (veNFT) voting power by adding up the two underlying locked amounts based on the new lock time." +msgstr "Merging two locks will inherit the longest lock time of the two and will increase the final Lock (veNFT) voting power by adding up the two underlying locked amounts based on the new lock time." + #: src/components/Swap/index.tsx:700 #: src/components/TokenPairStatusButton.tsx:45 -#: src/components/TokenStatusButton.tsx:31 +#: src/components/TokenStatusButton.tsx:33 msgid "Approving" msgstr "Approving" @@ -1874,6 +2323,7 @@ msgid "Liquidity Providers" msgstr "Liquidity Providers" #: src/widgets/PoolWidget/AMMV3/components/RangeSelector.tsx:98 +#: src/widgets/ve33/Ve33V3PoolOperate/components/RangeSelector.tsx:94 msgid "High price" msgstr "High price" @@ -1896,6 +2346,10 @@ msgstr "Something went wrong." msgid "Daily Rewards" msgstr "Daily Rewards" +#: src/widgets/ve33/VotePoolList/hooks/useVoteVe33.ts:61 +msgid "Failed to Vote:" +msgstr "Failed to Vote:" + #: src/utils/time.ts:7 msgid "Second" msgstr "Second" @@ -1904,9 +2358,17 @@ msgstr "Second" msgid "Total Swap Volume" msgstr "Total Swap Volume" +#: src/widgets/ve33/Ve33LockList/hooks/useExtendLock.ts:68 +msgid "Failed to Extend:" +msgstr "Failed to Extend:" + +#: src/widgets/ve33/Ve33LockList/hooks/useMergeLock.ts:38 +msgid "Merge Lock" +msgstr "Merge Lock" + #: src/components/Swap/SwapOrderHistory/index.tsx:99 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:458 -#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:323 +#: src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx:323 msgid "Receive" msgstr "Receive" @@ -1919,10 +2381,22 @@ msgstr "Select Network" msgid "AMM V2 Position" msgstr "AMM V2 Position" +#: src/widgets/ve33/Ve33IncentiveDetail/AddIncentiveDialog.tsx:253 +#: src/widgets/ve33/Ve33IncentiveList/CardList.tsx:103 +#: src/widgets/ve33/Ve33IncentiveList/TableList.tsx:100 +msgid "Add Incentive" +msgstr "Add Incentive" + #: src/components/Swap/components/ReviewDialog.tsx:448 msgid "Confirm swap" msgstr "Confirm swap" +#: src/widgets/ve33/VotePoolList/hooks/useVoteVe33.ts:42 +#: src/widgets/ve33/VotePoolList/index.tsx:229 +#: src/widgets/ve33/VotePoolList/index.tsx:691 +msgid "Vote" +msgstr "Vote" + #: src/widgets/PoolWidget/PoolCreate/hooks/useVersionList.ts:78 msgid "Once created, the price cannot be changed. This option applies to assets like ETH-WETH." msgstr "Once created, the price cannot be changed. This option applies to assets like ETH-WETH." @@ -1931,7 +2405,7 @@ msgstr "Once created, the price cannot be changed. This option applies to assets #: src/components/Swap/components/SwapSettingsDialog/index.tsx:87 #: src/widgets/PoolWidget/AMMV2Create/Setting.tsx:100 #: src/widgets/PoolWidget/PoolOperate/components/SlippageSetting.tsx:123 -#: src/widgets/ve33/Ve33PoolOperate/components/SlippageSetting.tsx:111 +#: src/widgets/ve33/Ve33V2PoolOperate/components/SlippageSetting.tsx:111 msgid "Slippage Tolerance" msgstr "Slippage Tolerance" @@ -1960,9 +2434,14 @@ msgstr "My Staked" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1110 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:122 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOperateTabs.ts:15 -#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:91 -#: src/widgets/ve33/Ve33PoolOperate/hooks/usePoolOperateTabs.ts:15 -#: src/widgets/ve33/Ve33PoolOperate/index.tsx:401 +#: src/widgets/ve33/Ve33PoolDetail/index.tsx:187 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:224 +#: src/widgets/ve33/Ve33V2PoolOperate/AddPoolOperate.tsx:91 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/usePoolOperateTabs.ts:15 +#: src/widgets/ve33/Ve33V2PoolOperate/index.tsx:406 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:237 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:446 +#: src/widgets/ve33/VotePoolList/widgets.tsx:171 msgid "Add" msgstr "Add" @@ -2025,10 +2504,23 @@ msgstr "Once Mining has started, it cannot be stopped." msgid "Select a liquidity pool" msgstr "Select a liquidity pool" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:554 +msgid "Wallet address where the lock will be transferred" +msgstr "Wallet address where the lock will be transferred" + +#: src/widgets/ve33/VotePoolList/widgets.tsx:423 +msgid "selected Lock to vote" +msgstr "selected Lock to vote" + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/SingleTokenSelect.tsx:137 msgid "Do not select non-standard ERC20 tokens as this may lead to unknown errors!" msgstr "Do not select non-standard ERC20 tokens as this may lead to unknown errors!" +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:116 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:354 +msgid "Position" +msgstr "Position" + #: src/widgets/PoolWidget/PoolList/components/CreatePoolBtn.tsx:157 #: src/widgets/PoolWidget/PoolList/components/CreatePoolBtn.tsx:161 #: src/widgets/PoolWidget/PoolList/components/CreatePoolBtn.tsx:206 @@ -2057,6 +2549,10 @@ msgstr "100% use your own funds and enjoy the maximum degree of flexibility." msgid "The closer the provided asset ratio is to the recommended ratio ({recommendRatioText}), the smaller the portion burned." msgstr "The closer the provided asset ratio is to the recommended ratio ({recommendRatioText}), the smaller the portion burned." +#: src/widgets/ve33/Ve33V3PoolOperate/index.tsx:260 +msgid "My Position" +msgstr "My Position" + #: src/widgets/PoolWidget/PoolDetail/components/Overview.tsx:112 #: src/widgets/PoolWidget/PoolList/components/PoolApyTooltip.tsx:169 msgid "MT Fee" @@ -2071,20 +2567,40 @@ msgstr "All chains" msgid "Current Market Price:" msgstr "Current Market Price:" +#: src/widgets/ve33/Ve33LockList/CardList.tsx:213 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:53 +msgid "Voting Power" +msgstr "Voting Power" + #: src/widgets/PoolWidget/PoolCreate/components/GasWrapGasTokenError.tsx:48 msgid "{0}-{1} is not supported. Please select another pair." msgstr "{0}-{1} is not supported. Please select another pair." +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:340 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:665 +msgid "Lock {0} >" +msgstr "Lock {0} >" + #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:255 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:249 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:249 msgid "Confirming..." msgstr "Confirming..." +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:105 +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:305 +msgid "Increase" +msgstr "Increase" + #: src/components/chart/i18n.ts:7 #: src/components/chart/i18n.ts:11 msgid "Users pay {0} {1} and receive {2} {3}\\nPrice {4} ({5}%)" msgstr "Users pay {0} {1} and receive {2} {3}\\nPrice {4} ({5}%)" +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:223 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:568 +msgid "Staked" +msgstr "Staked" + #: src/widgets/PoolWidget/PoolDetail/components/ChartInfo.tsx:45 msgid "Traders" msgstr "Traders" @@ -2097,7 +2613,7 @@ msgstr "Unable to SETTLE during the cooling-off period" msgid "The setting has been switched to cross chain mode" msgstr "The setting has been switched to cross chain mode" -#: src/components/Swap/components/TokenCard/index.tsx:284 +#: src/components/Swap/components/TokenCard/index.tsx:288 msgid "Buy" msgstr "Buy" @@ -2107,10 +2623,16 @@ msgstr "Buy" msgid "Total Rewards" msgstr "Total Rewards" +#: src/widgets/ve33/Ve33IncentiveDetail/AddIncentiveDialog.tsx:230 +msgid "Your incentive will be released linearly over the remaining time of the current epoch." +msgstr "Your incentive will be released linearly over the remaining time of the current epoch." + #: src/components/ConnectWallet/NeedConnectButton.tsx:87 #: src/widgets/MiningWidget/MiningCreate/operate-widgets/BottomButtonGroup.tsx:55 #: src/widgets/PoolWidget/AMMV3/hooks/useDerivedV3BurnInfo.tsx:96 #: src/widgets/PoolWidget/AMMV3/hooks/useV3DerivedMintInfo.tsx:519 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:210 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:146 msgid "Connect to a wallet" msgstr "Connect to a wallet" @@ -2122,11 +2644,12 @@ msgid "End Time" msgstr "End Time" #: src/widgets/PoolWidget/AMMV3/components/LiquidityChartRangeInput/index.tsx:231 +#: src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/index.tsx:203 msgid "There is no liquidity data." msgstr "There is no liquidity data." #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:134 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:128 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:128 msgid "Output is estimated. If the price changes by more than {0} your transaction will revert." msgstr "Output is estimated. If the price changes by more than {0} your transaction will revert." @@ -2149,6 +2672,7 @@ msgid "AMM V2" msgstr "AMM V2" #: src/widgets/PoolWidget/AMMV3/components/Buttons.tsx:114 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:439 msgid "Preview" msgstr "Preview" @@ -2157,17 +2681,26 @@ msgid "Select Platform" msgstr "Select Platform" #: src/components/Swap/components/TokenCard/TokenLogoCollapse.tsx:64 -#: src/components/TokenSelect.tsx:124 +#: src/components/TokenSelect.tsx:128 #: src/widgets/MiningWidget/MiningCreate/components/PoolPicker.tsx:356 #: src/widgets/MiningWidget/MiningCreate/components/PoolPicker.tsx:414 #: src/widgets/PoolWidget/AMMV3/components/CurrencyInputPanel.tsx:99 msgid "SELECT TOKEN" msgstr "SELECT TOKEN" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:184 +msgid "Voting Power Granted" +msgstr "Voting Power Granted" + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/RewardForm.tsx:579 msgid "Add Token" msgstr "Add Token" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:453 +#: src/widgets/ve33/Ve33LockOperate/index.tsx:214 +msgid "for" +msgstr "for" + #: src/widgets/PoolWidget/PoolDetail/components/Overview.tsx:53 #: src/widgets/PoolWidget/PoolDetail/components/TotalLiquidity.tsx:67 msgid "Total Liquidity" @@ -2177,6 +2710,10 @@ msgstr "Total Liquidity" msgid "AMM V3 Position" msgstr "AMM V3 Position" +#: src/widgets/ve33/Ve33IncentiveDetail/Dashboard.tsx:92 +msgid "Current Incentives" +msgstr "Current Incentives" + #: src/widgets/PoolWidget/PoolCreate/components/BaseInfoCardList.tsx:55 #: src/widgets/PoolWidget/PoolCreate/components/ConfirmInfoDialog.tsx:151 #: src/widgets/PoolWidget/PoolCreate/components/LqSettingsShow.tsx:139 @@ -2191,7 +2728,7 @@ msgid "Advanced" msgstr "Advanced" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:107 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:111 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:111 msgid "{0}/{1} Pool Tokens" msgstr "{0}/{1} Pool Tokens" @@ -2207,9 +2744,12 @@ msgstr "Initial Price Alert" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1098 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOperateTabs.ts:16 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:233 -#: src/widgets/ve33/Ve33PoolOperate/hooks/usePoolOperateTabs.ts:16 -#: src/widgets/ve33/Ve33PoolOperate/index.tsx:402 -#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:205 +#: src/widgets/ve33/Ve33PoolDetail/index.tsx:194 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/usePoolOperateTabs.ts:16 +#: src/widgets/ve33/Ve33V2PoolOperate/index.tsx:407 +#: src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx:205 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:238 +#: src/widgets/ve33/Ve33V3PoolOperate/components/RemoveButton.tsx:58 msgid "Remove" msgstr "Remove" @@ -2251,11 +2791,12 @@ msgid "Status" msgstr "Status" #: src/widgets/PoolWidget/AMMV3/components/RangeSelector.tsx:73 +#: src/widgets/ve33/Ve33V3PoolOperate/components/RangeSelector.tsx:69 msgid "Low price" msgstr "Low price" #: src/widgets/PoolWidget/PoolOperate/components/ComparePrice.tsx:64 -#: src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx:64 +#: src/widgets/ve33/Ve33V2PoolOperate/components/ComparePrice.tsx:64 msgid "differs from the price quoted by DODO by {lqAndDodoCompareText}" msgstr "differs from the price quoted by DODO by {lqAndDodoCompareText}" @@ -2277,15 +2818,24 @@ msgstr "Enter parameters to view the yield curve" msgid "Description of this type of pool" msgstr "Description of this type of pool" +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:328 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:653 +msgid "Lock {0} to get ve{1}. You can use ve{2} to vote for more rewards." +msgstr "Lock {0} to get ve{1}. You can use ve{2} to vote for more rewards." + #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/SwapsTable.tsx:171 msgid "Paid" msgstr "Paid" #: src/components/AddTokenToMetamask.tsx:54 -#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2AddLiquidity.ts:133 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2AddLiquidity.ts:133 msgid "Failed to add" msgstr "Failed to add" +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:161 +msgid "Distribute equally" +msgstr "Distribute equally" + #: src/components/Swap/index.tsx:863 #: src/hooks/Swap/useExecuteSwap.ts:56 msgid "Swap" @@ -2298,16 +2848,22 @@ msgstr "Hide" #: src/widgets/PoolWidget/AMMV3/components/Badge/RangeBadge.tsx:36 #: src/widgets/PoolWidget/AMMV3/components/InRangeDot.tsx:12 +#: src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx:36 +#: src/widgets/ve33/Ve33V3PoolOperate/components/InRangeDot.tsx:12 msgid "In range" msgstr "In range" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:284 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:571 -#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:236 -#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:428 +#: src/widgets/ve33/Ve33V2PoolOperate/AddPoolOperate.tsx:236 +#: src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx:428 msgid "There is risk of being arbitraged if adding this liquidity." msgstr "There is risk of being arbitraged if adding this liquidity." +#: src/widgets/ve33/Ve33V3PoolOperate/index.tsx:275 +msgid "{0} Position" +msgstr "{0} Position" + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/SingleTokenSelect.tsx:106 msgid "address" msgstr "address" @@ -2316,8 +2872,23 @@ msgstr "address" msgid "This trading pair does not have enough historical data and has used the default dynamic slippage." msgstr "This trading pair does not have enough historical data and has used the default dynamic slippage." +#: src/widgets/ve33/VotePoolList/index.tsx:237 +msgid "Voters earn a share of transaction fees and incentives for helping govern how emissions are distributed." +msgstr "Voters earn a share of transaction fees and incentives for helping govern how emissions are distributed." + +#: src/widgets/ve33/VotePoolList/widgets.tsx:425 +#: src/widgets/ve33/VotePoolList/widgets.tsx:480 +msgid "Select A Lock" +msgstr "Select A Lock" + +#: src/widgets/ve33/Ve33IncentiveList/index.tsx:156 +msgid "Select pool pair you want to incentive" +msgstr "Select pool pair you want to incentive" + #: src/widgets/PoolWidget/AMMV3/components/PositionViewCard.tsx:248 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1110 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:286 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:453 msgid "Manage" msgstr "Manage" @@ -2338,7 +2909,7 @@ msgid "Liquidity Burn Ratio" msgstr "Liquidity Burn Ratio" #: src/widgets/PoolWidget/PoolOperate/hooks/usePercentageRemove.ts:102 -#: src/widgets/ve33/Ve33PoolOperate/hooks/usePercentageRemove.ts:99 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/usePercentageRemove.ts:99 msgid "Percentage to remove" msgstr "Percentage to remove" @@ -2346,6 +2917,10 @@ msgstr "Percentage to remove" msgid "Max Slippage" msgstr "Max Slippage" +#: src/widgets/ve33/VotePoolList/index.tsx:682 +msgid "Clear" +msgstr "Clear" + #: src/hooks/Submission/getExecutionErrorMsg.ts:25 msgid "User denied transaction signature." msgstr "User denied transaction signature." @@ -2359,6 +2934,10 @@ msgstr "Copy link" msgid "WARNING" msgstr "WARNING" +#: src/widgets/ve33/Ve33LockOperate/hooks/useCreateLock.ts:64 +msgid "Failed to Create:" +msgstr "Failed to Create:" + #: src/hooks/Submission/getExecutionErrorMsg.ts:36 msgid "ForceStop exception" msgstr "ForceStop exception" @@ -2416,6 +2995,11 @@ msgstr "To avoid loss of rewards, please ensure that at least 1 or more particip msgid "https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef" msgstr "https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:107 +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:599 +msgid "Transfer" +msgstr "Transfer" + #: src/components/Swap/components/SwapSettingsDialog/index.tsx:195 msgid "Transaction Deadline" msgstr "Transaction Deadline" @@ -2442,14 +3026,20 @@ msgid "Total Rewards=Daily Rewards*Duration" msgstr "Total Rewards=Daily Rewards*Duration" #: src/components/Swap/index.tsx:743 -#: src/components/TokenStatusButton.tsx:18 +#: src/components/TokenStatusButton.tsx:20 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:124 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:233 -#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:93 -#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:205 +#: src/widgets/ve33/Ve33V2PoolOperate/AddPoolOperate.tsx:93 +#: src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx:205 msgid "Insufficient balance" msgstr "Insufficient balance" +#: src/widgets/ve33/Ve33LockList/CardList.tsx:191 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:47 +#: src/widgets/ve33/VotePoolList/widgets.tsx:48 +msgid "Rebase APR" +msgstr "Rebase APR" + #: src/widgets/PoolWidget/hooks/usePoolTypeTag.ts:19 msgid "Private" msgstr "Private" diff --git a/packages/dodoex-widgets/src/locales/zh-CN.js b/packages/dodoex-widgets/src/locales/zh-CN.js index f0bb1260..d50e5884 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.js +++ b/packages/dodoex-widgets/src/locales/zh-CN.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"交易时长:\",\"+uZnU3\":\"跨链桥\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"当前滑点保护系数设置超过\",[\"maxSlippageWarning\"],\"%,可能会造成损失。\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"连接 \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"至\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/mfICu\":\"Fees\",\"/nzjSF\":[[\"0\"],\" 等待中\"],\"0+31GV\":\"Removing\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"余额:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"忽略\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3dP8Wx\":\"Search by address\",\"3ggd2j\":\"Asset ratio within the pool\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"由于市场情况不同,市场价格与估算价格可能略有差异。\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" 已确认\"],\"52uNwk\":\"Creation Time\",\"54ffaC\":\"当前网络与钱包不一致,请在钱包中切换\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"当前价格冲击\",\"6UYTy8\":\"分钟\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"小时\",\"6lss/t\":\"Pricing Model\",\"6nlY4n\":\"Gauge Adress\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"输入代币符号或地址\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"费用包括过跨链桥和交易的手续费,不包括 gas 费。\",\"7VpPHA\":\"确认\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"该代币在\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"预计服务供应商费用\",\"93m8jT\":\"基础手续费\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9QjAGB\":\"FeeRevenue\",\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"价格冲击超过了你设置的滑点, 请提高滑点后重试\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"秒\",\"B0YDoE\":\"Yes, I am sure\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"此众筹池已被其他地址结算\",\"C1qIFl\":\"Liquidity Supplied\",\"CK1KXz\":\"全部\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"滑点\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"余额不足 - 请在钱包充值\",[\"EtherTokenSymbol\"],\"后重试\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"Dizb6O\":\"Incentives\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"是否确认切换到另一个链?\",\"EatqP4\":\"Swaps\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"目标\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"未授权\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"跨链费用不足,至少需要 \",[\"0\"],\" \",[\"1\"],\" \"],\"FHKsZF\":\"TVL\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"交易进行中\",\"Fdp03t\":\"在\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"GAypnX\":\"滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"GXkFCl\":\"Total Vote\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"天\",\"H9HlDe\":\"minutes\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HXOnT6\":\"Failed to remove\",\"HuVZMK\":\"天\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"连接中...\",\"J39pAJ\":\"额外手续费\",\"J7M/DA\":\"Pegged\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"获取最优价格中...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"预览交易\",\"K/PgcA\":\"选择跨链桥\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"注意:滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"KRnA5J\":\"Set pool parameters\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"选择代币\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"设置已切换至闪兑模式\",\"NVAuTg\":\"没有报价\",\"NXZdrO\":\"My pool share\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"获取价格中...\",\"OfhWJH\":\"重置\",\"OgKD6h\":\"最优价格\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"确认中\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"手续费\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"确认跨链交易\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"价格冲击为<0>\",[\"priceImpact\"],\"%, 仍接受此报价\"],\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"预计时间\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"交易预览\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"交易哈希:\",\"S8G1qk\":\"Single\",\"SXnevP\":\"预览跨链交易\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"价格冲击\",\"T0Y2+3\":\"选择代币\",\"TFOxRM\":\"分钟\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"钱包不兼容\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"设置\",\"UE2beD\":\"Creator\",\"UN0Nip\":\"Reward Rules\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"连接你的\",[\"0\"],\"钱包\"],\"V+rJKF\":\"秒\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VXTSOE\":\"Suitable for most situations.\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"交易详情\",\"Xpkm7d\":\"No ForceStop access\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"对于\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"YcpWhR\":\"vAPR\",\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YpVMk+\":\"Pool Adress\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"在\",\"Z7ZXbT\":\"代币授权\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"由 Widget 设置的额外路由费用\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"最大滑点不能超过50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a7u1N9\":\"Price\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"分钟\",\"az8lvo\":\"Off\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"取消\",\"dI46oG\":\"自动切换网络\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"分钟\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"交易被拒绝.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g3x+cF\":\"服务升级中, 请等待或重试\",\"gz+9Rb\":\"Gas 价格过低, 请调整后重试\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC节点异常\",\"h5FVz1\":\"预计交易时长\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"连接钱包\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hdIg7i\":\"Select Pool Version\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"输入代币数量\",\"iaocTt\":\"Ratio\",\"j2Uisd\":\"授权中\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"发生异常错误.\",\"kj3p6e\":\"Daily Rewards\",\"ku//5b\":\"秒\",\"l4Za6X\":\"Total Swap Volume\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lQ6r7x\":\"确认交易\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"滑点\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"发送至:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pwUZo2\":\"Confirming...\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"qDhDFK\":\"Traders\",\"qK7wuW\":\"在冷静期无法进行清算\",\"qLkska\":\"设置已切换到跨链桥交易模式\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"r7ScnQ\":\"连接钱包\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"详情\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"选择代币\",\"sNaLCG\":\"Add Token\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"跨链桥概览\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20:low-level call failed,请联系DODO团队解决。\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"未支持网络 - 请切换后进行交易\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vH2C/2\":\"交易\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"源\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xEbi+8\":\"用户拒绝交易签名.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yM82Jw\":\"ForceStop 异常\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"小时\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"关闭\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zSMRJ/\":\"交易截止时间\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"余额不足\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"+/wf6Z\":\"The smaller the slippage coefficient, the lower the slippage for traders, and the deeper the market depth.\",\"+Jkdiu\":\"交易时长:\",\"+WJnK7\":\"Will be distributed\",\"+uZnU3\":\"跨链桥\",\"/+c6tU\":\"99% Default\",\"//95jS\":[\"当前滑点保护系数设置超过\",[\"maxSlippageWarning\"],\"%,可能会造成损失。\"],\"/6L4mj\":\"Your position is empty\",\"/Ak0Fw\":[\"连接 \",[\"0\"],\"...\"],\"/BbUJ6\":\"Total Number of Traders\",\"/cF7Rs\":\"Volume\",\"/jQctM\":\"至\",\"/k7Ttv\":[\"Receive \",[\"0\"]],\"/mfICu\":\"Fees\",\"/nzjSF\":[[\"0\"],\" 等待中\"],\"0+31GV\":\"Removing\",\"06ngc1\":\"My voted / My total veMOMO\",\"0O1wzf\":[\"Traders sold ‪\",[\"0\"],\"‬ \",[\"1\"],\", price in the pool increased to \",[\"2\"]],\"0QDjxt\":\"余额:\",\"0RrIzN\":\"Select token\",\"0S8v3W\":\"The start time cannot be in the past\",\"0Sw1gZ\":\"Staking Rules\",\"0YxDPW\":\"Loading info...\",\"0b0AkA\":\"* Please note that the Fee Rate cannot be modified after the pool is created\",\"1+P9RR\":[\"Switch to \",[\"0\"]],\"1+deUQ\":\"Current voting round ends in\",\"1/LP4K\":[[\"tokenB\"],\" per \",[\"tokenA\"]],\"14s9LL\":\"Create Liquidity Mining\",\"1ABiXc\":[\"By adding liquidity you’ll earn <0>\",[\"0\"],\" of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity.\"],\"1F1kH+\":\"Allocate 100% of your votes above.\",\"1PQRWr\":\"Start Time\",\"1QfxQT\":\"忽略\",\"1Qz63U\":\"Pool Type\",\"1gWStS\":\"Unstaking\",\"1pncBm\":\"Locked Amount\",\"1yHVE+\":\"Adding\",\"22Xs8M\":\"Deposit Ratio\",\"237hSL\":\"Ended\",\"2Ae5JX\":\"Failed to Approve:\",\"2IZBPB\":\"The end time must be later than the start time.\",\"2vjOqX\":\"Pools with lower transaction fees will attract more traders.\",\"34w3mT\":\"Single-Token\",\"3CsYwD\":\"Select Pool\",\"3G9uEL\":\"Lock More, Vote Stronger, Earn More\",\"3U+Oti\":\"he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1.\",\"3VUfrF\":\"Selected Range\",\"3WdxUv\":\"Do not remind again\",\"3XBvkd\":\"Remove Liquidity\",\"3cu5xD\":[\"Total \",[\"0\"]],\"3dP8Wx\":\"Search by address\",\"3dpMtQ\":\"Failed to unStake:\",\"3ggd2j\":\"Asset ratio within the pool\",\"3wazI1\":\"Failed to Add incentive:\",\"3wh6hp\":\"By providing an incentive, you draw more liquidity providers to this pool.\",\"4Hd0O8\":\"Fees + Incentives APR\",\"4V0i3R\":\"Locking will give you an NFT, referred to as a veNFT. You can increase the Lock amount or extend the Lock time at any point after.\",\"4bekmo\":\"Warning: The incentivize feature is mainly used by protocols. Please make sure you understand how it works before using it as any transaction is final and cannot be reverted.\",\"4cJ0hF\":\"Rewards\",\"4fL/V7\":\"Pay\",\"4kY4C4\":\"由于市场情况不同,市场价格与估算价格可能略有差异。\",\"4nzwq3\":\"Search by token or pool address\",\"4ogEAw\":\"Pegged Exchange Rate\",\"4vKwIV\":\"Private Pool\",\"4xbbt/\":[[\"0\"],\" 已确认\"],\"52uNwk\":\"Creation Time\",\"54SO/B\":\"Extend\",\"54ffaC\":\"当前网络与钱包不一致,请在钱包中切换\",\"58+81B\":\"Narrow\",\"5CZbyC\":\"Set price range\",\"5IHTSS\":\"Full range\",\"5LdByC\":\"Unstake position\",\"5Nb8LL\":\"*Depending on the block time, the real amount of Daily Rewards may deviate slightly.\",\"5OKrbq\":\"Since this pool uses the PMM algorithm, which is different from the normal AMM pool mechanism, the initial price calculation is also different from AMM.\",\"5Pxzb6\":[\"Expected to start at block \",[\"0\"],\" and end at block \",[\"1\"],\". There may be slight differences between actual and expected block numbers.\"],\"5QDjef\":\"The token amount is calculated by initial price.\",\"5etEUX\":\"Max price\",\"5hZSb0\":\"*Merging an Auto Max-Lockis not allowed.\",\"5nL2hY\":\"Staked Tokens\",\"6+mYrD\":\"当前价格冲击\",\"6LVEDo\":\"Enable Auto Max-Lock\",\"6MgE5W\":\"Est. Rewards\",\"6N0PaE\":\"Locked Until\",\"6RDwJM\":\"Tokens\",\"6UYTy8\":\"分钟\",\"6V3Ea3\":\"Copied\",\"6XYkjc\":\"Edit Parameter Settings\",\"6XgEPi\":\"小时\",\"6lss/t\":\"Pricing Model\",\"6nlY4n\":\"Gauge Adress\",\"6y2TB3\":\"Liquidity\",\"70wH1Q\":\"APR\",\"72/M0o\":\"输入代币符号或地址\",\"79D0qY\":\"Liquidity data not available.\",\"7Bj3x9\":\"Failed\",\"7C/BwI\":\"Community Treasury\",\"7IKPTP\":\"费用包括过跨链桥和交易的手续费,不包括 gas 费。\",\"7VpPHA\":\"确认\",\"7X+IbB\":\"Powered by DODO protocol\",\"7X40pG\":\"Fees (24H)\",\"7Z4WfS\":[[\"0\"],\" per \",[\"1\"]],\"7m5+6j\":\"Initial Tokens\",\"7rpoXw\":\"该代币在\",\"7y/8M6\":\"Please confirm in wallet\",\"88dol0\":\"Success Rate\",\"8OiU8L\":\"Pool Creation\",\"8Tg/JR\":\"Custom\",\"8XNsbx\":\"Higher than dynamic slippage\",\"8Z29ZO\":\"预计服务供应商费用\",\"93m8jT\":\"基础手续费\",\"97jlEV\":\"LP Balance\",\"9D2g7k\":\"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.\",\"9EMpdc\":\"Incentive\",\"9QHoGr\":\"Current votes\",\"9QjAGB\":\"FeeRevenue\",\"9SlhBs\":[\"Claim Lock#\",[\"0\"],\" rewards before merge.\"],\"A1taO8\":\"Search\",\"AOhRo6\":\"DODO provides a variety of pool versions to suit your needs.\",\"APR\":\"APR\",\"APR = Reward Token Value per Year / TVL\":\"APR = Reward Token Value per Year / TVL\",\"Active\":\"Active\",\"AeZIvT\":\"You will receive\",\"AghcDJ\":\"价格冲击超过了你设置的滑点, 请提高滑点后重试\",\"All Mining\":\"All Mining\",\"Amount of token rewards\":\"Amount of token rewards\",\"AxPAXW\":\"No results found\",\"AxdOHo\":\"Pair\",\"B0/2ea\":\"秒\",\"B0YDoE\":\"Yes, I am sure\",\"B17Qsa\":\"voting power\",\"B3mhDR\":\"Add liquidity to obtain LP tokens for mining\",\"BRi+RY\":\"Add more liquidity\",\"C1mcuF\":\"此众筹池已被其他地址结算\",\"C1qIFl\":\"Liquidity Supplied\",\"C51N+0\":\"until\",\"CA3JN5\":\"Stake position\",\"CCLNBo\":[\"Approve \",[\"0\"],\"-\",[\"1\"],\" LP\"],\"CK1KXz\":\"全部\",\"CKyk7Q\":\"Go back\",\"CMHmbm\":\"滑点\",\"Calculation = current rewards for a single block × number of blocks in 24h\":\"Calculation = current rewards for a single block × number of blocks in 24h\",\"CeLrge\":\"Mid Price\",\"CkfzUf\":[\"余额不足 - 请在钱包充值\",[\"EtherTokenSymbol\"],\"后重试\"],\"CmoOxM\":\"Mining Pool Setup\",\"Copied\":\"Copied\",\"D1bhHv\":\"The pool’s market-making price is fixed\",\"D87pha\":\"Closed\",\"DPfwMq\":\"Done\",\"DPi/hO\":\"Results in a relatively fixed price.\",\"DR09xO\":\"Create position\",\"DTFrUE\":[\"Approving \",[\"0\"],\"...\"],\"DWd30U\":\"Current price\",\"DZULmp\":\"Swap Rate\",\"Da1+Da\":\"Pool not found. Please switch to another network and retry.\",\"Daily Rewards\":\"Daily Rewards\",\"DdvqCA\":\"Trading Fees\",\"Dizb6O\":\"Incentives\",\"Dt4Hc3\":\"Token Pair Mining\",\"Du6bPw\":\"Address\",\"DuVAxN\":[\"The area of the chart indicates the buy/sell volume of \",[\"baseSymbol\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"DupCvC\":\"Added successful\",\"E1i2tz\":\"Slippage is the difference between the current market price of a token and the price at which the actual swap is executed. Volatile tokens usually require a larger value.\",\"E4LM3N\":\"Add Initial Liquidity\",\"E6MqGy\":\"Add liquidity\",\"EP8fRI\":\"UnStake\",\"EQs1sJ\":\"Min price\",\"ESQO1L\":\"Pool address\",\"EU3wU4\":\"Fee tier\",\"EUBGvH\":\"是否确认切换到另一个链?\",\"EWu8rM\":\"Failed to Merge:\",\"EatqP4\":\"Swaps\",\"EcDng3\":\"Depositing into the lock will increase your voting power. You can also extend the lock time.\",\"EcVqOR\":[[\"0\"],\" Submitted\"],\"Edit\":\"Edit\",\"Eif7f6\":\"PMM Pool\",\"EmSrGB\":\"Before\",\"End Time\":\"End Time\",\"Ended\":\"Ended\",\"Enslfm\":\"目标\",\"EpjpP9\":\"Released Rewards\",\"Ew+VGo\":\"The newly created mining pool can start counting APR after depositing any liquidity.\",\"F+sxb9\":\"未授权\",\"F18WP3\":\"Parameters\",\"F2vX4t\":[\"Users buy \",[\"0\"],\" amount:\"],\"F8yRdq\":\"More trade settings\",\"F9xwHA\":[\"跨链费用不足,至少需要 \",[\"0\"],\" \",[\"1\"],\" \"],\"FHKsZF\":\"TVL\",\"FKEUBg\":\"Failed to Increase:\",\"FQ4aT9\":\"Add Position\",\"FQfStS\":\"Emulator\",\"FRBvjQ\":\"交易进行中\",\"Fdp03t\":\"在\",\"FrP5tr\":\"Suitable for stablecoins with price fluctuations within 2%\",\"G/Ghx2\":\"Claim & Lock\",\"GAypnX\":\"滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"GGPOuT\":\"set current mid price\",\"GGWsTU\":\"Canceled\",\"GSt7YT\":\"The fee rate must be between 0.01% to 10%\",\"GXkFCl\":\"Total Vote\",\"Go back\":\"Go back\",\"Gr2anW\":\"Traders (24H)\",\"Gs02OK\":\"My Positions\",\"H7OUPr\":\"天\",\"H9HlDe\":\"minutes\",\"HD2Tiz\":\"Lock\",\"HFf4kn\":\"Epoch ends in\",\"HGf8fG\":\"You can set the minimum selling price for single-token pools.\",\"HXBqgG\":\"Invalid price input\",\"HXOnT6\":\"Failed to remove\",\"HZFm5R\":\"and\",\"HuVZMK\":\"天\",\"I0LXan\":[\"Price Impact: \",[\"0\"]],\"I0yi1d\":\"Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price\",\"I5S9ZE\":\"Wide\",\"IMZSJM\":\"Add incentive\",\"IUhMSS\":[\"Total \",[\"selectedPoolListLen\"]],\"IeO7us\":\"Voted\",\"Insufficient market depth to capture the dollar value of [ {{symbols}} ]\":[\"Insufficient market depth to capture the dollar value of [ {\",[\"symbols\"],\"} ]\"],\"Invite\":\"Invite\",\"IwiTcw\":\"The price of this pool is outside of your selected range. Your position is not currently earning fees.\",\"J/hVSQ\":[[\"0\"]],\"J28zul\":\"连接中...\",\"J39pAJ\":\"额外手续费\",\"J7M/DA\":\"Pegged\",\"JQKTEd\":\"Set vote power\",\"JR7wWw\":\"Equilibrium target\",\"JRgkmT\":\"End release time before adjustment\",\"JYKRJS\":\"Stake\",\"JaeUyE\":[\"Price discrepancy \",[\"lqAndDodoCompareText\"],\" between liquidity pool and the quote price on DODO.\"],\"JdNn1Y\":\"获取最优价格中...\",\"Jh223O\":\"Invalid range selected. The min price must be lower than the max price.\",\"JiW45G\":\"Failed to Stake:\",\"JlIjZf\":\"Liquidity Provider\",\"Joa5Dk\":\"*Collecting fees will withdraw currently available fees for you.\",\"JuzN3b\":\"Related CrowdPooling\",\"K/Ay/d\":\"预览交易\",\"K/PgcA\":\"选择跨链桥\",\"K8rjE/\":\"Daily rewards before adjustment\",\"KAbREa\":\"*Deflationary tokens are not supported\",\"KAbcm2\":\"Succeeded\",\"KAmxpM\":\"注意:滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。\",\"KRnA5J\":\"Set pool parameters\",\"KV5EXs\":\"When activated, it sets the lock to maximum unlock time, until disabled. Once disabled, the regular vesting unlock time will apply. Maximum unlock time gives a 1-to-1 voting power to the amount of locked tokens.\",\"Kb3KaW\":\"Any Ratio\",\"KkjUUb\":\"Once created, you can adjust the pool’s market-making price at any time. This option is suitable for assets with fluctuating pegged prices. Adjusting the pool’s market-making price allows for more competitive quotes.\",\"KlvBGJ\":\"选择代币\",\"KsqhWn\":\"Staking\",\"KvG1xW\":\"Claiming\",\"L37FfW\":\"Create AMM V2 Position\",\"L4nQwl\":\"Suitable for stablecoins with price fluctuations within 0.5%\",\"LDprZB\":\"The slippage coefficient needs to be greater than 0, and less than 0.1.\",\"LHxwaD\":[\"The fee tier should greater than \",[\"0\"],\"%\"],\"LQU+Dm\":\"Risk Disclaimer\",\"LVzIav\":\"The pool’s market-making price can be adjusted\",\"Lfkqg7\":\"Stake tokens to receive mining rewards.\",\"LhMjLm\":\"Time\",\"LtI9AS\":\"Owner\",\"M4DUXY\":\"Emissions\",\"M9dIDb\":\"The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1.\",\"MU9s7M\":\"Deposit amounts\",\"MXQodB\":\"Disable Indirect Routing\",\"MZPP7t\":\"Your position has 0 liquidity, and is not earning fees.\",\"Mining Pool\":\"Mining Pool\",\"MmL2Ms\":\"My Vote\",\"MvFS/h\":\"No pools yet? Create one!\",\"My Mining\":\"My Mining\",\"My Pools\":\"My Pools\",\"NEQTCn\":\"Share Of Pool\",\"NSCBTb\":\"设置已切换至闪兑模式\",\"NVAuTg\":\"没有报价\",\"NXZdrO\":\"My pool share\",\"NawEr2\":\"After\",\"NgeSlx\":\"Learn More\",\"NjdGps\":\"Use the recommended ratio\",\"Nk6ddN\":\"Stake LP tokens and receive mining rewards.\",\"No LP pools match your criteria\":\"No LP pools match your criteria\",\"Nv/YSg\":\"Unlock Date\",\"O6RUgz\":\"Fee rate\",\"OBdohg\":\"Add Liquidity\",\"OFjZGo\":\"Unstake\",\"OJOe+K\":\"Set the fee to the same as most other pools\",\"OKZP2O\":\"If there are no participants before the end, the rewards cannot be taken out anymore.\",\"OZUH85\":\"Your position will appear here.\",\"OauUE6\":\"获取价格中...\",\"OfhWJH\":\"重置\",\"OgKD6h\":\"最优价格\",\"OjaWXx\":\"Fresh Mining\",\"OnDEky\":\"LP Fee\",\"OsGa0F\":\"My Locks\",\"OuSseo\":\"Ratio Settings\",\"P+K/3O\":\"确认中\",\"P4iKEj\":[\"The initial price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"PIYEqF\":\"Quantity model\",\"PLUB/s\":\"手续费\",\"PPqGw9\":\"Applicable to pegged assets with a fixed price and no fluctuation\",\"PVa3KL\":\"Position on\",\"PZqJog\":\"确认跨链交易\",\"PgAmKs\":\"VAPR\",\"Price impact reaches <0>{priceImpact}%, accept the quote\":[\"价格冲击为<0>\",[\"priceImpact\"],\"%, 仍接受此报价\"],\"Q2sBg1\":\"Add To Lock\",\"Q8W3SC\":\"Volume (1D)\",\"QNWt8A\":\"预计时间\",\"QNrpkx\":\"Classical AMM-like pool. Suitable for most assets.\",\"QR4/RH\":\"交易预览\",\"QoOu4H\":\"You will also claim all rewards from this pool.\",\"QtgfjM\":\"The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more\",\"R/Pvst\":\"Transfer Lock\",\"R7D79P\":\"Invalid pair\",\"R9Khdg\":\"Auto\",\"RUoVGi\":\"Failed to Transfer:\",\"Remaining rewards/Total\":\"Remaining rewards/Total\",\"Rewards\":\"Rewards\",\"RhUkkQ\":\"into Lock\",\"RtKKbA\":\"Last\",\"RvYEUJ\":\"Suitable for synthetic assets. The liquidity is super concentrated at some price like Curve Finance.\",\"RxHSET\":\"LP Balance:\",\"S3piC2\":\"交易哈希:\",\"S8G1qk\":\"Single\",\"SXnevP\":\"预览跨链交易\",\"SbBMxj\":\"Share of pool\",\"Search by address\":\"Search by address\",\"Sta9CR\":\"Enter a percent\",\"Staked\":\"Staked\",\"Start Time\":\"Start Time\",\"Sti4vy\":\"Mining\",\"T+qgFw\":\"价格冲击\",\"T0Y2+3\":\"选择代币\",\"TFOxRM\":\"分钟\",\"TGi+jm\":\"Doc\",\"TJBHlP\":\"Standard\",\"TP9/K5\":\"Token\",\"TTlkRL\":\"Lower than dynamic slippage\",\"TVL\":\"TVL\",\"TY5fM3\":\"LP Tokens\",\"TaScUS\":[\"Users sell \",[\"0\"],\" amount:\"],\"TizaRy\":\"钱包不兼容\",\"TvH4Ym\":[\"Bought \",[\"0\"],\" \",[\"1\"],\", price in the pool decreased to \",[\"2\"]],\"Tz0i8g\":\"设置\",\"UE2beD\":\"Creator\",\"UJgc2U\":\"Transferring a lock will also transfer any rewards and rebases! Before continuing, please make sure you have claimed all available rewards\",\"UN0Nip\":\"Reward Rules\",\"UNBt+9\":[\"My \",[\"0\"]],\"UODtG8\":\"Merge\",\"UPXmW+\":\"Trader\",\"URmyfc\":\"Details\",\"UbRKMZ\":\"Pending\",\"Upcoming\":\"Upcoming\",\"Users\":\"Users\",\"Uzr1HF\":[\"连接你的\",[\"0\"],\"钱包\"],\"V+rJKF\":\"秒\",\"V38hNQ\":\"Single-Token Stake Mining\",\"VN09QB\":\"Rebases\",\"VXTSOE\":\"Suitable for most situations.\",\"VaIT1Z\":\"Failed to Claim:\",\"Vmw6BM\":\"Something went wrong…<0>Refresh again\",\"WI3lQ1\":\"SELECT\",\"WKj93T\":\"Select Token\",\"WYqq5A\":\"End mining\",\"WgTuci\":[\"Your position will be 100% composed of \",[\"0\"],\" at this price\"],\"When adding rewards, the number of rewards for a single block may be adjusted\":\"When adding rewards, the number of rewards for a single block may be adjusted\",\"X6T02b\":\"This pool must be initialized before you can add liquidity. To initialize, select a starting price for the pool. Then, enter your liquidity price range and deposit amount. Gas fees will be higher than usual due to the initialization transaction.\",\"XPiFIY\":\"Can the pool price be adjusted?\",\"XeovX3\":\"交易详情\",\"Xpkm7d\":\"No ForceStop access\",\"XvTURb\":\"Extend to\",\"Y0Knz4\":\"Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens.\",\"Y7rVy0\":\"Fee Rate\",\"Y9QDtD\":\"You are making changes to the liquidity of a private pool. This is a highly discretionary operation that may cause substantial inflows/outflows of funds and changes in market prices. Please make sure you are fully aware of the implications of each parameter modification.\",\"YA4hwj\":\"Price Range\",\"YG004A\":[[\"0\"],\" deposited\"],\"YHc3B+\":\"My Liquidity\",\"YHpbe1\":\"对于\",\"YUyuNp\":[[\"lqAndDodoCompareText\"],\" Price Difference\"],\"YcpWhR\":\"vAPR\",\"You are not currently providing liquidity for any LP pools.\":\"You are not currently providing liquidity for any LP pools.\",\"You have not create any mining\":\"You have not create any mining\",\"YpVMk+\":\"Pool Adress\",\"YujLa9\":\"I understand I will NOT be able to withdraw incentives\",\"YvXHDU\":[\"The area of the chart indicates the buy/sell volume of \",[\"0\"],\" that can be carried by the market when the current price changes to the hover price.\"],\"Z033WN\":\"Total Swap Fee\",\"Z5HWHd\":\"在\",\"Z7ZXbT\":\"代币授权\",\"Z8lGw6\":\"Share\",\"ZXvy7b\":\"由 Widget 设置的额外路由费用\",\"Zeo2hK\":\"Locking for\",\"ZgtZpB\":\"The start time is too soon, please set a later time\",\"ZhEBp4\":\"Current liquidity pool token price\",\"ZlKTEh\":[\"Reward \",[\"0\"]],\"ZlQ83E\":[\"<0>\",[\"lostRatio\"],\" of the initial liquidity you provide will be burned. <1/>The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"Zm56FI\":\"最大滑点不能超过50%\",\"a1AzKr\":\"For those who are looking to sell tokens and only need ask-side liquidity.\",\"a3AecA\":\"Fees rewards + Incentives rewards\",\"a7u1N9\":\"Price\",\"aHx11G\":\"In Range\",\"aIvv/z\":\"The price of this pool is within your selected range. Your position is currently earning fees.\",\"aM1tos\":\"You are creating a pool\",\"ab98Hp\":[\"Created by \",[\"0\"]],\"agPptk\":\"Medium\",\"agRWc1\":\"分钟\",\"aqFIWP\":\"Common\",\"az8lvo\":\"Off\",\"b+1u9w\":\"You can extend the lock or increase the lock amount. These actions will increase your voting power. The maximum lock time is 1 years!\",\"b+KjnH\":\"Your position will not earn fees or be used in trades until the market price moves into your range.\",\"b2jAb+\":\"per\",\"bC0iyq\":\"Suitable for stablecoins with price fluctuations within 10%\",\"bEsfUQ\":\"Confirm submission\",\"bQ3cKo\":\"Select pool by tokens\",\"bUUVED\":\"Asset\",\"bwSQI0\":\"Supply\",\"c4miqE\":\"Pool share\",\"c6TMm0\":\"Mining Type\",\"c7vayV\":\"Total liquidity\",\"cDWXuq\":\"Settler\",\"cJtosk\":\"Remove liquidity\",\"cOvZFM\":\"Dynamic\",\"cmUrtC\":\"SEE HOW IT WORKS\",\"cnGeoo\":\"Delete\",\"cnbRVW\":[\"Initial Price \",[\"0\"],\" \",[\"1\"],\" = \",[\"2\"],\" \",[\"3\"]],\"d2CZvA\":\"Initial Price\",\"d8YnVj\":\"Guide Price\",\"dEgA5A\":\"取消\",\"dI46oG\":\"自动切换网络\",\"dJqd5x\":[\"Get \",[\"tokenSymbol\"]],\"dUdltF\":\"One-Click Claim\",\"dmiCGN\":\"Select Token Pair\",\"dqWPbT\":\"I have read, understand, and agree to the <0>Terms of Service.\",\"dzV+zO\":\"Modify Confirmation\",\"e38JNU\":\"Tips:\",\"eE0JZ4\":\"Version\",\"eK0eiF\":\"Initial asset ratio\",\"eK6I8d\":\"V2 & PMM\",\"ePK91l\":\"Edit\",\"eTUF28\":\"分钟\",\"eVZ7bY\":\"Hide TVL=0 pools\",\"em6LzM\":\"交易被拒绝.\",\"evmVGu\":[\"\\\"Created by \",[\"0\"]],\"fDBXqq\":[\"Lock #\",[\"0\"]],\"fKYdE9\":\"Results in a more volatile price.\",\"fSFt4a\":\"Token Pair\",\"fZ5Vnu\":\"Received\",\"fZFkP1\":\"My Pools\",\"fgGids\":[\"Approve \",[\"0\"]],\"fqDzSu\":\"Rate\",\"fsBGk0\":\"Balance\",\"fxRyGG\":\"fee tier\",\"g2Tj8R\":\"Full\",\"g3x+cF\":\"服务升级中, 请等待或重试\",\"gEScsa\":\"Extend Lock\",\"gtntD6\":[\"My total ve\",[\"0\"]],\"gz+9Rb\":\"Gas 价格过低, 请调整后重试\",\"h3PbRN\":\"My Pool Share\",\"h4RLFN\":\"RPC节点异常\",\"h5FVz1\":\"预计交易时长\",\"h5pjuM\":\"Collect fees\",\"h7LgzN\":\"连接钱包\",\"hCBYHP\":\"Total Fee Revenue\",\"hXzOVo\":\"Next\",\"hYgDIe\":\"Create\",\"hcNa1G\":\"Token Amount\",\"hcyj7U\":\"Increase Lock\",\"hdIg7i\":\"Select Pool Version\",\"hoB91Y\":\"Available Pools\",\"hom7qf\":\"Claim\",\"i3Z+/Z\":\"Out of range\",\"iDGO1l\":\"Disclaimer\",\"iH8pgl\":\"Back\",\"iLj1a9\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"%,the current slippage setting is higher than the dynamic slippage, which means you are willing to accept a worse final execution price.\"],\"iPMIoT\":\"输入代币数量\",\"iWxcGQ\":\"Auto Max-Lock Mode\",\"iaocTt\":\"Ratio\",\"itTjLi\":[[\"selectedLen\"],\" Lock selected\"],\"iyvxqf\":\"Merging two locks will inherit the longest lock time of the two and will increase the final Lock (veNFT) voting power by adding up the two underlying locked amounts based on the new lock time.\",\"j2Uisd\":\"授权中\",\"jMam5g\":[[\"0\"],\" Balance\"],\"jjuKOj\":\"Min Price\",\"juypHV\":\"Liquidity Providers\",\"kAC8rT\":\"High price\",\"kNeEXg\":\"Current Price\",\"kdzjmC\":[\"The mid price needs to be greater than \",[\"min\"],\" and less than 100,000,000\"],\"kf83Ld\":\"发生异常错误.\",\"kj3p6e\":\"Daily Rewards\",\"ksgLoF\":\"Failed to Vote:\",\"ku//5b\":\"秒\",\"l4Za6X\":\"Total Swap Volume\",\"l87tbQ\":\"Failed to Extend:\",\"l9qKkK\":\"Merge Lock\",\"lDgVWA\":\"Receive\",\"lJvbHq\":\"Select Network\",\"lNYomJ\":\"AMM V2 Position\",\"lNqpw6\":\"Add Incentive\",\"lQ6r7x\":\"确认交易\",\"lQXQKs\":\"Vote\",\"lgE483\":\"Once created, the price cannot be changed. This option applies to assets like ETH-WETH.\",\"lqTDfd\":\"滑点\",\"lsg9Mi\":\"Parameter Settings\",\"lt8yMa\":\"发送至:\",\"luOvdJ\":\"My Staked\",\"m16xKo\":\"Add\",\"m6RmA/\":[\"Insufficient \",[\"0\"],\" balance\"],\"m8r/Yx\":\"AMM V3\",\"mFXnIs\":\"The dynamic slippage is provided by DODO team through analyzing historical transactions.\",\"mObS+5\":\"Failed to get price of the token\",\"mYGY3B\":\"Date\",\"mZ4SrP\":\"Liquidity Pool\",\"me2dmq\":\"Value (USD)\",\"n25Lml\":\"Depth\",\"nIrcQi\":\"No matching pool found\",\"nTWWCZ\":\"Low\",\"nxRg31\":\"Select pair\",\"o/5/4c\":\"Once Mining has started, it cannot be stopped.\",\"o8aMNm\":\"Select a liquidity pool\",\"oeWZFc\":\"Wallet address where the lock will be transferred\",\"ohwRU8\":\"selected Lock to vote\",\"om+Yr9\":\"Do not select non-standard ERC20 tokens as this may lead to unknown errors!\",\"p/78dY\":\"Position\",\"p2jbcE\":\"Create Pool\",\"p3607o\":\"Managing\",\"p7/w10\":\"Volume (24H)\",\"pHQq+U\":\"Pool Setup\",\"pKjCsP\":\"100% use your own funds and enjoy the maximum degree of flexibility.\",\"pQJBKk\":[\"The closer the provided asset ratio is to the recommended ratio (\",[\"recommendRatioText\"],\"), the smaller the portion burned.\"],\"pQl1d2\":\"My Position\",\"pSQ1lM\":\"MT Fee\",\"pY/ok7\":\"All chains\",\"pdZiL7\":\"Current Market Price:\",\"pdcS9C\":\"Voting Power\",\"peTryP\":[[\"0\"],\"-\",[\"1\"],\" is not supported. Please select another pair.\"],\"pmldYR\":[\"Lock \",[\"0\"],\" >\"],\"pwUZo2\":\"Confirming...\",\"pxFAp/\":\"Increase\",\"q+Q952\":[\"Users pay \",[\"0\"],\" \",[\"1\"],\" and receive \",[\"2\"],\" \",[\"3\"],\"\\\\nPrice \",[\"4\"],\" (\",[\"5\"],\"%)\"],\"q6lAbz\":\"Staked\",\"qDhDFK\":\"Traders\",\"qK7wuW\":\"在冷静期无法进行清算\",\"qLkska\":\"设置已切换到跨链桥交易模式\",\"qiOIiY\":\"Buy\",\"qmYDVk\":\"Total Rewards\",\"qn6AdK\":\"Your incentive will be released linearly over the remaining time of the current epoch.\",\"r7ScnQ\":\"连接钱包\",\"rAx5u1\":\"End Time\",\"rH6vg9\":\"There is no liquidity data.\",\"rQ9c+8\":[\"Output is estimated. If the price changes by more than \",[\"0\"],\" your transaction will revert.\"],\"rRDi3Y\":\"详情\",\"rSayea\":\"APY\",\"rbsyJM\":\"AMM V2\",\"rdUucN\":\"Preview\",\"sCUx8G\":\"Select Platform\",\"sIPJGT\":\"选择代币\",\"sK+T3q\":\"Voting Power Granted\",\"sNaLCG\":\"Add Token\",\"sQv06Y\":\"for\",\"sTnImq\":\"Total Liquidity\",\"sVlqoo\":\"AMM V3 Position\",\"sWvFkC\":\"Current Incentives\",\"sjn3tj\":\"Slippage Coefficient\",\"sxkWRg\":\"Advanced\",\"syToc5\":[[\"0\"],\"/\",[\"1\"],\" Pool Tokens\"],\"t+LmjM\":\"Initial Price Alert\",\"t/YqKh\":\"Remove\",\"t3d3/V\":\"ratio is 0\",\"tKE4Ak\":\"跨链桥概览\",\"tMMG40\":[[\"0\"],\"% fee tier\"],\"tMVAXL\":\"SafeERC20:low-level call failed,请联系DODO团队解决。\",\"tnRI9r\":\"Pool Creation Confirmation\",\"tu/fxg\":\"Claim fees\",\"tyGEMJ\":\"Amounts\",\"u1tnst\":\"Create One\",\"uAQUqI\":\"Status\",\"uEoBVI\":\"Low price\",\"uaKP0s\":[\"differs from the price quoted by DODO by \",[\"lqAndDodoCompareText\"]],\"ubzjDN\":\"Real Time\",\"udsWDJ\":\"未支持网络 - 请切换后进行交易\",\"uiuMDr\":\"Enter parameters to view the yield curve\",\"ukTFO0\":\"Description of this type of pool\",\"utnUX2\":[\"Lock \",[\"0\"],\" to get ve\",[\"1\"],\". You can use ve\",[\"2\"],\" to vote for more rewards.\"],\"v4nCHK\":\"Paid\",\"v4wgrk\":\"Failed to add\",\"vD30Os\":\"Distribute equally\",\"vH2C/2\":\"交易\",\"vLyv1R\":\"Hide\",\"vOyUlD\":\"In range\",\"vXvgFK\":\"There is risk of being arbitraged if adding this liquidity.\",\"vk13cx\":[[\"0\"],\" Position\"],\"vxHMzr\":\"address\",\"wSpNR+\":\"This trading pair does not have enough historical data and has used the default dynamic slippage.\",\"wStucr\":\"Voters earn a share of transaction fees and incentives for helping govern how emissions are distributed.\",\"wSvvA3\":\"Select A Lock\",\"waRRI1\":\"Select pool pair you want to incentive\",\"wckWOP\":\"Manage\",\"wdxz7K\":\"源\",\"wmCrk7\":\"You may modify the transaction deadline, the maximum time allowed for a trade to be processed on-chain. However, please note that this may lead to your trade executing at a subpar price, as the market price may change during that time.\",\"wtjDAR\":[[\"0\"],\" Approval Pending\"],\"x3muNy\":\"Liquidity Burn Ratio\",\"x4QVeW\":\"Percentage to remove\",\"x6GJ4a\":\"Max Slippage\",\"xCJdfg\":\"Clear\",\"xEbi+8\":\"用户拒绝交易签名.\",\"y1eoq1\":\"Copy link\",\"y4kfSV\":\"WARNING\",\"yKYfcT\":\"Failed to Create:\",\"yM82Jw\":\"ForceStop 异常\",\"yQ2kGp\":\"Load more\",\"yQE2r9\":\"Loading\",\"yXm1vH\":\"The initial price is different from the current market price, which may cause your pool to be arbitraged\",\"yY8wAv\":\"小时\",\"yoR+O6\":\"V3\",\"yq+Q9s\":[\"Dynamic slippage is \",[\"recommendSlippage\"],\"% , the current slippage setting may increase the failure rate of transactions.\"],\"yx/fMc\":\"High\",\"yz7wBu\":\"关闭\",\"yzjPpo\":\"Fees will be the same as in most other pools.\",\"z9t6jM\":\"Mining Pool\",\"zA6/Yq\":\"To avoid loss of rewards, please ensure that at least 1 or more participating users exist.\",\"zABfk1\":\"https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef\",\"zPGNJm\":\"Transfer\",\"zSMRJ/\":\"交易截止时间\",\"zXCpR0\":\"Claim Rewards\",\"zcVtwU\":\"My Pools (PMM)\",\"zeSosD\":\"Starting price\",\"zga9sT\":\"OK\",\"zkFuIm\":\"Total Rewards=Daily Rewards*Duration\",\"znqB4T\":\"余额不足\",\"zvFyrN\":\"Rebase APR\",\"zwBp5t\":\"Private\",\"zwWKhA\":\"Learn more\"}")}; \ No newline at end of file diff --git a/packages/dodoex-widgets/src/locales/zh-CN.po b/packages/dodoex-widgets/src/locales/zh-CN.po index 334ca32c..50f555d0 100644 --- a/packages/dodoex-widgets/src/locales/zh-CN.po +++ b/packages/dodoex-widgets/src/locales/zh-CN.po @@ -22,6 +22,10 @@ msgstr "" msgid "Transaction Time:" msgstr "交易时长:" +#: src/widgets/ve33/Ve33IncentiveDetail/Dashboard.tsx:86 +msgid "Will be distributed" +msgstr "" + #: src/hooks/Bridge/useExecuteBridgeRoute.tsx:127 msgid "Cross Chain" msgstr "跨链桥" @@ -47,7 +51,9 @@ msgid "Total Number of Traders" msgstr "" #: src/widgets/PoolWidget/PoolDetail/components/ChartInfo.tsx:43 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:61 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:97 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:149 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:62 msgid "Volume" msgstr "" @@ -56,12 +62,15 @@ msgid "To" msgstr "至" #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:416 -#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:287 +#: src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx:287 msgid "Receive {0}" msgstr "" -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:64 -#: src/widgets/ve33/VotePoolList/TableList.tsx:56 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:101 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:171 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:65 +#: src/widgets/ve33/VotePoolList/CardList.tsx:111 +#: src/widgets/ve33/VotePoolList/TableList.tsx:57 msgid "Fees" msgstr "" @@ -72,10 +81,14 @@ msgstr "{0} 等待中" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:449 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:343 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:713 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:88 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:89 msgid "Removing" msgstr "" +#: src/widgets/ve33/VotePoolList/index.tsx:319 +msgid "My voted / My total veMOMO" +msgstr "" + #: src/components/chart/i18n.ts:31 msgid "Traders sold ‪{0}‬ {1}, price in the pool increased to {2}" msgstr "" @@ -86,6 +99,7 @@ msgid "Balance:" msgstr "余额:" #: src/widgets/PoolWidget/AMMV3/components/TokenPairSelect.tsx:100 +#: src/widgets/ve33/Ve33V3PoolOperate/components/TokenPairSelect.tsx:100 msgid "Select token" msgstr "" @@ -99,7 +113,7 @@ msgid "Staking Rules" msgstr "" #: src/widgets/PoolWidget/PoolOperate/components/OperateBtn.tsx:76 -#: src/widgets/ve33/Ve33PoolOperate/components/OperateBtn.tsx:76 +#: src/widgets/ve33/Ve33V2PoolOperate/components/OperateBtn.tsx:76 msgid "Loading info..." msgstr "" @@ -111,7 +125,12 @@ msgstr "" msgid "Switch to {0}" msgstr "" +#: src/widgets/ve33/VotePoolList/index.tsx:275 +msgid "Current voting round ends in" +msgstr "" + #: src/widgets/PoolWidget/AMMV3/components/InputStepCounter.tsx:124 +#: src/widgets/ve33/Ve33V3PoolOperate/components/InputStepCounter.tsx:129 msgid "{tokenB} per {tokenA}" msgstr "" @@ -125,6 +144,10 @@ msgstr "" msgid "By adding liquidity you’ll earn <0>{0} of all trades on this pair proportional to your share of the pool. Fees are added to the pool, accrue in real time and can be claimed by withdrawing your liquidity." msgstr "" +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:158 +msgid "Allocate 100% of your votes above." +msgstr "" + #: src/widgets/MiningWidget/MiningCreate/components/RewardDetailList.tsx:159 #: src/widgets/MiningWidget/MiningCreate/operate-widgets/RewardForm.tsx:306 #: src/widgets/MiningWidget/MiningDetail/RewardCard.tsx:229 @@ -148,10 +171,15 @@ msgstr "" msgid "Unstaking" msgstr "" +#: src/widgets/ve33/Ve33LockList/CardList.tsx:203 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:50 +msgid "Locked Amount" +msgstr "" + #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:452 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:346 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:716 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:91 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:92 msgid "Adding" msgstr "" @@ -163,6 +191,10 @@ msgstr "" msgid "Ended" msgstr "" +#: src/widgets/ve33/hooks/useVe33V3StakeApproveStatus.ts:72 +msgid "Failed to Approve:" +msgstr "" + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/RewardForm.tsx:389 msgid "The end time must be later than the start time." msgstr "" @@ -183,12 +215,18 @@ msgstr "" msgid "Select Pool" msgstr "" +#: src/widgets/ve33/Ve33LockOperate/index.tsx:148 +msgid "Lock More, Vote Stronger, Earn More" +msgstr "" + #: src/widgets/PoolWidget/PoolCreate/hooks/useValidation.ts:43 msgid "he slippage coefficient needs to be greater than or equal to 0, and less than or equal to 1." msgstr "" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:539 #: src/widgets/PoolWidget/AMMV3/components/ReviewModal.tsx:65 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:344 +#: src/widgets/ve33/Ve33V3PoolOperate/components/ReviewModal.tsx:78 msgid "Selected Range" msgstr "" @@ -198,18 +236,51 @@ msgstr "" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:372 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:266 +#: src/widgets/ve33/Ve33V3PoolOperate/hooks/useRemoveVe33V3Liquidity.ts:48 msgid "Remove Liquidity" msgstr "" +#: src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx:179 +#: src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx:180 +#: src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx:179 +#: src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx:180 +msgid "Total {0}" +msgstr "" + #: src/widgets/MiningWidget/MiningCreate/components/PoolPicker.tsx:474 msgid "Search by address" msgstr "" +#: src/widgets/ve33/hooks/useVe33V2UnStake.ts:46 +#: src/widgets/ve33/hooks/useVe33V3UnStake.ts:49 +msgid "Failed to unStake:" +msgstr "" + #: src/widgets/PoolWidget/PoolCreate/components/StepTitle.tsx:45 #: src/widgets/PoolWidget/PoolCreate/index.tsx:335 msgid "Asset ratio within the pool" msgstr "" +#: src/widgets/ve33/hooks/useAddIncentive.ts:85 +msgid "Failed to Add incentive:" +msgstr "" + +#: src/widgets/ve33/Ve33IncentiveDetail/Dashboard.tsx:62 +msgid "By providing an incentive, you draw more liquidity providers to this pool." +msgstr "" + +#: src/widgets/ve33/VotePoolList/widgets.tsx:51 +msgid "Fees + Incentives APR" +msgstr "" + +#: src/widgets/ve33/Ve33LockOperate/index.tsx:252 +msgid "Locking will give you an NFT, referred to as a veNFT. You can increase the Lock amount or extend the Lock time at any point after." +msgstr "" + +#: src/widgets/ve33/Ve33IncentiveList/index.tsx:151 +msgid "Warning: The incentivize feature is mainly used by protocols. Please make sure you understand how it works before using it as any transaction is final and cannot be reverted." +msgstr "" + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/RewardForm.tsx:118 #: src/widgets/MiningWidget/MiningList/operate-area/AssociatedMine.tsx:155 #: src/widgets/MiningWidget/MiningList/operate-area/RewardListCard.tsx:49 @@ -248,11 +319,21 @@ msgstr "{0} 已确认" msgid "Creation Time" msgstr "" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:106 +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:529 +msgid "Extend" +msgstr "" + #: src/components/Swap/index.tsx:527 msgid "The current network is inconsistent with the wallet - please switch in wallet" msgstr "当前网络与钱包不一致,请在钱包中切换" +#: src/widgets/ve33/Ve33V3PoolOperate/hooks/usePriceRangeRatioSelect.ts:41 +msgid "Narrow" +msgstr "" + #: src/widgets/PoolWidget/AMMV3/AddLiquidityV3.tsx:401 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:226 msgid "Set price range" msgstr "" @@ -260,6 +341,10 @@ msgstr "" msgid "Full range" msgstr "" +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:151 +msgid "Unstake position" +msgstr "" + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/RewardForm.tsx:594 msgid "*Depending on the block time, the real amount of Daily Rewards may deviate slightly." msgstr "" @@ -278,9 +363,14 @@ msgid "The token amount is calculated by initial price." msgstr "" #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:159 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:154 msgid "Max price" msgstr "" +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:277 +msgid "*Merging an Auto Max-Lockis not allowed." +msgstr "" + #: src/widgets/MiningWidget/MiningCreate/components/StakingRules.tsx:91 msgid "Staked Tokens" msgstr "" @@ -289,6 +379,24 @@ msgstr "" msgid "Current price impact" msgstr "当前价格冲击" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:529 +msgid "Enable Auto Max-Lock" +msgstr "" + +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:251 +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:371 +msgid "Est. Rewards" +msgstr "" + +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:147 +#: src/widgets/ve33/VotePoolList/widgets.tsx:601 +msgid "Locked Until" +msgstr "" + +#: src/widgets/ve33/VotePoolList/widgets.tsx:141 +msgid "Tokens" +msgstr "" + #: src/utils/time.ts:17 msgid "Minute" msgstr "分钟" @@ -311,7 +419,8 @@ msgstr "小时" msgid "Pricing Model" msgstr "" -#: src/widgets/ve33/Ve33PoolOperate/index.tsx:198 +#: src/widgets/ve33/Ve33V2PoolOperate/index.tsx:203 +#: src/widgets/ve33/Ve33V3PoolOperate/index.tsx:181 msgid "Gauge Adress" msgstr "" @@ -323,7 +432,16 @@ msgstr "" #: src/widgets/MiningWidget/MiningDetail/MiningInfo.tsx:146 #: src/widgets/MiningWidget/MiningDetail/MiningInfo.tsx:213 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:55 +#: src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx:151 +#: src/widgets/ve33/Ve33IncentiveList/CardList.tsx:65 +#: src/widgets/ve33/Ve33IncentiveList/TableList.tsx:39 +#: src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx:151 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:87 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:108 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:56 +#: src/widgets/ve33/Ve33V3PoolOperate/components/RangeRatioSelect.tsx:97 +#: src/widgets/ve33/VotePoolList/CardList.tsx:97 +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:357 msgid "APR" msgstr "" @@ -332,6 +450,7 @@ msgid "Enter the token symbol or address" msgstr "输入代币符号或地址" #: src/widgets/PoolWidget/AMMV3/components/LiquidityChartRangeInput/index.tsx:211 +#: src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/index.tsx:183 msgid "Liquidity data not available." msgstr "" @@ -359,7 +478,10 @@ msgstr "费用包括过跨链桥和交易的手续费,不包括 gas 费。" #: src/widgets/PoolWidget/PoolCreate/operate-widgets/SlippageCoefficientSetting.tsx:240 #: src/widgets/PoolWidget/PoolModify/operate-widgets/BottomButtonGroup.tsx:74 #: src/widgets/PoolWidget/PoolModify/operate-widgets/FeeRateSetting.tsx:197 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:251 +#: src/widgets/ve33/Ve33LockList/ClaimLockDialog.tsx:121 +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:268 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:251 +#: src/widgets/ve33/Ve33V3PoolOperate/components/ReviewModal.tsx:91 msgid "Confirm" msgstr "确认" @@ -374,6 +496,9 @@ msgstr "" #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:109 #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:167 #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:221 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:103 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:162 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:217 msgid "{0} per {1}" msgstr "" @@ -425,10 +550,22 @@ msgstr "" msgid "The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only." msgstr "" +#: src/widgets/ve33/Ve33IncentiveDetail/AddIncentiveDialog.tsx:131 +msgid "Incentive" +msgstr "" + +#: src/widgets/ve33/Ve33IncentiveDetail/Dashboard.tsx:72 +msgid "Current votes" +msgstr "" + #: src/widgets/PoolWidget/PoolDetail/components/ChartInfo.tsx:44 msgid "FeeRevenue" msgstr "" +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:229 +msgid "Claim Lock#{0} rewards before merge." +msgstr "" + #: src/widgets/PoolWidget/PoolList/components/TokenAndPoolFilter.tsx:58 msgid "Search" msgstr "" @@ -454,7 +591,7 @@ msgid "Active" msgstr "" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:56 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:60 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:60 msgid "You will receive" msgstr "" @@ -479,8 +616,10 @@ msgstr "" #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:388 #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:297 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:595 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:52 -#: src/widgets/ve33/VotePoolList/TableList.tsx:47 +#: src/widgets/ve33/Ve33IncentiveList/TableList.tsx:36 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:53 +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:248 +#: src/widgets/ve33/VotePoolList/TableList.tsx:48 msgid "Pair" msgstr "" @@ -492,11 +631,17 @@ msgstr "秒" msgid "Yes, I am sure" msgstr "" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:478 +#: src/widgets/ve33/Ve33LockOperate/index.tsx:234 +msgid "voting power" +msgstr "" + #: src/widgets/PoolWidget/PoolDetail/components/TitleInfo.tsx:199 msgid "Add liquidity to obtain LP tokens for mining" msgstr "" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:563 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:371 msgid "Add more liquidity" msgstr "" @@ -508,6 +653,18 @@ msgstr "此众筹池已被其他地址结算" msgid "Liquidity Supplied" msgstr "" +#: src/widgets/ve33/Ve33LockList/ClaimLockDialog.tsx:102 +msgid "until" +msgstr "" + +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:186 +msgid "Stake position" +msgstr "" + +#: src/widgets/ve33/hooks/useVe33V3StakeApproveStatus.ts:31 +msgid "Approve {0}-{1} LP" +msgstr "" + #: src/components/Swap/components/TokenCard/BalanceText.tsx:84 msgid "Max" msgstr "全部" @@ -551,6 +708,8 @@ msgstr "" #: src/widgets/PoolWidget/AMMV3/components/Badge/RangeBadge.tsx:30 #: src/widgets/PoolWidget/AMMV3/components/RemoveButton.tsx:32 +#: src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx:30 +#: src/widgets/ve33/Ve33V3PoolOperate/components/RemoveButton.tsx:58 msgid "Closed" msgstr "" @@ -563,6 +722,10 @@ msgstr "" msgid "Results in a relatively fixed price." msgstr "" +#: src/widgets/ve33/Ve33PoolDetail/index.tsx:179 +msgid "Create position" +msgstr "" + #: src/widgets/PoolWidget/AMMV3/components/Buttons.tsx:72 #: src/widgets/PoolWidget/AMMV3/components/Buttons.tsx:88 msgid "Approving {0}..." @@ -571,6 +734,8 @@ msgstr "" #: src/widgets/PoolWidget/AMMV3/AddLiquidityV3.tsx:552 #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:213 #: src/widgets/PoolWidget/AMMV3/components/PositionViewCard.tsx:233 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:209 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:273 msgid "Current price" msgstr "" @@ -588,7 +753,13 @@ msgstr "" msgid "Daily Rewards" msgstr "" -#: src/widgets/ve33/VotePoolList/TableList.tsx:59 +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:268 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:595 +msgid "Trading Fees" +msgstr "" + +#: src/widgets/ve33/VotePoolList/CardList.tsx:114 +#: src/widgets/ve33/VotePoolList/TableList.tsx:60 msgid "Incentives" msgstr "" @@ -624,23 +795,33 @@ msgstr "" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:481 #: src/widgets/PoolWidget/AMMV3/components/ReviewModal.tsx:40 #: src/widgets/PoolWidget/hooks/useAMMV2AddLiquidity.ts:174 -#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2AddLiquidity.ts:140 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2AddLiquidity.ts:140 +#: src/widgets/ve33/Ve33V3PoolOperate/components/ReviewModal.tsx:48 msgid "Add liquidity" msgstr "" +#: src/widgets/ve33/hooks/useVe33V2UnStake.ts:27 +#: src/widgets/ve33/hooks/useVe33V3UnStake.ts:30 +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:231 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:576 +#: src/widgets/ve33/Ve33StakeDialog.tsx:78 +msgid "UnStake" +msgstr "" + #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:101 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:95 msgid "Min price" msgstr "" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:229 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:223 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:223 msgid "Pool address" msgstr "" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:198 #: src/widgets/PoolWidget/AMMV3/components/FeeSelector.tsx:54 #: src/widgets/PoolWidget/AMMV3/components/PositionPreview.tsx:122 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:192 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:192 msgid "Fee tier" msgstr "" @@ -648,10 +829,18 @@ msgstr "" msgid "Are you sure swapping to another chain?" msgstr "是否确认切换到另一个链?" +#: src/widgets/ve33/Ve33LockList/hooks/useMergeLock.ts:57 +msgid "Failed to Merge:" +msgstr "" + #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/index.tsx:25 msgid "Swaps" msgstr "" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:283 +msgid "Depositing into the lock will increase your voting power. You can also extend the lock time." +msgstr "" + #: src/components/WithExecutionDialog/index.tsx:320 msgid "{0} Submitted" msgstr "" @@ -665,6 +854,10 @@ msgstr "" msgid "PMM Pool" msgstr "" +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:136 +msgid "Before" +msgstr "" + #. js-lingui-explicit-id #: src/widgets/MiningWidget/MiningList/my-created/RewardCard.tsx:218 msgid "End Time" @@ -715,11 +908,22 @@ msgstr "跨链费用不足,至少需要 {0} {1} " #: src/widgets/PoolWidget/PoolList/MyCreated.tsx:300 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:345 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:604 -#: src/widgets/ve33/Ve33PoolList/TableList.tsx:58 -#: src/widgets/ve33/VotePoolList/TableList.tsx:53 +#: src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx:106 +#: src/widgets/ve33/Ve33IncentiveList/CardList.tsx:90 +#: src/widgets/ve33/Ve33IncentiveList/TableList.tsx:42 +#: src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx:106 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:94 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:127 +#: src/widgets/ve33/Ve33PoolList/TableList.tsx:59 +#: src/widgets/ve33/VotePoolList/CardList.tsx:108 +#: src/widgets/ve33/VotePoolList/TableList.tsx:54 msgid "TVL" msgstr "" +#: src/widgets/ve33/Ve33LockList/hooks/useIncreaseLock.ts:59 +msgid "Failed to Increase:" +msgstr "" + #: src/widgets/PoolWidget/AMMV3/AMMV3PositionsView.tsx:187 #: src/widgets/PoolWidget/AMMV3/AMMV3PositionsView.tsx:233 msgid "Add Position" @@ -745,6 +949,12 @@ msgstr "在" msgid "Suitable for stablecoins with price fluctuations within 2%" msgstr "" +#: src/widgets/ve33/Ve33LockList/CardList.tsx:90 +#: src/widgets/ve33/Ve33LockList/ClaimLockDialog.tsx:28 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:124 +msgid "Claim & Lock" +msgstr "" + #: src/components/Swap/components/ReviewDialog.tsx:363 msgid "High slippage tolerance will increase the success rate of transaction, but might not get the best quote." msgstr "滑点越高,交易的成功率越高,但是交易的价格可能不会是最好的市场价格。请谨慎调整滑点。" @@ -761,7 +971,10 @@ msgstr "" msgid "The fee rate must be between 0.01% to 10%" msgstr "" -#: src/widgets/ve33/VotePoolList/TableList.tsx:62 +#: src/widgets/ve33/VotePoolList/CardList.tsx:122 +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:250 +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:368 +#: src/widgets/ve33/VotePoolList/TableList.tsx:63 msgid "Total Vote" msgstr "" @@ -786,6 +999,19 @@ msgstr "天" msgid "minutes" msgstr "" +#: src/widgets/ve33/Ve33LockList/CardList.tsx:173 +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:319 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:44 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:191 +#: src/widgets/ve33/Ve33LockOperate/hooks/useCreateLock.ts:45 +#: src/widgets/ve33/VotePoolList/widgets.tsx:561 +msgid "Lock" +msgstr "" + +#: src/widgets/ve33/Ve33IncentiveDetail/AddIncentiveDialog.tsx:154 +msgid "Epoch ends in" +msgstr "" + #: src/widgets/PoolWidget/PoolCreate/hooks/useVersionList.ts:46 msgid "You can set the minimum selling price for single-token pools." msgstr "" @@ -794,10 +1020,14 @@ msgstr "" msgid "Invalid price input" msgstr "" -#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2RemoveLiquidity.ts:137 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2RemoveLiquidity.ts:137 msgid "Failed to remove" msgstr "" +#: src/widgets/ve33/VotePoolList/widgets.tsx:136 +msgid "and" +msgstr "" + #: src/utils/time.ts:27 msgid "Days" msgstr "天" @@ -810,6 +1040,23 @@ msgstr "" msgid "Deposit ratio is determined by the current assets ratio in the pool. The ratio does not represent the exchange price" msgstr "" +#: src/widgets/ve33/Ve33V3PoolOperate/hooks/usePriceRangeRatioSelect.ts:43 +msgid "Wide" +msgstr "" + +#: src/widgets/ve33/hooks/useAddIncentive.ts:63 +#: src/widgets/ve33/Ve33IncentiveDetail/index.tsx:171 +msgid "Add incentive" +msgstr "" + +#: src/widgets/ve33/VotePoolList/index.tsx:650 +msgid "Total {selectedPoolListLen}" +msgstr "" + +#: src/widgets/ve33/VotePoolList/widgets.tsx:590 +msgid "Voted" +msgstr "" + #. js-lingui-explicit-id #: src/widgets/MiningWidget/MiningList/components/UnknownUSDPopover.tsx:22 msgid "Insufficient market depth to capture the dollar value of [ {{symbols}} ]" @@ -821,6 +1068,7 @@ msgid "Invite" msgstr "" #: src/widgets/PoolWidget/AMMV3/components/Badge/RangeBadge.tsx:40 +#: src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx:40 msgid "The price of this pool is outside of your selected range. Your position is not currently earning fees." msgstr "" @@ -841,6 +1089,10 @@ msgstr "额外手续费" msgid "Pegged" msgstr "" +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:94 +msgid "Set vote power" +msgstr "" + #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/ParametersTable.tsx:634 msgid "Equilibrium target" msgstr "" @@ -858,13 +1110,20 @@ msgstr "" #: src/widgets/MiningWidget/OperateArea/index.tsx:72 #: src/widgets/MiningWidget/OperateArea/StakeButton.tsx:80 #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:451 +#: src/widgets/ve33/hooks/useVe33V2Stake.ts:27 +#: src/widgets/ve33/hooks/useVe33V3Stake.ts:30 +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:204 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:549 +#: src/widgets/ve33/Ve33StakeDialog.tsx:77 +#: src/widgets/ve33/Ve33StakeDialog.tsx:342 +#: src/widgets/ve33/Ve33StakeDialog.tsx:629 msgid "Stake" msgstr "" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:281 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:568 -#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:233 -#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:425 +#: src/widgets/ve33/Ve33V2PoolOperate/AddPoolOperate.tsx:233 +#: src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx:425 msgid "Price discrepancy {lqAndDodoCompareText} between liquidity pool and the quote price on DODO." msgstr "" @@ -874,9 +1133,15 @@ msgid "Fetching best price..." msgstr "获取最优价格中..." #: src/widgets/PoolWidget/AMMV3/AddLiquidityV3.tsx:496 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:322 msgid "Invalid range selected. The min price must be lower than the max price." msgstr "" +#: src/widgets/ve33/hooks/useVe33V2Stake.ts:46 +#: src/widgets/ve33/hooks/useVe33V3Stake.ts:49 +msgid "Failed to Stake:" +msgstr "" + #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/LiquidityProvidersTable.tsx:91 msgid "Liquidity Provider" msgstr "" @@ -918,6 +1183,10 @@ msgstr "注意:滑点越高,交易的成功率越高,但是交易的价格 msgid "Set pool parameters" msgstr "" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:414 +msgid "When activated, it sets the lock to maximum unlock time, until disabled. Once disabled, the regular vesting unlock time will apply. Maximum unlock time gives a 1-to-1 voting power to the amount of locked tokens." +msgstr "" + #: src/widgets/PoolWidget/PoolOperate/components/Ratio.tsx:251 msgid "Any Ratio" msgstr "" @@ -977,12 +1246,18 @@ msgstr "" msgid "Owner" msgstr "" +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:296 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:621 +msgid "Emissions" +msgstr "" + #: src/widgets/PoolWidget/PoolCreate/hooks/useVersionList.ts:36 msgid "The pegged exchange rate refers to the exchange rate between two token assets where one's value is pegged/fixed by the other. For example, the pegged exchange rate between the US Dollar and USDT is 1." msgstr "" #: src/widgets/PoolWidget/AMMV2Create/index.tsx:278 #: src/widgets/PoolWidget/AMMV3/AddLiquidityV3.tsx:593 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:367 msgid "Deposit amounts" msgstr "" @@ -991,6 +1266,7 @@ msgid "Disable Indirect Routing" msgstr "" #: src/widgets/PoolWidget/AMMV3/components/Badge/RangeBadge.tsx:23 +#: src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx:23 msgid "Your position has 0 liquidity, and is not earning fees." msgstr "" @@ -999,6 +1275,11 @@ msgstr "" msgid "Mining Pool" msgstr "" +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:252 +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:375 +msgid "My Vote" +msgstr "" + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/TokenPairSelect.tsx:121 msgid "No pools yet? Create one!" msgstr "" @@ -1031,6 +1312,10 @@ msgstr "没有报价" msgid "My pool share" msgstr "" +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:198 +msgid "After" +msgstr "" + #: src/components/Swap/components/SwapSettingsDialog/SlippageSetting.tsx:122 #: src/widgets/PoolWidget/PoolCreate/operate-widgets/InitPriceSetting.tsx:112 msgid "Learn More" @@ -1049,6 +1334,11 @@ msgstr "" msgid "No LP pools match your criteria" msgstr "" +#: src/widgets/ve33/Ve33LockList/CardList.tsx:223 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:56 +msgid "Unlock Date" +msgstr "" + #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:220 #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:560 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:260 @@ -1059,6 +1349,7 @@ msgstr "" #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:305 #: src/widgets/PoolWidget/PoolList/hooks/usePoolListTabs.ts:25 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:140 +#: src/widgets/ve33/Ve33V3PoolOperate/hooks/useAddVe33V3Liquidity.ts:54 msgid "Add Liquidity" msgstr "" @@ -1070,6 +1361,10 @@ msgstr "" #: src/widgets/MiningWidget/OperateArea/index.tsx:73 #: src/widgets/MiningWidget/OperateArea/UnstakeButton.tsx:70 #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:452 +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:197 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:541 +#: src/widgets/ve33/Ve33StakeDialog.tsx:494 +#: src/widgets/ve33/Ve33StakeDialog.tsx:733 msgid "Unstake" msgstr "" @@ -1083,6 +1378,7 @@ msgid "If there are no participants before the end, the rewards cannot be taken msgstr "" #: src/widgets/PoolWidget/AMMV3/components/LiquidityChartRangeInput/index.tsx:189 +#: src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/index.tsx:161 msgid "Your position will appear here." msgstr "" @@ -1092,6 +1388,7 @@ msgstr "获取价格中..." #: src/hooks/Token/useGetTokenStatus.ts:60 #: src/hooks/Token/useTokenStatus.ts:134 +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:173 msgid "Reset" msgstr "重置" @@ -1108,6 +1405,10 @@ msgstr "" msgid "LP Fee" msgstr "" +#: src/widgets/ve33/Ve33LockList/index.tsx:62 +msgid "My Locks" +msgstr "" + #: src/widgets/PoolWidget/PoolCreate/operate-widgets/RatioSetting.tsx:208 msgid "Ratio Settings" msgstr "" @@ -1123,7 +1424,7 @@ msgid "The initial price needs to be greater than {min} and less than 100,000,00 msgstr "" #: src/widgets/PoolWidget/PoolOperate/hooks/usePercentageRemove.ts:98 -#: src/widgets/ve33/Ve33PoolOperate/hooks/usePercentageRemove.ts:95 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/usePercentageRemove.ts:95 msgid "Quantity model" msgstr "" @@ -1144,11 +1445,19 @@ msgstr "" msgid "Confirm Cross Chain" msgstr "确认跨链交易" +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:249 +msgid "VAPR" +msgstr "" + #. js-lingui-explicit-id #: src/components/Swap/components/ReviewDialog.tsx:424 msgid "Price impact reaches <0>{priceImpact}%, accept the quote" msgstr "价格冲击为<0>{priceImpact}%, 仍接受此报价" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:248 +msgid "Add To Lock" +msgstr "" + #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:324 #: src/widgets/PoolWidget/PoolList/AddLiquidity.tsx:403 msgid "Volume (1D)" @@ -1175,8 +1484,14 @@ msgstr "" msgid "The creator of the liquidity pool can adjust the liquidity distribution by modifying the market-making price parameters. <0>Learn more" msgstr "" +#: src/widgets/ve33/Ve33LockList/hooks/useTransferLock.ts:46 +msgid "Transfer Lock" +msgstr "" + #: src/widgets/PoolWidget/AMMV2Create/index.tsx:389 #: src/widgets/PoolWidget/AMMV3/hooks/useV3DerivedMintInfo.tsx:523 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:214 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:150 msgid "Invalid pair" msgstr "" @@ -1184,6 +1499,10 @@ msgstr "" msgid "Auto" msgstr "" +#: src/widgets/ve33/Ve33LockList/hooks/useTransferLock.ts:65 +msgid "Failed to Transfer:" +msgstr "" + #. js-lingui-explicit-id #: src/widgets/MiningWidget/MiningList/my-created/RewardCard.tsx:198 msgid "Remaining rewards/Total" @@ -1197,6 +1516,10 @@ msgstr "" msgid "Rewards" msgstr "" +#: src/widgets/ve33/Ve33LockList/ClaimLockDialog.tsx:99 +msgid "into Lock" +msgstr "" + #: src/components/DateTimePickerInput/components/MobileDateTimePicker.tsx:237 msgid "Last" msgstr "" @@ -1225,7 +1548,7 @@ msgstr "预览跨链交易" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:225 #: src/widgets/PoolWidget/AMMV2Create/Ratio.tsx:213 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:219 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:219 msgid "Share of pool" msgstr "" @@ -1316,11 +1639,27 @@ msgstr "设置" msgid "Creator" msgstr "" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:576 +msgid "Transferring a lock will also transfer any rewards and rebases! Before continuing, please make sure you have claimed all available rewards" +msgstr "" + #: src/widgets/MiningWidget/MiningCreate/components/StepTitle.tsx:49 #: src/widgets/MiningWidget/MiningCreate/index.tsx:139 msgid "Reward Rules" msgstr "" +#: src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx:328 +#: src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx:329 +#: src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx:328 +#: src/widgets/ve33/Ve33PoolDetail/PoolInfo.tsx:329 +msgid "My {0}" +msgstr "" + +#: src/widgets/ve33/Ve33LockList/index.tsx:99 +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:89 +msgid "Merge" +msgstr "" + #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/SwapsTable.tsx:168 msgid "Trader" msgstr "" @@ -1330,11 +1669,12 @@ msgstr "" #: src/widgets/MiningWidget/OperateArea/AssociateMine.tsx:269 #: src/widgets/PoolWidget/AMMV3/components/PositionAmountPreview.tsx:195 #: src/widgets/PoolWidget/PoolOperate/components/LiquidityInfo.tsx:400 +#: src/widgets/ve33/Ve33V3PoolOperate/index.tsx:283 msgid "Details" msgstr "" #: src/widgets/PoolWidget/PoolOperate/components/OperateBtn.tsx:69 -#: src/widgets/ve33/Ve33PoolOperate/components/OperateBtn.tsx:69 +#: src/widgets/ve33/Ve33V2PoolOperate/components/OperateBtn.tsx:69 msgid "Pending" msgstr "" @@ -1361,10 +1701,24 @@ msgstr "秒" msgid "Single-Token Stake Mining" msgstr "" +#: src/widgets/ve33/Ve33LockList/CardList.tsx:236 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:59 +msgid "Rebases" +msgstr "" + #: src/widgets/PoolWidget/PoolCreate/hooks/useSlippageCoefficientList.ts:69 msgid "Suitable for most situations." msgstr "" +#: src/widgets/ve33/hooks/useVe33V2ClaimEmissions.ts:49 +#: src/widgets/ve33/hooks/useVe33V2ClaimTradingFees.ts:50 +#: src/widgets/ve33/hooks/useVe33V3ClaimEmissions.ts:49 +#: src/widgets/ve33/hooks/useVe33V3ClaimTradingFees.ts:68 +#: src/widgets/ve33/Ve33LockList/hooks/useClaimBribes.ts:61 +#: src/widgets/ve33/Ve33LockList/hooks/useClaimRebases.ts:53 +msgid "Failed to Claim:" +msgstr "" + #: src/components/List/FailedList.tsx:47 msgid "Something went wrong…<0>Refresh again" msgstr "" @@ -1385,6 +1739,8 @@ msgstr "" #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:132 #: src/widgets/PoolWidget/AMMV3/components/PositionSelectedRangePreview.tsx:191 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:126 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionSelectedRangePreview.tsx:186 msgid "Your position will be 100% composed of {0} at this price" msgstr "" @@ -1409,6 +1765,10 @@ msgstr "交易详情" msgid "No ForceStop access" msgstr "No ForceStop access" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:435 +msgid "Extend to" +msgstr "" + #: src/components/Swap/components/SwapSettingsDialog/index.tsx:297 msgid "Checking this option means that the routing algorithm will only route to liquidity pools between the two tokens in the trading pair and will ignore routes with any intermediary tokens." msgstr "" @@ -1437,8 +1797,8 @@ msgstr "" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:154 #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:177 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:148 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:171 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:148 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:171 msgid "{0} deposited" msgstr "" @@ -1448,7 +1808,8 @@ msgstr "" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:454 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:613 #: src/widgets/PoolWidget/PoolOperate/components/LiquidityInfo.tsx:430 -#: src/widgets/ve33/Ve33PoolOperate/index.tsx:277 +#: src/widgets/ve33/Ve33V2PoolOperate/index.tsx:282 +#: src/widgets/ve33/Ve33V3PoolOperate/components/MyLiquidity.tsx:55 msgid "My Liquidity" msgstr "" @@ -1457,11 +1818,11 @@ msgid "For" msgstr "对于" #: src/widgets/PoolWidget/PoolOperate/components/ComparePrice.tsx:52 -#: src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx:52 +#: src/widgets/ve33/Ve33V2PoolOperate/components/ComparePrice.tsx:52 msgid "{lqAndDodoCompareText} Price Difference" msgstr "" -#: src/widgets/ve33/VotePoolList/TableList.tsx:50 +#: src/widgets/ve33/VotePoolList/TableList.tsx:51 msgid "vAPR" msgstr "" @@ -1475,10 +1836,15 @@ msgstr "" msgid "You have not create any mining" msgstr "" -#: src/widgets/ve33/Ve33PoolOperate/index.tsx:177 +#: src/widgets/ve33/Ve33V2PoolOperate/index.tsx:182 +#: src/widgets/ve33/Ve33V3PoolOperate/index.tsx:160 msgid "Pool Adress" msgstr "" +#: src/widgets/ve33/Ve33IncentiveDetail/AddIncentiveDialog.tsx:211 +msgid "I understand I will NOT be able to withdraw incentives" +msgstr "" + #: src/components/chart/i18n.ts:27 msgid "The area of the chart indicates the buy/sell volume of {0} that can be carried by the market when the current price changes to the hover price." msgstr "" @@ -1508,12 +1874,16 @@ msgstr "" msgid "Additional routing fees set by the Widget user" msgstr "由 Widget 设置的额外路由费用" +#: src/widgets/ve33/Ve33LockOperate/index.tsx:202 +msgid "Locking for" +msgstr "" + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/RewardForm.tsx:344 msgid "The start time is too soon, please set a later time" msgstr "" #: src/widgets/PoolWidget/PoolOperate/components/ComparePrice.tsx:61 -#: src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx:61 +#: src/widgets/ve33/Ve33V2PoolOperate/components/ComparePrice.tsx:61 msgid "Current liquidity pool token price" msgstr "" @@ -1534,16 +1904,25 @@ msgstr "最大滑点不能超过50%" msgid "For those who are looking to sell tokens and only need ask-side liquidity." msgstr "" +#: src/widgets/ve33/VotePoolList/widgets.tsx:45 +msgid "Fees rewards + Incentives rewards" +msgstr "" + #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/SwapsTable.tsx:177 msgid "Price" msgstr "" +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:391 +msgid "In Range" +msgstr "" + #: src/widgets/PoolWidget/AMMV3/components/Badge/RangeBadge.tsx:34 +#: src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx:34 msgid "The price of this pool is within your selected range. Your position is currently earning fees." msgstr "" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:58 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:62 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:62 msgid "You are creating a pool" msgstr "" @@ -1560,15 +1939,25 @@ msgstr "" msgid "Minutes" msgstr "分钟" +#: src/widgets/ve33/Ve33V3PoolOperate/hooks/usePriceRangeRatioSelect.ts:42 +msgid "Common" +msgstr "" + #: src/components/TextSwitch.tsx:61 msgid "Off" msgstr "" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:505 +msgid "You can extend the lock or increase the lock amount. These actions will increase your voting power. The maximum lock time is 1 years!" +msgstr "" + #: src/widgets/PoolWidget/AMMV3/AddLiquidityV3.tsx:491 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:317 msgid "Your position will not earn fees or be used in trades until the market price moves into your range." msgstr "" #: src/widgets/PoolWidget/AMMV3/AddLiquidityV3.tsx:554 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:282 msgid "per" msgstr "" @@ -1578,8 +1967,8 @@ msgstr "" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:275 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:562 -#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:227 -#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:419 +#: src/widgets/ve33/Ve33V2PoolOperate/AddPoolOperate.tsx:227 +#: src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx:419 msgid "Confirm submission" msgstr "" @@ -1605,12 +1994,17 @@ msgstr "" msgid "Mining Type" msgstr "" +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:157 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:500 +msgid "Total liquidity" +msgstr "" + #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/ParametersTable.tsx:548 msgid "Settler" msgstr "" #: src/widgets/PoolWidget/hooks/useAMMV2RemoveLiquidity.ts:164 -#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2RemoveLiquidity.ts:144 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2RemoveLiquidity.ts:144 msgid "Remove liquidity" msgstr "" @@ -1720,6 +2114,10 @@ msgstr "交易被拒绝." msgid "\"Created by {0}" msgstr "" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:128 +msgid "Lock #{0}" +msgstr "" + #: src/widgets/PoolWidget/PoolCreate/hooks/useSlippageCoefficientList.ts:85 msgid "Results in a more volatile price." msgstr "" @@ -1746,7 +2144,7 @@ msgstr "" #: src/components/Swap/SwapOrderHistory/index.tsx:105 #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:204 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:198 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:198 msgid "Rate" msgstr "" @@ -1759,10 +2157,22 @@ msgstr "" msgid "fee tier" msgstr "" +#: src/widgets/ve33/Ve33V3PoolOperate/hooks/usePriceRangeRatioSelect.ts:44 +msgid "Full" +msgstr "" + #: src/hooks/Submission/getExecutionErrorMsg.ts:66 msgid "Service update, please wait and try again" msgstr "服务升级中, 请等待或重试" +#: src/widgets/ve33/Ve33LockList/hooks/useExtendLock.ts:49 +msgid "Extend Lock" +msgstr "" + +#: src/widgets/ve33/Ve33LockOperate/index.tsx:117 +msgid "My total ve{0}" +msgstr "" + #: src/hooks/Submission/getExecutionErrorMsg.ts:44 msgid "Gas price is too low, please adjust in your wallet and try again" msgstr "Gas 价格过低, 请调整后重试" @@ -1781,6 +2191,7 @@ msgid "Estimated transaction time" msgstr "预计交易时长" #: src/widgets/PoolWidget/AMMV3/components/ClaimButton.tsx:28 +#: src/widgets/ve33/Ve33V3PoolOperate/components/ClaimButton.tsx:52 msgid "Collect fees" msgstr "" @@ -1814,22 +2225,46 @@ msgstr "" msgid "Token Amount" msgstr "" +#: src/widgets/ve33/Ve33LockList/hooks/useIncreaseLock.ts:40 +msgid "Increase Lock" +msgstr "" + #: src/widgets/PoolWidget/PoolCreate/components/StepTitle.tsx:20 #: src/widgets/PoolWidget/PoolCreate/index.tsx:246 #: src/widgets/PoolWidget/PoolModify/index.tsx:237 msgid "Select Pool Version" msgstr "" +#: src/widgets/ve33/Ve33IncentiveList/index.tsx:189 +msgid "Available Pools" +msgstr "" + #: src/widgets/MiningWidget/hooks/useClaimMiningSubmit.ts:46 #: src/widgets/MiningWidget/MiningDetail/MiningInfo.tsx:465 #: src/widgets/MiningWidget/MiningList/operate-area/index.tsx:204 #: src/widgets/MiningWidget/OperateArea/index.tsx:74 #: src/widgets/PoolWidget/AMMV3/AMMV3PositionManage.tsx:453 +#: src/widgets/ve33/hooks/useVe33V2ClaimEmissions.ts:30 +#: src/widgets/ve33/hooks/useVe33V2ClaimTradingFees.ts:31 +#: src/widgets/ve33/hooks/useVe33V3ClaimEmissions.ts:30 +#: src/widgets/ve33/hooks/useVe33V3ClaimTradingFees.ts:49 +#: src/widgets/ve33/Ve33LockList/CardList.tsx:90 +#: src/widgets/ve33/Ve33LockList/ClaimLockDialog.tsx:28 +#: src/widgets/ve33/Ve33LockList/hooks/useClaimBribes.ts:42 +#: src/widgets/ve33/Ve33LockList/hooks/useClaimRebases.ts:34 +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:249 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:124 +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:279 +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:305 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:604 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:630 msgid "Claim" msgstr "" #: src/widgets/PoolWidget/AMMV3/components/Badge/RangeBadge.tsx:48 #: src/widgets/PoolWidget/AMMV3/components/InRangeDot.tsx:12 +#: src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx:48 +#: src/widgets/ve33/Ve33V3PoolOperate/components/InRangeDot.tsx:12 msgid "Out of range" msgstr "" @@ -1848,16 +2283,30 @@ msgstr "" #: src/components/Swap/index.tsx:706 #: src/widgets/PoolWidget/AMMV3/hooks/useV3DerivedMintInfo.tsx:534 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:217 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:153 msgid "Enter an amount" msgstr "输入代币数量" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:395 +msgid "Auto Max-Lock Mode" +msgstr "" + #: src/widgets/PoolWidget/PoolDetail/components/TotalLiquidity.tsx:180 msgid "Ratio" msgstr "" +#: src/widgets/ve33/Ve33LockList/index.tsx:78 +msgid "{selectedLen} Lock selected" +msgstr "" + +#: src/widgets/ve33/Ve33LockList/MergeDialog.tsx:200 +msgid "Merging two locks will inherit the longest lock time of the two and will increase the final Lock (veNFT) voting power by adding up the two underlying locked amounts based on the new lock time." +msgstr "" + #: src/components/Swap/index.tsx:700 #: src/components/TokenPairStatusButton.tsx:45 -#: src/components/TokenStatusButton.tsx:31 +#: src/components/TokenStatusButton.tsx:33 msgid "Approving" msgstr "授权中" @@ -1874,6 +2323,7 @@ msgid "Liquidity Providers" msgstr "" #: src/widgets/PoolWidget/AMMV3/components/RangeSelector.tsx:98 +#: src/widgets/ve33/Ve33V3PoolOperate/components/RangeSelector.tsx:94 msgid "High price" msgstr "" @@ -1896,6 +2346,10 @@ msgstr "发生异常错误." msgid "Daily Rewards" msgstr "" +#: src/widgets/ve33/VotePoolList/hooks/useVoteVe33.ts:61 +msgid "Failed to Vote:" +msgstr "" + #: src/utils/time.ts:7 msgid "Second" msgstr "秒" @@ -1904,9 +2358,17 @@ msgstr "秒" msgid "Total Swap Volume" msgstr "" +#: src/widgets/ve33/Ve33LockList/hooks/useExtendLock.ts:68 +msgid "Failed to Extend:" +msgstr "" + +#: src/widgets/ve33/Ve33LockList/hooks/useMergeLock.ts:38 +msgid "Merge Lock" +msgstr "" + #: src/components/Swap/SwapOrderHistory/index.tsx:99 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:458 -#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:323 +#: src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx:323 msgid "Receive" msgstr "" @@ -1919,10 +2381,22 @@ msgstr "" msgid "AMM V2 Position" msgstr "" +#: src/widgets/ve33/Ve33IncentiveDetail/AddIncentiveDialog.tsx:253 +#: src/widgets/ve33/Ve33IncentiveList/CardList.tsx:103 +#: src/widgets/ve33/Ve33IncentiveList/TableList.tsx:100 +msgid "Add Incentive" +msgstr "" + #: src/components/Swap/components/ReviewDialog.tsx:448 msgid "Confirm swap" msgstr "确认交易" +#: src/widgets/ve33/VotePoolList/hooks/useVoteVe33.ts:42 +#: src/widgets/ve33/VotePoolList/index.tsx:229 +#: src/widgets/ve33/VotePoolList/index.tsx:691 +msgid "Vote" +msgstr "" + #: src/widgets/PoolWidget/PoolCreate/hooks/useVersionList.ts:78 msgid "Once created, the price cannot be changed. This option applies to assets like ETH-WETH." msgstr "" @@ -1931,7 +2405,7 @@ msgstr "" #: src/components/Swap/components/SwapSettingsDialog/index.tsx:87 #: src/widgets/PoolWidget/AMMV2Create/Setting.tsx:100 #: src/widgets/PoolWidget/PoolOperate/components/SlippageSetting.tsx:123 -#: src/widgets/ve33/Ve33PoolOperate/components/SlippageSetting.tsx:111 +#: src/widgets/ve33/Ve33V2PoolOperate/components/SlippageSetting.tsx:111 msgid "Slippage Tolerance" msgstr "滑点" @@ -1960,9 +2434,14 @@ msgstr "" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1110 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:122 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOperateTabs.ts:15 -#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:91 -#: src/widgets/ve33/Ve33PoolOperate/hooks/usePoolOperateTabs.ts:15 -#: src/widgets/ve33/Ve33PoolOperate/index.tsx:401 +#: src/widgets/ve33/Ve33PoolDetail/index.tsx:187 +#: src/widgets/ve33/Ve33PoolList/CardList.tsx:224 +#: src/widgets/ve33/Ve33V2PoolOperate/AddPoolOperate.tsx:91 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/usePoolOperateTabs.ts:15 +#: src/widgets/ve33/Ve33V2PoolOperate/index.tsx:406 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:237 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:446 +#: src/widgets/ve33/VotePoolList/widgets.tsx:171 msgid "Add" msgstr "" @@ -2025,10 +2504,23 @@ msgstr "" msgid "Select a liquidity pool" msgstr "" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:554 +msgid "Wallet address where the lock will be transferred" +msgstr "" + +#: src/widgets/ve33/VotePoolList/widgets.tsx:423 +msgid "selected Lock to vote" +msgstr "" + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/SingleTokenSelect.tsx:137 msgid "Do not select non-standard ERC20 tokens as this may lead to unknown errors!" msgstr "" +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:116 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:354 +msgid "Position" +msgstr "" + #: src/widgets/PoolWidget/PoolList/components/CreatePoolBtn.tsx:157 #: src/widgets/PoolWidget/PoolList/components/CreatePoolBtn.tsx:161 #: src/widgets/PoolWidget/PoolList/components/CreatePoolBtn.tsx:206 @@ -2057,6 +2549,10 @@ msgstr "" msgid "The closer the provided asset ratio is to the recommended ratio ({recommendRatioText}), the smaller the portion burned." msgstr "" +#: src/widgets/ve33/Ve33V3PoolOperate/index.tsx:260 +msgid "My Position" +msgstr "" + #: src/widgets/PoolWidget/PoolDetail/components/Overview.tsx:112 #: src/widgets/PoolWidget/PoolList/components/PoolApyTooltip.tsx:169 msgid "MT Fee" @@ -2071,20 +2567,40 @@ msgstr "" msgid "Current Market Price:" msgstr "" +#: src/widgets/ve33/Ve33LockList/CardList.tsx:213 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:53 +msgid "Voting Power" +msgstr "" + #: src/widgets/PoolWidget/PoolCreate/components/GasWrapGasTokenError.tsx:48 msgid "{0}-{1} is not supported. Please select another pair." msgstr "" +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:340 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:665 +msgid "Lock {0} >" +msgstr "" + #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:255 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:249 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:249 msgid "Confirming..." msgstr "" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:105 +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:305 +msgid "Increase" +msgstr "" + #: src/components/chart/i18n.ts:7 #: src/components/chart/i18n.ts:11 msgid "Users pay {0} {1} and receive {2} {3}\\nPrice {4} ({5}%)" msgstr "" +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:223 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:568 +msgid "Staked" +msgstr "" + #: src/widgets/PoolWidget/PoolDetail/components/ChartInfo.tsx:45 msgid "Traders" msgstr "" @@ -2097,7 +2613,7 @@ msgstr "在冷静期无法进行清算" msgid "The setting has been switched to cross chain mode" msgstr "设置已切换到跨链桥交易模式" -#: src/components/Swap/components/TokenCard/index.tsx:284 +#: src/components/Swap/components/TokenCard/index.tsx:288 msgid "Buy" msgstr "" @@ -2107,10 +2623,16 @@ msgstr "" msgid "Total Rewards" msgstr "" +#: src/widgets/ve33/Ve33IncentiveDetail/AddIncentiveDialog.tsx:230 +msgid "Your incentive will be released linearly over the remaining time of the current epoch." +msgstr "" + #: src/components/ConnectWallet/NeedConnectButton.tsx:87 #: src/widgets/MiningWidget/MiningCreate/operate-widgets/BottomButtonGroup.tsx:55 #: src/widgets/PoolWidget/AMMV3/hooks/useDerivedV3BurnInfo.tsx:96 #: src/widgets/PoolWidget/AMMV3/hooks/useV3DerivedMintInfo.tsx:519 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:210 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:146 msgid "Connect to a wallet" msgstr "连接钱包" @@ -2122,11 +2644,12 @@ msgid "End Time" msgstr "" #: src/widgets/PoolWidget/AMMV3/components/LiquidityChartRangeInput/index.tsx:231 +#: src/widgets/ve33/Ve33V3PoolOperate/components/LiquidityChartRangeInput/index.tsx:203 msgid "There is no liquidity data." msgstr "" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:134 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:128 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:128 msgid "Output is estimated. If the price changes by more than {0} your transaction will revert." msgstr "" @@ -2149,6 +2672,7 @@ msgid "AMM V2" msgstr "" #: src/widgets/PoolWidget/AMMV3/components/Buttons.tsx:114 +#: src/widgets/ve33/Ve33V3PoolOperate/Ve33V3AddLiquidity.tsx:439 msgid "Preview" msgstr "" @@ -2157,17 +2681,26 @@ msgid "Select Platform" msgstr "" #: src/components/Swap/components/TokenCard/TokenLogoCollapse.tsx:64 -#: src/components/TokenSelect.tsx:124 +#: src/components/TokenSelect.tsx:128 #: src/widgets/MiningWidget/MiningCreate/components/PoolPicker.tsx:356 #: src/widgets/MiningWidget/MiningCreate/components/PoolPicker.tsx:414 #: src/widgets/PoolWidget/AMMV3/components/CurrencyInputPanel.tsx:99 msgid "SELECT TOKEN" msgstr "选择代币" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:184 +msgid "Voting Power Granted" +msgstr "" + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/RewardForm.tsx:579 msgid "Add Token" msgstr "" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:453 +#: src/widgets/ve33/Ve33LockOperate/index.tsx:214 +msgid "for" +msgstr "" + #: src/widgets/PoolWidget/PoolDetail/components/Overview.tsx:53 #: src/widgets/PoolWidget/PoolDetail/components/TotalLiquidity.tsx:67 msgid "Total Liquidity" @@ -2177,6 +2710,10 @@ msgstr "" msgid "AMM V3 Position" msgstr "" +#: src/widgets/ve33/Ve33IncentiveDetail/Dashboard.tsx:92 +msgid "Current Incentives" +msgstr "" + #: src/widgets/PoolWidget/PoolCreate/components/BaseInfoCardList.tsx:55 #: src/widgets/PoolWidget/PoolCreate/components/ConfirmInfoDialog.tsx:151 #: src/widgets/PoolWidget/PoolCreate/components/LqSettingsShow.tsx:139 @@ -2191,7 +2728,7 @@ msgid "Advanced" msgstr "" #: src/widgets/PoolWidget/AMMV2Create/ConfirmDialog.tsx:107 -#: src/widgets/ve33/Ve33PoolOperate/components/V2ConfirmDialog.tsx:111 +#: src/widgets/ve33/Ve33V2PoolOperate/components/V2ConfirmDialog.tsx:111 msgid "{0}/{1} Pool Tokens" msgstr "" @@ -2207,9 +2744,12 @@ msgstr "" #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1098 #: src/widgets/PoolWidget/PoolOperate/hooks/usePoolOperateTabs.ts:16 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:233 -#: src/widgets/ve33/Ve33PoolOperate/hooks/usePoolOperateTabs.ts:16 -#: src/widgets/ve33/Ve33PoolOperate/index.tsx:402 -#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:205 +#: src/widgets/ve33/Ve33PoolDetail/index.tsx:194 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/usePoolOperateTabs.ts:16 +#: src/widgets/ve33/Ve33V2PoolOperate/index.tsx:407 +#: src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx:205 +#: src/widgets/ve33/Ve33V3PoolOperate/components/PositionManage.tsx:238 +#: src/widgets/ve33/Ve33V3PoolOperate/components/RemoveButton.tsx:58 msgid "Remove" msgstr "" @@ -2251,11 +2791,12 @@ msgid "Status" msgstr "" #: src/widgets/PoolWidget/AMMV3/components/RangeSelector.tsx:73 +#: src/widgets/ve33/Ve33V3PoolOperate/components/RangeSelector.tsx:69 msgid "Low price" msgstr "" #: src/widgets/PoolWidget/PoolOperate/components/ComparePrice.tsx:64 -#: src/widgets/ve33/Ve33PoolOperate/components/ComparePrice.tsx:64 +#: src/widgets/ve33/Ve33V2PoolOperate/components/ComparePrice.tsx:64 msgid "differs from the price quoted by DODO by {lqAndDodoCompareText}" msgstr "" @@ -2277,15 +2818,24 @@ msgstr "" msgid "Description of this type of pool" msgstr "" +#: src/widgets/ve33/Ve33PoolDetail/MyAssets.tsx:328 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:653 +msgid "Lock {0} to get ve{1}. You can use ve{2} to vote for more rewards." +msgstr "" + #: src/widgets/PoolWidget/PoolDetail/components/MoreDetail/SwapsTable.tsx:171 msgid "Paid" msgstr "" #: src/components/AddTokenToMetamask.tsx:54 -#: src/widgets/ve33/Ve33PoolOperate/hooks/useVe33V2AddLiquidity.ts:133 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/useVe33V2AddLiquidity.ts:133 msgid "Failed to add" msgstr "" +#: src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx:161 +msgid "Distribute equally" +msgstr "" + #: src/components/Swap/index.tsx:863 #: src/hooks/Swap/useExecuteSwap.ts:56 msgid "Swap" @@ -2298,16 +2848,22 @@ msgstr "" #: src/widgets/PoolWidget/AMMV3/components/Badge/RangeBadge.tsx:36 #: src/widgets/PoolWidget/AMMV3/components/InRangeDot.tsx:12 +#: src/widgets/ve33/Ve33V3PoolOperate/components/Badge/RangeBadge.tsx:36 +#: src/widgets/ve33/Ve33V3PoolOperate/components/InRangeDot.tsx:12 msgid "In range" msgstr "" #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:284 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:571 -#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:236 -#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:428 +#: src/widgets/ve33/Ve33V2PoolOperate/AddPoolOperate.tsx:236 +#: src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx:428 msgid "There is risk of being arbitraged if adding this liquidity." msgstr "" +#: src/widgets/ve33/Ve33V3PoolOperate/index.tsx:275 +msgid "{0} Position" +msgstr "" + #: src/widgets/MiningWidget/MiningCreate/operate-widgets/SingleTokenSelect.tsx:106 msgid "address" msgstr "" @@ -2316,8 +2872,23 @@ msgstr "" msgid "This trading pair does not have enough historical data and has used the default dynamic slippage." msgstr "" +#: src/widgets/ve33/VotePoolList/index.tsx:237 +msgid "Voters earn a share of transaction fees and incentives for helping govern how emissions are distributed." +msgstr "" + +#: src/widgets/ve33/VotePoolList/widgets.tsx:425 +#: src/widgets/ve33/VotePoolList/widgets.tsx:480 +msgid "Select A Lock" +msgstr "" + +#: src/widgets/ve33/Ve33IncentiveList/index.tsx:156 +msgid "Select pool pair you want to incentive" +msgstr "" + #: src/widgets/PoolWidget/AMMV3/components/PositionViewCard.tsx:248 #: src/widgets/PoolWidget/PoolList/MyLiquidity.tsx:1110 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:286 +#: src/widgets/ve33/Ve33PoolDetail/MyPosition.tsx:453 msgid "Manage" msgstr "" @@ -2338,7 +2909,7 @@ msgid "Liquidity Burn Ratio" msgstr "" #: src/widgets/PoolWidget/PoolOperate/hooks/usePercentageRemove.ts:102 -#: src/widgets/ve33/Ve33PoolOperate/hooks/usePercentageRemove.ts:99 +#: src/widgets/ve33/Ve33V2PoolOperate/hooks/usePercentageRemove.ts:99 msgid "Percentage to remove" msgstr "" @@ -2346,6 +2917,10 @@ msgstr "" msgid "Max Slippage" msgstr "" +#: src/widgets/ve33/VotePoolList/index.tsx:682 +msgid "Clear" +msgstr "" + #: src/hooks/Submission/getExecutionErrorMsg.ts:25 msgid "User denied transaction signature." msgstr "用户拒绝交易签名." @@ -2359,6 +2934,10 @@ msgstr "" msgid "WARNING" msgstr "" +#: src/widgets/ve33/Ve33LockOperate/hooks/useCreateLock.ts:64 +msgid "Failed to Create:" +msgstr "" + #: src/hooks/Submission/getExecutionErrorMsg.ts:36 msgid "ForceStop exception" msgstr "ForceStop 异常" @@ -2416,6 +2995,11 @@ msgstr "" msgid "https://blog.dodoex.io/introducing-the-dodo-smart-slippage-3d32d13a4fef" msgstr "" +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:107 +#: src/widgets/ve33/Ve33LockList/LockManageDialog.tsx:599 +msgid "Transfer" +msgstr "" + #: src/components/Swap/components/SwapSettingsDialog/index.tsx:195 msgid "Transaction Deadline" msgstr "交易截止时间" @@ -2442,14 +3026,20 @@ msgid "Total Rewards=Daily Rewards*Duration" msgstr "" #: src/components/Swap/index.tsx:743 -#: src/components/TokenStatusButton.tsx:18 +#: src/components/TokenStatusButton.tsx:20 #: src/widgets/PoolWidget/PoolOperate/AddPoolOperate.tsx:124 #: src/widgets/PoolWidget/PoolOperate/RemovePoolOperate.tsx:233 -#: src/widgets/ve33/Ve33PoolOperate/AddPoolOperate.tsx:93 -#: src/widgets/ve33/Ve33PoolOperate/RemovePoolOperate.tsx:205 +#: src/widgets/ve33/Ve33V2PoolOperate/AddPoolOperate.tsx:93 +#: src/widgets/ve33/Ve33V2PoolOperate/RemovePoolOperate.tsx:205 msgid "Insufficient balance" msgstr "余额不足" +#: src/widgets/ve33/Ve33LockList/CardList.tsx:191 +#: src/widgets/ve33/Ve33LockList/TableList.tsx:47 +#: src/widgets/ve33/VotePoolList/widgets.tsx:48 +msgid "Rebase APR" +msgstr "" + #: src/widgets/PoolWidget/hooks/usePoolTypeTag.ts:19 msgid "Private" msgstr "" diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/AddIncentiveDialog.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/AddIncentiveDialog.tsx new file mode 100644 index 00000000..34745c94 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/AddIncentiveDialog.tsx @@ -0,0 +1,260 @@ +import { + alpha, + Box, + BoxProps, + Button, + ButtonBase, + Checkbox, + useMediaDevices, + useTheme, +} from '@dodoex/components'; +import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; +import Dialog from '../../../components/Dialog'; +import { TokenInfo } from '../../../hooks/Token'; +import { t } from '@lingui/macro'; +import React from 'react'; +import { TokenCard } from '../../../components/Swap/components/TokenCard'; +import { useTokenStatus } from '../../../hooks/Token/useTokenStatus'; +import NeedConnectButton from '../../../components/ConnectWallet/NeedConnectButton'; +import { ChainId } from '@dodoex/api'; +import TokenStatusButton from '../../../components/TokenStatusButton'; +import { Error } from '@dodoex/icons'; +import { getEpochVoteEnd } from '../Ve33LockOperate/utils'; +import { formatReadableTimeDuration } from '../../../utils/time'; +import { PoolTypeE } from '../types'; +import { + getVE33V2BribeVotingRewardContractAddressByChainId, + getVE33V3BribeVotingRewardContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; +import { useAddIncentive } from '../hooks/useAddIncentive'; + +interface AddIncentiveProps { + data?: { + chainId: ChainId; + token: TokenInfo; + type: PoolTypeE; + }; + onClose: () => void; + refetch?: () => void; + sx?: BoxProps['sx']; +} + +export default function AddIncentiveDialog(props: AddIncentiveProps) { + const { isMobile } = useWidgetDevice(); + + return ( + + {isMobile ? ( + + + + ) : ( + + )} + + ); +} + +function AddIncentive({ sx, data, onClose, refetch }: AddIncentiveProps) { + const theme = useTheme(); + const { isMobile } = useMediaDevices(); + const [token, setToken] = React.useState( + data?.token ?? null, + ); + const [amount, setAmount] = React.useState(''); + const [understand, setUnderstand] = React.useState(false); + React.useEffect(() => { + if (!token && data?.token) { + setToken(data.token); + } + }, [data]); + + const isV2 = data?.type === PoolTypeE.Pool; + const contractAddress = data?.chainId + ? isV2 + ? getVE33V2BribeVotingRewardContractAddressByChainId(data.chainId) + : getVE33V3BribeVotingRewardContractAddressByChainId(data.chainId) + : undefined; + const tokenStatus = useTokenStatus(token, { + amount, + contractAddress, + }); + const nowTime = Date.now(); + const epochVoteEnd = getEpochVoteEnd(nowTime); + + const addMutation = useAddIncentive({ + refetch: () => { + onClose(); + refetch?.(); + }, + }); + + return ( + + + {t`Incentive`} + + + + {t`Epoch ends in`}: + {' '} + + {formatReadableTimeDuration({ + start: nowTime, + end: epochVoteEnd * 1000, + })} + + + {isMobile && ( + onClose()} + > + + + )} + + + + + ) => + setUnderstand(evt.target.checked) + } + /> + {t`I understand I will NOT be able to withdraw incentives`} + + + + + + {t`Your incentive will be released linearly over the remaining time of the current epoch.`} + + + + + + + + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/Dashboard.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/Dashboard.tsx new file mode 100644 index 00000000..f75636e5 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/Dashboard.tsx @@ -0,0 +1,166 @@ +import { + Box, + LoadingSkeleton, + useMediaDevices, + useTheme, +} from '@dodoex/components'; +import { t } from '@lingui/macro'; +import { ReactComponent as StarIcon } from './star.svg'; +import { ReactComponent as VotesIcon } from './votes.svg'; +import { ReactComponent as DistributedIcon } from './distributed.svg'; +import { ReactComponent as IncentivesIcon } from './incentives.svg'; +import React from 'react'; +import { formatReadableNumber, formatShortNumber } from '../../../utils'; +import TokenLogo from '../../../components/TokenLogo'; +import { TokenLogoPair } from '../../../components/TokenLogoPair'; +import { useQuery } from '@tanstack/react-query'; +import { getFetchVE33VoterWeightsQueryOptions } from '@dodoex/dodo-contract-request'; +import { Ve33PoolInfoI } from '../types'; +import { formatUnits } from '@dodoex/contract-request'; + +export default function Dashboard({ + poolInfo, +}: { + poolInfo: Ve33PoolInfoI | undefined; +}) { + const theme = useTheme(); + const { isMobile } = useMediaDevices(); + const fetchVote = useQuery( + getFetchVE33VoterWeightsQueryOptions(poolInfo?.chainId, poolInfo?.id), + ); + const veToken = { + chainId: poolInfo?.chainId!, + symbol: 'MOMO', + name: 'MOMO', + decimals: 18, + address: '0x42EDf453F8483c7168c158d28D610A58308517D1', + }; + + return ( + + + + {t`By providing an incentive, you draw more liquidity providers to this pool.`} + + + } label={t`Current votes`}> + + {formatReadableNumber({ + input: fetchVote.data + ? formatUnits(fetchVote.data, veToken.decimals) + : '', + })} + + + } label={t`Will be distributed`}> + + $ + {formatShortNumber(12.88)} + + + } label={t`Current Incentives`}> + + $ + {formatShortNumber(12.88)} + + + + + ); +} + +function Item({ + icon, + label, + children, +}: React.PropsWithChildren<{ + icon: React.ReactNode; + label: string; +}>) { + const theme = useTheme(); + const { isMobile } = useMediaDevices(); + + return ( + + + {icon} + + + + {label} + + + {children} + + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx new file mode 100644 index 00000000..a663668f --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/PoolInfo.tsx @@ -0,0 +1,420 @@ +import { + alpha, + Box, + LoadingSkeleton, + Skeleton, + useTheme, +} from '@dodoex/components'; +import { PoolTypeE, Ve33PoolInfoI } from '../types'; +import { t, Trans } from '@lingui/macro'; +import { + formatApy, + formatShortNumber, + formatTokenAmountNumber, +} from '../../../utils'; +import TokenLogo from '../../../components/TokenLogo'; +import { useFetchFiatPriceBatch } from '../../../hooks/useFetchFiatPriceBatch'; +import BigNumber from 'bignumber.js'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; +import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; +import { useVe33V3Positions } from '../Ve33PoolDetail/useVe33V3Positions'; + +export default function PoolInfo({ + poolInfo, + isLoading, +}: { + poolInfo?: Ve33PoolInfoI; + isLoading?: boolean; +}) { + const theme = useTheme(); + const fiatQuery = useFetchFiatPriceBatch({ + tokens: poolInfo ? [poolInfo.baseToken, poolInfo.quoteToken] : [], + }); + const isV3 = poolInfo?.type === PoolTypeE.CLPool; + const { account } = useWalletInfo(); + const { isMobile } = useWidgetDevice(); + const fetchPositions = useVe33V3Positions({ + poolInfo, + account, + }); + const isFetchPositionsLoading = fetchPositions.positionsQuery.some( + (item) => item.isLoading, + ); + let myBaseTVL = 0, + myQuoteTVL = 0; + fetchPositions.positionsQuery.forEach((position) => { + myBaseTVL += position.data?.amount0 ?? 0; + myQuoteTVL += position.data?.amount1 ?? 0; + }); + + const baseTVL = Number(poolInfo?.totalValueLockedToken0) || 0; + const quoteTVL = Number(poolInfo?.totalValueLockedToken1) || 0; + let baseTVLUsd = 0; + let quoteTVLUsd = 0; + let totalUSD = 0; + if (poolInfo) { + baseTVLUsd = new BigNumber( + fiatQuery.data?.get(poolInfo?.baseToken.address) ?? 0, + ) + .times(baseTVL) + .toNumber(); + quoteTVLUsd = new BigNumber( + fiatQuery.data?.get(poolInfo?.quoteToken.address) ?? 0, + ) + .times(quoteTVL) + .toNumber(); + totalUSD = baseTVLUsd + quoteTVLUsd; + } + const basePercentage = + totalUSD && baseTVLUsd ? (baseTVLUsd / totalUSD) * 100 : 0; + const quotePercentage = + totalUSD && quoteTVLUsd ? (quoteTVLUsd / totalUSD) * 100 : 0; + + return ( + + + + + TVL + + + {formatTokenAmountNumber({ + input: totalUSD || poolInfo?.totalValueLockedUSD, + decimals: 18, + })} + + + + + + APR + + + {formatApy( + Number(poolInfo?.apr.fees) + Number(poolInfo?.apr.incentives), + )} + + + + + + {t`Total ${poolInfo?.baseToken.symbol}`} + {t`Total ${poolInfo?.quoteToken.symbol}`} + + + + + {formatTokenAmountNumber({ + input: baseTVL, + decimals: poolInfo?.baseToken.decimals, + })} + + + ~${baseTVLUsd ? formatShortNumber(baseTVLUsd) : 0} + + + + + ~${quoteTVLUsd ? formatShortNumber(quoteTVLUsd) : 0} + + + {formatTokenAmountNumber({ + input: quoteTVL, + decimals: poolInfo?.quoteToken.decimals, + })} + + + + {isLoading ? ( + + ) : ( + + + + {basePercentage}% + + + + {quotePercentage}% + + + )} + + {isV3 && account && ( + <> + + {t`My ${poolInfo?.baseToken.symbol}`} + {t`My ${poolInfo?.quoteToken.symbol}`} + + + + + {formatTokenAmountNumber({ + input: myBaseTVL, + decimals: poolInfo?.baseToken.decimals, + })} + + + ~$ + {myBaseTVL + ? formatShortNumber( + new BigNumber( + fiatQuery.data?.get(poolInfo?.baseToken.address) ?? 0, + ).times(myBaseTVL), + ) + : 0} + + + + + ~ + {myQuoteTVL + ? formatShortNumber( + new BigNumber( + fiatQuery.data?.get(poolInfo?.quoteToken.address) ?? 0, + ).times(myQuoteTVL), + ) + : 0} + + + {formatTokenAmountNumber({ + input: myQuoteTVL, + decimals: poolInfo?.quoteToken.decimals, + })} + + + + + )} + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/distributed.svg b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/distributed.svg new file mode 100644 index 00000000..cc9887f8 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/distributed.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/incentives.svg b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/incentives.svg new file mode 100644 index 00000000..b573d529 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/incentives.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/index.tsx new file mode 100644 index 00000000..93bb6c94 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/index.tsx @@ -0,0 +1,177 @@ +import { ChainId, PoolApi } from '@dodoex/api'; +import { Box, Button, Skeleton, useTheme } from '@dodoex/components'; +import { useQuery } from '@tanstack/react-query'; +import React, { useRef } from 'react'; +import { FailedList } from '../../../components/List/FailedList'; +import WidgetContainer from '../../../components/WidgetContainer'; +import { useGraphQLRequests } from '../../../hooks/useGraphQLRequests'; +import { GoBack } from '../components/GoBack'; +import { PoolHead } from '../components/PoolHead'; +import { CardContainer } from '../components/widgets'; +import { compositePoolInfo } from '../utils'; +import { Trans } from '@lingui/macro'; +import { useWidgetDevice } from '../../../hooks/style/useWidgetDevice'; +import PoolInfo from './PoolInfo'; +import Dashboard from './Dashboard'; +import AddIncentiveDialog from './AddIncentiveDialog'; + +export interface Ve33IncentiveDetailProps { + id: string; + chainId: ChainId; + onClickGoBack: () => void; +} + +export default function Ve33IncentiveDetail({ + id, + chainId, + onClickGoBack, +}: Ve33IncentiveDetailProps) { + const graphQLRequests = useGraphQLRequests(); + const theme = useTheme(); + const { isMobile } = useWidgetDevice(); + const [showAddDialog, setShowAddDialog] = React.useState(false); + + const scrollParentRef = useRef(null); + + const query = graphQLRequests.getQuery(PoolApi.graphql.fetchVe33Pool, { + where: { + pool: id, + }, + }); + const fetchResult = useQuery({ + ...query, + enabled: !!id && !!chainId, + }); + + const poolInfo = fetchResult.data?.ve33_getPool + ? compositePoolInfo(fetchResult.data.ve33_getPool, chainId) + : null; + + return ( + + + + {fetchResult.error ? ( + + ) : fetchResult.isLoading || !poolInfo ? ( + <> + + + + ) : ( + <> + + + + + + + + + + setShowAddDialog(false)} + /> + + )} + + {isMobile && ( + + + + )} + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/star.svg b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/star.svg new file mode 100644 index 00000000..a40348fd --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/star.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/votes.svg b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/votes.svg new file mode 100644 index 00000000..16c50e32 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveDetail/votes.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveList/CardList.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveList/CardList.tsx new file mode 100644 index 00000000..cea2105a --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveList/CardList.tsx @@ -0,0 +1,106 @@ +import { Box, Button, LoadingSkeleton, useTheme } from '@dodoex/components'; +import { t } from '@lingui/macro'; +import { formatApy, formatReadableNumber } from '../../../utils'; +import { Ve33PoolInfoI } from '../types'; +import PoolTokenInfo from '../components/PoolTokenInfo'; +import React from 'react'; + +export interface CardListProps { + poolList: Ve33PoolInfoI[]; + onAdd: (pool: Ve33PoolInfoI) => void; +} + +export const CardList = ({ poolList, ...props }: CardListProps) => { + return ( + <> + {poolList.map((item) => { + return ; + })} + + ); +}; + +export function CardItem({ + item, + onAdd, +}: { + item?: Ve33PoolInfoI; + onAdd?: (pool: Ve33PoolInfoI) => void; +}) { + const theme = useTheme(); + const aprText = item?.apr ? formatApy(item.apr.fees) : undefined; + + return ( + + + + + + + {aprText} + + {t`APR`} + + + + + + + ${formatReadableNumber({ input: item?.tvl })} + + {t`TVL`} + + + + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveList/TableList.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveList/TableList.tsx new file mode 100644 index 00000000..e03c0255 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveList/TableList.tsx @@ -0,0 +1,108 @@ +import { ChainId } from '@dodoex/api'; +import { Box, Button, useTheme } from '@dodoex/components'; +import { t, Trans } from '@lingui/macro'; +import { formatApy, formatShortNumber } from '../../../utils'; +import LiquidityTable from '../../PoolWidget/PoolList/components/LiquidityTable'; +import { Ve33PoolInfoI } from '../types'; +import PoolTokenInfo from '../components/PoolTokenInfo'; + +export interface TableListProps { + chainId: ChainId; + poolList: Ve33PoolInfoI[]; + hasMore?: boolean; + loadMore?: () => void; + loadMoreLoading?: boolean; + onAdd: (pool: Ve33PoolInfoI) => void; +} + +export const TableList = ({ + chainId, + poolList, + hasMore, + loadMore, + loadMoreLoading, + onAdd, +}: TableListProps) => { + const theme = useTheme(); + return ( + + + + + Pair + + + APR + + + TVL + + + + + + {poolList?.map((item) => { + if (!item) { + return null; + } + + const aprText = item.apr ? formatApy(item.apr.fees) : undefined; + + const hoverBg = theme.palette.background.tag; + + return ( + + + + + + + {aprText} + + + + + {`$${formatShortNumber(item.totalValueLockedUSD)}`} + + + + + + + ); + })} + + + ); +}; diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveList/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveList/index.tsx new file mode 100644 index 00000000..959e85b6 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33IncentiveList/index.tsx @@ -0,0 +1,238 @@ +import React from 'react'; +import { Box, useMediaDevices, useTheme } from '@dodoex/components'; +import WidgetContainer from '../../../components/WidgetContainer'; +import { t } from '@lingui/macro'; +import TokenSelect from '../../../components/TokenSelect'; +import { TokenInfo } from '../../../hooks/Token'; +import { useGraphQLRequests } from '../../../hooks/useGraphQLRequests'; +import { PoolApi } from '@dodoex/api'; +import { useInfiniteQuery } from '@tanstack/react-query'; +import { Ve33PoolInfoI } from '../types'; +import { compositePoolInfo } from '../utils'; +import { useUserOptions } from '../../../components/UserOptionsProvider'; +import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; +import { TableList } from './TableList'; +import { CardStatus } from '../../../components/CardWidgets'; +import InfiniteScroll from 'react-infinite-scroller'; +import { debounce } from 'lodash'; +import { CardItem, CardList } from './CardList'; +import { DataCardGroup } from '../../../components/DataCard/DataCardGroup'; + +export default function Ve33IncentiveList({ + aToken: aTokenProps, + bToken: bTokenProps, + onGoIncentiveDetail, +}: { + aToken?: TokenInfo | null; + bToken?: TokenInfo | null; + onGoIncentiveDetail: (pool: Ve33PoolInfoI) => void; +}) { + const scrollParentRef = React.useRef(null); + const theme = useTheme(); + const { isMobile } = useMediaDevices(); + const { onlyChainId } = useUserOptions(); + const { chainId: connectedChainId } = useWalletInfo(); + const chainId = onlyChainId ?? connectedChainId; + const [aToken, setAToken] = React.useState( + aTokenProps || null, + ); + const [bToken, setBToken] = React.useState( + bTokenProps || null, + ); + + React.useEffect(() => { + if ( + aTokenProps && + (aTokenProps.address !== aToken?.address || + aTokenProps.chainId !== aToken?.chainId) + ) { + setAToken(aTokenProps); + } + }, [aTokenProps]); + React.useEffect(() => { + if ( + bTokenProps && + (bTokenProps.address !== bToken?.address || + bTokenProps.chainId !== bToken?.chainId) + ) { + setAToken(bTokenProps); + } + }, [bTokenProps]); + + const graphQLRequests = useGraphQLRequests(); + const query = graphQLRequests.getInfiniteQuery( + PoolApi.graphql.fetchVe33PoolList, + 'page', + { + where: { + size: isMobile ? 4 : 8, + }, + }, + ); + const fetchResult = useInfiniteQuery({ + ...query, + initialPageParam: 1, + getNextPageParam: (item) => { + return null; + // const { currentPage, totalCount, pageSize } = item.ve33_getPoolList ?? {}; + // if (!currentPage || !totalCount || !pageSize) { + // return null; + // } + // let totalPage = Math.floor(totalCount / pageSize); + // if (totalCount % pageSize) { + // totalPage += 1; + // } + // if (currentPage >= totalPage) { + // return null; + // } + // return currentPage + 1; + }, + }); + + const hasMore = fetchResult.hasNextPage; + const poolList = React.useMemo(() => { + const list = [] as Ve33PoolInfoI[]; + fetchResult.data?.pages.forEach((page) => { + page.ve33_getPoolList?.forEach((pool) => { + if (pool) { + list.push(compositePoolInfo(pool, chainId)); + } + }); + }); + return list; + }, [chainId, fetchResult.data?.pages]); + + return ( + + svg': { + flexShrink: 0, + ...(isMobile && { + width: 24, + height: 24, + }), + }, + }} + > + + + + {t`Warning: The incentivize feature is mainly used by protocols. Please make sure you understand how it works before using it as any transaction is final and cannot be reverted.`} + + + {t`Select pool pair you want to incentive`} + + + + + + + + {t`Available Pools`} + + {isMobile ? ( + { + if (fetchResult.hasNextPage && !fetchResult.isFetching) { + fetchResult.fetchNextPage(); + } + }, 500)} + useWindow={false} + getScrollParent={() => scrollParentRef.current || null} + loader={} + > + + } + > + + + + + ) : ( + + { + if (fetchResult.hasNextPage && !fetchResult.isFetching) { + fetchResult.fetchNextPage(); + } + }} + onAdd={onGoIncentiveDetail} + /> + + )} + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/CardList.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/CardList.tsx index 41cbf510..4ab05af0 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/CardList.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/CardList.tsx @@ -2,14 +2,12 @@ import { Box, Button, ButtonBase, - Checkbox, LoadingSkeleton, Skeleton, Tooltip, useTheme, } from '@dodoex/components'; -import LiquidityTable from '../../PoolWidget/PoolList/components/LiquidityTable'; -import { t, Trans } from '@lingui/macro'; +import { t } from '@lingui/macro'; import TokenLogo from '../../../components/TokenLogo'; import { formatTokenAmountNumber } from '../../../utils'; import { Lock, useFetchUserLocks } from './hooks/useFetchUserLocks'; @@ -72,7 +70,7 @@ export const CardList = ({ ); }; -function CardItem({ +export function CardItem({ inSelected, selectedId, setSelectedId, diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/LockManageDialog.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/LockManageDialog.tsx index 36aa90fc..84cc6059 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/LockManageDialog.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/LockManageDialog.tsx @@ -299,7 +299,7 @@ function IncreaseLock({ lock, refetch }: { lock: Lock; refetch: () => void }) { if (!token) return; increaesMutation.mutate({ tokenId: lock.tokenId, - amount: toWei(amount, token?.decimals).toS, + amount: toWei(amount, token?.decimals).toString(), }); }} >{t`Increase`} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useFetchUserLocks.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useFetchUserLocks.ts index fe973bf2..17410b22 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useFetchUserLocks.ts +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/hooks/useFetchUserLocks.ts @@ -19,50 +19,17 @@ export function useFetchUserLocks({ const grahqlRequest = useGraphQLRequests(); const fetchUserLocks = useQuery({ enabled: !!account, - // ...grahqlRequest.getQuery(PoolApi.graphql.fetchVe33UserLocks, { - // where: { - // user: account?.toLocaleLowerCase() ?? '', - // }, - // }), - queryKey: ['test1'], - queryFn: async () => { - return { - ve33_getUserLock: [ - { - id: '3', - value: '1000000000000000000', - votingPower: '0', - lockedEnd: '1756339200', - isPermanent: false, - isVoted: false, - }, - { - id: '4', - value: '1000000000000000000', - votingPower: '0', - lockedEnd: '1759968000', - isPermanent: false, - isVoted: false, - }, - ], - }; - }, + ...grahqlRequest.getQuery(PoolApi.graphql.fetchVe33UserLocks, { + where: { + user: account?.toLocaleLowerCase() ?? '', + }, + }), }); - // const fetchTokenAddress = useQuery( - // getFetchVE33VotingEscrowTokenQueryOptions(chainId), - // ); + const fetchTokenAddress = useQuery( + getFetchVE33VotingEscrowTokenQueryOptions(chainId), + ); const tokenQuery = useQuery({ - // ...tokenApi.getFetchTokenQuery(chainId, fetchTokenAddress.data, account), - queryKey: ['test2'], - queryFn: () => { - return { - address: '0x42EDf453F8483c7168c158d28D610A58308517D1', - symbol: 'MOMO', - decimals: 18, - name: 'MOMO', - chainId, - }; - }, + ...tokenApi.getFetchTokenQuery(chainId, fetchTokenAddress.data, account), }); const userLocks = React.useMemo(() => { diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/index.tsx index 31fc34a8..ead753e9 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/index.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockList/index.tsx @@ -13,7 +13,8 @@ import { useUserOptions } from '../../../components/UserOptionsProvider'; import { Lock, useFetchUserLocks } from './hooks/useFetchUserLocks'; import LockManageDialog from './LockManageDialog'; import ClaimLockDialog from './ClaimLockDialog'; -import { CardList } from './CardList'; +import { CardItem, CardList } from './CardList'; +import { CardStatus } from '../../../components/CardWidgets'; export default function Ve33LockList() { const [selectedId, setSelectedId] = React.useState([]); @@ -53,6 +54,8 @@ export default function Ve33LockList() { > @@ -64,58 +67,77 @@ export default function Ve33LockList() { width: 40, }} > - {fetchUserLocks.userLocks?.length} + {fetchUserLocks.userLocks?.length ?? 0} ) - - {!!selectedLen && ( - - {selectedLen} Lock selected - - )} - - + {!!fetchUserLocks.userLocks?.length && ( + + {!!selectedLen && ( + + {selectedLen} Lock selected + + )} + + + )} - {isMobile ? ( - setManageLock(lock)} - onClaim={(lock) => setShowClaimLock(lock)} - /> - ) : ( - setManageLock(lock)} - onClaim={(lock) => setShowClaimLock(lock)} - /> - )} + setManageLock(lock)} + onClaim={(lock) => setShowClaimLock(lock)} + /> + ) : undefined + } + > + {isMobile ? ( + setManageLock(lock)} + onClaim={(lock) => setShowClaimLock(lock)} + /> + ) : ( + setManageLock(lock)} + onClaim={(lock) => setShowClaimLock(lock)} + /> + )} + setOpenMerge(false)} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/utils.ts b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/utils.ts index 01ae8dee..388d1d52 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/utils.ts +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33LockOperate/utils.ts @@ -3,6 +3,7 @@ import dayjs from 'dayjs'; export const iMAXTIME = 1 * 365 * 86400; export const WEEK = 604800; +const ONE_HOUR = 3600; export function getLockDurationRemainder(nowTime: number) { const remainder = nowTime % WEEK; @@ -69,3 +70,9 @@ export function getUnlockTimeText(unlockTime: number) { } return `${formatText} UTC+${utcText}`; } + +export function getEpochVoteEnd(nowTimeProps: number) { + const nowTime = Math.floor(nowTimeProps / 1000); + const remainder = nowTime % WEEK; + return nowTime - remainder + WEEK - ONE_HOUR; +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx index e4bda98c..14a80c4a 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolDetail/index.tsx @@ -10,7 +10,6 @@ import { PoolHead } from '../components/PoolHead'; import { CardContainer } from '../components/widgets'; import { compositePoolInfo } from '../utils'; import { Trans } from '@lingui/macro'; -import { formatApy, formatReadableNumber } from '../../../utils'; import PoolInfo from './PoolInfo'; import MyAssets from './MyAssets'; import Ve33PoolOperateDialog from '../Ve33PoolOperate'; @@ -64,7 +63,9 @@ export const Ve33PoolDetail = ({ justifyContent: 'flex-start', gap: 28, flex: 1, - pb: isMobile ? 88 : undefined, + pt: 20, + px: isMobile ? 20 : 40, + pb: isMobile ? 88 : 20, }} ref={scrollParentRef} > diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/CardList.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/CardList.tsx new file mode 100644 index 00000000..e84757af --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/CardList.tsx @@ -0,0 +1,300 @@ +import { + Box, + BoxProps, + Button, + LoadingSkeleton, + useTheme, +} from '@dodoex/components'; +import { t } from '@lingui/macro'; +import { + formatApy, + formatShortNumber, + formatTokenAmountNumber, +} from '../../../utils'; +import React from 'react'; +import { ChainId } from '@dodoex/api'; +import { OperateTypeE, Ve33PoolInfoI, Ve33PoolOperateProps } from '../types'; +import PoolTokenInfo from '../components/PoolTokenInfo'; +import TokenItem from '../../../components/Token/TokenItem'; + +export interface CardListProps { + chainId: ChainId; + poolList: Ve33PoolInfoI[]; + usdValueChecked: boolean; + setOperatePool: (operate: Ve33PoolOperateProps | null) => void; + onClickPoolListRow: (id: string, chainId: ChainId) => void; +} + +export const CardList = ({ poolList, ...props }: CardListProps) => { + return ( + + {poolList?.map((item) => { + return ; + })} + + ); +}; + +export function CardItem({ + item, + chainId, + usdValueChecked, + setOperatePool, + onClickPoolListRow, +}: Partial< + Omit & { + item?: Ve33PoolInfoI; + } +>) { + const theme = useTheme(); + const { baseToken, quoteToken } = item ?? {}; + const aprText = item?.apr ? formatApy(item.apr.fees) : undefined; + + return ( + onClickPoolListRow(item.id, item?.chainId) + : undefined + } + > + + + {usdValueChecked ? ( + + + {aprText} + + + + {`$${formatShortNumber(item?.totalValueLockedUSD)}`} + + + {`$${formatShortNumber(item?.volumeUSD)}`} + + + + {`$${formatShortNumber(item?.feesUSD)}`} + + + ) : ( + <> + + {aprText} + + + + + + + + + + + + + + + + + )} + + + + + + ); +} + +function InfoItem({ + label, + valueColor, + children, + loading, + usdValueChecked, + sx, +}: React.PropsWithChildren<{ + label: React.ReactNode; + valueColor?: string; + loading?: boolean; + usdValueChecked?: boolean; + sx?: BoxProps['sx']; +}>) { + return ( + + + {children} + + + {label} + + + ); +} + +function Split() { + return ( + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx index 90125309..8a02ad78 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/TableList.tsx @@ -15,6 +15,7 @@ import { formatApy, formatShortNumber } from '../../../utils'; import LiquidityTable from '../../PoolWidget/PoolList/components/LiquidityTable'; import { PoolTypeTag } from '../components/PoolTypeTag'; import { OperateTypeE, Ve33PoolInfoI, Ve33PoolOperateProps } from '../types'; +import PoolTokenInfo from '../components/PoolTokenInfo'; export interface TableListProps { chainId: ChainId; @@ -94,6 +95,7 @@ export const TableList = ({ } const hoverBg = theme.palette.background.tag; + return ( - - - - - {`${baseToken.symbol}/${quoteToken.symbol}`} - - - - - Pool Address - - - - - - Gauge Address - - - - - } - placement="top" - container={document.querySelector( - `.${WIDGET_CLASS_NAME}`, - )} - onlyHover - sx={{ - maxWidth: 300, - }} - > - - - - - -
-
- - - + { setOperatePool({ + chainId, poolInfo: item, operateType: OperateTypeE.Add, }); diff --git a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx index 2153c729..9089d509 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/Ve33PoolList/index.tsx @@ -11,15 +11,20 @@ import { Ve33PoolInfoI, Ve33PoolOperateProps } from '../types'; import { compositePoolInfo } from '../utils'; import { TableList } from './TableList'; import PoolOperateDialog from '../Ve33PoolOperate'; +import { useUserOptions } from '../../../components/UserOptionsProvider'; +import InfiniteScroll from 'react-infinite-scroller'; +import { debounce } from 'lodash'; +import { CardItem, CardList } from './CardList'; +import { DataCardGroup } from '../../../components/DataCard/DataCardGroup'; export interface Ve33PoolListProps { onClickPoolListRow: (id: string, chainId: ChainId) => void; } export const Ve33PoolList = ({ onClickPoolListRow }: Ve33PoolListProps) => { - // TODO: need replace - const chainId = ChainId.MORPH_HOLESKY_TESTNET; - const { account } = useWalletInfo(); + const { onlyChainId } = useUserOptions(); + const { chainId: connectedChainId, account } = useWalletInfo(); + const chainId = onlyChainId ?? connectedChainId; const { isMobile } = useWidgetDevice(); const graphQLRequests = useGraphQLRequests(); const theme = useTheme(); @@ -27,57 +32,7 @@ export const Ve33PoolList = ({ onClickPoolListRow }: Ve33PoolListProps) => { const [filterToken, setFilterToken] = useState(''); const [usdValueChecked, setUsdValueChecked] = useState(false); const [operatePool, setOperatePool] = useState( - // null, - { - poolInfo: { - id: '0x2f63a87bf42dc4c021af8be085cece16269e3b67', - title: 'V3.CL=200', - version: 'v3', - gaugeAddress: '0x640be2253a65740152dc933fab757606e9c7bd52', - feeRate: '3000', - apr: { - fees: '0', - incentives: '0', - }, - tvl: '0', - totalValueLockedUSD: '0', - totalValueLockedToken0: '0', - totalValueLockedToken1: '0', - volumeUSD: '0', - volumeToken0: '0', - volumeToken1: '0', - feesUSD: '0', - feesToken0: '0', - feesToken1: '0', - token0Address: '0x42edf453f8483c7168c158d28d610a58308517d1', - token0Name: 'Momodrome', - token0Symbol: 'MOMO', - token0Decimals: 18, - token1Address: '0x5300000000000000000000000000000000000011', - token1Name: 'Wrapped Ether', - token1Symbol: 'WETH', - token1Decimals: 18, - chainId: 2810, - stable: true, - fee: '3000', - type: 2, - baseToken: { - chainId: 2810, - address: '0x42edf453f8483c7168c158d28d610a58308517d1', - name: 'Momodrome', - decimals: 18, - symbol: 'MOMO', - }, - quoteToken: { - chainId: 2810, - address: '0x5300000000000000000000000000000000000011', - name: 'Wrapped Ether', - decimals: 18, - symbol: 'WETH', - }, - }, - operateType: 1, - }, + null, ); const scrollParentRef = useRef(null); @@ -131,6 +86,8 @@ export const Ve33PoolList = ({ onClickPoolListRow }: Ve33PoolListProps) => { display: 'flex', gap: 20, flex: 1, + px: isMobile ? 20 : 40, + py: 20, }} ref={scrollParentRef} > @@ -195,29 +152,60 @@ export const Ve33PoolList = ({ onClickPoolListRow }: Ve33PoolListProps) => { /> - - { - if (fetchResult.hasNextPage && !fetchResult.isFetching) { - fetchResult.fetchNextPage(); - } - }} - onClickPoolListRow={onClickPoolListRow} - /> - - + {isMobile ? ( + { + if (fetchResult.hasNextPage && !fetchResult.isFetching) { + fetchResult.fetchNextPage(); + } + }, 500)} + useWindow={false} + getScrollParent={() => scrollParentRef.current || null} + loader={} + > + + } + > + + + + + ) : ( + + { + if (fetchResult.hasNextPage && !fetchResult.isFetching) { + fetchResult.fetchNextPage(); + } + }} + onClickPoolListRow={onClickPoolListRow} + /> + + )} {operatePool && ( void; + selectedPoolList: string[]; + onAddIncentives: (item: VotePoolInfoI) => void; +} + +export const CardList = ({ poolList, ...props }: CardListProps) => { + return ( + <> + {poolList.map((item) => { + return ; + })} + + ); +}; + +export function CardItem({ + item, + onSelectPool, + selectedPoolList, + onAddIncentives, +}: Partial & { + item?: VotePoolInfoI; +}) { + const theme = useTheme(); + const checked = !!item && selectedPoolList?.includes(item?.id); + + return ( + onSelectPool?.(item) : undefined} + > + {!!item && ( + + + + )} + + + + + {t`APR`} + + + + ${formatShortNumber(item?.tvl)} + + + + + + + + + + + + + ); +} + +function ItemInfo({ + label, + loading, + children, +}: React.PropsWithChildren<{ + loading?: boolean; + label: React.ReactNode; +}>) { + return ( + + {label} + + {children} + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx new file mode 100644 index 00000000..72c3f16b --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/SetVotePowerDialog.tsx @@ -0,0 +1,436 @@ +import { t } from '@lingui/macro'; +import { + Box, + Button, + LoadingSkeleton, + useMediaDevices, + useTheme, +} from '@dodoex/components'; +import Dialog from '../../../components/Dialog'; +import { VotePoolInfoI } from '../types'; +import PoolTokenInfo from '../components/PoolTokenInfo'; +import { + MyVoteWidgets, + SelectLock, + TotalVoteWidgets, + VAPRWidgets, +} from './widgets'; +import { Lock } from '../Ve33LockList/hooks/useFetchUserLocks'; +import React from 'react'; +import { formatShortNumber, formatTokenAmountNumber } from '../../../utils'; +import BigNumber from 'bignumber.js'; +import NeedConnectButton from '../../../components/ConnectWallet/NeedConnectButton'; +import { useVoteVe33 } from './hooks/useVoteVe33'; +import { useQueryClient } from '@tanstack/react-query'; +import { useGraphQLRequests } from '../../../hooks/useGraphQLRequests'; +import { PoolApi } from '@dodoex/api'; + +export default function SetVotePowerDialog({ + chainId, + account, + open, + onClose, + data, + lock, + setLock, + refetch, +}: { + chainId: number | undefined; + account: string | undefined; + open: boolean; + onClose: () => void; + data: Array; + lock: Lock | null; + setLock: (lock: Lock | null) => void; + refetch?: () => void; +}) { + const theme = useTheme(); + const { isMobile } = useMediaDevices(); + const [partObject, setPartObject] = React.useState<{ + [key: string]: number; + }>({}); + const fixPart = (lastId: string) => { + setPartObject((prev) => { + let part = 0; + const result = { ...prev }; + Object.values(result).forEach((p) => { + part += p; + }); + if (part <= 100) { + return prev; + } + let lastValue = result[lastId] ?? 0; + lastValue = lastValue - (part - 100); + result[lastId] = lastValue > 0 ? lastValue : 0; + return result; + }); + }; + const totalPart = Object.values(partObject).reduce((prev, current) => { + return prev + current; + }, 0); + const disabled = totalPart !== 100 || !lock; + + const grahqlRequest = useGraphQLRequests(); + const queryClient = useQueryClient(); + const voteMutation = useVoteVe33({ + refetch: () => { + setPartObject({}); + queryClient.invalidateQueries({ + queryKey: grahqlRequest.getQuery(PoolApi.graphql.fetchVe33UserLocks, { + where: { + user: account?.toLowerCase() ?? '', + }, + }).queryKey, + }); + refetch?.(); + onClose(); + }, + }); + + return ( + + + {isMobile ? ( + + ) : ( + + )} + + + + {disabled ? ( + + {t`Allocate 100% of your votes above.`} + {t`Distribute equally`} + + ) : ( + + )} + + voteMutation.mutate({ + tokenId: lock?.tokenId!, + poolIds: data.map((item) => item.id), + weights: data.map((item) => partObject[item.id]), + }) + } + sx={{ + px: 16, + height: 60, + borderRadius: 16, + }} + > + Vote + + + + + + ); +} + +function TableList({ + data, + lock, + partObject, + setPartObject, + fixPart, +}: { + data: Array; + lock: Lock | null; + partObject: { + [key: string]: number; + }; + setPartObject: React.Dispatch< + React.SetStateAction<{ + [key: string]: number; + }> + >; + fixPart: (id: string) => void; +}) { + const theme = useTheme(); + + return ( + + + + {t`Pair`} + {t`VAPR`} + {t`Total Vote`} + {t`Est. Rewards`} + {t`My Vote`} + + + + {data.map((item) => { + if (!item) return null; + const { id } = item; + return ( + + + + + + + + + + + ~$0 + + { + setPartObject((prev) => { + const result = { ...prev }; + if (v === undefined) { + delete result[id]; + } else { + result[id] = v; + } + return result; + }); + }} + onBlur={() => fixPart(id)} + veNFTAmount={formatTokenAmountNumber({ + input: new BigNumber(lock?.votingPower ?? 0) + .times(partObject[id] ?? 0) + .div(100), + decimals: lock?.token?.decimals, + })} + veNFTSymbol={`ve${lock?.token?.symbol ?? ''}`} + /> + + + ); + })} + + + ); +} + +function CardList({ + data, + lock, + partObject, + setPartObject, + fixPart, +}: { + data: Array; + lock: Lock | null; + partObject: { + [key: string]: number; + }; + setPartObject: React.Dispatch< + React.SetStateAction<{ + [key: string]: number; + }> + >; + fixPart: (id: string) => void; +}) { + const theme = useTheme(); + + return ( + + {data.map((item) => { + if (!item) return null; + const { id } = item; + return ( + + + + + + {t`APR`} + + + + + + + ~${formatShortNumber(0)} + + { + setPartObject((prev) => { + const result = { ...prev }; + if (v === undefined) { + delete result[id]; + } else { + result[id] = v; + } + return result; + }); + }} + onBlur={() => fixPart(id)} + veNFTAmount={formatTokenAmountNumber({ + input: new BigNumber(lock?.votingPower ?? 0) + .times(partObject[id] ?? 0) + .div(100), + decimals: lock?.token?.decimals, + })} + veNFTSymbol={`ve${lock?.token?.symbol ?? ''}`} + /> + + + ); + })} + + ); +} +function ItemInfo({ + label, + loading, + children, +}: React.PropsWithChildren<{ + loading?: boolean; + label: React.ReactNode; +}>) { + return ( + + {label} + + {children} + + + ); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/TableList.tsx b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/TableList.tsx index 548a1f8d..569aa7d7 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/TableList.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/TableList.tsx @@ -1,19 +1,16 @@ import { ChainId } from '@dodoex/api'; -import { - Box, - Checkbox, - HoverOpacity, - Tooltip, - useTheme, -} from '@dodoex/components'; -import { t, Trans } from '@lingui/macro'; -import { AddressWithLinkAndCopy } from '../../../components/AddressWithLinkAndCopy'; -import { TokenLogoPair } from '../../../components/TokenLogoPair'; -import { WIDGET_CLASS_NAME } from '../../../components/Widget'; -import { formatApy, formatShortNumber } from '../../../utils'; +import { Box, Checkbox } from '@dodoex/components'; +import { Trans } from '@lingui/macro'; +import { formatShortNumber } from '../../../utils'; import LiquidityTable from '../../PoolWidget/PoolList/components/LiquidityTable'; -import { PoolTypeTag } from '../components/PoolTypeTag'; import { VotePoolInfoI } from '../types'; +import { + FeesWidgets, + IncentivesWidgets, + TotalVoteWidgets, + VAPRWidgets, +} from './widgets'; +import PoolTokenInfo from '../components/PoolTokenInfo'; export interface TableListProps { chainId: ChainId; @@ -21,8 +18,9 @@ export interface TableListProps { hasMore?: boolean; loadMore?: () => void; loadMoreLoading?: boolean; - onSelectPool: (id: string, selected: boolean) => void; - selectedPoolList: { [key: string]: boolean }; + onSelectPool: (item: VotePoolInfoI) => void; + selectedPoolList: string[]; + onAddIncentives: (item: VotePoolInfoI) => void; } export const TableList = ({ @@ -33,13 +31,16 @@ export const TableList = ({ loadMoreLoading, onSelectPool, selectedPoolList, + onAddIncentives, }: TableListProps) => { - const theme = useTheme(); return ( @@ -75,256 +76,27 @@ export const TableList = ({ if (!item) { return null; } - const { baseToken, quoteToken } = item; - const aprText = item.apr ? formatApy(item.apr.fees) : undefined; + return ( - - - - - {`${baseToken.symbol}/${quoteToken.symbol}`} - - - - - Pool Address - - - - - - Gauge Address - - - - - } - placement="top" - container={document.querySelector( - `.${WIDGET_CLASS_NAME}`, - )} - onlyHover - sx={{ - maxWidth: 300, - }} - > - - - - - - - - - - + - - {aprText} - + {' '} + ${formatShortNumber(item.tvl)} - - - {formatShortNumber(item.totalValueLockedToken0)} -   - - {baseToken.symbol} - - - - {formatShortNumber(item.totalValueLockedToken1)}  - - {quoteToken.symbol} - - - + - - - {formatShortNumber(item.feesToken0)} -   - - {baseToken.symbol} - - - - {formatShortNumber(item.feesToken1)}  - - {quoteToken.symbol} - - - - - - - Incentives - + - - Votes - + ) => { - const { checked } = evt.target; - onSelectPool(item.id, checked); + checked={!!selectedPoolList.includes(item.id)} + onChange={() => { + onSelectPool(item); }} /> diff --git a/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/hooks/useVoteVe33.ts b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/hooks/useVoteVe33.ts new file mode 100644 index 00000000..478817d2 --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/hooks/useVoteVe33.ts @@ -0,0 +1,69 @@ +import { useMutation } from '@tanstack/react-query'; +import { useSubmission } from '../../../../hooks/Submission'; +import { t } from '@lingui/macro'; +import { OpCode } from '../../../../hooks/Submission/spec'; +import { useMessageState } from '../../../../hooks/useMessageState'; +import { + encodeVE33VoterVote, + getVE33VoterContractAddressByChainId, +} from '@dodoex/dodo-contract-request'; +import { + ExecutionResult, + MetadataFlag, +} from '../../../../hooks/Submission/types'; +import { useFetchBlockNumber } from '../../../../hooks/contract'; +import { useWalletInfo } from '../../../../hooks/ConnectWallet/useWalletInfo'; + +export function useVoteVe33({ + refetch, +}: { + refetch?: () => Promise | void; +}) { + const submission = useSubmission(); + const { updateBlockNumber } = useFetchBlockNumber(); + const { account, chainId } = useWalletInfo(); + return useMutation({ + mutationFn: async ({ + tokenId, + poolIds, + weights, + }: { + tokenId: number; + poolIds: string[]; + weights: number[]; + }) => { + const to = getVE33VoterContractAddressByChainId(chainId); + try { + if (!account || !to || !tokenId) { + throw new Error('params is not valid.'); + } + const data = encodeVE33VoterVote(tokenId, poolIds, weights); + const result = await submission.execute( + t`Vote`, + { + opcode: OpCode.TX, + data, + to, + value: '0x0', + }, + { + metadata: { + [MetadataFlag.voteVe33]: true, + }, + }, + ); + + if (result !== ExecutionResult.Success) { + return; + } + } catch (e) { + useMessageState.getState().toast({ + message: `${t`Failed to Vote:`}${e ? `: ${e}` : ''}`, + type: 'error', + }); + } + await updateBlockNumber(); + await refetch?.(); + }, + }); +} diff --git a/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/index.tsx b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/index.tsx index d2dee7b0..9ae392d4 100644 --- a/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/index.tsx +++ b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/index.tsx @@ -1,15 +1,17 @@ -import { ChainId, PoolApi } from '@dodoex/api'; +import { PoolApi } from '@dodoex/api'; import { Box, Button, + ButtonBase, + LoadingSkeleton, SearchInput, TabPanel, Tabs, TabsGroup, useTheme, } from '@dodoex/components'; -import { useInfiniteQuery } from '@tanstack/react-query'; -import { useCallback, useMemo, useRef, useState } from 'react'; +import { useInfiniteQuery, useQuery } from '@tanstack/react-query'; +import React, { useCallback, useMemo, useRef, useState } from 'react'; import { CardStatus } from '../../../components/CardWidgets'; import WidgetContainer from '../../../components/WidgetContainer'; import { useWalletInfo } from '../../../hooks/ConnectWallet/useWalletInfo'; @@ -23,43 +25,85 @@ import { } from '../hooks/useVotePoolFilters'; import { VotePoolInfoI } from '../types'; import { compositeVotePoolInfo } from '../utils'; +import { useUserOptions } from '../../../components/UserOptionsProvider'; +import { Lock } from '../Ve33LockList/hooks/useFetchUserLocks'; +import { t, Trans } from '@lingui/macro'; +import SetVotePowerDialog from './SetVotePowerDialog'; +import { SelectLock } from './widgets'; +import InfiniteScroll from 'react-infinite-scroller'; +import { debounce } from 'lodash'; +import { CardItem, CardList } from './CardList'; +import { DataCardGroup } from '../../../components/DataCard/DataCardGroup'; +import { ArrowRight, Plus } from '@dodoex/icons'; +import NeedConnectButton from '../../../components/ConnectWallet/NeedConnectButton'; +import { formatReadableTimeDuration } from '../../../utils/time'; +import { getEpochVoteEnd } from '../Ve33LockOperate/utils'; -export const VotePoolList = () => { - // TODO: need replace - const chainId = ChainId.MORPH_HOLESKY_TESTNET; - const { account } = useWalletInfo(); +export const VotePoolList = ({ + onAddIncentives, + onGoLockPage, +}: { + onAddIncentives: (pool: VotePoolInfoI) => void; + onGoLockPage: () => void; +}) => { + const { onlyChainId } = useUserOptions(); + const { chainId: connectedChainId, account } = useWalletInfo(); + const chainId = onlyChainId ?? connectedChainId; const { isMobile } = useWidgetDevice(); const graphQLRequests = useGraphQLRequests(); const theme = useTheme(); const [filterToken, setFilterToken] = useState(''); - const [selectedPoolList, setSelectedPoolList] = useState<{ - [key: string]: boolean; - }>({}); + const [selectedPoolList, setSelectedPoolList] = useState< + Array + >([]); + const selectedPoolListLen = selectedPoolList.length; + const selectedPoolIdList = selectedPoolList.map((item) => item.id); const { voteTab, tabs, handleChangeVoteTab } = useVoteTabs(); const { votePoolFilter, filters, handleChangeVotePoolFilter } = useVotePoolFilters(); + const [foldFooter, setFoldFooter] = React.useState(true); const scrollParentRef = useRef(null); + const notUnFoldFooter = React.useRef(true); const onSelectPool = useCallback( - (id: string, selected: boolean) => { - setSelectedPoolList({ ...selectedPoolList, [id]: selected }); + (item: VotePoolInfoI) => { + if (!item) return; + setSelectedPoolList((prev) => { + const result = [...prev]; + const index = result.findIndex((p) => p.id === item.id); + if (index > -1) { + result.splice(index, 1); + } else { + result.push(item); + } + if (result.length) { + if (notUnFoldFooter.current) { + setFoldFooter(false); + } + } else { + setFoldFooter(true); + } + return result; + }); }, - [selectedPoolList, setSelectedPoolList], + [selectedPoolList, setSelectedPoolList, notUnFoldFooter.current], ); - const query = graphQLRequests.getInfiniteQuery( - PoolApi.graphql.fetchVotePoolList, - 'page', - { - where: { - token_starts_with: filterToken, - size: isMobile ? 4 : 8, - user: voteTab === VoteTab.MyVoted ? account : null, - }, - }, - ); + const [selectedLock, setSelectedLock] = React.useState(null); + const [showVoteDialog, setShowVoteDialog] = React.useState(false); + const fetchResult = useInfiniteQuery({ - ...query, + ...graphQLRequests.getInfiniteQuery( + PoolApi.graphql.fetchVotePoolList, + 'page', + { + where: { + token_starts_with: filterToken, + size: isMobile ? 4 : 8, + user: voteTab === VoteTab.MyVoted ? account : null, + }, + }, + ), initialPageParam: 1, getNextPageParam: (item) => { return null; @@ -77,6 +121,14 @@ export const VotePoolList = () => { // return currentPage + 1; }, }); + const fetchUserResult = useQuery({ + ...graphQLRequests.getQuery(PoolApi.graphql.fetchVotePoolList, { + where: { + token_starts_with: filterToken, + size: 1000, + }, + }), + }); const hasMore = fetchResult.hasNextPage; const poolList = useMemo(() => { @@ -98,211 +150,559 @@ export const VotePoolList = () => { return list; }, [chainId, fetchResult.data?.pages, votePoolFilter]); + const userPoolList = useMemo(() => { + const list = [] as VotePoolInfoI[]; + fetchUserResult.data?.ve33_getVotePoolList?.forEach((pool) => { + if (pool) { + const votePool = compositeVotePoolInfo(pool, chainId); + if ( + votePoolFilter === VotePoolFilters.All || + //@ts-ignore + votePool.type === votePoolFilter + ) { + list.push(compositeVotePoolInfo(pool, chainId)); + } + } + }); + return list; + }, [chainId, fetchUserResult.data, votePoolFilter]); + + const voteRefetch = () => { + fetchResult.refetch(); + fetchUserResult.refetch(); + setSelectedPoolList([]); + setSelectedLock(null); + }; + + const hasSearch = !!filterToken || votePoolFilter !== VotePoolFilters.All; + + const nowTime = Date.now(); + const epochVoteEnd = getEpochVoteEnd(nowTime); + return ( - { - handleChangeVoteTab(value as VoteTab); - }} + + + + {t`Vote`} + + {t`Voters earn a share of transaction fees and incentives for helping govern how emissions are distributed.`} + + - - - + { - setFilterToken(e.target.value); + width: 56, + height: 56, + lineHeight: '56px', + textAlign: 'center', + borderRadius: 20, + backgroundColor: theme.palette.background.paper, + flexShrink: 0, }} - /> + > + + + + +
+ {t`Current voting round ends in`} + + {formatReadableTimeDuration({ + start: nowTime, + end: epochVoteEnd * 1000, + })} + +
- - {filters.map(({ key, value }, index) => { - return ( - + + + + + +
+ {t`My voted / My total veMOMO`} + + 10/100 + handleChangeVotePoolFilter(key)} - key={key} + onClick={() => onGoLockPage?.()} > - {value} - - ); - })} + + + +
- + + + { + handleChangeVoteTab(value as VoteTab); + }} sx={{ display: 'flex', flexDirection: 'column', - overflow: 'hidden', - padding: '0 20px', + borderRadius: 16, flex: 1, }} + className={'gradient-card-border'} placeholder={undefined} onPointerEnterCapture={undefined} onPointerLeaveCapture={undefined} > - { - if (fetchResult.hasNextPage && !fetchResult.isFetching) { - fetchResult.fetchNextPage(); - } + - - - - - { - if (fetchResult.hasNextPage && !fetchResult.isFetching) { - fetchResult.fetchNextPage(); - } + > + + + { + setFilterToken(e.target.value); + }} + /> + + {isMobile && ( + + )} + + {filters.map(({ key, value }, index) => { + return ( + handleChangeVotePoolFilter(key)} + key={key} + > + {value} + + ); + })} + + + - - - -
+ placeholder={undefined} + onPointerEnterCapture={undefined} + onPointerLeaveCapture={undefined} + > + {isMobile ? ( + { + if (fetchResult.hasNextPage && !fetchResult.isFetching) { + fetchResult.fetchNextPage(); + } + }, 500)} + useWindow={false} + getScrollParent={() => scrollParentRef.current || null} + loader={} + > + + } + > + + + + + ) : ( + + { + if (fetchResult.hasNextPage && !fetchResult.isFetching) { + fetchResult.fetchNextPage(); + } + }} + onSelectPool={onSelectPool} + selectedPoolList={selectedPoolIdList} + onAddIncentives={onAddIncentives} + /> + + )} + + + {isMobile ? ( + + } + > + + + + ) : ( + + + + )} + + +
- Select A Lock - - - + {isMobile && ( + { + setFoldFooter((prev) => !prev); + notUnFoldFooter.current = false; + }} + > + {t`Total ${selectedPoolListLen}`} + + + )} + + + {!!selectedPoolListLen && ( + + )} + setShowVoteDialog(true)} + > + {t`Vote`} + {selectedPoolListLen ? `(${selectedPoolListLen})` : ''} + + setShowVoteDialog(false)} + data={selectedPoolList} + lock={selectedLock} + setLock={setSelectedLock} + refetch={voteRefetch} + /> ); }; diff --git a/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/widgets.tsx b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/widgets.tsx new file mode 100644 index 00000000..527ae3fb --- /dev/null +++ b/packages/dodoex-widgets/src/widgets/ve33/VotePoolList/widgets.tsx @@ -0,0 +1,605 @@ +import { + Box, + ButtonBase, + Input, + LoadingSkeleton, + Select, + Tooltip, + useTheme, +} from '@dodoex/components'; +import SimpleItemInfo from '../../../components/SimpleItemInfo'; +import { t } from '@lingui/macro'; +import { + formatApy, + formatReadableNumber, + formatShortNumber, + formatTokenAmountNumber, +} from '../../../utils'; +import { VotePoolInfoI } from '../types'; +import TokenItem from '../../../components/Token/TokenItem'; +import { + Lock, + useFetchUserLocks, +} from '../Ve33LockList/hooks/useFetchUserLocks'; +import React from 'react'; +import { ArrowRight, Plus } from '@dodoex/icons'; +import TokenLogo from '../../../components/TokenLogo'; +import { getUnlockTimeTextShort } from '../Ve33LockOperate/utils'; + +export function VAPRWidgets({ item }: { item: VotePoolInfoI }) { + const theme = useTheme(); + const aprText = item.apr ? formatApy(item.apr.fees) : undefined; + + return ( + + {`$${formatReadableNumber({ input: '10000' })}`} + {`${formatApy('0.0207816')}`} + {`${formatApy('1.1026')}`} + + } + > + + {aprText} + + + ); +} + +export function IncentivesWidgets({ + item, + showLogo, + singleLine, + onAddIncentives, +}: { + item: VotePoolInfoI; + showLogo?: boolean; + singleLine?: boolean; + onAddIncentives: ((item: VotePoolInfoI) => void) | undefined; +}) { + const incentivesLen = item.incentives?.length; + const theme = useTheme(); + return ( + + {incentivesLen ? ( + + {item.incentives.map((incentive) => { + if (!incentive) return null; + return ( + + ); + })} + + } + > + + {formatTokenAmountNumber({ + input: item.incentives[0]?.amount, + })} + + {item.incentives[0]?.token} + + {incentivesLen > 1 && ( + + {t`and`} + {` ${incentivesLen} `} + {t`Tokens`} + + )} + + + ) : ( + onAddIncentives?.(item)} + > + + + + {t`Add`} + + )} +
+ ); +} + +export function FeesWidgets({ + item, + showLogo, +}: { + item: VotePoolInfoI; + showLogo?: boolean; +}) { + const theme = useTheme(); + return ( + + + + {showLogo && ( + + )} + {formatShortNumber(item.feesToken0)} + {!showLogo && ( + + {item.baseToken.symbol} + + )} + + + + + {showLogo && ( + + )} + {formatShortNumber(item.feesToken1)} + {!showLogo && ( + + {item.quoteToken.symbol} + + )} + + + + ); +} + +export function TotalVoteWidgets({ + item, + showLogo, + singleLine, +}: { + item: VotePoolInfoI; + showLogo?: boolean; + singleLine?: boolean; +}) { + return ( + + {item.votes?.map((vote) => { + if (!vote) return null; + return ( + <> + {`~${vote.weight}`} + + {showLogo && } + {`${vote.token}`} + {!showLogo && ( + + veMOMO + + )} + + + ); + })} + + ); +} + +export function MyVoteWidgets({ + label, + value, + onChange, + onBlur, + loading, + veNFTAmount, + veNFTSymbol, +}: { + label?: string; + value: number | undefined; + onChange: (v: number | undefined) => void; + onBlur?: () => void; + loading?: boolean; + veNFTAmount: number | string; + veNFTSymbol: string; +}) { + const theme = useTheme(); + const parts = [25, 50, 75, 100]; + + return ( + + + + {parts.map((part) => { + return ( + { + onChange(part); + onBlur?.(); + }} + > + {part}% + + ); + })} + + %} + suffixGap={12} + placeholder="0" + value={value ?? ''} + type="number" + min="0" + max="100" + onChange={(evt) => { + const v = Number(evt.target.value); + if (!v || v < 0 || v > 100) return; + onChange(Math.floor(v)); + }} + sx={{ + borderRadius: theme.spacing(0, 0, 8, 8), + }} + onBlur={onBlur} + /> + + + {label} + {`${veNFTAmount} ${veNFTSymbol}`} + +
+ ); +} + +export function SelectLock({ + fullWidth, + chainId, + account, + selectedLock, + setSelectedLock, +}: { + fullWidth?: boolean; + chainId: number | undefined; + account: string | undefined; + selectedLock: Lock | null; + setSelectedLock: (lock: Lock | null) => void; +}) { + const theme = useTheme(); + const fetchUserLocks = useFetchUserLocks({ + account, + chainId, + }); + + return ( + + {t`selected Lock to vote`} +