@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/widget",
3
- "version": "3.29.1",
3
+ "version": "3.30.1",
4
4
  "description": "LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.",
5
5
  "type": "module",
6
6
  "main": "./dist/esm/index.js",
@@ -34,31 +34,31 @@
34
34
  "@bigmi/core": "^0.5.2",
35
35
  "@emotion/react": "^11.14.0",
36
36
  "@emotion/styled": "^11.14.1",
37
- "@lifi/sdk": "^3.11.3",
38
- "@mui/icons-material": "^7.3.1",
39
- "@mui/material": "^7.3.1",
40
- "@mui/system": "^7.3.1",
41
- "@mysten/sui": "^1.37.4",
37
+ "@lifi/sdk": "^3.12.2",
38
+ "@mui/icons-material": "^7.3.2",
39
+ "@mui/material": "^7.3.2",
40
+ "@mui/system": "^7.3.2",
41
+ "@mysten/sui": "^1.37.6",
42
42
  "@solana/wallet-adapter-base": "^0.9.27",
43
43
  "@solana/wallet-adapter-coinbase": "^0.1.23",
44
44
  "@solana/web3.js": "^1.98.4",
45
45
  "@tanstack/react-virtual": "^3.13.12",
46
- "i18next": "^25.4.2",
46
+ "i18next": "^25.5.2",
47
47
  "microdiff": "^1.5.0",
48
48
  "mitt": "^3.0.1",
49
49
  "react-i18next": "^15.7.3",
50
50
  "react-intersection-observer": "^9.16.0",
51
51
  "react-router-dom": "^6.30.0",
52
52
  "react-transition-group": "^4.4.5",
53
- "viem": "^2.36.0",
53
+ "viem": "^2.37.4",
54
54
  "zustand": "^5.0.8",
55
- "@lifi/wallet-management": "^3.15.1"
55
+ "@lifi/wallet-management": "^3.16.1"
56
56
  },
57
57
  "peerDependencies": {
58
58
  "@bigmi/react": ">=0.5.0",
59
59
  "@mysten/dapp-kit": ">=0.17.0",
60
60
  "@solana/wallet-adapter-react": ">=0.15.35",
61
- "@tanstack/react-query": ">=5.68.0",
61
+ "@tanstack/react-query": ">=5.87.0",
62
62
  "react": ">=18",
63
63
  "react-dom": ">=18",
64
64
  "wagmi": ">=2.14.0"
package/package.json.tmp CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/widget",
3
- "version": "3.29.1",
3
+ "version": "3.30.1",
4
4
  "description": "LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.",
5
5
  "type": "module",
6
6
  "main": "./src/index.ts",
@@ -53,24 +53,24 @@
53
53
  "@bigmi/core": "^0.5.2",
54
54
  "@emotion/react": "^11.14.0",
55
55
  "@emotion/styled": "^11.14.1",
56
- "@lifi/sdk": "^3.11.3",
56
+ "@lifi/sdk": "^3.12.2",
57
57
  "@lifi/wallet-management": "workspace:^",
58
- "@mui/icons-material": "^7.3.1",
59
- "@mui/material": "^7.3.1",
60
- "@mui/system": "^7.3.1",
61
- "@mysten/sui": "^1.37.4",
58
+ "@mui/icons-material": "^7.3.2",
59
+ "@mui/material": "^7.3.2",
60
+ "@mui/system": "^7.3.2",
61
+ "@mysten/sui": "^1.37.6",
62
62
  "@solana/wallet-adapter-base": "^0.9.27",
63
63
  "@solana/wallet-adapter-coinbase": "^0.1.23",
64
64
  "@solana/web3.js": "^1.98.4",
65
65
  "@tanstack/react-virtual": "^3.13.12",
66
- "i18next": "^25.4.2",
66
+ "i18next": "^25.5.2",
67
67
  "microdiff": "^1.5.0",
68
68
  "mitt": "^3.0.1",
69
69
  "react-i18next": "^15.7.3",
70
70
  "react-intersection-observer": "^9.16.0",
71
71
  "react-router-dom": "^6.30.0",
72
72
  "react-transition-group": "^4.4.5",
73
- "viem": "^2.36.0",
73
+ "viem": "^2.37.4",
74
74
  "zustand": "^5.0.8"
75
75
  },
