@lifi/widget 3.9.0 → 3.10.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.
- package/CHANGELOG.md +12 -0
- package/dist/esm/components/ChainSelect/useChainSelect.js +9 -3
- package/dist/esm/components/ChainSelect/useChainSelect.js.map +1 -1
- package/dist/esm/components/Header/CloseDrawerButton.js +4 -3
- package/dist/esm/components/Header/CloseDrawerButton.js.map +1 -1
- package/dist/esm/components/Header/WalletHeader.js +14 -10
- package/dist/esm/components/Header/WalletHeader.js.map +1 -1
- package/dist/esm/components/Step/StepTimer.js +13 -6
- package/dist/esm/components/Step/StepTimer.js.map +1 -1
- package/dist/esm/config/version.d.ts +1 -1
- package/dist/esm/config/version.js +1 -1
- package/dist/esm/config/version.js.map +1 -1
- package/dist/esm/i18n/bn.json +3 -4
- package/dist/esm/i18n/de.json +3 -4
- package/dist/esm/i18n/es.json +3 -4
- package/dist/esm/i18n/fr.json +3 -4
- package/dist/esm/i18n/hi.json +3 -4
- package/dist/esm/i18n/id.json +3 -4
- package/dist/esm/i18n/it.json +3 -4
- package/dist/esm/i18n/ja.json +3 -4
- package/dist/esm/i18n/ko.json +3 -4
- package/dist/esm/i18n/pt.json +3 -4
- package/dist/esm/i18n/th.json +3 -4
- package/dist/esm/i18n/tr.json +3 -4
- package/dist/esm/i18n/uk.json +3 -4
- package/dist/esm/i18n/vi.json +3 -4
- package/dist/esm/i18n/zh.json +3 -4
- package/dist/esm/pages/SendToWallet/ConnectedWalletsPage.js +2 -2
- package/dist/esm/pages/SendToWallet/ConnectedWalletsPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/RecentWalletsPage.js +2 -2
- package/dist/esm/pages/SendToWallet/RecentWalletsPage.js.map +1 -1
- package/dist/esm/providers/WalletProvider/WalletProvider.js +8 -2
- package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/useExternalWalletProvider.d.ts +8 -0
- package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js +39 -0
- package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js.map +1 -0
- package/dist/esm/stores/chains/ChainOrderStore.js +26 -5
- package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
- package/dist/esm/types/widget.d.ts +9 -0
- package/package.json +2 -2
- package/src/components/ChainSelect/useChainSelect.ts +9 -4
- package/src/components/Header/CloseDrawerButton.tsx +4 -3
- package/src/components/Header/WalletHeader.tsx +20 -12
- package/src/components/Step/StepTimer.tsx +29 -19
- package/src/config/version.ts +1 -1
- package/src/i18n/bn.json +3 -4
- package/src/i18n/de.json +3 -4
- package/src/i18n/es.json +3 -4
- package/src/i18n/fr.json +3 -4
- package/src/i18n/hi.json +3 -4
- package/src/i18n/id.json +3 -4
- package/src/i18n/it.json +3 -4
- package/src/i18n/ja.json +3 -4
- package/src/i18n/ko.json +3 -4
- package/src/i18n/pt.json +3 -4
- package/src/i18n/th.json +3 -4
- package/src/i18n/tr.json +3 -4
- package/src/i18n/uk.json +3 -4
- package/src/i18n/vi.json +3 -4
- package/src/i18n/zh.json +3 -4
- package/src/pages/SendToWallet/ConnectedWalletsPage.tsx +2 -2
- package/src/pages/SendToWallet/RecentWalletsPage.tsx +2 -2
- package/src/providers/WalletProvider/WalletProvider.tsx +9 -2
- package/src/providers/WalletProvider/useExternalWalletProvider.ts +53 -0
- package/src/stores/chains/ChainOrderStore.tsx +28 -5
- package/src/types/widget.ts +9 -0
- package/dist/esm/providers/WalletProvider/useHasExternalWalletProvider.d.ts +0 -7
- package/dist/esm/providers/WalletProvider/useHasExternalWalletProvider.js +0 -28
- package/dist/esm/providers/WalletProvider/useHasExternalWalletProvider.js.map +0 -1
- package/src/providers/WalletProvider/useHasExternalWalletProvider.ts +0 -36
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
ContentCopyRounded,
|
|
5
5
|
MoreHoriz,
|
|
6
6
|
OpenInNewRounded,
|
|
7
|
-
|
|
7
|
+
Wallet,
|
|
8
8
|
} from '@mui/icons-material'
|
|
9
9
|
import { ListItemAvatar, ListItemText, MenuItem } from '@mui/material'
|
|
10
10
|
import { useId, useState } from 'react'
|
|
@@ -139,7 +139,7 @@ export const ConnectedWalletsPage = () => {
|
|
|
139
139
|
)
|
|
140
140
|
})}
|
|
141
141
|
{!accounts.length && (
|
|
142
|
-
<EmptyListIndicator icon={<
|
|
142
|
+
<EmptyListIndicator icon={<Wallet sx={{ fontSize: 48 }} />}>
|
|
143
143
|
{t('sendToWallet.noConnectedWallets')}
|
|
144
144
|
</EmptyListIndicator>
|
|
145
145
|
)}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ContentCopyRounded,
|
|
3
3
|
DeleteOutline,
|
|
4
|
+
History,
|
|
4
5
|
MoreHoriz,
|
|
5
6
|
OpenInNewRounded,
|
|
6
7
|
TurnedInNot,
|
|
7
|
-
Wallet,
|
|
8
8
|
} from '@mui/icons-material'
|
|
9
9
|
import { ListItemAvatar, ListItemText, MenuItem } from '@mui/material'
|
|
10
10
|
import { useId, useRef, useState } from 'react'
|
|
@@ -175,7 +175,7 @@ export const RecentWalletsPage = () => {
|
|
|
175
175
|
</ListItem>
|
|
176
176
|
))}
|
|
177
177
|
{!recentWallets.length && (
|
|
178
|
-
<EmptyListIndicator icon={<
|
|
178
|
+
<EmptyListIndicator icon={<History sx={{ fontSize: 48 }} />}>
|
|
179
179
|
{t('sendToWallet.noRecentWallets')}
|
|
180
180
|
</EmptyListIndicator>
|
|
181
181
|
)}
|
|
@@ -7,6 +7,7 @@ import { EVMProvider } from './EVMProvider.js'
|
|
|
7
7
|
import { SDKProviders } from './SDKProviders.js'
|
|
8
8
|
import { SVMProvider } from './SVMProvider.js'
|
|
9
9
|
import { UTXOProvider } from './UTXOProvider.js'
|
|
10
|
+
import { useExternalWalletProvider } from './useExternalWalletProvider.js'
|
|
10
11
|
|
|
11
12
|
export const WalletProvider: FC<PropsWithChildren> = ({ children }) => {
|
|
12
13
|
return (
|
|
@@ -24,10 +25,16 @@ export const WalletProvider: FC<PropsWithChildren> = ({ children }) => {
|
|
|
24
25
|
export const WalletMenuProvider: FC<PropsWithChildren> = ({ children }) => {
|
|
25
26
|
const { walletConfig } = useWidgetConfig()
|
|
26
27
|
const { i18n } = useTranslation()
|
|
28
|
+
const { internalChainTypes } = useExternalWalletProvider()
|
|
27
29
|
|
|
28
30
|
const config: WalletManagementConfig = useMemo(() => {
|
|
29
|
-
return {
|
|
30
|
-
|
|
31
|
+
return {
|
|
32
|
+
locale: i18n.resolvedLanguage as never,
|
|
33
|
+
enabledChainTypes: internalChainTypes,
|
|
34
|
+
...walletConfig,
|
|
35
|
+
}
|
|
36
|
+
}, [i18n.resolvedLanguage, internalChainTypes, walletConfig])
|
|
37
|
+
|
|
31
38
|
return (
|
|
32
39
|
<WalletManagementProvider config={config}>
|
|
33
40
|
{children}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ChainType } from '@lifi/sdk'
|
|
2
|
+
import { useContext, useMemo } from 'react'
|
|
3
|
+
import { useWidgetConfig } from '../WidgetProvider/WidgetProvider.js'
|
|
4
|
+
import { EVMExternalContext } from './EVMExternalContext.js'
|
|
5
|
+
import { SVMExternalContext } from './SVMExternalContext.js'
|
|
6
|
+
import { UTXOExternalContext } from './UTXOExternalContext.js'
|
|
7
|
+
|
|
8
|
+
interface ExternalWalletProvider {
|
|
9
|
+
useExternalWalletProvidersOnly: boolean
|
|
10
|
+
externalChainTypes: ChainType[]
|
|
11
|
+
internalChainTypes: ChainType[]
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const internalChainTypes = [ChainType.EVM, ChainType.SVM, ChainType.UTXO]
|
|
15
|
+
|
|
16
|
+
export function useExternalWalletProvider(): ExternalWalletProvider {
|
|
17
|
+
const { walletConfig } = useWidgetConfig()
|
|
18
|
+
const hasExternalEVMContext = useContext(EVMExternalContext)
|
|
19
|
+
const hasExternalSVMContext = useContext(SVMExternalContext)
|
|
20
|
+
const hasExternalUTXOContext = useContext(UTXOExternalContext)
|
|
21
|
+
|
|
22
|
+
const data = useMemo(() => {
|
|
23
|
+
const providers: ChainType[] = []
|
|
24
|
+
if (hasExternalEVMContext) {
|
|
25
|
+
providers.push(ChainType.EVM)
|
|
26
|
+
}
|
|
27
|
+
if (hasExternalSVMContext) {
|
|
28
|
+
providers.push(ChainType.SVM)
|
|
29
|
+
}
|
|
30
|
+
if (hasExternalUTXOContext) {
|
|
31
|
+
providers.push(ChainType.UTXO)
|
|
32
|
+
}
|
|
33
|
+
const hasExternalProvider =
|
|
34
|
+
hasExternalEVMContext || hasExternalSVMContext || hasExternalUTXOContext
|
|
35
|
+
|
|
36
|
+
const useExternalWalletProvidersOnly =
|
|
37
|
+
hasExternalProvider && !walletConfig?.usePartialWalletManagement
|
|
38
|
+
return {
|
|
39
|
+
useExternalWalletProvidersOnly,
|
|
40
|
+
externalChainTypes: providers,
|
|
41
|
+
internalChainTypes: internalChainTypes.filter(
|
|
42
|
+
(chainType) => !providers.includes(chainType)
|
|
43
|
+
),
|
|
44
|
+
}
|
|
45
|
+
}, [
|
|
46
|
+
hasExternalEVMContext,
|
|
47
|
+
hasExternalSVMContext,
|
|
48
|
+
hasExternalUTXOContext,
|
|
49
|
+
walletConfig?.usePartialWalletManagement,
|
|
50
|
+
])
|
|
51
|
+
|
|
52
|
+
return data
|
|
53
|
+
}
|
|
@@ -2,6 +2,7 @@ import { createContext, useContext, useEffect, useRef } from 'react'
|
|
|
2
2
|
import type { StoreApi } from 'zustand'
|
|
3
3
|
import type { UseBoundStoreWithEqualityFn } from 'zustand/traditional'
|
|
4
4
|
import { useChains } from '../../hooks/useChains.js'
|
|
5
|
+
import { useExternalWalletProvider } from '../../providers/WalletProvider/useExternalWalletProvider.js'
|
|
5
6
|
import { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'
|
|
6
7
|
import { isItemAllowed } from '../../utils/item.js'
|
|
7
8
|
import type { FormType } from '../form/types.js'
|
|
@@ -22,10 +23,12 @@ export function ChainOrderStoreProvider({
|
|
|
22
23
|
children,
|
|
23
24
|
...props
|
|
24
25
|
}: PersistStoreProviderProps) {
|
|
25
|
-
const { chains:
|
|
26
|
+
const { chains: chainsConfig } = useWidgetConfig()
|
|
26
27
|
const storeRef = useRef<ChainOrderStore>()
|
|
27
28
|
const { chains } = useChains()
|
|
28
29
|
const { setFieldValue, getFieldValues } = useFieldActions()
|
|
30
|
+
const { externalChainTypes, useExternalWalletProvidersOnly } =
|
|
31
|
+
useExternalWalletProvider()
|
|
29
32
|
|
|
30
33
|
if (!storeRef.current) {
|
|
31
34
|
storeRef.current = createChainOrderStore(props)
|
|
@@ -34,9 +37,22 @@ export function ChainOrderStoreProvider({
|
|
|
34
37
|
useEffect(() => {
|
|
35
38
|
if (chains) {
|
|
36
39
|
;(['from', 'to'] as FormType[]).forEach((key) => {
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
const configChainIds = chainsConfig?.[key]
|
|
41
|
+
const isFromKey = key === 'from'
|
|
42
|
+
|
|
43
|
+
const filteredChains = chains.filter((chain) => {
|
|
44
|
+
const passesChainsConfigFilter = configChainIds
|
|
45
|
+
? isItemAllowed(chain.id, configChainIds)
|
|
46
|
+
: true
|
|
47
|
+
// If the integrator uses external wallet management and has not opted in for partial wallet management,
|
|
48
|
+
// restrict the displayed chains to those compatible with external wallet management.
|
|
49
|
+
// This ensures users only see chains for which they can sign transactions.
|
|
50
|
+
const passesWalletConfigFilter = isFromKey
|
|
51
|
+
? !useExternalWalletProvidersOnly ||
|
|
52
|
+
externalChainTypes.includes(chain.chainType)
|
|
53
|
+
: true
|
|
54
|
+
return passesChainsConfigFilter && passesWalletConfigFilter
|
|
55
|
+
})
|
|
40
56
|
const chainOrder = storeRef.current?.getState().initializeChains(
|
|
41
57
|
filteredChains.map((chain) => chain.id),
|
|
42
58
|
key
|
|
@@ -49,7 +65,14 @@ export function ChainOrderStoreProvider({
|
|
|
49
65
|
}
|
|
50
66
|
})
|
|
51
67
|
}
|
|
52
|
-
}, [
|
|
68
|
+
}, [
|
|
69
|
+
chains,
|
|
70
|
+
chainsConfig,
|
|
71
|
+
externalChainTypes,
|
|
72
|
+
getFieldValues,
|
|
73
|
+
setFieldValue,
|
|
74
|
+
useExternalWalletProvidersOnly,
|
|
75
|
+
])
|
|
53
76
|
|
|
54
77
|
return (
|
|
55
78
|
<ChainOrderStoreContext.Provider value={storeRef.current}>
|
package/src/types/widget.ts
CHANGED
|
@@ -108,6 +108,15 @@ export interface WidgetWalletConfig {
|
|
|
108
108
|
walletConnect?: WalletConnectParameters
|
|
109
109
|
coinbase?: CoinbaseWalletParameters
|
|
110
110
|
metaMask?: MetaMaskParameters
|
|
111
|
+
/**
|
|
112
|
+
* Determines whether the widget should provide partial wallet management functionality.
|
|
113
|
+
*
|
|
114
|
+
* In partial mode, external wallet management will be used for "opt-out" providers,
|
|
115
|
+
* while the internal management is applied for any remaining providers that do not opt out.
|
|
116
|
+
* This allows a flexible balance between the integrator’s custom wallet menu and the widget’s native wallet menu.
|
|
117
|
+
* @default false
|
|
118
|
+
*/
|
|
119
|
+
usePartialWalletManagement?: boolean
|
|
111
120
|
}
|
|
112
121
|
|
|
113
122
|
export interface WidgetSDKConfig
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { ChainType } from '@lifi/sdk';
|
|
2
|
-
import { useContext, useMemo } from 'react';
|
|
3
|
-
import { EVMExternalContext } from './EVMExternalContext.js';
|
|
4
|
-
import { SVMExternalContext } from './SVMExternalContext.js';
|
|
5
|
-
import { UTXOExternalContext } from './UTXOExternalContext.js';
|
|
6
|
-
export function useHasExternalWalletProvider() {
|
|
7
|
-
const hasExternalEVMContext = useContext(EVMExternalContext);
|
|
8
|
-
const hasExternalSVMContext = useContext(SVMExternalContext);
|
|
9
|
-
const hasExternalUTXOContext = useContext(UTXOExternalContext);
|
|
10
|
-
const providers = useMemo(() => {
|
|
11
|
-
const providers = [];
|
|
12
|
-
if (hasExternalEVMContext) {
|
|
13
|
-
providers.push(ChainType.EVM);
|
|
14
|
-
}
|
|
15
|
-
if (hasExternalSVMContext) {
|
|
16
|
-
providers.push(ChainType.SVM);
|
|
17
|
-
}
|
|
18
|
-
if (hasExternalUTXOContext) {
|
|
19
|
-
providers.push(ChainType.UTXO);
|
|
20
|
-
}
|
|
21
|
-
return providers;
|
|
22
|
-
}, [hasExternalEVMContext, hasExternalSVMContext, hasExternalUTXOContext]);
|
|
23
|
-
return {
|
|
24
|
-
hasExternalProvider: hasExternalEVMContext || hasExternalSVMContext || hasExternalUTXOContext,
|
|
25
|
-
availableChainTypes: providers,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=useHasExternalWalletProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useHasExternalWalletProvider.js","sourceRoot":"","sources":["../../../../src/providers/WalletProvider/useHasExternalWalletProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAO9D,MAAM,UAAU,4BAA4B;IAC1C,MAAM,qBAAqB,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAA;IAC5D,MAAM,qBAAqB,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAA;IAC5D,MAAM,sBAAsB,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAA;IAE9D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE;QAC7B,MAAM,SAAS,GAAgB,EAAE,CAAA;QACjC,IAAI,qBAAqB,EAAE,CAAC;YAC1B,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAC/B,CAAC;QACD,IAAI,qBAAqB,EAAE,CAAC;YAC1B,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAC/B,CAAC;QACD,IAAI,sBAAsB,EAAE,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC,EAAE,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,CAAC,CAAA;IAE1E,OAAO;QACL,mBAAmB,EACjB,qBAAqB,IAAI,qBAAqB,IAAI,sBAAsB;QAC1E,mBAAmB,EAAE,SAAS;KAC/B,CAAA;AACH,CAAC"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { ChainType } from '@lifi/sdk'
|
|
2
|
-
import { useContext, useMemo } from 'react'
|
|
3
|
-
import { EVMExternalContext } from './EVMExternalContext.js'
|
|
4
|
-
import { SVMExternalContext } from './SVMExternalContext.js'
|
|
5
|
-
import { UTXOExternalContext } from './UTXOExternalContext.js'
|
|
6
|
-
|
|
7
|
-
interface ExternalWalletProvider {
|
|
8
|
-
hasExternalProvider: boolean
|
|
9
|
-
availableChainTypes: ChainType[]
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export function useHasExternalWalletProvider(): ExternalWalletProvider {
|
|
13
|
-
const hasExternalEVMContext = useContext(EVMExternalContext)
|
|
14
|
-
const hasExternalSVMContext = useContext(SVMExternalContext)
|
|
15
|
-
const hasExternalUTXOContext = useContext(UTXOExternalContext)
|
|
16
|
-
|
|
17
|
-
const providers = useMemo(() => {
|
|
18
|
-
const providers: ChainType[] = []
|
|
19
|
-
if (hasExternalEVMContext) {
|
|
20
|
-
providers.push(ChainType.EVM)
|
|
21
|
-
}
|
|
22
|
-
if (hasExternalSVMContext) {
|
|
23
|
-
providers.push(ChainType.SVM)
|
|
24
|
-
}
|
|
25
|
-
if (hasExternalUTXOContext) {
|
|
26
|
-
providers.push(ChainType.UTXO)
|
|
27
|
-
}
|
|
28
|
-
return providers
|
|
29
|
-
}, [hasExternalEVMContext, hasExternalSVMContext, hasExternalUTXOContext])
|
|
30
|
-
|
|
31
|
-
return {
|
|
32
|
-
hasExternalProvider:
|
|
33
|
-
hasExternalEVMContext || hasExternalSVMContext || hasExternalUTXOContext,
|
|
34
|
-
availableChainTypes: providers,
|
|
35
|
-
}
|
|
36
|
-
}
|