@dodoex/wallet-web3-react 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/babel.config.js +9 -9
  2. package/dist/index.cjs +1 -1
  3. package/dist/index.js +1 -1
  4. package/lingui.config.ts +13 -13
  5. package/package.json +90 -77
  6. package/rollup.config.mjs +100 -100
  7. package/src/ClientProvider.tsx +17 -15
  8. package/src/LangProvider.tsx +36 -34
  9. package/src/WalletConnect/AccountPage.tsx +496 -494
  10. package/src/WalletConnect/ActivityList.tsx +606 -604
  11. package/src/WalletConnect/ConnectAlchemy/index.tsx +248 -246
  12. package/src/WalletConnect/ConnectAlchemy/useConnectAlchemy.ts +105 -105
  13. package/src/WalletConnect/ConnectDialog.tsx +35 -33
  14. package/src/WalletConnect/ConnectLedger/ErrorDialog.tsx +61 -61
  15. package/src/WalletConnect/ConnectLedger/LockedDialog.tsx +54 -54
  16. package/src/WalletConnect/ConnectLedger/helper.ts +14 -14
  17. package/src/WalletConnect/ConnectLedger/index.tsx +2 -0
  18. package/src/WalletConnect/ConnectPage.tsx +508 -506
  19. package/src/WalletConnect/HasBalanceTokenList.tsx +202 -200
  20. package/src/WalletConnect/ReceiveTokenPage.tsx +145 -143
  21. package/src/WalletConnect/SendTokenPage.tsx +251 -249
  22. package/src/WalletConnect/WalletDialog.tsx +80 -78
  23. package/src/WalletConnectProvider.tsx +57 -55
  24. package/src/components/AddressWithLinkAndCopy.tsx +202 -200
  25. package/src/components/Dialog.tsx +158 -156
  26. package/src/components/TokenLogo.tsx +167 -165
  27. package/src/components/WalletTag.tsx +117 -115
  28. package/src/constants/localstorage.ts +24 -22
  29. package/src/hooks/useConnectWallet.ts +150 -148
  30. package/src/hooks/useFetchFiatPrice.ts +53 -51
  31. package/src/hooks/useFetchTokensBalance.ts +53 -51
  32. package/src/hooks/useHasBalanceTokenList.ts +95 -93
  33. package/src/hooks/useTransactionList.ts +89 -87
  34. package/src/index.tsx +7 -7
  35. package/src/locales/en.po +51 -51
  36. package/src/locales/zh.po +51 -51
  37. package/src/utils/formatter.ts +102 -102
  38. package/src/utils/time.ts +21 -21
  39. package/src/utils/utils.ts +8 -8
  40. package/tsconfig.json +23 -23
