@lifi/widget 3.25.0 → 3.26.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 (217) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/esm/components/AmountInput/AmountInput.js +75 -17
  3. package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
  4. package/dist/esm/components/AmountInput/AmountInput.style.d.ts +4 -0
  5. package/dist/esm/components/AmountInput/AmountInput.style.js +11 -0
  6. package/dist/esm/components/AmountInput/AmountInput.style.js.map +1 -1
  7. package/dist/esm/components/AmountInput/AmountInputAdornment.style.d.ts +1 -0
  8. package/dist/esm/components/AmountInput/AmountInputAdornment.style.js +64 -5
  9. package/dist/esm/components/AmountInput/AmountInputAdornment.style.js.map +1 -1
  10. package/dist/esm/components/AmountInput/AmountInputEndAdornment.js +20 -7
  11. package/dist/esm/components/AmountInput/AmountInputEndAdornment.js.map +1 -1
  12. package/dist/esm/components/AmountInput/PriceFormHelperText.js +41 -15
  13. package/dist/esm/components/AmountInput/PriceFormHelperText.js.map +1 -1
  14. package/dist/esm/components/AmountInput/PriceFormHelperText.style.d.ts +1 -0
  15. package/dist/esm/components/AmountInput/PriceFormHelperText.style.js +29 -0
  16. package/dist/esm/components/AmountInput/PriceFormHelperText.style.js.map +1 -0
  17. package/dist/esm/components/AppContainer.js +1 -0
  18. package/dist/esm/components/AppContainer.js.map +1 -1
  19. package/dist/esm/components/ChainSelect/useChainSelect.js +2 -4
  20. package/dist/esm/components/ChainSelect/useChainSelect.js.map +1 -1
  21. package/dist/esm/components/Chains/VirtualizedChainList.js +5 -3
  22. package/dist/esm/components/Chains/VirtualizedChainList.js.map +1 -1
  23. package/dist/esm/components/Header/NavigationHeader.js +5 -1
  24. package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
  25. package/dist/esm/components/Routes/RoutesContent.js +3 -2
  26. package/dist/esm/components/Routes/RoutesContent.js.map +1 -1
  27. package/dist/esm/components/Routes/RoutesExpanded.style.js +3 -2
  28. package/dist/esm/components/Routes/RoutesExpanded.style.js.map +1 -1
  29. package/dist/esm/components/SendToWallet/SendToWalletButton.js +1 -1
  30. package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
  31. package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js +3 -3
  32. package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js.map +1 -1
  33. package/dist/esm/components/Step/StepProcess.js +3 -8
  34. package/dist/esm/components/Step/StepProcess.js.map +1 -1
  35. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js +1 -2
  36. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
  37. package/dist/esm/components/TokenList/useTokenSelect.js +2 -4
  38. package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
  39. package/dist/esm/config/version.d.ts +1 -1
  40. package/dist/esm/config/version.js +1 -1
  41. package/dist/esm/hooks/useFromAmountThreshold.js +2 -2
  42. package/dist/esm/hooks/useFromAmountThreshold.js.map +1 -1
  43. package/dist/esm/hooks/useGasSufficiency.js +3 -3
  44. package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
  45. package/dist/esm/hooks/useNavigateBack.d.ts +1 -1
  46. package/dist/esm/hooks/useNavigateBack.js +8 -2
  47. package/dist/esm/hooks/useNavigateBack.js.map +1 -1
  48. package/dist/esm/hooks/useRouteExecution.js +1 -2
  49. package/dist/esm/hooks/useRouteExecution.js.map +1 -1
  50. package/dist/esm/hooks/useRoutes.js +19 -4
  51. package/dist/esm/hooks/useRoutes.js.map +1 -1
  52. package/dist/esm/hooks/useSettingMonitor.js +1 -2
  53. package/dist/esm/hooks/useSettingMonitor.js.map +1 -1
  54. package/dist/esm/hooks/useTokenAddressBalance.js +4 -1
  55. package/dist/esm/hooks/useTokenAddressBalance.js.map +1 -1
  56. package/dist/esm/hooks/useTokenSearch.js +5 -2
  57. package/dist/esm/hooks/useTokenSearch.js.map +1 -1
  58. package/dist/esm/hooks/useTokens.js +2 -2
  59. package/dist/esm/hooks/useTokens.js.map +1 -1
  60. package/dist/esm/hooks/useTools.js +2 -2
  61. package/dist/esm/hooks/useTools.js.map +1 -1
  62. package/dist/esm/i18n/bn.json +1 -1
  63. package/dist/esm/i18n/de.json +1 -1
  64. package/dist/esm/i18n/en.json +1 -1
  65. package/dist/esm/i18n/es.json +1 -1
  66. package/dist/esm/i18n/fr.json +1 -1
  67. package/dist/esm/i18n/hi.json +1 -1
  68. package/dist/esm/i18n/id.json +1 -1
  69. package/dist/esm/i18n/it.json +1 -1
  70. package/dist/esm/i18n/ja.json +1 -1
  71. package/dist/esm/i18n/ko.json +1 -1
  72. package/dist/esm/i18n/pt.json +1 -1
  73. package/dist/esm/i18n/th.json +1 -1
  74. package/dist/esm/i18n/tr.json +1 -1
  75. package/dist/esm/i18n/uk.json +1 -1
  76. package/dist/esm/i18n/vi.json +1 -1
  77. package/dist/esm/i18n/zh.json +1 -1
  78. package/dist/esm/pages/SelectEnabledToolsPage.js +4 -2
  79. package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
  80. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.js +14 -7
  81. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.js.map +1 -1
  82. package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js +1 -2
  83. package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js.map +1 -1
  84. package/dist/esm/pages/TransactionPage/TransactionPage.js +5 -3
  85. package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
  86. package/dist/esm/stores/bookmarks/BookmarkStore.d.ts +1 -2
  87. package/dist/esm/stores/bookmarks/BookmarkStore.js +3 -3
  88. package/dist/esm/stores/bookmarks/BookmarkStore.js.map +1 -1
  89. package/dist/esm/stores/bookmarks/useBookmarkActions.js +1 -2
  90. package/dist/esm/stores/bookmarks/useBookmarkActions.js.map +1 -1
  91. package/dist/esm/stores/bookmarks/useBookmarks.js +1 -2
  92. package/dist/esm/stores/bookmarks/useBookmarks.js.map +1 -1
  93. package/dist/esm/stores/chains/ChainOrderStore.d.ts +1 -1
  94. package/dist/esm/stores/chains/ChainOrderStore.js +3 -2
  95. package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
  96. package/dist/esm/stores/chains/useChainOrder.js +1 -2
  97. package/dist/esm/stores/chains/useChainOrder.js.map +1 -1
  98. package/dist/esm/stores/form/useFieldActions.js +1 -2
  99. package/dist/esm/stores/form/useFieldActions.js.map +1 -1
  100. package/dist/esm/stores/form/useFieldValues.js +1 -2
  101. package/dist/esm/stores/form/useFieldValues.js.map +1 -1
  102. package/dist/esm/stores/form/useFormStore.d.ts +1 -2
  103. package/dist/esm/stores/form/useFormStore.js +3 -3
  104. package/dist/esm/stores/form/useFormStore.js.map +1 -1
  105. package/dist/esm/stores/form/useTouchedFields.js +1 -2
  106. package/dist/esm/stores/form/useTouchedFields.js.map +1 -1
  107. package/dist/esm/stores/form/useValidation.js +5 -2
  108. package/dist/esm/stores/form/useValidation.js.map +1 -1
  109. package/dist/esm/stores/form/useValidationActions.js +1 -2
  110. package/dist/esm/stores/form/useValidationActions.js.map +1 -1
  111. package/dist/esm/stores/header/useHeaderStore.d.ts +1 -1
  112. package/dist/esm/stores/header/useHeaderStore.js +3 -2
  113. package/dist/esm/stores/header/useHeaderStore.js.map +1 -1
  114. package/dist/esm/stores/inputMode/useInputModeStore.d.ts +9 -0
  115. package/dist/esm/stores/inputMode/useInputModeStore.js +19 -0
  116. package/dist/esm/stores/inputMode/useInputModeStore.js.map +1 -0
  117. package/dist/esm/stores/routes/RouteExecutionStore.d.ts +1 -1
  118. package/dist/esm/stores/routes/RouteExecutionStore.js +3 -2
  119. package/dist/esm/stores/routes/RouteExecutionStore.js.map +1 -1
  120. package/dist/esm/stores/routes/useExecutingRoutesIds.js +1 -2
  121. package/dist/esm/stores/routes/useExecutingRoutesIds.js.map +1 -1
  122. package/dist/esm/stores/settings/useSendToWalletStore.d.ts +2 -1
  123. package/dist/esm/stores/settings/useSendToWalletStore.js +6 -3
  124. package/dist/esm/stores/settings/useSendToWalletStore.js.map +1 -1
  125. package/dist/esm/stores/settings/useSettings.js +1 -2
  126. package/dist/esm/stores/settings/useSettings.js.map +1 -1
  127. package/dist/esm/stores/settings/useSettingsActions.js +1 -2
  128. package/dist/esm/stores/settings/useSettingsActions.js.map +1 -1
  129. package/dist/esm/stores/settings/useSettingsStore.d.ts +2 -1
  130. package/dist/esm/stores/settings/useSettingsStore.js +5 -1
  131. package/dist/esm/stores/settings/useSettingsStore.js.map +1 -1
  132. package/dist/esm/stores/settings/useSplitSubvariantStore.js +2 -1
  133. package/dist/esm/stores/settings/useSplitSubvariantStore.js.map +1 -1
  134. package/dist/esm/themes/createTheme.js +5 -1
  135. package/dist/esm/themes/createTheme.js.map +1 -1
  136. package/dist/esm/types/widget.d.ts +2 -1
  137. package/dist/esm/types/widget.js +1 -0
  138. package/dist/esm/types/widget.js.map +1 -1
  139. package/dist/esm/utils/format.d.ts +4 -0
  140. package/dist/esm/utils/format.js +26 -0
  141. package/dist/esm/utils/format.js.map +1 -1
  142. package/dist/esm/utils/getPriceImpact.d.ts +2 -2
  143. package/dist/esm/utils/getPriceImpact.js.map +1 -1
  144. package/package.json +12 -12
  145. package/package.json.tmp +14 -14
  146. package/src/components/AmountInput/AmountInput.style.tsx +13 -0
  147. package/src/components/AmountInput/AmountInput.tsx +91 -18
  148. package/src/components/AmountInput/AmountInputAdornment.style.tsx +66 -5
  149. package/src/components/AmountInput/AmountInputEndAdornment.tsx +40 -10
  150. package/src/components/AmountInput/PriceFormHelperText.style.tsx +29 -0
  151. package/src/components/AmountInput/PriceFormHelperText.tsx +63 -19
  152. package/src/components/AppContainer.tsx +1 -0
  153. package/src/components/ChainSelect/useChainSelect.ts +2 -4
  154. package/src/components/Chains/VirtualizedChainList.tsx +5 -6
  155. package/src/components/Header/NavigationHeader.tsx +10 -1
  156. package/src/components/Routes/RoutesContent.tsx +6 -2
  157. package/src/components/Routes/RoutesExpanded.style.ts +3 -2
  158. package/src/components/SendToWallet/SendToWalletButton.tsx +1 -1
  159. package/src/components/SendToWallet/SendToWalletExpandButton.tsx +8 -3
  160. package/src/components/Step/StepProcess.tsx +3 -8
  161. package/src/components/TokenList/TokenDetailsSheetContent.tsx +1 -2
  162. package/src/components/TokenList/useTokenSelect.ts +2 -4
  163. package/src/config/version.ts +1 -1
  164. package/src/hooks/useFromAmountThreshold.ts +6 -2
  165. package/src/hooks/useGasSufficiency.ts +4 -4
  166. package/src/hooks/useNavigateBack.ts +26 -17
  167. package/src/hooks/useRouteExecution.ts +1 -3
  168. package/src/hooks/useRoutes.ts +24 -4
  169. package/src/hooks/useSettingMonitor.ts +7 -11
  170. package/src/hooks/useTokenAddressBalance.ts +6 -1
  171. package/src/hooks/useTokenSearch.ts +5 -2
  172. package/src/hooks/useTokens.ts +2 -2
  173. package/src/hooks/useTools.ts +2 -2
  174. package/src/i18n/bn.json +1 -1
  175. package/src/i18n/de.json +1 -1
  176. package/src/i18n/en.json +1 -1
  177. package/src/i18n/es.json +1 -1
  178. package/src/i18n/fr.json +1 -1
  179. package/src/i18n/hi.json +1 -1
  180. package/src/i18n/id.json +1 -1
  181. package/src/i18n/it.json +1 -1
  182. package/src/i18n/ja.json +1 -1
  183. package/src/i18n/ko.json +1 -1
  184. package/src/i18n/pt.json +1 -1
  185. package/src/i18n/th.json +1 -1
  186. package/src/i18n/tr.json +1 -1
  187. package/src/i18n/uk.json +1 -1
  188. package/src/i18n/vi.json +1 -1
  189. package/src/i18n/zh.json +1 -1
  190. package/src/pages/SelectEnabledToolsPage.tsx +4 -5
  191. package/src/pages/SelectTokenPage/SearchTokenInput.tsx +19 -7
  192. package/src/pages/SettingsPage/BridgeAndExchangeSettings.tsx +1 -2
  193. package/src/pages/TransactionPage/TransactionPage.tsx +17 -9
  194. package/src/stores/bookmarks/BookmarkStore.tsx +3 -6
  195. package/src/stores/bookmarks/useBookmarkActions.ts +9 -13
  196. package/src/stores/bookmarks/useBookmarks.ts +1 -3
  197. package/src/stores/chains/ChainOrderStore.tsx +3 -3
  198. package/src/stores/chains/useChainOrder.ts +1 -5
  199. package/src/stores/form/useFieldActions.ts +10 -14
  200. package/src/stores/form/useFieldValues.ts +1 -3
  201. package/src/stores/form/useFormStore.ts +3 -6
  202. package/src/stores/form/useTouchedFields.ts +1 -2
  203. package/src/stores/form/useValidation.ts +5 -5
  204. package/src/stores/form/useValidationActions.ts +5 -9
  205. package/src/stores/header/useHeaderStore.tsx +3 -5
  206. package/src/stores/inputMode/useInputModeStore.ts +29 -0
  207. package/src/stores/routes/RouteExecutionStore.tsx +3 -3
  208. package/src/stores/routes/useExecutingRoutesIds.ts +14 -17
  209. package/src/stores/settings/useSendToWalletStore.ts +11 -8
  210. package/src/stores/settings/useSettings.ts +8 -11
  211. package/src/stores/settings/useSettingsActions.ts +8 -12
  212. package/src/stores/settings/useSettingsStore.ts +8 -1
  213. package/src/stores/settings/useSplitSubvariantStore.tsx +2 -1
  214. package/src/themes/createTheme.ts +5 -1
  215. package/src/types/widget.ts +1 -0
  216. package/src/utils/format.ts +33 -0
  217. package/src/utils/getPriceImpact.ts +2 -2
