@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.
Files changed (83) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/esm/components/GasMessage/GasRefuelMessage.js +2 -2
  3. package/dist/esm/components/GasMessage/GasRefuelMessage.js.map +1 -1
  4. package/dist/esm/components/Search/SearchInput.d.ts +2 -1
  5. package/dist/esm/components/Search/SearchInput.js +3 -3
  6. package/dist/esm/components/Search/SearchInput.js.map +1 -1
  7. package/dist/esm/components/Token/Token.js +7 -3
  8. package/dist/esm/components/Token/Token.js.map +1 -1
  9. package/dist/esm/components/TransactionDetails.js +8 -6
  10. package/dist/esm/components/TransactionDetails.js.map +1 -1
  11. package/dist/esm/config/version.d.ts +1 -1
  12. package/dist/esm/config/version.js +1 -1
  13. package/dist/esm/config/version.js.map +1 -1
  14. package/dist/esm/hooks/useLanguages.js +2 -2
  15. package/dist/esm/hooks/useLanguages.js.map +1 -1
  16. package/dist/esm/hooks/useSettingMonitor.js +3 -2
  17. package/dist/esm/hooks/useSettingMonitor.js.map +1 -1
  18. package/dist/esm/index.d.ts +1 -0
  19. package/dist/esm/index.js +1 -0
  20. package/dist/esm/index.js.map +1 -1
  21. package/dist/esm/pages/SelectEnabledToolsPage.js +3 -6
  22. package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
  23. package/dist/esm/pages/SettingsPage/GasPriceSettings.js +2 -2
  24. package/dist/esm/pages/SettingsPage/GasPriceSettings.js.map +1 -1
  25. package/dist/esm/pages/SettingsPage/RoutePrioritySettings.js +2 -2
  26. package/dist/esm/pages/SettingsPage/RoutePrioritySettings.js.map +1 -1
  27. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js +16 -10
  28. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js.map +1 -1
  29. package/dist/esm/providers/WidgetProvider/WidgetProvider.js +3 -2
  30. package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
  31. package/dist/esm/stores/form/types.d.ts +1 -1
  32. package/dist/esm/stores/form/useFieldActions.d.ts +10 -2
  33. package/dist/esm/stores/form/useFieldActions.js +39 -1
  34. package/dist/esm/stores/form/useFieldActions.js.map +1 -1
  35. package/dist/esm/stores/settings/types.d.ts +5 -2
  36. package/dist/esm/stores/settings/types.js.map +1 -1
  37. package/dist/esm/stores/settings/useAppearance.js +3 -2
  38. package/dist/esm/stores/settings/useAppearance.js.map +1 -1
  39. package/dist/esm/stores/settings/useSettingsActions.d.ts +9 -0
  40. package/dist/esm/stores/settings/useSettingsActions.js +77 -0
  41. package/dist/esm/stores/settings/useSettingsActions.js.map +1 -0
  42. package/dist/esm/stores/settings/useSettingsStore.d.ts +0 -2
  43. package/dist/esm/stores/settings/useSettingsStore.js +4 -26
  44. package/dist/esm/stores/settings/useSettingsStore.js.map +1 -1
  45. package/dist/esm/stores/settings/utils/getStateValues.d.ts +2 -0
  46. package/dist/esm/stores/settings/utils/getStateValues.js +15 -0
  47. package/dist/esm/stores/settings/utils/getStateValues.js.map +1 -0
  48. package/dist/esm/types/events.d.ts +21 -4
  49. package/dist/esm/types/events.js +2 -0
  50. package/dist/esm/types/events.js.map +1 -1
  51. package/dist/esm/utils/deepEqual.d.ts +2 -0
  52. package/dist/esm/utils/deepEqual.js +52 -0
  53. package/dist/esm/utils/deepEqual.js.map +1 -0
  54. package/dist/esm/utils/format.d.ts +1 -1
  55. package/dist/esm/utils/format.js +3 -3
  56. package/dist/esm/utils/getPriceImpact.d.ts +9 -0
  57. package/dist/esm/utils/getPriceImpact.js +10 -0
  58. package/dist/esm/utils/getPriceImpact.js.map +1 -0
  59. package/package.json +5 -5
  60. package/src/components/GasMessage/GasRefuelMessage.tsx +3 -2
  61. package/src/components/Search/SearchInput.tsx +4 -1
  62. package/src/components/Token/Token.tsx +7 -8
  63. package/src/components/TransactionDetails.tsx +8 -17
  64. package/src/config/version.ts +1 -1
  65. package/src/hooks/useLanguages.ts +2 -2
  66. package/src/hooks/useSettingMonitor.ts +2 -2
  67. package/src/index.ts +1 -0
  68. package/src/pages/SelectEnabledToolsPage.tsx +6 -10
  69. package/src/pages/SettingsPage/GasPriceSettings.tsx +2 -2
  70. package/src/pages/SettingsPage/RoutePrioritySettings.tsx +2 -2
  71. package/src/pages/SettingsPage/SlippageSettings/SlippageSettings.tsx +31 -21
  72. package/src/providers/WidgetProvider/WidgetProvider.tsx +5 -3
  73. package/src/stores/form/types.ts +1 -1
  74. package/src/stores/form/useFieldActions.ts +73 -2
  75. package/src/stores/settings/types.ts +7 -2
  76. package/src/stores/settings/useAppearance.ts +3 -5
  77. package/src/stores/settings/useSettingsActions.ts +152 -0
  78. package/src/stores/settings/useSettingsStore.ts +4 -34
  79. package/src/stores/settings/utils/getStateValues.ts +16 -0
  80. package/src/types/events.ts +24 -3
  81. package/src/utils/deepEqual.ts +62 -0
  82. package/src/utils/format.ts +3 -3
  83. package/src/utils/getPriceImpact.ts +26 -0
@@ -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
+ }
@@ -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: 4,
9
- maximumFractionDigits: 4,
8
+ maximumSignificantDigits: 6,
9
+ maximumFractionDigits: 6,
10
10
  useGrouping: false,
11
11
  })
12
12
 
13
13
  /**
14
- * Format token amount to at least 4 decimals.
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
+ }