@lifi/widget 3.29.1 → 3.30.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 (366) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/esm/AppProvider.d.ts +0 -1
  3. package/dist/esm/AppProvider.js +1 -1
  4. package/dist/esm/AppProvider.js.map +1 -1
  5. package/dist/esm/components/AmountInput/AmountInput.d.ts +0 -9
  6. package/dist/esm/components/AmountInput/AmountInput.js +1 -1
  7. package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
  8. package/dist/esm/components/AmountInput/AmountInputAdornment.style.d.ts +0 -1
  9. package/dist/esm/components/AmountInput/AmountInputAdornment.style.js +1 -6
  10. package/dist/esm/components/AmountInput/AmountInputAdornment.style.js.map +1 -1
  11. package/dist/esm/components/AmountInput/AmountInputEndAdornment.d.ts +1 -1
  12. package/dist/esm/components/AmountInput/AmountInputEndAdornment.js +3 -2
  13. package/dist/esm/components/AmountInput/AmountInputEndAdornment.js.map +1 -1
  14. package/dist/esm/components/AmountInput/PriceFormHelperText.d.ts +1 -7
  15. package/dist/esm/components/AmountInput/PriceFormHelperText.js +4 -3
  16. package/dist/esm/components/AmountInput/PriceFormHelperText.js.map +1 -1
  17. package/dist/esm/components/Avatar/Avatar.d.ts +0 -4
  18. package/dist/esm/components/Avatar/Avatar.js +1 -1
  19. package/dist/esm/components/Avatar/Avatar.js.map +1 -1
  20. package/dist/esm/components/Avatar/TokenAvatar.d.ts +0 -15
  21. package/dist/esm/components/Avatar/TokenAvatar.js +2 -2
  22. package/dist/esm/components/Avatar/TokenAvatar.js.map +1 -1
  23. package/dist/esm/components/Card/CardButton.style.d.ts +0 -1
  24. package/dist/esm/components/Card/CardButton.style.js +0 -7
  25. package/dist/esm/components/Card/CardButton.style.js.map +1 -1
  26. package/dist/esm/components/ChainSelect/ChainSelect.js +35 -18
  27. package/dist/esm/components/ChainSelect/ChainSelect.js.map +1 -1
  28. package/dist/esm/components/ChainSelect/useChainSelect.d.ts +1 -1
  29. package/dist/esm/components/ChainSelect/useChainSelect.js +3 -3
  30. package/dist/esm/components/ChainSelect/useChainSelect.js.map +1 -1
  31. package/dist/esm/components/Chains/AllChainsAvatar.d.ts +7 -0
  32. package/dist/esm/components/Chains/AllChainsAvatar.js +77 -0
  33. package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -0
  34. package/dist/esm/components/Chains/ChainList.d.ts +2 -1
  35. package/dist/esm/components/Chains/ChainList.js +2 -2
  36. package/dist/esm/components/Chains/ChainList.js.map +1 -1
  37. package/dist/esm/components/Chains/ChainSearchInput.js +2 -2
  38. package/dist/esm/components/Chains/ChainSearchInput.js.map +1 -1
  39. package/dist/esm/components/Chains/SelectChainContent.js +1 -1
  40. package/dist/esm/components/Chains/SelectChainContent.js.map +1 -1
  41. package/dist/esm/components/Chains/VirtualizedChainList.d.ts +2 -1
  42. package/dist/esm/components/Chains/VirtualizedChainList.js +42 -10
  43. package/dist/esm/components/Chains/VirtualizedChainList.js.map +1 -1
  44. package/dist/esm/components/FeeBreakdownTooltip.d.ts +2 -3
  45. package/dist/esm/components/FeeBreakdownTooltip.js +1 -1
  46. package/dist/esm/components/FeeBreakdownTooltip.js.map +1 -1
  47. package/dist/esm/components/Header/Header.d.ts +1 -2
  48. package/dist/esm/components/Header/Header.js +1 -1
  49. package/dist/esm/components/Header/Header.js.map +1 -1
  50. package/dist/esm/components/Header/WalletHeader.d.ts +0 -1
  51. package/dist/esm/components/Header/WalletHeader.js +1 -1
  52. package/dist/esm/components/Header/WalletHeader.js.map +1 -1
  53. package/dist/esm/components/RouteCard/RouteCardEssentials.js +1 -1
  54. package/dist/esm/components/RouteCard/RouteCardEssentials.js.map +1 -1
  55. package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
  56. package/dist/esm/components/StepActions/StepActions.d.ts +1 -10
  57. package/dist/esm/components/StepActions/StepActions.js +6 -6
  58. package/dist/esm/components/StepActions/StepActions.js.map +1 -1
  59. package/dist/esm/components/Tabs/Tabs.style.d.ts +0 -1
  60. package/dist/esm/components/Tabs/Tabs.style.js +1 -1
  61. package/dist/esm/components/Tabs/Tabs.style.js.map +1 -1
  62. package/dist/esm/components/Timer/TimerContent.js +1 -2
  63. package/dist/esm/components/Timer/TimerContent.js.map +1 -1
  64. package/dist/esm/components/Token/Token.d.ts +0 -2
  65. package/dist/esm/components/Token/Token.js +2 -2
  66. package/dist/esm/components/Token/Token.js.map +1 -1
  67. package/dist/esm/components/TokenList/TokenDetailsSheet.d.ts +1 -5
  68. package/dist/esm/components/TokenList/TokenDetailsSheet.js +4 -2
  69. package/dist/esm/components/TokenList/TokenDetailsSheet.js.map +1 -1
  70. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js +2 -2
  71. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
  72. package/dist/esm/components/TokenList/TokenList.js +11 -53
  73. package/dist/esm/components/TokenList/TokenList.js.map +1 -1
  74. package/dist/esm/components/TokenList/TokenListItem.d.ts +1 -4
  75. package/dist/esm/components/TokenList/TokenListItem.js +30 -26
  76. package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
  77. package/dist/esm/components/TokenList/VirtualizedTokenList.js +56 -37
  78. package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
  79. package/dist/esm/components/TokenList/types.d.ts +8 -11
  80. package/dist/esm/components/TokenList/useTokenSelect.d.ts +0 -4
  81. package/dist/esm/components/TokenList/useTokenSelect.js +3 -4
  82. package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
  83. package/dist/esm/components/TokenRate/TokenRate.js +1 -3
  84. package/dist/esm/components/TokenRate/TokenRate.js.map +1 -1
  85. package/dist/esm/components/TransactionDetails.js +2 -2
  86. package/dist/esm/components/TransactionDetails.js.map +1 -1
  87. package/dist/esm/config/version.d.ts +1 -1
  88. package/dist/esm/config/version.js +1 -1
  89. package/dist/esm/hooks/timer/time.d.ts +0 -8
  90. package/dist/esm/hooks/timer/time.js.map +1 -1
  91. package/dist/esm/hooks/timer/useTimer.d.ts +3 -2
  92. package/dist/esm/hooks/useAccountsBalancesData.d.ts +6 -0
  93. package/dist/esm/hooks/useAccountsBalancesData.js +64 -0
  94. package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -0
  95. package/dist/esm/hooks/useAvailableChains.d.ts +2 -1
  96. package/dist/esm/hooks/useChain.d.ts +1 -1
  97. package/dist/esm/hooks/useChains.d.ts +1 -1
  98. package/dist/esm/hooks/useExplorer.d.ts +2 -1
  99. package/dist/esm/hooks/useFilteredByTokenBalances.d.ts +9 -0
  100. package/dist/esm/hooks/useFilteredByTokenBalances.js +78 -0
  101. package/dist/esm/hooks/useFilteredByTokenBalances.js.map +1 -0
  102. package/dist/esm/hooks/useListHeight.d.ts +0 -3
  103. package/dist/esm/hooks/useListHeight.js +2 -3
  104. package/dist/esm/hooks/useListHeight.js.map +1 -1
  105. package/dist/esm/hooks/useRoutes.js +2 -2
  106. package/dist/esm/hooks/useRoutes.js.map +1 -1
  107. package/dist/esm/hooks/useToAddressAutoPopulate.d.ts +2 -1
  108. package/dist/esm/hooks/useToken.d.ts +2 -2
  109. package/dist/esm/hooks/useToken.js +13 -10
  110. package/dist/esm/hooks/useToken.js.map +1 -1
  111. package/dist/esm/hooks/useTokenAddressBalance.d.ts +3 -3
  112. package/dist/esm/hooks/useTokenAddressBalance.js +10 -14
  113. package/dist/esm/hooks/useTokenAddressBalance.js.map +1 -1
  114. package/dist/esm/hooks/useTokenBalances.d.ts +6 -9
  115. package/dist/esm/hooks/useTokenBalances.js +57 -72
  116. package/dist/esm/hooks/useTokenBalances.js.map +1 -1
  117. package/dist/esm/hooks/useTokenBalancesQueries.d.ts +11 -0
  118. package/dist/esm/hooks/useTokenBalancesQueries.js +74 -0
  119. package/dist/esm/hooks/useTokenBalancesQueries.js.map +1 -0
  120. package/dist/esm/hooks/useTokenSearch.js +3 -3
  121. package/dist/esm/hooks/useTokenSearch.js.map +1 -1
  122. package/dist/esm/hooks/useTokens.d.ts +6 -6
  123. package/dist/esm/hooks/useTokens.js +98 -69
  124. package/dist/esm/hooks/useTokens.js.map +1 -1
  125. package/dist/esm/i18n/bn.json +3 -3
  126. package/dist/esm/i18n/de.json +3 -3
  127. package/dist/esm/i18n/en.json +3 -3
  128. package/dist/esm/i18n/es.json +3 -3
  129. package/dist/esm/i18n/fr.json +3 -3
  130. package/dist/esm/i18n/hi.json +3 -3
  131. package/dist/esm/i18n/id.json +3 -3
  132. package/dist/esm/i18n/it.json +3 -3
  133. package/dist/esm/i18n/ja.json +3 -3
  134. package/dist/esm/i18n/ko.json +3 -3
  135. package/dist/esm/i18n/pl.json +3 -3
  136. package/dist/esm/i18n/pt.json +5 -5
  137. package/dist/esm/i18n/th.json +3 -3
  138. package/dist/esm/i18n/tr.json +3 -3
  139. package/dist/esm/i18n/uk.json +3 -3
  140. package/dist/esm/i18n/vi.json +3 -3
  141. package/dist/esm/i18n/zh.json +3 -3
  142. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.js +6 -1
  143. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.js.map +1 -1
  144. package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js +2 -4
  145. package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js.map +1 -1
  146. package/dist/esm/pages/SettingsPage/SettingsCard/SettingCardExpandable.js.map +1 -1
  147. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js +27 -17
  148. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js.map +1 -1
  149. package/dist/esm/pages/TransactionPage/RouteTracker.d.ts +2 -1
  150. package/dist/esm/pages/TransactionPage/StatusBottomSheet.d.ts +0 -5
  151. package/dist/esm/pages/TransactionPage/StatusBottomSheet.js +1 -1
  152. package/dist/esm/pages/TransactionPage/StatusBottomSheet.js.map +1 -1
  153. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js +1 -1
  154. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
  155. package/dist/esm/providers/I18nProvider/types.d.ts +4 -3
  156. package/dist/esm/providers/WalletProvider/EVMProvider.d.ts +0 -1
  157. package/dist/esm/providers/WalletProvider/EVMProvider.js +1 -1
  158. package/dist/esm/providers/WalletProvider/EVMProvider.js.map +1 -1
  159. package/dist/esm/providers/WalletProvider/SVMProvider.d.ts +0 -1
  160. package/dist/esm/providers/WalletProvider/SVMProvider.js +1 -1
  161. package/dist/esm/providers/WalletProvider/SVMProvider.js.map +1 -1
  162. package/dist/esm/providers/WalletProvider/SuiProvider.d.ts +0 -1
  163. package/dist/esm/providers/WalletProvider/SuiProvider.js +1 -1
  164. package/dist/esm/providers/WalletProvider/SuiProvider.js.map +1 -1
  165. package/dist/esm/providers/WalletProvider/UTXOProvider.d.ts +0 -1
  166. package/dist/esm/providers/WalletProvider/UTXOProvider.js +1 -1
  167. package/dist/esm/providers/WalletProvider/UTXOProvider.js.map +1 -1
  168. package/dist/esm/providers/WalletProvider/WalletProvider.d.ts +0 -1
  169. package/dist/esm/providers/WalletProvider/WalletProvider.js +1 -1
  170. package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
  171. package/dist/esm/stores/bookmarks/BookmarkStore.d.ts +1 -2
  172. package/dist/esm/stores/bookmarks/BookmarkStore.js +1 -1
  173. package/dist/esm/stores/bookmarks/BookmarkStore.js.map +1 -1
  174. package/dist/esm/stores/chains/ChainOrderStore.d.ts +0 -5
  175. package/dist/esm/stores/chains/ChainOrderStore.js +2 -2
  176. package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
  177. package/dist/esm/stores/chains/createChainOrderStore.d.ts +3 -2
  178. package/dist/esm/stores/chains/createChainOrderStore.js +13 -8
  179. package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
  180. package/dist/esm/stores/chains/types.d.ts +4 -1
  181. package/dist/esm/stores/chains/useChainOrder.js +5 -1
  182. package/dist/esm/stores/chains/useChainOrder.js.map +1 -1
  183. package/dist/esm/stores/header/types.d.ts +2 -1
  184. package/dist/esm/stores/header/useHeaderStore.d.ts +1 -4
  185. package/dist/esm/stores/header/useHeaderStore.js +3 -3
  186. package/dist/esm/stores/header/useHeaderStore.js.map +1 -1
  187. package/dist/esm/stores/inputMode/useInputModeStore.d.ts +1 -1
  188. package/dist/esm/stores/routes/RouteExecutionStore.d.ts +2 -2
  189. package/dist/esm/stores/routes/RouteExecutionStore.js +1 -1
  190. package/dist/esm/stores/routes/RouteExecutionStore.js.map +1 -1
  191. package/dist/esm/stores/settings/types.d.ts +3 -3
  192. package/dist/esm/stores/settings/types.js.map +1 -1
  193. package/dist/esm/stores/settings/useSettingsStore.d.ts +1 -2
  194. package/dist/esm/stores/settings/useSettingsStore.js +1 -1
  195. package/dist/esm/stores/settings/useSettingsStore.js.map +1 -1
  196. package/dist/esm/stores/settings/useSplitSubvariantStore.d.ts +1 -4
  197. package/dist/esm/stores/settings/useSplitSubvariantStore.js +3 -3
  198. package/dist/esm/stores/settings/useSplitSubvariantStore.js.map +1 -1
  199. package/dist/esm/types/events.d.ts +0 -4
  200. package/dist/esm/types/events.js +0 -4
  201. package/dist/esm/types/events.js.map +1 -1
  202. package/dist/esm/types/token.d.ts +7 -2
  203. package/dist/esm/utils/chainType.d.ts +1 -0
  204. package/dist/esm/utils/chainType.js +2 -0
  205. package/dist/esm/utils/chainType.js.map +1 -1
  206. package/dist/esm/utils/fees.d.ts +1 -4
  207. package/dist/esm/utils/fees.js +3 -3
  208. package/dist/esm/utils/fees.js.map +1 -1
  209. package/dist/esm/utils/format.js +1 -1
  210. package/dist/esm/utils/format.js.map +1 -1
  211. package/dist/esm/utils/navigationRoutes.d.ts +2 -1
  212. package/dist/esm/utils/token.d.ts +8 -0
  213. package/dist/esm/utils/token.js +29 -0
  214. package/dist/esm/utils/token.js.map +1 -0
  215. package/dist/esm/utils/tokenList.d.ts +9 -0
  216. package/dist/esm/utils/tokenList.js +106 -0
  217. package/dist/esm/utils/tokenList.js.map +1 -0
  218. package/package.json +10 -10
  219. package/package.json.tmp +9 -9
  220. package/src/AppProvider.tsx +1 -1
  221. package/src/components/AmountInput/AmountInput.tsx +1 -1
  222. package/src/components/AmountInput/AmountInputAdornment.style.tsx +1 -7
  223. package/src/components/AmountInput/AmountInputEndAdornment.tsx +3 -2
  224. package/src/components/AmountInput/PriceFormHelperText.tsx +4 -3
  225. package/src/components/Avatar/Avatar.tsx +1 -1
  226. package/src/components/Avatar/TokenAvatar.tsx +2 -2
  227. package/src/components/Card/CardButton.style.tsx +0 -8
  228. package/src/components/ChainSelect/ChainSelect.tsx +112 -40
  229. package/src/components/ChainSelect/useChainSelect.ts +3 -3
  230. package/src/components/Chains/AllChainsAvatar.tsx +113 -0
  231. package/src/components/Chains/ChainList.tsx +3 -0
  232. package/src/components/Chains/ChainSearchInput.tsx +2 -2
  233. package/src/components/Chains/SelectChainContent.tsx +1 -0
  234. package/src/components/Chains/VirtualizedChainList.tsx +80 -12
  235. package/src/components/FeeBreakdownTooltip.tsx +2 -5
  236. package/src/components/Header/Header.tsx +1 -1
  237. package/src/components/Header/WalletHeader.tsx +1 -1
  238. package/src/components/RouteCard/RouteCardEssentials.tsx +1 -1
  239. package/src/components/SendToWallet/SendToWalletButton.tsx +0 -1
  240. package/src/components/StepActions/StepActions.tsx +6 -6
  241. package/src/components/Tabs/Tabs.style.tsx +1 -1
  242. package/src/components/Timer/TimerContent.tsx +1 -2
  243. package/src/components/Token/Token.tsx +2 -2
  244. package/src/components/TokenList/TokenDetailsSheet.tsx +4 -9
  245. package/src/components/TokenList/TokenDetailsSheetContent.tsx +2 -6
  246. package/src/components/TokenList/TokenList.tsx +57 -129
  247. package/src/components/TokenList/TokenListItem.tsx +177 -154
  248. package/src/components/TokenList/VirtualizedTokenList.tsx +88 -48
  249. package/src/components/TokenList/types.ts +15 -11
  250. package/src/components/TokenList/useTokenSelect.ts +3 -9
  251. package/src/components/TokenRate/TokenRate.tsx +0 -1
  252. package/src/components/TransactionDetails.tsx +2 -3
  253. package/src/config/version.ts +1 -1
  254. package/src/hooks/timer/time.ts +0 -10
  255. package/src/hooks/timer/useTimer.ts +2 -2
  256. package/src/hooks/useAccountsBalancesData.ts +101 -0
  257. package/src/hooks/useAvailableChains.ts +1 -1
  258. package/src/hooks/useExplorer.ts +1 -1
  259. package/src/hooks/useFilteredByTokenBalances.ts +130 -0
  260. package/src/hooks/useListHeight.ts +2 -3
  261. package/src/hooks/useRoutes.ts +4 -2
  262. package/src/hooks/useToAddressAutoPopulate.ts +1 -1
  263. package/src/hooks/useToken.ts +31 -13
  264. package/src/hooks/useTokenAddressBalance.ts +15 -20
  265. package/src/hooks/useTokenBalances.ts +81 -80
  266. package/src/hooks/useTokenBalancesQueries.ts +94 -0
  267. package/src/hooks/useTokenSearch.ts +4 -7
  268. package/src/hooks/useTokens.ts +153 -87
  269. package/src/i18n/bn.json +3 -3
  270. package/src/i18n/de.json +3 -3
  271. package/src/i18n/en.json +3 -3
  272. package/src/i18n/es.json +3 -3
  273. package/src/i18n/fr.json +3 -3
  274. package/src/i18n/hi.json +3 -3
  275. package/src/i18n/id.json +3 -3
  276. package/src/i18n/it.json +3 -3
  277. package/src/i18n/ja.json +3 -3
  278. package/src/i18n/ko.json +3 -3
  279. package/src/i18n/pl.json +3 -3
  280. package/src/i18n/pt.json +5 -5
  281. package/src/i18n/th.json +3 -3
  282. package/src/i18n/tr.json +3 -3
  283. package/src/i18n/uk.json +3 -3
  284. package/src/i18n/vi.json +3 -3
  285. package/src/i18n/zh.json +3 -3
  286. package/src/pages/SelectTokenPage/SearchTokenInput.tsx +5 -0
  287. package/src/pages/SelectTokenPage/SelectTokenPage.tsx +7 -13
  288. package/src/pages/SettingsPage/SettingsCard/SettingCardExpandable.tsx +0 -1
  289. package/src/pages/SettingsPage/SlippageSettings/SlippageSettings.tsx +33 -30
  290. package/src/pages/TransactionPage/RouteTracker.tsx +1 -1
  291. package/src/pages/TransactionPage/StatusBottomSheet.tsx +5 -3
  292. package/src/pages/TransactionPage/TokenValueBottomSheet.tsx +1 -1
  293. package/src/providers/I18nProvider/types.ts +3 -3
  294. package/src/providers/WalletProvider/EVMProvider.tsx +1 -1
  295. package/src/providers/WalletProvider/SVMProvider.tsx +1 -1
  296. package/src/providers/WalletProvider/SuiProvider.tsx +1 -1
  297. package/src/providers/WalletProvider/UTXOProvider.tsx +1 -1
  298. package/src/providers/WalletProvider/WalletProvider.tsx +1 -1
  299. package/src/stores/bookmarks/BookmarkStore.tsx +1 -1
  300. package/src/stores/chains/ChainOrderStore.tsx +3 -7
  301. package/src/stores/chains/createChainOrderStore.ts +17 -8
  302. package/src/stores/chains/types.ts +3 -1
  303. package/src/stores/chains/useChainOrder.ts +5 -1
  304. package/src/stores/header/types.ts +1 -1
  305. package/src/stores/header/useHeaderStore.tsx +3 -3
  306. package/src/stores/inputMode/useInputModeStore.ts +1 -1
  307. package/src/stores/routes/RouteExecutionStore.tsx +4 -3
  308. package/src/stores/settings/types.ts +2 -6
  309. package/src/stores/settings/useSettingsStore.ts +1 -1
  310. package/src/stores/settings/useSplitSubvariantStore.tsx +5 -4
  311. package/src/types/events.ts +0 -4
  312. package/src/types/token.ts +11 -2
  313. package/src/utils/chainType.ts +2 -0
  314. package/src/utils/fees.ts +3 -3
  315. package/src/utils/format.ts +2 -1
  316. package/src/utils/navigationRoutes.ts +1 -1
  317. package/src/utils/token.ts +67 -0
  318. package/src/utils/tokenList.ts +172 -0
  319. package/dist/esm/AppDrawer.style.d.ts +0 -1
  320. package/dist/esm/AppDrawer.style.js +0 -12
  321. package/dist/esm/AppDrawer.style.js.map +0 -1
  322. package/dist/esm/components/Select.d.ts +0 -3
  323. package/dist/esm/components/Select.js +0 -35
  324. package/dist/esm/components/Select.js.map +0 -1
  325. package/dist/esm/components/StepActions/StepFees.d.ts +0 -5
  326. package/dist/esm/components/StepActions/StepFees.js +0 -32
  327. package/dist/esm/components/StepActions/StepFees.js.map +0 -1
  328. package/dist/esm/components/TokenList/utils.d.ts +0 -2
  329. package/dist/esm/components/TokenList/utils.js +0 -35
  330. package/dist/esm/components/TokenList/utils.js.map +0 -1
  331. package/dist/esm/pages/MainPage/MainPage.style.d.ts +0 -1
  332. package/dist/esm/pages/MainPage/MainPage.style.js +0 -8
  333. package/dist/esm/pages/MainPage/MainPage.style.js.map +0 -1
  334. package/dist/esm/pages/SelectNativeTokenPage.d.ts +0 -2
  335. package/dist/esm/pages/SelectNativeTokenPage.js +0 -23
  336. package/dist/esm/pages/SelectNativeTokenPage.js.map +0 -1
  337. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.style.d.ts +0 -1
  338. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.style.js +0 -6
  339. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.style.js.map +0 -1
  340. package/dist/esm/pages/SelectTokenPage/types.d.ts +0 -4
  341. package/dist/esm/pages/SelectTokenPage/types.js +0 -6
  342. package/dist/esm/pages/SelectTokenPage/types.js.map +0 -1
  343. package/dist/esm/providers/WidgetProvider/utils.d.ts +0 -5
  344. package/dist/esm/providers/WidgetProvider/utils.js +0 -17
  345. package/dist/esm/providers/WidgetProvider/utils.js.map +0 -1
  346. package/dist/esm/stores/form/useFieldController.d.ts +0 -11
  347. package/dist/esm/stores/form/useFieldController.js +0 -20
  348. package/dist/esm/stores/form/useFieldController.js.map +0 -1
  349. package/dist/esm/stores/form/useValidation.d.ts +0 -2
  350. package/dist/esm/stores/form/useValidation.js +0 -14
  351. package/dist/esm/stores/form/useValidation.js.map +0 -1
  352. package/dist/esm/stores/form/useValidationActions.d.ts +0 -2
  353. package/dist/esm/stores/form/useValidationActions.js +0 -10
  354. package/dist/esm/stores/form/useValidationActions.js.map +0 -1
  355. package/src/AppDrawer.style.tsx +0 -12
  356. package/src/components/Select.tsx +0 -42
  357. package/src/components/StepActions/StepFees.tsx +0 -49
  358. package/src/components/TokenList/utils.ts +0 -42
  359. package/src/pages/MainPage/MainPage.style.tsx +0 -8
  360. package/src/pages/SelectNativeTokenPage.tsx +0 -47
  361. package/src/pages/SelectTokenPage/SearchTokenInput.style.tsx +0 -6
  362. package/src/pages/SelectTokenPage/types.ts +0 -4
  363. package/src/providers/WidgetProvider/utils.ts +0 -26
  364. package/src/stores/form/useFieldController.ts +0 -31
  365. package/src/stores/form/useValidation.ts +0 -15
  366. package/src/stores/form/useValidationActions.ts +0 -12