@@ -1,5 +1,4 @@
1
1
  import { useAccount } from '@lifi/wallet-management'
2
- import { shallow } from 'zustand/shallow'
3
2
  import { useRouteExecutionStore } from './RouteExecutionStore.js'
4
3
  import type { RouteExecution } from './types.js'
5
4
  import { RouteExecutionStatus } from './types.js'
@@ -7,21 +6,19 @@ import { RouteExecutionStatus } from './types.js'
7
6
  export const useExecutingRoutesIds = () => {
8
7
  const { accounts } = useAccount()
9
8
  const accountAddresses = accounts.map((account) => account.address)
10
- return useRouteExecutionStore(
11
- (state) =>
12
- (Object.values(state.routes) as RouteExecution[])
13
- .filter(
14
- (item) =>
15
- accountAddresses.includes(item.route.fromAddress) &&
16
- (item.status === RouteExecutionStatus.Pending ||
17
- item.status === RouteExecutionStatus.Failed)
18
- )
19
- .sort(
20
- (a, b) =>
21
- (b?.route.steps[0].execution?.process[0]?.startedAt ?? 0) -
22
- (a?.route.steps[0].execution?.process[0]?.startedAt ?? 0)
23
- )
24
- .map(({ route }) => route.id),
25
- shallow
9
+ return useRouteExecutionStore((state) =>
10
+ (Object.values(state.routes) as RouteExecution[])
11
+ .filter(
12
+ (item) =>
13
+ accountAddresses.includes(item.route.fromAddress) &&
14
+ (item.status === RouteExecutionStatus.Pending ||
15
+ item.status === RouteExecutionStatus.Failed)
16
+ )
17
+ .sort(
18
+ (a, b) =>
19
+ (b?.route.steps[0].execution?.process[0]?.startedAt ?? 0) -
20
+ (a?.route.steps[0].execution?.process[0]?.startedAt ?? 0)
21
+ )
22
+ .map(({ route }) => route.id)
26
23
  )
27
24
  }
@@ -1,8 +1,8 @@
1
- import { shallow } from 'zustand/shallow'
1
+ import { useShallow } from 'zustand/shallow'
2
2
  import { createWithEqualityFn } from 'zustand/traditional'
3
3
  import type { SendToWalletStore } from './types.js'
4
4
 
5
- export const useSendToWalletStore = createWithEqualityFn<SendToWalletStore>(
5
+ export const sendToWalletStore = createWithEqualityFn<SendToWalletStore>(
6
6
  (set) => ({
7
7
  showSendToWallet: false,
8
8
  setSendToWallet: (value) =>
@@ -13,13 +13,16 @@ export const useSendToWalletStore = createWithEqualityFn<SendToWalletStore>(
13
13
  Object.is
14
14
  )
15
15
 
16
+ export const useSendToWalletStore = <T>(
17
+ selector: (state: SendToWalletStore) => T
18
+ ): T => {
19
+ return sendToWalletStore(useShallow(selector))
20
+ }
21
+
16
22
  export const useSendToWalletActions = () => {
17
- const actions = useSendToWalletStore(
18
- (store) => ({
19
- setSendToWallet: store.setSendToWallet,
20
- }),
21
- shallow
22
- )
23
+ const actions = useSendToWalletStore((store) => ({
24
+ setSendToWallet: store.setSendToWallet,
25
+ }))
23
26
 
24
27
  return actions
25
28
  }
@@ -1,19 +1,16 @@
1
- import { shallow } from 'zustand/shallow'
2
1
  import type { SettingsState } from './types.js'
3
2
  import { useSettingsStore } from './useSettingsStore.js'
4
3
 
5
4
  export const useSettings = <K extends keyof SettingsState>(
6
5
  keys: Array<K>
7
6
  ): Pick<SettingsState, (typeof keys)[number]> => {
8
- return useSettingsStore(
9
- (state) =>
10
- keys.reduce(
11
- (values, key) => {
12
- values[key] = state[key]
13
- return values
14
- },
15
- {} as Pick<SettingsState, (typeof keys)[number]>
16
- ),
17
- shallow
7
+ return useSettingsStore((state) =>
8
+ keys.reduce(
9
+ (values, key) => {
10
+ values[key] = state[key]
11
+ return values
12
+ },
13
+ {} as Pick<SettingsState, (typeof keys)[number]>
14
+ )
18
15
  )
19
16
  }
@@ -1,5 +1,4 @@
1
1
  import { useCallback } from 'react'
2
- import { shallow } from 'zustand/shallow'
3
2
  import type { widgetEvents } from '../../hooks/useWidgetEvents.js'
4
3
  import { useWidgetEvents } from '../../hooks/useWidgetEvents.js'
5
4
  import { WidgetEvent } from '../../types/events.js'
@@ -47,17 +46,14 @@ const emitEventOnChange = <T extends (...args: any[]) => any>(
47
46
 
48
47
  export const useSettingsActions = () => {
49
48
  const emitter = useWidgetEvents()
50
- const actions = useSettingsStore(
51
- (state) => ({
52
- setValue: state.setValue,
53
- getValue: state.getValue,
54
- getSettings: state.getSettings,
55
- reset: state.reset,
56
- setToolValue: state.setToolValue,
57
- toggleToolKeys: state.toggleToolKeys,
58
- }),
59
- shallow
60
- )
49
+ const actions = useSettingsStore((state) => ({
50
+ setValue: state.setValue,
51
+ getValue: state.getValue,
52
+ getSettings: state.getSettings,
53
+ reset: state.reset,
54
+ setToolValue: state.setToolValue,
55
+ toggleToolKeys: state.toggleToolKeys,
56
+ }))
61
57
 
62
58
  const setValueWithEmittedEvent = useCallback<ValueSetter<SettingsProps>>(
63
59
  (value, newValue) => {
@@ -1,6 +1,7 @@
1
1
  /** biome-ignore-all lint/correctness/noUnusedVariables: allowed in this store */
2
2
  import type { StateCreator } from 'zustand'
3
3
  import { persist } from 'zustand/middleware'
4
+ import { useShallow } from 'zustand/shallow'
4
5
  import { createWithEqualityFn } from 'zustand/traditional'
5
6
  import type { SettingsProps, SettingsState } from './types.js'
6
7
  import { SettingsToolTypes } from './types.js'
@@ -28,7 +29,7 @@ export const defaultSettings: SettingsProps = {
28
29
  _enabledExchanges: {},
29
30
  }
30
31
 
31
- export const useSettingsStore = createWithEqualityFn<SettingsState>(
32
+ export const settingsStore = createWithEqualityFn<SettingsState>(
32
33
  persist(
33
34
  (set, get) => ({
34
35
  ...defaultSettings,
@@ -176,3 +177,9 @@ export const useSettingsStore = createWithEqualityFn<SettingsState>(
176
177
  ) as StateCreator<SettingsState, [], [], SettingsState>,
177
178
  Object.is
178
179
  )
180
+
181
+ export const useSettingsStore = <T>(
182
+ selector: (state: SettingsState) => T
183
+ ): T => {
184
+ return settingsStore(useShallow(selector))
185
+ }
@@ -1,4 +1,5 @@
1
1
  import { createContext, useContext, useRef } from 'react'
2
+ import { useShallow } from 'zustand/shallow'
2
3
  import { createWithEqualityFn } from 'zustand/traditional'
3
4
  import type {
4
5
  SplitSubvariantProps,
@@ -47,7 +48,7 @@ export function useSplitSubvariantStore<T>(
47
48
  selector: (state: SplitSubvariantState) => T
48
49
  ): T {
49
50
  const useStore = useSplitSubvariantStoreContext()
50
- return useStore(selector)
51
+ return useStore(useShallow(selector))
51
52
  }
52
53
 
53
54
  export const createSplitSubvariantStore = ({ state }: SplitSubvariantProps) =>
@@ -76,7 +76,11 @@ export const createTheme = (widgetTheme: WidgetTheme = {}) => {
76
76
  : darken(secondaryMainColorDark, 0.2)
77
77
 
78
78
  const theme = createMuiTheme({
79
- cssVariables: { cssVarPrefix: 'lifi', colorSchemeSelector: 'class' },
79
+ cssVariables: {
80
+ cssVarPrefix: 'lifi',
81
+ colorSchemeSelector: 'class',
82
+ nativeColor: true,
83
+ },
80
84
  colorSchemes: {
81
85
  light: {
82
86
  palette: {
@@ -112,6 +112,7 @@ export enum HiddenUI {
112
112
  ChainSelect = 'chainSelect',
113
113
  BridgesSettings = 'bridgesSettings',
114
114
  AddressBookConnectedWallets = 'addressBookConnectedWallets',
115
+ LowAddressActivityConfirmation = 'lowAddressActivityConfirmation',
115
116
  }
116
117
  export type HiddenUIType = `${HiddenUI}`
117
118
 
@@ -96,6 +96,39 @@ export function formatTokenPrice(
96
96
  return Number.parseFloat(formattedAmount) * Number.parseFloat(price)
97
97
  }
98
98
 
99
+ /**
100
+ * Formatter for price value to token amount
101
+ */
102
+ const formatter = new Intl.NumberFormat('en', {
103
+ notation: 'standard',
104
+ roundingPriority: 'morePrecision',
105
+ maximumSignificantDigits: 21,
106
+ maximumFractionDigits: 21,
107
+ useGrouping: false,
108
+ })
109
+
110
+ /**
111
+ * Convert price value to token amount
112
+ */
113
+ export function priceToTokenAmount(priceValue: string, priceUSD?: string) {
114
+ if (!priceValue || !priceUSD) {
115
+ return '0'
116
+ }
117
+
118
+ const numericPriceValue = Number.parseFloat(priceValue)
119
+ const numericPrice = Number.parseFloat(priceUSD)
120
+
121
+ if (
122
+ Number.isNaN(numericPriceValue) ||
123
+ Number.isNaN(numericPrice) ||
124
+ !numericPrice
125
+ ) {
126
+ return '0'
127
+ }
128
+
129
+ return formatter.format(numericPriceValue / numericPrice)
130
+ }
131
+
99
132
  const units = [
100
133
  ['day', 86400],
101
134
  ['hour', 3600],
@@ -1,7 +1,7 @@
1
1
  import type { Token } from '@lifi/sdk'
2
2
  import { formatTokenPrice } from './format.js'
3
3
 
4
- interface GetPriceImpractProps {
4
+ interface GetPriceImpactProps {
5
5
  fromToken: Token
6
6
  toToken: Token
7
7
  fromAmount?: bigint
@@ -13,7 +13,7 @@ export const getPriceImpact = ({
13
13
  toToken,
14
14
  fromAmount,
15
15
  toAmount,
16
- }: GetPriceImpractProps) => {
16
+ }: GetPriceImpactProps) => {
17
17
  const fromTokenPrice = formatTokenPrice(
18
18
  fromAmount,
19
19
  fromToken.priceUSD,