@@ -1,51 +1,53 @@
1
- import { ChainId, platformIdMap, RestApiRequests } from '@dodoex/api';
2
- import { useQuery } from '@tanstack/react-query';
3
- import { TokenInfo } from '../components/TokenLogo';
4
- import { setTokenFiatPriceList } from '../constants/localstorage';
5
- import { useWalletConnectContext } from '../WalletConnectProvider';
6
-
7
- export function getFiatPriceQueryKeys(tokens?: TokenInfo[]) {
8
- return ['fetch', 'fetchFiatPrice', tokens];
9
- }
10
-
11
- export function useFetchFiatPrice(tokens: TokenInfo[]) {
12
- const { encryptFiatPriceToken, restApiRequests: restApiRequestsProps } =
13
- useWalletConnectContext();
14
- return useQuery({
15
- enabled: !!tokens.length,
16
- queryKey: getFiatPriceQueryKeys(tokens),
17
- queryFn: async () => {
18
- const token = encryptFiatPriceToken?.() || '';
19
- const restApiRequests = restApiRequestsProps ?? new RestApiRequests();
20
- const path = `/frontend-v2-price-api/current/batch`;
21
- const { result } = await restApiRequests.postJson(
22
- path,
23
- {
24
- networks: tokens.map(
25
- (token) => platformIdMap[token.chainId as ChainId],
26
- ),
27
- addresses: tokens.map((token) => token.address),
28
- symbols: tokens.map((token) => token.symbol),
29
- isCache: true,
30
- },
31
- undefined,
32
- {
33
- headers: {
34
- 'pass-key': token,
35
- },
36
- },
37
- );
38
- const resultMap = new Map<string, number>();
39
- if (result.data) {
40
- result.data.forEach((item: { price: string; address: string }) => {
41
- const tokenUSD = Number(item.price);
42
- if (!Number.isNaN(tokenUSD) && tokenUSD > 0) {
43
- resultMap.set(item.address, tokenUSD);
44
- }
45
- });
46
- setTokenFiatPriceList(Object.fromEntries(resultMap.entries()));
47
- }
48
- return resultMap;
49
- },
50
- });
51
- }
1
+ import { ChainId, platformIdMap, RestApiRequests } from '@dodoex/api';
2
+ 'use client';
3
+
4
+ import { useQuery } from '@tanstack/react-query';
5
+ import { TokenInfo } from '../components/TokenLogo';
6
+ import { setTokenFiatPriceList } from '../constants/localstorage';
7
+ import { useWalletConnectContext } from '../WalletConnectProvider';
8
+
9
+ export function getFiatPriceQueryKeys(tokens?: TokenInfo[]) {
10
+ return ['fetch', 'fetchFiatPrice', tokens];
11
+ }
12
+
13
+ export function useFetchFiatPrice(tokens: TokenInfo[]) {
14
+ const { encryptFiatPriceToken, restApiRequests: restApiRequestsProps } =
15
+ useWalletConnectContext();
16
+ return useQuery({
17
+ enabled: !!tokens.length,
18
+ queryKey: getFiatPriceQueryKeys(tokens),
19
+ queryFn: async () => {
20
+ const token = encryptFiatPriceToken?.() || '';
21
+ const restApiRequests = restApiRequestsProps ?? new RestApiRequests();
22
+ const path = `/frontend-v2-price-api/current/batch`;
23
+ const { result } = await restApiRequests.postJson(
24
+ path,
25
+ {
26
+ networks: tokens.map(
27
+ (token) => platformIdMap[token.chainId as ChainId],
28
+ ),
29
+ addresses: tokens.map((token) => token.address),
30
+ symbols: tokens.map((token) => token.symbol),
31
+ isCache: true,
32
+ },
33
+ undefined,
34
+ {
35
+ headers: {
36
+ 'pass-key': token,
37
+ },
38
+ },
39
+ );
40
+ const resultMap = new Map<string, number>();
41
+ if (result.data) {
42
+ result.data.forEach((item: { price: string; address: string }) => {
43
+ const tokenUSD = Number(item.price);
44
+ if (!Number.isNaN(tokenUSD) && tokenUSD > 0) {
45
+ resultMap.set(item.address, tokenUSD);
46
+ }
47
+ });
48
+ setTokenFiatPriceList(Object.fromEntries(resultMap.entries()));
49
+ }
50
+ return resultMap;
51
+ },
52
+ });
53
+ }
@@ -1,51 +1,53 @@
1
- import { getFetchERC20BalanceOfQueryOptions } from '@dodoex/dodo-contract-request';
2
- import { useQueries } from '@tanstack/react-query';
3
- import { TokenInfo } from '../components/TokenLogo';
4
-
5
- type TokenInfoMap = Map<string, bigint>;
6
-
7
- export default function useFetchTokensBalance({
8
- account,
9
- tokenList,
10
- blockNumber,
11
- skip,
12
- }: {
13
- account: string | undefined;
14
- tokenList?: TokenInfo[];
15
- blockNumber?: number;
16
- skip?: boolean;
17
- }) {
18
- const tokensQueries = useQueries({
19
- queries: (tokenList ?? []).map((token) => {
20
- const query = getFetchERC20BalanceOfQueryOptions(
21
- skip ? undefined : token.chainId,
22
- token?.address,
23
- account,
24
- );
25
-
26
- return {
27
- queryKey: blockNumber
28
- ? [...query.queryKey, blockNumber]
29
- : query.queryKey,
30
- enabled: query.enabled && !skip,
31
- queryFn: query.queryFn,
32
- };
33
- }),
34
- combine: (results) => {
35
- const tokenInfoMap = new Map() as TokenInfoMap;
36
- results.forEach((result, i) => {
37
- const token = tokenList?.[i];
38
- if (result.data && token) {
39
- tokenInfoMap.set(`${token.chainId}-${token.address}`, result.data);
40
- }
41
- });
42
- return {
43
- tokenInfoMap,
44
- data: results.map((result) => result.data),
45
- isPending: results.some((result) => result.isPending),
46
- isLoading: results.some((result) => result.isLoading),
47
- };
48
- },
49
- });
50
- return tokensQueries;
51
- }
1
+ 'use client';
2
+
3
+ import { getFetchERC20BalanceOfQueryOptions } from '@dodoex/dodo-contract-request';
4
+ import { useQueries } from '@tanstack/react-query';
5
+ import { TokenInfo } from '../components/TokenLogo';
6
+
7
+ type TokenInfoMap = Map<string, bigint>;
8
+
9
+ export default function useFetchTokensBalance({
10
+ account,
11
+ tokenList,
12
+ blockNumber,
13
+ skip,
14
+ }: {
15
+ account: string | undefined;
16
+ tokenList?: TokenInfo[];
17
+ blockNumber?: number;
18
+ skip?: boolean;
19
+ }) {
20
+ const tokensQueries = useQueries({
21
+ queries: (tokenList ?? []).map((token) => {
22
+ const query = getFetchERC20BalanceOfQueryOptions(
23
+ skip ? undefined : token.chainId,
24
+ token?.address,
25
+ account,
26
+ );
27
+
28
+ return {
29
+ queryKey: blockNumber
30
+ ? [...query.queryKey, blockNumber]
31
+ : query.queryKey,
32
+ enabled: query.enabled && !skip,
33
+ queryFn: query.queryFn,
34
+ };
35
+ }),
36
+ combine: (results) => {
37
+ const tokenInfoMap = new Map() as TokenInfoMap;
38
+ results.forEach((result, i) => {
39
+ const token = tokenList?.[i];
40
+ if (result.data && token) {
41
+ tokenInfoMap.set(`${token.chainId}-${token.address}`, result.data);
42
+ }
43
+ });
44
+ return {
45
+ tokenInfoMap,
46
+ data: results.map((result) => result.data),
47
+ isPending: results.some((result) => result.isPending),
48
+ isLoading: results.some((result) => result.isLoading),
49
+ };
50
+ },
51
+ });
52
+ return tokensQueries;
53
+ }
@@ -1,93 +1,95 @@
1
- import BigNumber from 'bignumber.js';
2
- import React from 'react';
3
- import { useWalletConnectContext } from '../WalletConnectProvider';
4
- import useFetchTokensBalance from './useFetchTokensBalance';
5
- import { useFetchFiatPrice } from './useFetchFiatPrice';
6
- import { getTokenFiatPriceList } from '../constants/localstorage';
7
- import { TokenInfo } from '../components/TokenLogo';
8
-
9
- interface TokenResult extends TokenInfo {
10
- balance: BigNumber;
11
- }
12
- export function useHasBalanceTokenList({
13
- account,
14
- visible,
15
- }: {
16
- account: string | undefined;
17
- visible: boolean;
18
- }) {
19
- const { tokenList } = useWalletConnectContext();
20
- const fetchTokenQuery = useFetchTokensBalance({
21
- account,
22
- tokenList,
23
- skip: !visible,
24
- });
25
- const hasBalanceTokenList = React.useMemo(() => {
26
- let newHasBalanceTokenList = [] as TokenResult[];
27
- fetchTokenQuery.tokenInfoMap.forEach((value, key) => {
28
- if (value > 0) {
29
- const token = tokenList.find(
30
- (token) => `${token.chainId}-${token.address}` === key,
31
- );
32
- if (token?.decimals !== undefined) {
33
- newHasBalanceTokenList.push({
34
- ...token,
35
- balance: new BigNumber(value.toString()).div(10 ** token.decimals),
36
- });
37
- }
38
- }
39
- });
40
- newHasBalanceTokenList = newHasBalanceTokenList.sort((a, b) =>
41
- a.balance.gt(b.balance) ? -1 : 1,
42
- );
43
- return newHasBalanceTokenList;
44
- }, [fetchTokenQuery.tokenInfoMap]);
45
- const fiatPriceQuery = useFetchFiatPrice(hasBalanceTokenList);
46
-
47
- const tokenLoading = fetchTokenQuery.isLoading || fetchTokenQuery.isPending;
48
-
49
- const hasBalanceList = React.useMemo(() => {
50
- return hasBalanceTokenList
51
- .map((token) => {
52
- const fiatPriceBalance = fiatPriceQuery.data?.get(token.address)
53
- ? token.balance.times(fiatPriceQuery.data?.get(token.address) ?? 0)
54
- : undefined;
55
- return {
56
- ...token,
57
- fiatPriceBalance,
58
- };
59
- })
60
- .sort((a, b) => {
61
- if (a.fiatPriceBalance && b.fiatPriceBalance) {
62
- return a.fiatPriceBalance.gt(b.fiatPriceBalance) ? -1 : 1;
63
- }
64
- const cacheFiatPriceObject = getTokenFiatPriceList();
65
- const aFiatPrice = cacheFiatPriceObject[a.address];
66
- const bFiatPrice = cacheFiatPriceObject[b.address];
67
- if (!aFiatPrice || !bFiatPrice) return a.balance.gt(b.balance) ? -1 : 1;
68
- return a.balance.times(aFiatPrice).gt(b.balance.times(bFiatPrice))
69
- ? -1
70
- : 1;
71
- });
72
- }, [hasBalanceTokenList, fiatPriceQuery.data]);
73
-
74
- const allFiatPriceBalance = React.useMemo(() => {
75
- let result = new BigNumber(0);
76
- hasBalanceList.forEach((token) => {
77
- if (token.fiatPriceBalance) {
78
- result = result.plus(token.fiatPriceBalance);
79
- }
80
- });
81
- return result;
82
- }, [hasBalanceList]);
83
-
84
- return {
85
- tokenLoading: !!tokenLoading && !hasBalanceList.length,
86
- hasBalanceList,
87
- fiatPriceQuery,
88
- allFiatPriceBalance,
89
- allFiatPriceBalanceLoading:
90
- (fiatPriceQuery.isLoading && !!hasBalanceTokenList.length) ||
91
- tokenLoading,
92
- };
93
- }
1
+ 'use client';
2
+
3
+ import BigNumber from 'bignumber.js';
4
+ import React from 'react';
5
+ import { useWalletConnectContext } from '../WalletConnectProvider';
6
+ import useFetchTokensBalance from './useFetchTokensBalance';
7
+ import { useFetchFiatPrice } from './useFetchFiatPrice';
8
+ import { getTokenFiatPriceList } from '../constants/localstorage';
9
+ import { TokenInfo } from '../components/TokenLogo';
10
+
11
+ interface TokenResult extends TokenInfo {
12
+ balance: BigNumber;
13
+ }
14
+ export function useHasBalanceTokenList({
15
+ account,
16
+ visible,
17
+ }: {
18
+ account: string | undefined;
19
+ visible: boolean;
20
+ }) {
21
+ const { tokenList } = useWalletConnectContext();
22
+ const fetchTokenQuery = useFetchTokensBalance({
23
+ account,
24
+ tokenList,
25
+ skip: !visible,
26
+ });
27
+ const hasBalanceTokenList = React.useMemo(() => {
28
+ let newHasBalanceTokenList = [] as TokenResult[];
29
+ fetchTokenQuery.tokenInfoMap.forEach((value, key) => {
30
+ if (value > 0) {
31
+ const token = tokenList.find(
32
+ (token) => `${token.chainId}-${token.address}` === key,
33
+ );
34
+ if (token?.decimals !== undefined) {
35
+ newHasBalanceTokenList.push({
36
+ ...token,
37
+ balance: new BigNumber(value.toString()).div(10 ** token.decimals),
38
+ });
39
+ }
40
+ }
41
+ });
42
+ newHasBalanceTokenList = newHasBalanceTokenList.sort((a, b) =>
43
+ a.balance.gt(b.balance) ? -1 : 1,
44
+ );
45
+ return newHasBalanceTokenList;
46
+ }, [fetchTokenQuery.tokenInfoMap]);
47
+ const fiatPriceQuery = useFetchFiatPrice(hasBalanceTokenList);
48
+
49
+ const tokenLoading = fetchTokenQuery.isLoading || fetchTokenQuery.isPending;
50
+
51
+ const hasBalanceList = React.useMemo(() => {
52
+ return hasBalanceTokenList
53
+ .map((token) => {
54
+ const fiatPriceBalance = fiatPriceQuery.data?.get(token.address)
55
+ ? token.balance.times(fiatPriceQuery.data?.get(token.address) ?? 0)
56
+ : undefined;
57
+ return {
58
+ ...token,
59
+ fiatPriceBalance,
60
+ };
61
+ })
62
+ .sort((a, b) => {
63
+ if (a.fiatPriceBalance && b.fiatPriceBalance) {
64
+ return a.fiatPriceBalance.gt(b.fiatPriceBalance) ? -1 : 1;
65
+ }
66
+ const cacheFiatPriceObject = getTokenFiatPriceList();
67
+ const aFiatPrice = cacheFiatPriceObject[a.address];
68
+ const bFiatPrice = cacheFiatPriceObject[b.address];
69
+ if (!aFiatPrice || !bFiatPrice) return a.balance.gt(b.balance) ? -1 : 1;
70
+ return a.balance.times(aFiatPrice).gt(b.balance.times(bFiatPrice))
71
+ ? -1
72
+ : 1;
73
+ });
74
+ }, [hasBalanceTokenList, fiatPriceQuery.data]);
75
+
76
+ const allFiatPriceBalance = React.useMemo(() => {
77
+ let result = new BigNumber(0);
78
+ hasBalanceList.forEach((token) => {
79
+ if (token.fiatPriceBalance) {
80
+ result = result.plus(token.fiatPriceBalance);
81
+ }
82
+ });
83
+ return result;
84
+ }, [hasBalanceList]);
85
+
86
+ return {
87
+ tokenLoading: !!tokenLoading && !hasBalanceList.length,
88
+ hasBalanceList,
89
+ fiatPriceQuery,
90
+ allFiatPriceBalance,
91
+ allFiatPriceBalanceLoading:
92
+ (fiatPriceQuery.isLoading && !!hasBalanceTokenList.length) ||
93
+ tokenLoading,
94
+ };
95
+ }
@@ -1,87 +1,89 @@
1
- import { GraphQLRequests, SystemApi } from '@dodoex/api';
2
- import { useInfiniteQuery } from '@tanstack/react-query';
3
- import React from 'react';
4
- import { useWalletConnectContext } from '../WalletConnectProvider';
5
-
6
- export enum StateText {
7
- Running = 'pending',
8
- Success = 'success',
9
- Failed = 'failed',
10
- Warning = 'reset',
11
- }
12
-
13
- export type NoticeTransactionList = NonNullable<
14
- NonNullable<
15
- ReturnType<
16
- NonNullable<
17
- typeof SystemApi.graphql.fetchNoticeCenterTransactionList['__apiType']
18
- >
19
- >['notice_center_transactionList']
20
- >['list']
21
- >;
22
-
23
- export function useTransactionList({
24
- account,
25
- chainId,
26
- }: {
27
- account: string | undefined;
28
- chainId?: number;
29
- }) {
30
- const { graphQLRequests } = useWalletConnectContext();
31
- const infiniteQueryOptions = (
32
- graphQLRequests as GraphQLRequests
33
- )?.getInfiniteQuery(
34
- SystemApi.graphql.fetchNoticeCenterTransactionList,
35
- 'page',
36
- {
37
- where: {
38
- limit: 10,
39
- user: account,
40
- chainId,
41
- refreshNow: true,
42
- },
43
- },
44
- ) ?? {
45
- queryKey: [1],
46
- queryFn: () => {
47
- // empty
48
- },
49
- };
50
- const fetchQuery = useInfiniteQuery({
51
- ...infiniteQueryOptions,
52
- enabled: !!account && !!graphQLRequests,
53
- initialPageParam: 1,
54
- getNextPageParam: (item) => {
55
- const { page, limit, count } = item.notice_center_transactionList ?? {};
56
- if (!page || !limit || !count) return null;
57
- let totalPage = Math.floor(count / limit);
58
- if (count % limit) {
59
- totalPage += 1;
60
- }
61
- if (page >= totalPage) return null;
62
- return page + 1;
63
- },
64
- });
65
-
66
- const [list, pendingList] = React.useMemo(() => {
67
- const list = [] as NoticeTransactionList;
68
-
69
- fetchQuery.data?.pages?.forEach((page) => {
70
- page.notice_center_transactionList?.list?.forEach((item) => {
71
- if (!item?.extend?.safeTxHash) {
72
- list.push(item);
73
- }
74
- });
75
- });
76
- const pendingList =
77
- list.filter((item) => item?.extend.status === StateText.Running) ?? [];
78
-
79
- return [list, pendingList];
80
- }, [fetchQuery.data]);
81
-
82
- return {
83
- ...fetchQuery,
84
- list,
85
- pendingList,
86
- };
87
- }
1
+ 'use client';
2
+
3
+ import { GraphQLRequests, SystemApi } from '@dodoex/api';
4
+ import { useInfiniteQuery } from '@tanstack/react-query';
5
+ import React from 'react';
6
+ import { useWalletConnectContext } from '../WalletConnectProvider';
7
+
8
+ export enum StateText {
9
+ Running = 'pending',
10
+ Success = 'success',
11
+ Failed = 'failed',
12
+ Warning = 'reset',
13
+ }
14
+
15
+ export type NoticeTransactionList = NonNullable<
16
+ NonNullable<
17
+ ReturnType<
18
+ NonNullable<
19
+ typeof SystemApi.graphql.fetchNoticeCenterTransactionList['__apiType']
20
+ >
21
+ >['notice_center_transactionList']
22
+ >['list']
23
+ >;
24
+
25
+ export function useTransactionList({
26
+ account,
27
+ chainId,
28
+ }: {
29
+ account: string | undefined;
30
+ chainId?: number;
31
+ }) {
32
+ const { graphQLRequests } = useWalletConnectContext();
33
+ const infiniteQueryOptions = (
34
+ graphQLRequests as GraphQLRequests
35
+ )?.getInfiniteQuery(
36
+ SystemApi.graphql.fetchNoticeCenterTransactionList,
37
+ 'page',
38
+ {
39
+ where: {
40
+ limit: 10,
41
+ user: account,
42
+ chainId,
43
+ refreshNow: true,
44
+ },
45
+ },
46
+ ) ?? {
47
+ queryKey: [1],
48
+ queryFn: () => {
49
+ // empty
50
+ },
51
+ };
52
+ const fetchQuery = useInfiniteQuery({
53
+ ...infiniteQueryOptions,
54
+ enabled: !!account && !!graphQLRequests,
55
+ initialPageParam: 1,
56
+ getNextPageParam: (item) => {
57
+ const { page, limit, count } = item.notice_center_transactionList ?? {};
58
+ if (!page || !limit || !count) return null;
59
+ let totalPage = Math.floor(count / limit);
60
+ if (count % limit) {
61
+ totalPage += 1;
62
+ }
63
+ if (page >= totalPage) return null;
64
+ return page + 1;
65
+ },
66
+ });
67
+
68
+ const [list, pendingList] = React.useMemo(() => {
69
+ const list = [] as NoticeTransactionList;
70
+
71
+ fetchQuery.data?.pages?.forEach((page) => {
72
+ page.notice_center_transactionList?.list?.forEach((item) => {
73
+ if (!item?.extend?.safeTxHash) {
74
+ list.push(item);
75
+ }
76
+ });
77
+ });
78
+ const pendingList =
79
+ list.filter((item) => item?.extend.status === StateText.Running) ?? [];
80
+
81
+ return [list, pendingList];
82
+ }, [fetchQuery.data]);
83
+
84
+ return {
85
+ ...fetchQuery,
86
+ list,
87
+ pendingList,
88
+ };
89
+ }
package/src/index.tsx CHANGED
@@ -1,7 +1,7 @@
1
- export { default as WalletDialog } from './WalletConnect/WalletDialog';
2
- export { WalletConnectProvider } from './WalletConnectProvider';
3
- export { default as ClientProvider } from './ClientProvider';
4
- export { default as LangProvider } from './LangProvider';
5
- export { useWalletListByNetwork } from './hooks/useConnectWallet';
6
- export { default as ConnectDialog } from './WalletConnect/ConnectDialog';
7
- export { default as ConnectPage } from './WalletConnect/ConnectPage';
1
+ export { default as WalletDialog } from './WalletConnect/WalletDialog';
2
+ export { WalletConnectProvider } from './WalletConnectProvider';
3
+ export { default as ClientProvider } from './ClientProvider';
4
+ export { default as LangProvider } from './LangProvider';
5
+ export { useWalletListByNetwork } from './hooks/useConnectWallet';
6
+ export { default as ConnectDialog } from './WalletConnect/ConnectDialog';
7
+ export { default as ConnectPage } from './WalletConnect/ConnectPage';