76
76
  "devDependencies": {
@@ -86,7 +86,7 @@
86
86
  "@bigmi/react": ">=0.5.0",
87
87
  "@mysten/dapp-kit": ">=0.17.0",
88
88
  "@solana/wallet-adapter-react": ">=0.15.35",
89
- "@tanstack/react-query": ">=5.68.0",
89
+ "@tanstack/react-query": ">=5.87.0",
90
90
  "react": ">=18",
91
91
  "react-dom": ">=18",
92
92
  "wagmi": ">=2.14.0"
@@ -47,7 +47,7 @@ const memoryRouterProps: MemoryRouterProps = {
47
47
  },
48
48
  }
49
49
 
50
- export const AppRouter: React.FC<PropsWithChildren> = ({ children }) => {
50
+ const AppRouter: React.FC<PropsWithChildren> = ({ children }) => {
51
51
  const { buildUrl } = useWidgetConfig()
52
52
  const inRouterContext = useInRouterContext()
53
53
  const Router = inRouterContext ? Fragment : MemoryRouter
@@ -60,7 +60,7 @@ export const AmountInput: React.FC<FormTypeProps & CardProps> = ({
60
60
  )
61
61
  }
62
62
 
63
- export const AmountInputBase: React.FC<
63
+ const AmountInputBase: React.FC<
64
64
  FormTypeProps &
65
65
  CardProps & {
66
66
  token?: Token
@@ -1,4 +1,4 @@
1
- import { Box, Skeleton, styled } from '@mui/material'
1
+ import { Box, styled } from '@mui/material'
2
2
  import { cardClasses } from '@mui/material/Card'
3
3
  import { ButtonTertiary } from '../ButtonTertiary.js'
4
4
 
@@ -67,9 +67,3 @@ export const MaxButton = styled(ButtonTertiary)(({ theme }) => ({
67
67
  },
68
68
  },
69
69
  }))
70
-
71
- export const MaxButtonSkeleton = styled(Skeleton)(({ theme }) => ({
72
- width: 46,
73
- height: 24,
74
- borderRadius: theme.vars.shape.borderRadiusSecondary,
75
- }))
@@ -1,4 +1,5 @@
1
1
  import { InputAdornment } from '@mui/material'
2
+ import { memo } from 'react'
2
3
  import { useTranslation } from 'react-i18next'
3
4
  import { formatUnits } from 'viem'
4
5
  import { useAvailableChains } from '../../hooks/useAvailableChains.js'
@@ -10,7 +11,7 @@ import { useFieldActions } from '../../stores/form/useFieldActions.js'
10
11
  import { useFieldValues } from '../../stores/form/useFieldValues.js'
11
12
  import { ButtonContainer, MaxButton } from './AmountInputAdornment.style.js'
12
13
 
13
- export const AmountInputEndAdornment = ({ formType }: FormTypeProps) => {
14
+ export const AmountInputEndAdornment = memo(({ formType }: FormTypeProps) => {
14
15
  const { t } = useTranslation()
15
16
  const { getChainById } = useAvailableChains()
16
17
  const { setFieldValue } = useFieldActions()
@@ -88,4 +89,4 @@ export const AmountInputEndAdornment = ({ formType }: FormTypeProps) => {
88
89
  ) : null}
89
90
  </InputAdornment>
90
91
  )
91
- }
92
+ })
@@ -1,6 +1,7 @@
1
1
  import type { TokenAmount } from '@lifi/sdk'
2
2
  import SwapVertIcon from '@mui/icons-material/SwapVert'
3
3
  import { FormHelperText, Skeleton, Typography } from '@mui/material'
