@lifi/widget 3.8.0-beta.2 → 3.8.1
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 +24 -0
- package/dist/esm/components/GasMessage/GasRefuelMessage.js +2 -2
- package/dist/esm/components/GasMessage/GasRefuelMessage.js.map +1 -1
- package/dist/esm/components/Search/SearchInput.d.ts +2 -1
- package/dist/esm/components/Search/SearchInput.js +3 -3
- package/dist/esm/components/Search/SearchInput.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/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/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/format.d.ts +1 -1
- package/dist/esm/utils/format.js +3 -3
- 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 +5 -5
- package/src/components/GasMessage/GasRefuelMessage.tsx +3 -2
- package/src/components/Search/SearchInput.tsx +4 -1
- 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/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/deepEqual.ts +62 -0
- package/src/utils/format.ts +3 -3
- package/src/utils/getPriceImpact.ts +26 -0
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
|
+
}
|
|
@@ -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
|
+
}
|
package/src/utils/format.ts
CHANGED
|
@@ -5,13 +5,13 @@ const subscriptMap = ['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '
|
|
|
5
5
|
export const precisionFormatter = new Intl.NumberFormat('en', {
|
|
6
6
|
notation: 'standard',
|
|
7
7
|
roundingPriority: 'morePrecision',
|
|
8
|
-
maximumSignificantDigits:
|
|
9
|
-
maximumFractionDigits:
|
|
8
|
+
maximumSignificantDigits: 6,
|
|
9
|
+
maximumFractionDigits: 6,
|
|
10
10
|
useGrouping: false,
|
|
11
11
|
})
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
* Format token amount to at least
|
|
14
|
+
* Format token amount to at least 6 decimals.
|
|
15
15
|
* @param amount amount to format.
|
|
16
16
|
* @returns formatted amount.
|
|
17
17
|
*/
|
|
@@ -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
|
+
}
|