@@ -1,6 +1,5 @@
1
1
  import type { ExtendedChain } from '@lifi/sdk'
2
- import type { Account } from '@lifi/wallet-management'
3
- import type { MouseEventHandler, RefObject } from 'react'
2
+ import type { RefObject } from 'react'
4
3
  import type { FormType } from '../../stores/form/types.js'
5
4
  import type { TokenAmount } from '../../types/token.js'
6
5
 
@@ -12,28 +11,30 @@ export interface TokenListProps {
12
11
  }
13
12
 
14
13
  export interface VirtualizedTokenListProps {
15
- account: Account
16
14
  tokens: TokenAmount[]
17
15
  scrollElementRef: RefObject<HTMLElement | null>
18
16
  isLoading: boolean
19
17
  isBalanceLoading: boolean
20
18
  chainId?: number
21
- chain?: ExtendedChain
22
19
  showCategories?: boolean
23
20
  onClick(tokenAddress: string, chainId?: number): void
24
21
  selectedTokenAddress?: string
22
+ isAllNetworks: boolean
25
23
  }
26
24
 
27
- export interface TokenListItemBaseProps {
25
+ interface TokenListItemBaseProps {
28
26
  onClick?(tokenAddress: string, chainId?: number): void
29
27
  size: number
30
28
  start: number
31
29
  }
32
30
 
33
31
  export interface TokenListItemProps extends TokenListItemBaseProps {
34
- accountAddress?: string
35
32
  token: TokenAmount
36
- onShowTokenDetails: (tokenAddress: string, noContractAddress: boolean) => void
33
+ onShowTokenDetails: (
34
+ tokenAddress: string,
35
+ noContractAddress: boolean,
36
+ chainId: number
37
+ ) => void
37
38
  chain?: ExtendedChain
38
39
  isBalanceLoading?: boolean
39
40
  startAdornment?: React.ReactNode
@@ -42,9 +43,12 @@ export interface TokenListItemProps extends TokenListItemBaseProps {
42
43
  }
43
44
 
44
45
  export interface TokenListItemButtonProps {
45
- onShowTokenDetails: (tokenAddress: string, noContractAddress: boolean) => void
46
- onClick?: MouseEventHandler<HTMLDivElement>
47
- accountAddress?: string
46
+ onShowTokenDetails: (
47
+ tokenAddress: string,
48
+ noContractAddress: boolean,
49
+ chainId: number
50
+ ) => void
51
+ onClick?(tokenAddress: string, chainId?: number): void
48
52
  token: TokenAmount
49
53
  chain?: ExtendedChain
50
54
  isBalanceLoading?: boolean
@@ -57,6 +61,6 @@ export interface TokenListItemAvatarProps {
57
61
 
58
62
  export interface TokenDetailsSheetBase {
59
63
  isOpen(): void
60
- open(address: string, noContractAddress: boolean): void
64
+ open(address: string, noContractAddress: boolean, chainId: number): void
61
65
  close(): void
62
66
  }
@@ -2,7 +2,7 @@ import { useCallback } from 'react'
2
2
  import { useToAddressAutoPopulate } from '../../hooks/useToAddressAutoPopulate.js'
3
3
  import { useWidgetEvents } from '../../hooks/useWidgetEvents.js'
4
4
  import { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'
5
- import { useChainOrderStoreContext } from '../../stores/chains/ChainOrderStore.js'
5
+ import { useChainOrderStore } from '../../stores/chains/ChainOrderStore.js'
6
6
  import type { FormType } from '../../stores/form/types.js'
7
7
  import { FormKeyHelper } from '../../stores/form/types.js'
8
8
  import { useFieldActions } from '../../stores/form/useFieldActions.js'
@@ -10,18 +10,13 @@ import { useSplitSubvariantStore } from '../../stores/settings/useSplitSubvarian
10
10
  import { WidgetEvent } from '../../types/events.js'
11
11
  import type { DisabledUI } from '../../types/widget.js'
12
12
 
13
- export type UseTokenSelectArgs = {
14
- formType: FormType
15
- onClick?: () => void
16
- }
17
-
18
13
  export const useTokenSelect = (formType: FormType, onClick?: () => void) => {
19
14
  const { subvariant, disabledUI } = useWidgetConfig()
20
15
  const splitSubvariant = useSplitSubvariantStore((store) => store.state)
21
16
  const emitter = useWidgetEvents()
22
17
  const { setFieldValue, getFieldValues } = useFieldActions()
23
18
  const autoPopulateToAddress = useToAddressAutoPopulate()
24
- const chainOrderStore = useChainOrderStoreContext()
19
+ const setChain = useChainOrderStore((state) => state.setChain)
25
20
 
26
21
  const tokenKey = FormKeyHelper.getTokenKey(formType)
27
22
 
@@ -71,7 +66,6 @@ export const useTokenSelect = (formType: FormType, onClick?: () => void) => {
71
66
  }
72
67
 
73
68
  // If no opposite token is selected, synchronize the opposite chain to match the currently selected chain
74
- const { setChain } = chainOrderStore.getState()
75
69
  if (!selectedOppositeTokenAddress && selectedChainId) {
76
70
  setFieldValue(
77
71
  FormKeyHelper.getChainKey(oppositeFormType),
@@ -109,12 +103,12 @@ export const useTokenSelect = (formType: FormType, onClick?: () => void) => {
109
103
  },
110
104
  [
111
105
  autoPopulateToAddress,
112
- chainOrderStore,
113
106
  disabledUI,
114
107
  emitter,
115
108
  formType,
116
109
  getFieldValues,
117
110
  onClick,
111
+ setChain,
118
112
  setFieldValue,
119
113
  subvariant,
120
114
  splitSubvariant,
@@ -56,7 +56,6 @@ export const TokenRate: React.FC<TokenRateProps> = ({ route }) => {
56
56
  : `1 ${toToken.symbol} ≈ ${t('format.tokenAmount', { value: toFromRate })} ${fromToken.symbol}`
57
57
 
58
58
  return (
59
- // biome-ignore lint/a11y/useSemanticElements: allowed in react
60
59
  <TokenRateTypography onClick={toggleRate} role="button">
61
60
  {rateText}
62
61
  </TokenRateTypography>
@@ -102,7 +102,6 @@ export const TransactionDetails: React.FC<TransactionDetailsProps> = ({
102
102
  feeCosts={feeCosts}
103
103
  relayerSupport={hasRelayerSupport}
104
104
  >
105
- {/** biome-ignore lint/a11y/useSemanticElements: allowed in react */}
106
105
  <Box
107
106
  onClick={toggleCard}
108
107
  role="button"
@@ -125,7 +124,7 @@ export const TransactionDetails: React.FC<TransactionDetailsProps> = ({
125
124
  lineHeight: 1.429,
126
125
  }}
127
126
  >
128
- {hasRelayerSupport
127
+ {hasRelayerSupport || !combinedFeesUSD
129
128
  ? t('main.fees.free')
130
129
  : t('format.currency', { value: combinedFeesUSD })}
131
130
  </Typography>
@@ -163,7 +162,7 @@ export const TransactionDetails: React.FC<TransactionDetailsProps> = ({
163
162
  variant="body2"
164
163
  sx={{ fontWeight: 600, cursor: 'help' }}
165
164
  >
166
- {hasRelayerSupport
165
+ {hasRelayerSupport || !gasCostUSD
167
166
  ? t('main.fees.free')
168
167
  : t('format.currency', {
169
168
  value: gasCostUSD,
@@ -1,2 +1,2 @@
1
1
  export const name = '@lifi/widget'
2
- export const version = '3.29.1'
2
+ export const version = '3.30.1'
@@ -8,16 +8,6 @@ export type TimeFromMillisecondsType = {
8
8
  days: number
9
9
  }
10
10
 
11
- export type AMPMType = '' | 'pm' | 'am'
12
-
13
- export type FormattedTimeFromMillisecondsType = {
14
- milliseconds: number
15
- seconds: number
16
- minutes: number
17
- hours: number
18
- ampm?: AMPMType
19
- }
20
-
21
11
  export function getTimeFromMilliseconds(
22
12
  millisecs: number,
23
13
  isCountDown = true
@@ -9,14 +9,14 @@ import { validateExpiryTimestamp, validateOnExpire } from './validate.js'
9
9
 
10
10
  const SECOND_INTERVAL = 1000
11
11
 
12
- export type useTimerSettingsType = {
12
+ type useTimerSettingsType = {
13
13
  expiryTimestamp: Date
14
14
  onExpire?: () => void
15
15
  autoStart?: boolean
16
16
  interval?: number
17
17
  }
18
18
 
19
- export type useTimerResultType = TimeFromMillisecondsType & {
19
+ type useTimerResultType = TimeFromMillisecondsType & {
20
20
  start: () => void
21
21
  pause: () => void
22
22
  resume: () => void
@@ -0,0 +1,101 @@
1
+ import type { ChainType, TokenExtended } from '@lifi/sdk'
2
+ import { useAccount } from '@lifi/wallet-management'
3
+ import { useMemo } from 'react'
4
+ import type { FormType } from '../stores/form/types.js'
5
+ import { useChains } from './useChains.js'
6
+ import { useFilteredTokensByBalance } from './useFilteredByTokenBalances.js'
7
+
8
+ export const useAccountsBalancesData = (
9
+ selectedChainId?: number,
10
+ formType?: FormType,
11
+ isAllNetworks?: boolean,
12
+ allTokens?: Record<number, TokenExtended[]>
13
+ ) => {
14
+ const { data: accountsWithTokens, isLoading: isAccountsLoading } =
15
+ useAccountsData(selectedChainId, formType, isAllNetworks, allTokens)
16
+
17
+ // Filter out EVM tokens that do not have balances
18
+ const { data: filteredTokens, isLoading: isCachedBalancesLoading } =
19
+ useFilteredTokensByBalance(accountsWithTokens, formType)
20
+
21
+ return {
22
+ data: filteredTokens,
23
+ isLoading: isAccountsLoading || isCachedBalancesLoading,
24
+ }
25
+ }
26
+
27
+ const useAccountsData = (
28
+ selectedChainId?: number,
29
+ formType?: FormType,
30
+ isAllNetworks?: boolean,
31
+ allTokens?: Record<number, TokenExtended[]>
32
+ ) => {
33
+ const {
34
+ chains: allChains,
35
+ isLoading: isChainsLoading,
36
+ getChainById,
37
+ } = useChains(formType)
38
+ const currentChain = useMemo(() => {
39
+ return selectedChainId
40
+ ? getChainById(selectedChainId, allChains)
41
+ : undefined
42
+ }, [selectedChainId, allChains, getChainById])
43
+ const chains = useMemo(() => {
44
+ return isAllNetworks ? allChains : currentChain ? [currentChain] : undefined
45
+ }, [allChains, isAllNetworks, currentChain])
46
+
47
+ const { accounts: allAccounts, account: currentAccount } = useAccount(
48
+ isAllNetworks ? undefined : { chainType: currentChain?.chainType }
49
+ )
50
+ const accounts = useMemo(() => {
51
+ return isAllNetworks
52
+ ? allAccounts
53
+ : currentAccount
54
+ ? [currentAccount]
55
+ : undefined
56
+ }, [allAccounts, currentAccount, isAllNetworks])
57
+
58
+ const accountsWithTokens = useMemo(() => {
59
+ if (!chains || !allTokens || !accounts?.length) {
60
+ return undefined
61
+ }
62
+ return accounts
63
+ ?.filter((account) => account.address)
64
+ .reduce(
65
+ (acc, account) => {
66
+ if (account.address) {
67
+ const accountChains = chains?.filter(
68
+ (chain) => account.chainType === chain?.chainType
69
+ )
70
+ if (accountChains) {
71
+ const chainIdSet = new Set(accountChains.map((chain) => chain.id))
72
+ const filteredTokens = Object.entries(allTokens).reduce(
73
+ (tokenAcc, [chainIdStr, tokens]) => {
74
+ const chainId = Number(chainIdStr)
75
+ if (chainIdSet.has(chainId)) {
76
+ tokenAcc[chainId] = tokens
77
+ }
78
+ return tokenAcc
79
+ },
80
+ {} as { [chainId: number]: TokenExtended[] }
81
+ )
82
+ acc[account.address] = {
83
+ chainType: account.chainType,
84
+ tokens: filteredTokens,
85
+ }
86
+ }
87
+ }
88
+ return acc
89
+ },
90
+ {} as Record<
91
+ string,
92
+ { chainType: ChainType; tokens: Record<number, TokenExtended[]> }
93
+ >
94
+ )
95
+ }, [accounts, chains, allTokens])
96
+
97
+ return {
98
+ data: accountsWithTokens,
99
+ isLoading: isChainsLoading,
100
+ }
101
+ }
@@ -6,7 +6,7 @@ import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'
6
6
  import { getConfigItemSets, isItemAllowedForSets } from '../utils/item.js'
7
7
  import { getQueryKey } from '../utils/queries.js'
8
8
 
9
- export type GetChainById = (
9
+ type GetChainById = (
10
10
  chainId?: number,
11
11
  chains?: ExtendedChain[]
12
12
  ) => ExtendedChain | undefined
@@ -7,7 +7,7 @@ import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'
7
7
 
8
8
  const sanitiseBaseUrl = (baseUrl: string) => baseUrl.trim().replace(/\/+$/, '')
9
9
 
10
- export type TransactionLinkProps = { chain?: Chain | number } & (
10
+ type TransactionLinkProps = { chain?: Chain | number } & (
11
11
  | {
12
12
  txHash: string
13
13
  txLink?: never
@@ -0,0 +1,130 @@
1
+ import {
2
+ type BaseToken,
3
+ ChainType,
4
+ getWalletBalances,
5
+ type TokenExtended,
6
+ type WalletTokenExtended,
7
+ } from '@lifi/sdk'
8
+ import { useQuery } from '@tanstack/react-query'
9
+ import { useMemo } from 'react'
10
+ import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'
11
+ import type { FormType } from '../stores/form/types.js'
12
+ import { getConfigItemSets, isFormItemAllowed } from '../utils/item.js'
13
+ import { isSupportedToken } from '../utils/tokenList.js'
14
+
15
+ export const useFilteredTokensByBalance = (
16
+ accountsWithTokens?: Record<
17
+ string,
18
+ { chainType: ChainType; tokens: Record<number, TokenExtended[]> }
19
+ >,
20
+ formType?: FormType
21
+ ) => {
22
+ const { tokens: configTokens } = useWidgetConfig()
23
+
24
+ const evmAddress = useMemo(() => {
25
+ const evmAccount = Object.entries(accountsWithTokens ?? {}).find(
26
+ ([_, { chainType }]) => chainType === ChainType.EVM
27
+ )
28
+ return evmAccount?.[0]
29
+ }, [accountsWithTokens])
30
+
31
+ const { data: existingBalances, isLoading } = useQuery({
32
+ queryKey: ['existing-evm-balances', evmAddress],
33
+ queryFn: () => getWalletBalances(evmAddress ?? ''),
34
+ enabled: !!evmAddress,
35
+ refetchInterval: 30_000, // 30 seconds
36
+ staleTime: 30_000, // 30 seconds
37
+ })
38
+
39
+ const accountsWithFilteredTokens = useMemo(() => {
40
+ if (!accountsWithTokens) {
41
+ return undefined
42
+ }
43
+
44
+ // Early return if no existing balances - return all tokens
45
+ const result: Record<string, Record<number, TokenExtended[]>> = {}
46
+ if (!existingBalances) {
47
+ for (const [address, { tokens }] of Object.entries(accountsWithTokens)) {
48
+ result[address] = tokens
49
+ }
50
+ return result
51
+ }
52
+
53
+ for (const [address, { tokens }] of Object.entries(accountsWithTokens)) {
54
+ result[address] = {}
55
+
56
+ for (const [chainIdStr, chainTokens] of Object.entries(tokens)) {
57
+ const chainId = Number(chainIdStr)
58
+ // Get balances for this specific chain
59
+ const balances = existingBalances?.[chainId]
60
+ // If no balances, RPC all tokens of the chain
61
+ if (!balances?.length) {
62
+ if (chainTokens.length) {
63
+ result[address][chainId] = chainTokens
64
+ }
65
+ continue
66
+ }
67
+
68
+ // Optimize token matching with Set for O(1) lookup
69
+ const balanceSet = new Set(
70
+ balances.map((balance: WalletTokenExtended) =>
71
+ balance.address.toLowerCase()
72
+ )
73
+ )
74
+
75
+ // Get tokens that are in chainTokens and have balances
76
+ const filteredTokens = chainTokens.filter((token) => {
77
+ const tokenKey = token.address.toLowerCase()
78
+ return balanceSet.has(tokenKey)
79
+ })
80
+
81
+ // Get tokens that are in balances but not in chainTokens
82
+ const chainTokenSet = new Set(
83
+ chainTokens.map((token) => token.address.toLowerCase())
84
+ )
85
+
86
+ // Get allowed addresses from config tokens
87
+ const allowedAddressesConfig = getConfigItemSets(
88
+ configTokens,
89
+ (tokens: BaseToken[]) =>
90
+ new Set(
91
+ tokens
92
+ .filter((t) => Number(t.chainId) === chainId)
93
+ .map((t) => t.address.toLowerCase())
94
+ ),
95
+ formType
96
+ )
97
+
98
+ const additionalTokens = balances.filter(
99
+ (balance: WalletTokenExtended) => {
100
+ const balanceKey = balance.address.toLowerCase()
101
+ return (
102
+ !chainTokenSet.has(balanceKey) &&
103
+ isSupportedToken(balance) &&
104
+ isFormItemAllowed(
105
+ balance,
106
+ allowedAddressesConfig,
107
+ formType,
108
+ (t) => t.address.toLowerCase()
109
+ )
110
+ )
111
+ }
112
+ ) as TokenExtended[]
113
+
114
+ // Combine both sets of tokens - convert WalletTokenExtended to TokenAmount
115
+ const allTokens = [
116
+ ...filteredTokens,
117
+ ...additionalTokens,
118
+ ] as TokenExtended[]
119
+
120
+ if (allTokens.length) {
121
+ result[address][chainId] = allTokens
122
+ }
123
+ }
124
+ }
125
+
126
+ return result
127
+ }, [accountsWithTokens, existingBalances, configTokens, formType])
128
+
129
+ return { data: accountsWithFilteredTokens, isLoading }
130
+ }
@@ -51,8 +51,8 @@ interface UseContentHeightProps {
51
51
  headerRef?: RefObject<HTMLElement | null>
52
52
  }
53
53
 
54
- export const defaultMinListHeight = 360
55
- export const minMobileListHeight = 160
54
+ const defaultMinListHeight = 360
55
+ const minMobileListHeight = 160
56
56
 
57
57
  // NOTE: this hook is implicitly tied to the widget height functionality in the
58
58
  // AppExpandedContainer, RelativeContainer and CssBaselineContainer components as defined in AppContainer.ts
@@ -102,7 +102,6 @@ export const useListHeight = ({
102
102
  )
103
103
 
104
104
  return {
105
- minListHeight,
106
105
  listHeight,
107
106
  }
108
107
  }
@@ -5,6 +5,7 @@ import {
5
5
  getContractCallsQuote,
6
6
  getRelayerQuote,
7
7
  getRoutes,
8
+ isGaslessStep,
8
9
  isRelayerStep,
9
10
  LiFiErrorCode,
10
11
  } from '@lifi/sdk'
@@ -331,8 +332,9 @@ export const useRoutes = ({ observableRoute }: RoutesProps = {}) => {
331
332
  return
332
333
  }
333
334
 
334
- const isObservableRelayerRoute =
335
- observableRoute?.steps?.some(isRelayerStep)
335
+ const isObservableRelayerRoute = observableRoute?.steps?.some(
336
+ (step) => isRelayerStep(step) && isGaslessStep(step, fromChain)
337
+ )
336
338
 
337
339
  const shouldUseMainRoutes =
338
340
  !observableRoute || !isObservableRelayerRoute
@@ -7,7 +7,7 @@ import { useSendToWalletActions } from '../stores/settings/useSendToWalletStore.
7
7
  import { getChainTypeFromAddress } from '../utils/chainType.js'
8
8
  import { useAvailableChains } from './useAvailableChains.js'
9
9
 
10
- export type UpdateToAddressArgs = {
10
+ type UpdateToAddressArgs = {
11
11
  formType: FormType
12
12
  selectedToAddress?: string
13
13
  selectedChainId?: number
@@ -2,22 +2,40 @@ import { useMemo } from 'react'
2
2
  import { useTokenSearch } from './useTokenSearch.js'
3
3
  import { useTokens } from './useTokens.js'
4
4
 
5
- export const useToken = (chainId?: number, tokenAddress?: string) => {
6
- const { tokens, isLoading } = useTokens(chainId)
5
+ export const useToken = (
6
+ chainId?: number,
7
+ tokenAddress?: string,
8
+ latest?: boolean
9
+ ) => {
10
+ const { allTokens, isLoading: isTokensLoading } = useTokens()
7
11
 
8
- const token = useMemo(() => {
9
- const token = tokens?.find(
10
- (token) => token.address === tokenAddress && token.chainId === chainId
11
- )
12
- return token
13
- }, [chainId, tokenAddress, tokens])
12
+ const token = useMemo(
13
+ () =>
14
+ chainId && tokenAddress
15
+ ? allTokens?.[chainId]?.find(
16
+ (t) => t.address.toLowerCase() === tokenAddress.toLowerCase()
17
+ )
18
+ : undefined,
19
+ [allTokens, chainId, tokenAddress]
20
+ )
14
21
 
15
- const tokenSearchEnabled = !isLoading && !token
16
- const { token: searchedToken, isLoading: isSearchedTokenLoading } =
17
- useTokenSearch(chainId, tokenAddress, tokenSearchEnabled)
22
+ const tokenSearchEnabled =
23
+ !!chainId && !!tokenAddress && (latest || (!isTokensLoading && !token))
24
+
25
+ const { token: searchedToken, isLoading: isSearchLoading } = useTokenSearch(
26
+ chainId,
27
+ tokenAddress,
28
+ tokenSearchEnabled
29
+ )
30
+
31
+ const resolvedToken = latest
32
+ ? (searchedToken ?? token)
33
+ : (token ?? searchedToken)
18
34
 
19
35
  return {
20
- token: token ?? searchedToken,
21
- isLoading: isLoading || (tokenSearchEnabled && isSearchedTokenLoading),
36
+ token: resolvedToken,
37
+ isLoading:
38
+ !resolvedToken &&
39
+ (isTokensLoading || (tokenSearchEnabled && isSearchLoading)),
22
40
  }
23
41
  }
@@ -1,32 +1,27 @@
1
- import { useMemo } from 'react'
2
- import type { TokenAmount } from '../types/token.js'
3
- import { useTokenBalances } from './useTokenBalances.js'
1
+ import type { TokenAmount } from '@lifi/sdk'
2
+ import { useAccount } from '@lifi/wallet-management'
3
+ import { useChain } from './useChain.js'
4
+ import { useToken } from './useToken.js'
5
+ import { useTokenBalance } from './useTokenBalance.js'
4
6
 
5
7
  export const useTokenAddressBalance = (
6
8
  chainId?: number,
7
9
  tokenAddress?: string
8
10
  ) => {
9
- const { tokens, tokensWithBalance, chain, isBalanceLoading, refetch } =
10
- useTokenBalances(chainId)
11
+ const { chain, isLoading: isChainLoading } = useChain(chainId)
12
+ const { account } = useAccount({ chainType: chain?.chainType })
13
+ const { token, isLoading: isTokenLoading } = useToken(chainId, tokenAddress)
11
14
 
12
- const token = useMemo(() => {
13
- if (tokenAddress && chainId) {
14
- let token = tokensWithBalance?.find(
15
- (token) => token.address === tokenAddress && token.chainId === chainId
16
- )
17
- if (!token) {
18
- token = tokens?.find(
19
- (token) => token.address === tokenAddress && token.chainId === chainId
20
- )
21
- }
22
- return token as TokenAmount
23
- }
24
- }, [chainId, tokenAddress, tokens, tokensWithBalance])
15
+ const {
16
+ token: tokenBalance,
17
+ isLoading: isBalanceLoading,
18
+ refetch,
19
+ } = useTokenBalance(account?.address, token)
25
20
 
26
21
  return {
27
- token,
22
+ token: tokenBalance ?? (token as TokenAmount),
28
23
  chain,
29
- isLoading: isBalanceLoading,
24
+ isLoading: isBalanceLoading || isChainLoading || isTokenLoading,
30
25
  refetch,
31
26
  }
32
27
  }