4
+ import { memo } from 'react'
4
5
  import { useTranslation } from 'react-i18next'
5
6
  import { useTokenAddressBalance } from '../../hooks/useTokenAddressBalance.js'
6
7
  import type { FormTypeProps } from '../../stores/form/types.js'
@@ -10,7 +11,7 @@ import { useInputModeStore } from '../../stores/inputMode/useInputModeStore.js'
10
11
  import { formatTokenAmount, formatTokenPrice } from '../../utils/format.js'
11
12
  import { InputPriceButton } from './PriceFormHelperText.style.js'
12
13
 
13
- export const PriceFormHelperText: React.FC<FormTypeProps> = ({ formType }) => {
14
+ export const PriceFormHelperText = memo<FormTypeProps>(({ formType }) => {
14
15
  const [chainId, tokenAddress] = useFieldValues(
15
16
  FormKeyHelper.getChainKey(formType),
16
17
  FormKeyHelper.getTokenKey(formType)
@@ -25,9 +26,9 @@ export const PriceFormHelperText: React.FC<FormTypeProps> = ({ formType }) => {
25
26
  token={token}
26
27
  />
27
28
  )
28
- }
29
+ })
29
30
 
30
- export const PriceFormHelperTextBase: React.FC<
31
+ const PriceFormHelperTextBase: React.FC<
31
32
  FormTypeProps & {
32
33
  isLoading?: boolean
33
34
  tokenAddress?: string
@@ -39,7 +39,7 @@ export const AvatarBadgedSkeleton: React.FC<{
39
39
  )
40
40
  }
41
41
 
42
- export const AvatarSkeleton: React.FC<{
42
+ const AvatarSkeleton: React.FC<{
43
43
  avatarSize: number
44
44
  badgeSize: number
45
45
  }> = ({ avatarSize, badgeSize }) => {
@@ -45,7 +45,7 @@ export const TokenAvatar: React.FC<{
45
45
  )
46
46
  }
47
47
 
48
- export const TokenAvatarFallback: React.FC<{
48
+ const TokenAvatarFallback: React.FC<{
49
49
  token?: StaticToken
50
50
  isLoading?: boolean
51
51
  sx?: SxProps<Theme>
@@ -69,7 +69,7 @@ export const TokenAvatarFallback: React.FC<{
69
69
  )
70
70
  }
71
71
 
72
- export const TokenAvatarBase: React.FC<{
72
+ const TokenAvatarBase: React.FC<{
73
73
  token?: StaticToken
74
74
  chain?: Chain
75
75
  isLoading?: boolean
@@ -15,14 +15,6 @@ export const CardRowButton = styled(ButtonBase)(({ theme }) => ({
15
15
  borderRadius: theme.vars.shape.borderRadius,
16
16
  }))
17
17
 
18
- export const CardRowContainer = styled(Box)(({ theme }) => ({
19
- display: 'flex',
20
- width: '100%',
21
- justifyContent: 'space-between',
22
- alignItems: 'center',
23
- padding: theme.spacing(2),
24
- }))
25
-
26
18
  export const CardValue = styled(Typography)({
27
19
  lineHeight: '1.25',
28
20
  fontWeight: 500,
@@ -1,15 +1,20 @@
1
1
  import type { EVMChain } from '@lifi/sdk'
2
- import { Skeleton, Tooltip } from '@mui/material'
2
+ import { Skeleton, type Theme, Tooltip, useMediaQuery } from '@mui/material'
3
3
  import { memo, useCallback, useEffect, useMemo } from 'react'
4
+ import { useTranslation } from 'react-i18next'
4
5
  import { useNavigate } from 'react-router-dom'
6
+ import { useChainOrderStore } from '../../stores/chains/ChainOrderStore.js'
5
7
  import {
6
8
  maxChainsToOrder,
7
9
  maxChainsToShow,
10
+ maxGridItemsToShow,
8
11
  } from '../../stores/chains/createChainOrderStore.js'
9
12
  import type { FormTypeProps } from '../../stores/form/types.js'
10
13
  import { FormKeyHelper } from '../../stores/form/types.js'
14
+ import { useFieldActions } from '../../stores/form/useFieldActions.js'
11
15
  import { useFieldValues } from '../../stores/form/useFieldValues.js'
12
16
  import { navigationRoutes } from '../../utils/navigationRoutes.js'
17
+ import { AllChainsAvatar } from '../Chains/AllChainsAvatar.js'
13
18
  import {
14
19
  ChainAvatar,
15
20
  ChainCard,
@@ -20,16 +25,27 @@ import {
20
25
  import { useChainSelect } from './useChainSelect.js'
21
26
 
22
27
  export const ChainSelect = memo(({ formType }: FormTypeProps) => {
28
+ const { t } = useTranslation()
23
29
  const navigate = useNavigate()
30
+ const { setFieldValue } = useFieldActions()
31
+ const isMobile = useMediaQuery((theme: Theme) =>
32
+ theme.breakpoints.down(theme.breakpoints.values.xs)
33
+ )
34
+
24
35
  const {
25
36
  chainOrder,
26
37
  chains,
27
- getChains,
28
38
  isLoading,
39
+ getSelectedChains,
29
40
  setChainOrder,
30
41
  setCurrentChain,
31
42
  } = useChainSelect(formType)
32
43
 
44
+ const { isAllNetworks, setIsAllNetworks } = useChainOrderStore((state) => ({
45
+ isAllNetworks: state.isAllNetworks,
46
+ setIsAllNetworks: state.setIsAllNetworks,
47
+ }))
48
+
33
49
  const [chainId] = useFieldValues(FormKeyHelper.getChainKey(formType))
34
50
 
35
51
  useEffect(() => {
@@ -42,60 +58,116 @@ export const ChainSelect = memo(({ formType }: FormTypeProps) => {
42
58
  }
43
59
  }, [chainId, chainOrder, formType, setChainOrder])
44
60
 
61
+ const onChainSelect = useCallback(
62
+ (selectedChainId: number) => {
63
+ setIsAllNetworks(false)
64
+ setCurrentChain(selectedChainId)
65
+ },
66
+ [setIsAllNetworks, setCurrentChain]
67
+ )
68
+
45
69
  const showAllChains = useCallback(() => {
46
70
  navigate(navigationRoutes[`${formType}Chain`])
47
71
  }, [navigate, formType])
48
72
 
49
- const { chainsToHide, chainsToShow, tilesCount } = useMemo(() => {
50
- // We check if we can accommodate all the chains on the grid
51
- // If there are more than 10 chains we show the number of hidden chains as the last one tile
52
- const chainsToHide =
53
- chains?.length === maxChainsToShow
54
- ? 0
55
- : (chains?.length ?? 0) - maxChainsToOrder
73
+ const selectAllNetworks = useCallback(() => {
74
+ setIsAllNetworks(true)
75
+ setFieldValue('tokenSearchFilter', '')
76
+ }, [setIsAllNetworks, setFieldValue])
56
77
 
57
- // When there is less than 10 chains we don't care about the order
58
- const chainsToShow = chainsToHide > 0 ? getChains() : chains
78
+ const chainsToHide =
79
+ chains?.length === maxChainsToShow
80
+ ? 0
81
+ : (chains?.length ?? 0) - maxChainsToOrder
59
82
 
60
- // Number of tiles to show in the grid
61
- const tilesCount = (chainsToShow?.length ?? 0) + (chainsToHide > 0 ? 1 : 0)
83
+ const chainsToShow = useMemo(
84
+ () => (chainsToHide > 0 ? getSelectedChains() : chains) ?? [],
85
+ [chainsToHide, getSelectedChains, chains]
86
+ )
87
+
88
+ const showAllNetworks = chainsToShow.length > 1
89
+
90
+ const tilesCount =
91
+ chainsToShow.length + (showAllNetworks ? 1 : 0) + (chainsToHide > 0 ? 1 : 0)
62
92
 
63
- return { chainsToHide, chainsToShow, tilesCount }
64
- }, [chains, getChains])
93
+ if (isLoading) {
94
+ return (
95
+ <ChainContainer itemCount={tilesCount}>
96
+ {Array.from({ length: maxGridItemsToShow }).map((_, index) => (
97
+ <Skeleton
98
+ key={index}
99
+ variant="rectangular"
100
+ width={56}
101
+ height={isMobile ? 36 : 56}
102
+ sx={{ borderRadius: 1 }}
103
+ />
104
+ ))}
105
+ </ChainContainer>
106
+ )
107
+ }
65
108
 
66
109
  return (
67
110
  <ChainContainer itemCount={tilesCount}>
68
- {isLoading
69
- ? Array.from({ length: maxChainsToOrder }).map((_, index) => (
70
- <Skeleton
71
- key={index}
72
- variant="rectangular"
73
- width={56}
74
- height={56}
75
- sx={{ borderRadius: 1 }}
111
+ {showAllNetworks && (
112
+ <Tooltip title={t('main.allNetworks')} enterNextDelay={100}>
113
+ <ChainCard
114
+ component="button"
115
+ onClick={selectAllNetworks}
116
+ type={isAllNetworks ? 'selected' : 'default'}
117
+ selectionColor="secondary"
118
+ >
119
+ <AllChainsAvatar
120
+ chains={chains ?? []}
121
+ size={isMobile ? 'small' : 'medium'}
76
122
  />
77
- ))
78
- : chainsToShow?.map((chain: EVMChain) => (
79
- <Tooltip key={chain.id} title={chain.name} enterNextDelay={100}>
80
- <ChainCard
81
- component="button"
82
- onClick={() => setCurrentChain(chain.id)}
83
- type={chainId === chain.id ? 'selected' : 'default'}
84
- selectionColor="secondary"
85
- >
86
- <ChainAvatar src={chain.logoURI} alt={chain.key}>
87
- {chain.name[0]}
88
- </ChainAvatar>
89
- </ChainCard>
90
- </Tooltip>
91
- ))}
92
- {chainsToHide > 0 ? (
123
+ </ChainCard>
124
+ </Tooltip>
125
+ )}
126
+ {chainsToShow.map((chain: EVMChain) => (
127
+ <ChainItem
128
+ key={chain.id}
129
+ chain={chain}
130
+ isSelected={chainId === chain.id}
131
+ isAllNetworks={isAllNetworks}
132
+ onSelect={onChainSelect}
133
+ />
134
+ ))}
135
+ {chainsToHide > 0 && (
93
136
  <ChainCard component="button" onClick={showAllChains}>
94
137
  <MoreChainsBox>
95
138
  <MoreChainsText>+{chainsToHide}</MoreChainsText>
96
139
  </MoreChainsBox>
97
140
  </ChainCard>
98
- ) : null}
141
+ )}
99
142
  </ChainContainer>
100
143
  )
101
144
  })
145
+
146
+ const ChainItem = memo(
147
+ ({
148
+ chain,
149
+ isSelected,
150
+ isAllNetworks,
151
+ onSelect,
152
+ }: {
153
+ chain: EVMChain
154
+ isSelected: boolean
155
+ isAllNetworks: boolean
156
+ onSelect: (id: number) => void
157
+ }) => {
158
+ return (
159
+ <Tooltip title={chain.name} enterNextDelay={100}>
160
+ <ChainCard
161
+ component="button"
162
+ onClick={() => onSelect(chain.id)}
163
+ type={!isAllNetworks && isSelected ? 'selected' : 'default'}
164
+ selectionColor="secondary"
165
+ >
166
+ <ChainAvatar src={chain.logoURI} alt={chain.key}>
167
+ {chain.name[0]}
168
+ </ChainAvatar>
169
+ </ChainCard>
170
+ </Tooltip>
171
+ )
172
+ }
173
+ )
@@ -31,7 +31,7 @@ export const useChainSelect = (formType: FormType) => {
31
31
  const swapOnly = useSwapOnly()
32
32
  const { tryResetToAddress } = useToAddressReset()
33
33
 
34
- const getChains = () => {
34
+ const getSelectedChains = useCallback(() => {
35
35
  if (!chains) {
36
36
  return []
37
37
  }
@@ -39,7 +39,7 @@ export const useChainSelect = (formType: FormType) => {
39
39
  .map((chainId) => chains.find((chain) => chain.id === chainId))
40
40
  .filter(Boolean) as EVMChain[]
41
41
  return selectedChains
42
- }
42
+ }, [chains, chainOrder])
43
43
 
44
44
  const setCurrentChain = useCallback(
45
45
  (chainId: number) => {
@@ -82,7 +82,7 @@ export const useChainSelect = (formType: FormType) => {
82
82
  return {
83
83
  chainOrder,
84
84
  chains,
85
- getChains,
85
+ getSelectedChains,
86
86
  isLoading,
87
87
  setChainOrder,
88
88
  setCurrentChain,
@@ -0,0 +1,113 @@
1
+ import { ChainType, type EVMChain, type ExtendedChain } from '@lifi/sdk'
2
+ import { Avatar, Box } from '@mui/material'
3
+ import { memo, useMemo } from 'react'
4
+
5
+ interface AllChainsAvatarProps {
6
+ chains: ExtendedChain[] | EVMChain[]
7
+ size: 'small' | 'medium'
8
+ }
9
+
10
+ const chainTypeIcons = [
11
+ {
12
+ name: 'Ethereum',
13
+ chainType: ChainType.EVM,
14
+ icon: 'https://lifinance.github.io/types/src/assets/icons/chains/ethereum.svg',
15
+ },
16
+ {
17
+ name: 'Solana',
18
+ chainType: ChainType.SVM,
19
+ icon: 'https://lifinance.github.io/types/src/assets/icons/chains/solana.svg',
20
+ },
21
+ {
22
+ name: 'Bitcoin',
23
+ chainType: ChainType.UTXO,
24
+ icon: 'https://lifinance.github.io/types/src/assets/icons/chains/bitcoin.svg',
25
+ },
26
+ {
27
+ name: 'Sui',
28
+ chainType: ChainType.MVM,
29
+ icon: 'https://lifinance.github.io/types/src/assets/icons/chains/sui.svg',
30
+ },
31
+ ]
32
+
33
+ const maxChainAvatarsCount = chainTypeIcons.length
34
+
35
+ export const AllChainsAvatar = memo(
36
+ ({ chains, size }: AllChainsAvatarProps) => {
37
+ const icons = useMemo(() => {
38
+ // Get existing ecosystem icons
39
+ const existingChainTypeIcons = chainTypeIcons.filter((predefinedChain) =>
40
+ chains.some((chain) => chain.chainType === predefinedChain.chainType)
41
+ )
42
+ if (existingChainTypeIcons.length === maxChainAvatarsCount) {
43
+ return existingChainTypeIcons
44
+ }
45
+
46
+ const remainingSlots =
47
+ maxChainAvatarsCount - existingChainTypeIcons.length
48
+
49
+ const chainsWithLogos = chains.filter((chain) => {
50
+ // Filter out chain icons matching ecosystem icons
51
+ const hasPredefinedIcon = existingChainTypeIcons.some(
52
+ (icon) => icon.name === chain.name
53
+ )
54
+ const hasLogoURI = Boolean(chain.logoURI)
55
+ return !hasPredefinedIcon && hasLogoURI
56
+ })
57
+
58
+ const additionalIcons = chainsWithLogos
59
+ .slice(0, remainingSlots)
60
+ .map((chain) => ({
61
+ name: chain.name,
62
+ chainType: chain.chainType,
63
+ icon: chain.logoURI!,
64
+ }))
65
+
66
+ return [...existingChainTypeIcons, ...additionalIcons]
67
+ }, [chains])
68
+
69
+ const wrapperSize = size === 'small' ? '32px' : '40px'
70
+ const avatarSize = size === 'small' ? '12px' : '16px'
71
+ const avatarsCount = Math.min(icons.length, maxChainAvatarsCount)
72
+ const gridRows = avatarsCount > 2 ? 2 : 1
73
+ const gridColumns = avatarsCount > 1 ? 2 : 1
74
+
75
+ return (
76
+ <Box
77
+ sx={{
78
+ width: wrapperSize,
79
+ height: wrapperSize,
80
+ display: 'grid',
81
+ gridTemplateRows: `repeat(${gridRows}, 1fr)`,
82
+ gridTemplateColumns: `repeat(${gridColumns}, 1fr)`,
83
+ placeItems: 'center',
84
+ }}
85
+ >
86
+ {icons.slice(0, avatarsCount).map((chain, idx) => {
87
+ const isThirdAvatarInThreeAvatarLayout =
88
+ avatarsCount === 3 && idx === 2
89
+
90
+ return (
91
+ <Avatar
92
+ key={`${chain.chainType}-${idx}`}
93
+ src={chain.icon}
94
+ alt={chain.name}
95
+ sx={{
96
+ width: avatarSize,
97
+ height: avatarSize,
98
+ margin: 'auto',
99
+ ...(isThirdAvatarInThreeAvatarLayout && {
100
+ gridColumn: '1 / span 2',
101
+ gridRow: '2',
102
+ justifySelf: 'center',
103
+ }),
104
+ }}
105
+ >
106
+ {chain.chainType[0]}
107
+ </Avatar>
108
+ )
109
+ })}
110
+ </Box>
111
+ )
112
+ }
113
+ )
@@ -17,12 +17,14 @@ interface ChainListProps {
17
17
  onSelect: (chain: ExtendedChain) => void
18
18
  selectedChainId?: number
19
19
  isLoading: boolean
20
+ hasSearchQuery: boolean
20
21
  inExpansion: boolean
21
22
  }
22
23
 
23
24
  export const ChainList = ({
24
25
  parentRef,
25
26
  chains,
27
+ hasSearchQuery,
26
28
  onSelect,
27
29
  selectedChainId,
28
30
  isLoading,
@@ -78,6 +80,7 @@ export const ChainList = ({
78
80
  <VirtualizedChainList
79
81
  scrollElementRef={parentRef}
80
82
  chains={chains}
83
+ hasSearchQuery={hasSearchQuery}
81
84
  onSelect={onSelect}
82
85
  selectedChainId={selectedChainId}
83
86
  itemsSize={itemsSize}
@@ -33,7 +33,7 @@ export const ChainSearchInput = ({
33
33
  <SearchInput
34
34
  inputRef={inputRef}
35
35
  onChange={onChange}
36
- placeholder={t('main.searchChain')}
36
+ placeholder={t('main.searchNetwork')}
37
37
  size="small"
38
38
  onClear={handleClear}
39
39
  />
@@ -45,7 +45,7 @@ export const ChainSearchInput = ({
45
45
  <StickySearchInput
46
46
  inputRef={inputRef}
47
47
  onChange={onChange}
48
- placeholder={t('main.searchChain')}
48
+ placeholder={t('main.searchNetwork')}
49
49
  onClear={handleClear}
50
50
  />
51
51
  )
@@ -104,6 +104,7 @@ export const SelectChainContent = memo(function SelectChainContent({
104
104
  isLoading={isLoading}
105
105
  onSelect={onSelect ?? onSelectChainFallback}
106
106
  selectedChainId={selectedChainId}
107
+ hasSearchQuery={!!inputRef.current?.value}
107
108
  inExpansion={inExpansion}
108
109
  />
109
110
  </Box>