@lifi/widget 3.8.0-beta.1 → 3.8.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 +16 -0
- package/dist/esm/components/GasMessage/GasRefuelMessage.js +2 -2
- package/dist/esm/components/GasMessage/GasRefuelMessage.js.map +1 -1
- package/dist/esm/components/Token/Token.js +7 -3
- package/dist/esm/components/Token/Token.js.map +1 -1
- package/dist/esm/components/TransactionDetails.js +8 -6
- package/dist/esm/components/TransactionDetails.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/hooks/useLanguages.js +2 -2
- package/dist/esm/hooks/useLanguages.js.map +1 -1
- package/dist/esm/hooks/useSettingMonitor.js +3 -2
- package/dist/esm/hooks/useSettingMonitor.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/pages/SelectEnabledToolsPage.js +3 -6
- package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
- package/dist/esm/pages/SettingsPage/GasPriceSettings.js +2 -2
- package/dist/esm/pages/SettingsPage/GasPriceSettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/RoutePrioritySettings.js +2 -2
- package/dist/esm/pages/SettingsPage/RoutePrioritySettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js +16 -10
- package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js.map +1 -1
- package/dist/esm/providers/WalletProvider/SDKProviders.js +2 -1
- package/dist/esm/providers/WalletProvider/SDKProviders.js.map +1 -1
- package/dist/esm/providers/WalletProvider/UTXOBaseProvider.js +2 -1
- package/dist/esm/providers/WalletProvider/UTXOBaseProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/UTXOProvider.js +1 -1
- package/dist/esm/providers/WalletProvider/UTXOProvider.js.map +1 -1
- package/dist/esm/providers/WidgetProvider/WidgetProvider.js +3 -2
- package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
- package/dist/esm/stores/form/types.d.ts +1 -1
- package/dist/esm/stores/form/useFieldActions.d.ts +10 -2
- package/dist/esm/stores/form/useFieldActions.js +39 -1
- package/dist/esm/stores/form/useFieldActions.js.map +1 -1
- package/dist/esm/stores/settings/types.d.ts +5 -2
- package/dist/esm/stores/settings/types.js.map +1 -1
- package/dist/esm/stores/settings/useAppearance.js +3 -2
- package/dist/esm/stores/settings/useAppearance.js.map +1 -1
- package/dist/esm/stores/settings/useSettingsActions.d.ts +9 -0
- package/dist/esm/stores/settings/useSettingsActions.js +77 -0
- package/dist/esm/stores/settings/useSettingsActions.js.map +1 -0
- package/dist/esm/stores/settings/useSettingsStore.d.ts +0 -2
- package/dist/esm/stores/settings/useSettingsStore.js +4 -26
- package/dist/esm/stores/settings/useSettingsStore.js.map +1 -1
- package/dist/esm/stores/settings/utils/getStateValues.d.ts +2 -0
- package/dist/esm/stores/settings/utils/getStateValues.js +15 -0
- package/dist/esm/stores/settings/utils/getStateValues.js.map +1 -0
- package/dist/esm/types/events.d.ts +21 -4
- package/dist/esm/types/events.js +2 -0
- package/dist/esm/types/events.js.map +1 -1
- package/dist/esm/utils/chainType.js +2 -1
- package/dist/esm/utils/chainType.js.map +1 -1
- package/dist/esm/utils/deepEqual.d.ts +2 -0
- package/dist/esm/utils/deepEqual.js +52 -0
- package/dist/esm/utils/deepEqual.js.map +1 -0
- package/dist/esm/utils/getPriceImpact.d.ts +9 -0
- package/dist/esm/utils/getPriceImpact.js +10 -0
- package/dist/esm/utils/getPriceImpact.js.map +1 -0
- package/package.json +10 -7
- package/src/components/GasMessage/GasRefuelMessage.tsx +3 -2
- package/src/components/Token/Token.tsx +7 -8
- package/src/components/TransactionDetails.tsx +8 -17
- package/src/config/version.ts +1 -1
- package/src/hooks/useLanguages.ts +2 -2
- package/src/hooks/useSettingMonitor.ts +2 -2
- package/src/index.ts +1 -0
- package/src/pages/SelectEnabledToolsPage.tsx +6 -10
- package/src/pages/SettingsPage/GasPriceSettings.tsx +2 -2
- package/src/pages/SettingsPage/RoutePrioritySettings.tsx +2 -2
- package/src/pages/SettingsPage/SlippageSettings/SlippageSettings.tsx +31 -21
- package/src/providers/WalletProvider/SDKProviders.tsx +2 -4
- package/src/providers/WalletProvider/UTXOBaseProvider.tsx +2 -5
- package/src/providers/WalletProvider/UTXOProvider.tsx +1 -1
- package/src/providers/WidgetProvider/WidgetProvider.tsx +5 -3
- package/src/stores/form/types.ts +1 -1
- package/src/stores/form/useFieldActions.ts +73 -2
- package/src/stores/settings/types.ts +7 -2
- package/src/stores/settings/useAppearance.ts +3 -5
- package/src/stores/settings/useSettingsActions.ts +152 -0
- package/src/stores/settings/useSettingsStore.ts +4 -34
- package/src/stores/settings/utils/getStateValues.ts +16 -0
- package/src/types/events.ts +24 -3
- package/src/utils/chainType.ts +2 -1
- package/src/utils/deepEqual.ts +62 -0
- package/src/utils/getPriceImpact.ts +26 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SettingsProps, SettingsState } from '../types.js'
|
|
2
|
+
|
|
3
|
+
export const getStateValues = (state: SettingsState): SettingsProps => ({
|
|
4
|
+
appearance: state.appearance,
|
|
5
|
+
gasPrice: state.gasPrice,
|
|
6
|
+
language: state.language,
|
|
7
|
+
routePriority: state.routePriority,
|
|
8
|
+
enabledAutoRefuel: state.enabledAutoRefuel,
|
|
9
|
+
slippage: state.slippage,
|
|
10
|
+
disabledBridges: [...state.disabledBridges],
|
|
11
|
+
enabledBridges: [...state.enabledBridges],
|
|
12
|
+
_enabledBridges: { ...state._enabledBridges },
|
|
13
|
+
disabledExchanges: [...state.disabledExchanges],
|
|
14
|
+
enabledExchanges: [...state.enabledExchanges],
|
|
15
|
+
_enabledExchanges: { ...state._enabledExchanges },
|
|
16
|
+
})
|
package/src/types/events.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { ChainId, ChainType, Process, Route } from '@lifi/sdk'
|
|
2
|
+
import type { DefaultValues } from '../stores/form/types.js'
|
|
3
|
+
import type { SettingsProps } from '../stores/settings/types.js'
|
|
2
4
|
import type { NavigationRouteType } from '../utils/navigationRoutes.js'
|
|
3
5
|
|
|
4
6
|
export enum WidgetEvent {
|
|
@@ -22,6 +24,8 @@ export enum WidgetEvent {
|
|
|
22
24
|
WalletConnected = 'walletConnected',
|
|
23
25
|
WidgetExpanded = 'widgetExpanded',
|
|
24
26
|
PageEntered = 'pageEntered',
|
|
27
|
+
FormFieldChanged = 'formFieldChanged',
|
|
28
|
+
SettingUpdated = 'settingUpdated',
|
|
25
29
|
}
|
|
26
30
|
|
|
27
31
|
export type WidgetEvents = {
|
|
@@ -35,13 +39,12 @@ export type WidgetEvents = {
|
|
|
35
39
|
sourceChainTokenSelected: ChainTokenSelected
|
|
36
40
|
destinationChainTokenSelected: ChainTokenSelected
|
|
37
41
|
sendToWalletToggled: boolean
|
|
42
|
+
formFieldChanged: FormFieldChanged
|
|
38
43
|
reviewTransactionPageEntered?: Route
|
|
39
|
-
/**
|
|
40
|
-
* @deprecated use useWalletManagementEvents hook.
|
|
41
|
-
*/
|
|
42
44
|
walletConnected: WalletConnected
|
|
43
45
|
widgetExpanded: boolean
|
|
44
46
|
pageEntered: NavigationRouteType
|
|
47
|
+
settingUpdated: SettingUpdated
|
|
45
48
|
}
|
|
46
49
|
|
|
47
50
|
export interface ContactSupport {
|
|
@@ -71,3 +74,21 @@ export interface WalletConnected {
|
|
|
71
74
|
chainId?: number
|
|
72
75
|
chainType?: ChainType
|
|
73
76
|
}
|
|
77
|
+
|
|
78
|
+
export type FormFieldChanged = {
|
|
79
|
+
[K in keyof DefaultValues]: {
|
|
80
|
+
fieldName: K
|
|
81
|
+
newValue: DefaultValues[K]
|
|
82
|
+
oldValue: DefaultValues[K]
|
|
83
|
+
}
|
|
84
|
+
}[keyof DefaultValues]
|
|
85
|
+
|
|
86
|
+
export type SettingUpdated<
|
|
87
|
+
K extends keyof SettingsProps = keyof SettingsProps,
|
|
88
|
+
> = {
|
|
89
|
+
setting: K
|
|
90
|
+
newValue: SettingsProps[K]
|
|
91
|
+
oldValue: SettingsProps[K]
|
|
92
|
+
newSettings: SettingsProps
|
|
93
|
+
oldSettings: SettingsProps
|
|
94
|
+
}
|
package/src/utils/chainType.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isUTXOAddress } from '@bigmi/core'
|
|
2
|
+
import { ChainId, ChainType, isSVMAddress } from '@lifi/sdk'
|
|
2
3
|
import { isAddress as isEVMAddress } from 'viem'
|
|
3
4
|
|
|
4
5
|
const chainTypeAddressValidation = {
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/** Forked from https://github.com/epoberezkin/fast-deep-equal */
|
|
2
|
+
|
|
3
|
+
export function deepEqual(a: any, b: any) {
|
|
4
|
+
if (a === b) {
|
|
5
|
+
return true
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
if (a && b && typeof a === 'object' && typeof b === 'object') {
|
|
9
|
+
if (a.constructor !== b.constructor) {
|
|
10
|
+
return false
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
let length: number
|
|
14
|
+
let i: number
|
|
15
|
+
|
|
16
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
17
|
+
length = a.length
|
|
18
|
+
if (length !== b.length) {
|
|
19
|
+
return false
|
|
20
|
+
}
|
|
21
|
+
for (i = length; i-- !== 0; ) {
|
|
22
|
+
if (!deepEqual(a[i], b[i])) {
|
|
23
|
+
return false
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return true
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (a.valueOf !== Object.prototype.valueOf) {
|
|
30
|
+
return a.valueOf() === b.valueOf()
|
|
31
|
+
}
|
|
32
|
+
if (a.toString !== Object.prototype.toString) {
|
|
33
|
+
return a.toString() === b.toString()
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const keys = Object.keys(a)
|
|
37
|
+
length = keys.length
|
|
38
|
+
if (length !== Object.keys(b).length) {
|
|
39
|
+
return false
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
for (i = length; i-- !== 0; ) {
|
|
43
|
+
if (!Object.prototype.hasOwnProperty.call(b, keys[i]!)) {
|
|
44
|
+
return false
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
for (i = length; i-- !== 0; ) {
|
|
49
|
+
const key = keys[i]
|
|
50
|
+
|
|
51
|
+
if (key && !deepEqual(a[key], b[key])) {
|
|
52
|
+
return false
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return true
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// true if both NaN, false otherwise
|
|
60
|
+
// biome-ignore lint/suspicious/noSelfCompare: <explanation>
|
|
61
|
+
return a !== a && b !== b
|
|
62
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Token } from '@lifi/sdk'
|
|
2
|
+
import { formatTokenAmount, formatTokenPrice } from './format.js'
|
|
3
|
+
|
|
4
|
+
interface GetPriceImpractProps {
|
|
5
|
+
fromToken: Token
|
|
6
|
+
toToken: Token
|
|
7
|
+
fromAmount?: bigint
|
|
8
|
+
toAmount?: bigint
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const getPriceImpact = ({
|
|
12
|
+
fromToken,
|
|
13
|
+
toToken,
|
|
14
|
+
fromAmount,
|
|
15
|
+
toAmount,
|
|
16
|
+
}: GetPriceImpractProps) => {
|
|
17
|
+
const fromTokenAmount = formatTokenAmount(fromAmount, fromToken.decimals)
|
|
18
|
+
const fromTokenPrice = formatTokenPrice(fromTokenAmount, fromToken.priceUSD)
|
|
19
|
+
|
|
20
|
+
const toTokenAmount = formatTokenAmount(toAmount, toToken.decimals)
|
|
21
|
+
const toTokenPrice = formatTokenPrice(toTokenAmount, toToken.priceUSD) || 0.01
|
|
22
|
+
|
|
23
|
+
const priceImpact = toTokenPrice / fromTokenPrice - 1
|
|
24
|
+
|
|
25
|
+
return Number(priceImpact)
|
|
26
|
+
}
|