@lifi/widget 4.3.0 → 4.4.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 (361) hide show
  1. package/dist/esm/App.d.ts +0 -1
  2. package/dist/esm/App.d.ts.map +1 -1
  3. package/dist/esm/AppDrawer.d.ts +1 -1
  4. package/dist/esm/AppDrawer.d.ts.map +1 -1
  5. package/dist/esm/components/ActionRow/ActionRow.d.ts +13 -0
  6. package/dist/esm/components/ActionRow/ActionRow.d.ts.map +1 -0
  7. package/dist/esm/components/AmountInput/AmountInput.style.d.ts +9 -0
  8. package/dist/esm/components/AmountInput/AmountInput.style.d.ts.map +1 -0
  9. package/dist/esm/components/AmountInput/AmountInputEndAdornment.d.ts +7 -0
  10. package/dist/esm/components/AmountInput/AmountInputEndAdornment.d.ts.map +1 -0
  11. package/dist/esm/components/AmountInput/PriceFormHelperText.style.d.ts +7 -0
  12. package/dist/esm/components/AmountInput/PriceFormHelperText.style.d.ts.map +1 -0
  13. package/dist/esm/components/Avatar/Avatar.d.ts +12 -0
  14. package/dist/esm/components/Avatar/Avatar.d.ts.map +1 -0
  15. package/dist/esm/components/Avatar/TokenAvatar.d.ts +14 -0
  16. package/dist/esm/components/Avatar/TokenAvatar.d.ts.map +1 -0
  17. package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.d.ts +6 -0
  18. package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.d.ts.map +1 -0
  19. package/dist/esm/components/BaseTransactionButton/types.d.ts +14 -0
  20. package/dist/esm/components/BaseTransactionButton/types.d.ts.map +1 -0
  21. package/dist/esm/components/BottomSheet/types.d.ts +11 -0
  22. package/dist/esm/components/BottomSheet/types.d.ts.map +1 -0
  23. package/dist/esm/components/ButtonTertiary.d.ts +7 -0
  24. package/dist/esm/components/ButtonTertiary.d.ts.map +1 -0
  25. package/dist/esm/components/Card/Card.d.ts +12 -0
  26. package/dist/esm/components/Card/Card.d.ts.map +1 -0
  27. package/dist/esm/components/Card/CardIconButton.d.ts +7 -0
  28. package/dist/esm/components/Card/CardIconButton.d.ts.map +1 -0
  29. package/dist/esm/components/Card/CardTitle.d.ts +9 -0
  30. package/dist/esm/components/Card/CardTitle.d.ts.map +1 -0
  31. package/dist/esm/components/Card/InputCard.d.ts +7 -0
  32. package/dist/esm/components/Card/InputCard.d.ts.map +1 -0
  33. package/dist/esm/components/ChainSelect/ChainSelect.d.ts +7 -0
  34. package/dist/esm/components/ChainSelect/ChainSelect.d.ts.map +1 -0
  35. package/dist/esm/components/ChainSelect/ChainSelect.style.d.ts +10 -0
  36. package/dist/esm/components/ChainSelect/ChainSelect.style.d.ts.map +1 -0
  37. package/dist/esm/components/ContractComponent/ContractComponent.d.ts +7 -0
  38. package/dist/esm/components/ContractComponent/ContractComponent.d.ts.map +1 -0
  39. package/dist/esm/components/ContractComponent/ItemPrice.d.ts +0 -1
  40. package/dist/esm/components/ContractComponent/ItemPrice.d.ts.map +1 -1
  41. package/dist/esm/components/ContractComponent/NFT/NFT.d.ts +0 -1
  42. package/dist/esm/components/ContractComponent/NFT/NFT.d.ts.map +1 -1
  43. package/dist/esm/components/ContractComponent/NFT/NFTBase.d.ts +0 -1
  44. package/dist/esm/components/ContractComponent/NFT/NFTBase.d.ts.map +1 -1
  45. package/dist/esm/components/ContractComponent/NFT/types.d.ts +0 -1
  46. package/dist/esm/components/ContractComponent/NFT/types.d.ts.map +1 -1
  47. package/dist/esm/components/ExecutionStatusCard/ExecutionStatusCard.d.ts +21 -0
  48. package/dist/esm/components/ExecutionStatusCard/ExecutionStatusCard.d.ts.map +1 -0
  49. package/dist/esm/components/ExecutionStatusCard/StatusIcon.d.ts +16 -0
  50. package/dist/esm/components/ExecutionStatusCard/StatusIcon.d.ts.map +1 -0
  51. package/dist/esm/components/ExecutionStatusCard/iconKey.js +1 -0
  52. package/dist/esm/components/ExecutionStatusCard/iconKey.js.map +1 -1
  53. package/dist/esm/components/FeeBreakdownTooltip.d.ts +13 -0
  54. package/dist/esm/components/FeeBreakdownTooltip.d.ts.map +1 -0
  55. package/dist/esm/components/IconCircle/IconCircle.d.ts +11 -0
  56. package/dist/esm/components/IconCircle/IconCircle.d.ts.map +1 -0
  57. package/dist/esm/components/IconCircle/statusIcons.d.ts +6 -0
  58. package/dist/esm/components/IconCircle/statusIcons.d.ts.map +1 -0
  59. package/dist/esm/components/IconTypography.d.ts +7 -0
  60. package/dist/esm/components/IconTypography.d.ts.map +1 -0
  61. package/dist/esm/components/ListItem/ListItemButton.d.ts +7 -0
  62. package/dist/esm/components/ListItem/ListItemButton.d.ts.map +1 -0
  63. package/dist/esm/components/ListItemButton.d.ts +7 -0
  64. package/dist/esm/components/ListItemButton.d.ts.map +1 -0
  65. package/dist/esm/components/Messages/WarningMessages.d.ts +11 -0
  66. package/dist/esm/components/Messages/WarningMessages.d.ts.map +1 -0
  67. package/dist/esm/components/PageContainer.d.ts +12 -0
  68. package/dist/esm/components/PageContainer.d.ts.map +1 -0
  69. package/dist/esm/components/PoweredBy/PoweredBy.d.ts +5 -0
  70. package/dist/esm/components/PoweredBy/PoweredBy.d.ts.map +1 -0
  71. package/dist/esm/components/ProgressToNextUpdate.d.ts +10 -0
  72. package/dist/esm/components/ProgressToNextUpdate.d.ts.map +1 -0
  73. package/dist/esm/components/RouteCard/RouteCard.d.ts +7 -0
  74. package/dist/esm/components/RouteCard/RouteCard.d.ts.map +1 -0
  75. package/dist/esm/components/RouteCard/RouteCardSkeleton.d.ts +7 -0
  76. package/dist/esm/components/RouteCard/RouteCardSkeleton.d.ts.map +1 -0
  77. package/dist/esm/components/RouteCard/RouteDetails.d.ts +10 -0
  78. package/dist/esm/components/RouteCard/RouteDetails.d.ts.map +1 -0
  79. package/dist/esm/components/RouteCard/RouteDetails.style.d.ts +12 -0
  80. package/dist/esm/components/RouteCard/RouteDetails.style.d.ts.map +1 -0
  81. package/dist/esm/components/RouteCard/RouteNotFoundCard.d.ts +5 -0
  82. package/dist/esm/components/RouteCard/RouteNotFoundCard.d.ts.map +1 -0
  83. package/dist/esm/components/RouteCard/RouteTokens.d.ts +11 -0
  84. package/dist/esm/components/RouteCard/RouteTokens.d.ts.map +1 -0
  85. package/dist/esm/components/RouteCard/RouteTokens.js +2 -2
  86. package/dist/esm/components/RouteCard/RouteTokens.js.map +1 -1
  87. package/dist/esm/components/RouteCard/types.d.ts +14 -0
  88. package/dist/esm/components/RouteCard/types.d.ts.map +1 -0
  89. package/dist/esm/components/Search/SearchInput.d.ts +17 -0
  90. package/dist/esm/components/Search/SearchInput.d.ts.map +1 -0
  91. package/dist/esm/components/SendToWallet/SendToWalletButton.d.ts +10 -0
  92. package/dist/esm/components/SendToWallet/SendToWalletButton.d.ts.map +1 -0
  93. package/dist/esm/components/SendToWallet/SendToWalletButton.js +15 -6
  94. package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
  95. package/dist/esm/components/Skeleton/WidgetSkeleton.d.ts +1 -4
  96. package/dist/esm/components/Skeleton/WidgetSkeleton.d.ts.map +1 -1
  97. package/dist/esm/components/StepActions/SentToWalletRow.d.ts +9 -0
  98. package/dist/esm/components/StepActions/SentToWalletRow.d.ts.map +1 -0
  99. package/dist/esm/components/StepActions/StepActionRow.style.d.ts +7 -0
  100. package/dist/esm/components/StepActions/StepActionRow.style.d.ts.map +1 -0
  101. package/dist/esm/components/StepActions/StepActionsList.d.ts +12 -0
  102. package/dist/esm/components/StepActions/StepActionsList.d.ts.map +1 -0
  103. package/dist/esm/components/StepActions/executionRows.d.ts +26 -0
  104. package/dist/esm/components/StepActions/executionRows.d.ts.map +1 -0
  105. package/dist/esm/components/Token/Token.d.ts +17 -0
  106. package/dist/esm/components/Token/Token.d.ts.map +1 -0
  107. package/dist/esm/components/TokenList/TokenNotFound.d.ts +6 -0
  108. package/dist/esm/components/TokenList/TokenNotFound.d.ts.map +1 -0
  109. package/dist/esm/components/TokenList/VirtualizedTokenList.d.ts +7 -0
  110. package/dist/esm/components/TokenList/VirtualizedTokenList.d.ts.map +1 -0
  111. package/dist/esm/components/TokenList/types.d.ts +20 -0
  112. package/dist/esm/components/TokenList/types.d.ts.map +1 -0
  113. package/dist/esm/components/TokenList/useTokenSelect.d.ts +6 -0
  114. package/dist/esm/components/TokenList/useTokenSelect.d.ts.map +1 -0
  115. package/dist/esm/components/TokenRate/TokenRate.d.ts +10 -0
  116. package/dist/esm/components/TokenRate/TokenRate.d.ts.map +1 -0
  117. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js +1 -0
  118. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
  119. package/dist/esm/components/TransactionCard/ActiveTransactionCard.style.js +9 -0
  120. package/dist/esm/components/TransactionCard/ActiveTransactionCard.style.js.map +1 -1
  121. package/dist/esm/components/TransactionCard/TransactionCard.style.d.ts +8 -0
  122. package/dist/esm/components/TransactionCard/TransactionCard.style.d.ts.map +1 -0
  123. package/dist/esm/config/constants.d.ts.map +1 -1
  124. package/dist/esm/config/version.d.ts +1 -1
  125. package/dist/esm/config/version.d.ts.map +1 -1
  126. package/dist/esm/config/version.js +1 -1
  127. package/dist/esm/config/version.js.map +1 -1
  128. package/dist/esm/hooks/useAddressActivity.d.ts +11 -0
  129. package/dist/esm/hooks/useAddressActivity.d.ts.map +1 -0
  130. package/dist/esm/hooks/useAddressValidation.d.ts +28 -0
  131. package/dist/esm/hooks/useAddressValidation.d.ts.map +1 -0
  132. package/dist/esm/hooks/useAddressValidation.js +6 -1
  133. package/dist/esm/hooks/useAddressValidation.js.map +1 -1
  134. package/dist/esm/hooks/useAvailableChains.d.ts +12 -0
  135. package/dist/esm/hooks/useAvailableChains.d.ts.map +1 -0
  136. package/dist/esm/hooks/useChain.d.ts +10 -0
  137. package/dist/esm/hooks/useChain.d.ts.map +1 -0
  138. package/dist/esm/hooks/useContactSupport.d.ts +5 -0
  139. package/dist/esm/hooks/useContactSupport.d.ts.map +1 -0
  140. package/dist/esm/hooks/useDebouncedWatch.d.ts +6 -0
  141. package/dist/esm/hooks/useDebouncedWatch.d.ts.map +1 -0
  142. package/dist/esm/hooks/useDisplayedTokens.js +48 -0
  143. package/dist/esm/hooks/useDisplayedTokens.js.map +1 -0
  144. package/dist/esm/hooks/useExplorer.d.ts +14 -0
  145. package/dist/esm/hooks/useExplorer.d.ts.map +1 -0
  146. package/dist/esm/hooks/useHeader.d.ts +6 -0
  147. package/dist/esm/hooks/useHeader.d.ts.map +1 -0
  148. package/dist/esm/hooks/useListHeight.d.ts +12 -0
  149. package/dist/esm/hooks/useListHeight.d.ts.map +1 -0
  150. package/dist/esm/hooks/useListHeight.js +1 -0
  151. package/dist/esm/hooks/useListHeight.js.map +1 -1
  152. package/dist/esm/hooks/useNavigateBack.d.ts +5 -0
  153. package/dist/esm/hooks/useNavigateBack.d.ts.map +1 -0
  154. package/dist/esm/hooks/usePacedRouteExecution.js +1 -0
  155. package/dist/esm/hooks/usePacedRouteExecution.js.map +1 -1
  156. package/dist/esm/hooks/useRouteExecution.d.ts +18 -0
  157. package/dist/esm/hooks/useRouteExecution.d.ts.map +1 -0
  158. package/dist/esm/hooks/useRouteExecutionMessage.d.ts +10 -0
  159. package/dist/esm/hooks/useRouteExecutionMessage.d.ts.map +1 -0
  160. package/dist/esm/hooks/useRouteExecutionMessage.js +1 -0
  161. package/dist/esm/hooks/useRouteExecutionMessage.js.map +1 -1
  162. package/dist/esm/hooks/useRoutes.d.ts +32 -0
  163. package/dist/esm/hooks/useRoutes.d.ts.map +1 -0
  164. package/dist/esm/hooks/useRoutes.js +12 -8
  165. package/dist/esm/hooks/useRoutes.js.map +1 -1
  166. package/dist/esm/hooks/useToAddressRequirements.d.ts +16 -0
  167. package/dist/esm/hooks/useToAddressRequirements.d.ts.map +1 -0
  168. package/dist/esm/hooks/useToken.d.ts +9 -0
  169. package/dist/esm/hooks/useToken.d.ts.map +1 -0
  170. package/dist/esm/hooks/useTokenAddressBalance.d.ts +11 -0
  171. package/dist/esm/hooks/useTokenAddressBalance.d.ts.map +1 -0
  172. package/dist/esm/hooks/useTokenBalances.d.ts +14 -0
  173. package/dist/esm/hooks/useTokenBalances.d.ts.map +1 -0
  174. package/dist/esm/hooks/useTokenBalances.js +5 -45
  175. package/dist/esm/hooks/useTokenBalances.js.map +1 -1
  176. package/dist/esm/hooks/useTokenList.d.ts +16 -0
  177. package/dist/esm/hooks/useTokenList.d.ts.map +1 -0
  178. package/dist/esm/hooks/useTokenList.js +31 -0
  179. package/dist/esm/hooks/useTokenList.js.map +1 -0
  180. package/dist/esm/hooks/useTools.d.ts +8 -0
  181. package/dist/esm/hooks/useTools.d.ts.map +1 -0
  182. package/dist/esm/hooks/useTransactionDetails.js +1 -3
  183. package/dist/esm/hooks/useTransactionDetails.js.map +1 -1
  184. package/dist/esm/hooks/useTransactionList.js +1 -0
  185. package/dist/esm/hooks/useTransactionList.js.map +1 -1
  186. package/dist/esm/hooks/useWidgetChains.d.ts +0 -1
  187. package/dist/esm/hooks/useWidgetChains.d.ts.map +1 -1
  188. package/dist/esm/hooks/useWidgetEvents.d.ts +0 -1
  189. package/dist/esm/hooks/useWidgetEvents.d.ts.map +1 -1
  190. package/dist/esm/i18n/en.json +321 -0
  191. package/dist/esm/index.d.ts +1 -0
  192. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js +1 -0
  193. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js.map +1 -1
  194. package/dist/esm/pages/LanguagesPage.js +19 -7
  195. package/dist/esm/pages/LanguagesPage.js.map +1 -1
  196. package/dist/esm/pages/MainPage/MainWarningMessages.d.ts +10 -0
  197. package/dist/esm/pages/MainPage/MainWarningMessages.d.ts.map +1 -0
  198. package/dist/esm/pages/RoutesPage/RoutesPage.js +28 -16
  199. package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
  200. package/dist/esm/pages/RoutesPage/RoutesPage.style.d.ts +7 -0
  201. package/dist/esm/pages/RoutesPage/RoutesPage.style.d.ts.map +1 -0
  202. package/dist/esm/pages/SelectChainPage/SelectChainPage.d.ts +6 -0
  203. package/dist/esm/pages/SelectChainPage/SelectChainPage.d.ts.map +1 -0
  204. package/dist/esm/pages/SelectChainPage/types.d.ts +8 -0
  205. package/dist/esm/pages/SelectChainPage/types.d.ts.map +1 -0
  206. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.d.ts +10 -0
  207. package/dist/esm/pages/SelectTokenPage/SearchTokenInput.d.ts.map +1 -0
  208. package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.d.ts +9 -0
  209. package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.d.ts.map +1 -0
  210. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.d.ts +14 -0
  211. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.d.ts.map +1 -0
  212. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.d.ts +19 -0
  213. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.d.ts.map +1 -0
  214. package/dist/esm/pages/TransactionPage/ExecutionDoneCard.d.ts +12 -0
  215. package/dist/esm/pages/TransactionPage/ExecutionDoneCard.d.ts.map +1 -0
  216. package/dist/esm/pages/TransactionPage/ExecutionDoneCard.js +1 -0
  217. package/dist/esm/pages/TransactionPage/ExecutionDoneCard.js.map +1 -1
  218. package/dist/esm/pages/TransactionPage/RouteTracker.d.ts +11 -0
  219. package/dist/esm/pages/TransactionPage/RouteTracker.d.ts.map +1 -0
  220. package/dist/esm/pages/TransactionPage/StartTransactionButton.d.ts +6 -0
  221. package/dist/esm/pages/TransactionPage/StartTransactionButton.d.ts.map +1 -0
  222. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.d.ts +15 -0
  223. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.d.ts.map +1 -0
  224. package/dist/esm/pages/TransactionPage/TransactionContent.js +1 -0
  225. package/dist/esm/pages/TransactionPage/TransactionContent.js.map +1 -1
  226. package/dist/esm/pages/TransactionPage/TransactionDoneButtons.d.ts +12 -0
  227. package/dist/esm/pages/TransactionPage/TransactionDoneButtons.d.ts.map +1 -0
  228. package/dist/esm/pages/TransactionPage/TransactionDoneButtons.js +1 -0
  229. package/dist/esm/pages/TransactionPage/TransactionDoneButtons.js.map +1 -1
  230. package/dist/esm/pages/TransactionPage/TransactionExecutionContent.js +1 -0
  231. package/dist/esm/pages/TransactionPage/TransactionExecutionContent.js.map +1 -1
  232. package/dist/esm/pages/TransactionPage/TransactionPage.js +1 -0
  233. package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
  234. package/dist/esm/pages/TransactionPage/types.d.ts +9 -0
  235. package/dist/esm/pages/TransactionPage/types.d.ts.map +1 -0
  236. package/dist/esm/pages/TransactionPage/utils.d.ts +6 -0
  237. package/dist/esm/pages/TransactionPage/utils.d.ts.map +1 -0
  238. package/dist/esm/providers/I18nProvider/I18nProvider.d.ts +5 -0
  239. package/dist/esm/providers/I18nProvider/I18nProvider.d.ts.map +1 -0
  240. package/dist/esm/providers/I18nProvider/types.d.ts +2 -3
  241. package/dist/esm/providers/I18nProvider/types.d.ts.map +1 -1
  242. package/dist/esm/providers/QueryClientProvider.d.ts +6 -0
  243. package/dist/esm/providers/QueryClientProvider.d.ts.map +1 -0
  244. package/dist/esm/providers/SDKClientProvider.d.ts +8 -0
  245. package/dist/esm/providers/SDKClientProvider.d.ts.map +1 -0
  246. package/dist/esm/providers/WalletProvider/WalletProvider.d.ts +10 -0
  247. package/dist/esm/providers/WalletProvider/WalletProvider.d.ts.map +1 -0
  248. package/dist/esm/providers/WalletProvider/WalletProvider.js +8 -3
  249. package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
  250. package/dist/esm/providers/WidgetProvider/WidgetProvider.d.ts +8 -0
  251. package/dist/esm/providers/WidgetProvider/WidgetProvider.d.ts.map +1 -0
  252. package/dist/esm/providers/WidgetProvider/types.d.ts +11 -0
  253. package/dist/esm/providers/WidgetProvider/types.d.ts.map +1 -0
  254. package/dist/esm/shared.d.ts +107 -0
  255. package/dist/esm/shared.js +105 -0
  256. package/dist/esm/stores/StoreProvider.d.ts +7 -0
  257. package/dist/esm/stores/StoreProvider.d.ts.map +1 -0
  258. package/dist/esm/stores/bookmarks/BookmarkStore.d.ts +7 -0
  259. package/dist/esm/stores/bookmarks/BookmarkStore.d.ts.map +1 -0
  260. package/dist/esm/stores/bookmarks/types.d.ts +0 -1
  261. package/dist/esm/stores/bookmarks/types.d.ts.map +1 -1
  262. package/dist/esm/stores/chains/ChainOrderStore.d.ts +8 -0
  263. package/dist/esm/stores/chains/ChainOrderStore.d.ts.map +1 -0
  264. package/dist/esm/stores/chains/types.d.ts +27 -0
  265. package/dist/esm/stores/chains/types.d.ts.map +1 -0
  266. package/dist/esm/stores/form/createFormStore.js +1 -0
  267. package/dist/esm/stores/form/createFormStore.js.map +1 -1
  268. package/dist/esm/stores/form/types.d.ts +7 -7
  269. package/dist/esm/stores/form/types.d.ts.map +1 -1
  270. package/dist/esm/stores/form/types.js.map +1 -1
  271. package/dist/esm/stores/form/useFieldActions.d.ts +0 -1
  272. package/dist/esm/stores/form/useFieldActions.d.ts.map +1 -1
  273. package/dist/esm/stores/form/useFieldValues.d.ts +0 -1
  274. package/dist/esm/stores/form/useFieldValues.d.ts.map +1 -1
  275. package/dist/esm/stores/header/types.d.ts +20 -0
  276. package/dist/esm/stores/header/types.d.ts.map +1 -0
  277. package/dist/esm/stores/header/useHeaderStore.d.ts +8 -0
  278. package/dist/esm/stores/header/useHeaderStore.d.ts.map +1 -0
  279. package/dist/esm/stores/inputMode/useInputModeStore.d.ts +13 -0
  280. package/dist/esm/stores/inputMode/useInputModeStore.d.ts.map +1 -0
  281. package/dist/esm/stores/routes/RouteExecutionStore.d.ts +9 -0
  282. package/dist/esm/stores/routes/RouteExecutionStore.d.ts.map +1 -0
  283. package/dist/esm/stores/routes/createRouteExecutionStore.js +1 -0
  284. package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
  285. package/dist/esm/stores/routes/types.d.ts +24 -0
  286. package/dist/esm/stores/routes/types.d.ts.map +1 -0
  287. package/dist/esm/stores/routes/types.js +14 -0
  288. package/dist/esm/stores/routes/types.js.map +1 -0
  289. package/dist/esm/stores/routes/useRouteExecutionIndicator.js +1 -0
  290. package/dist/esm/stores/routes/useRouteExecutionIndicator.js.map +1 -1
  291. package/dist/esm/stores/routes/utils.d.ts +9 -0
  292. package/dist/esm/stores/routes/utils.d.ts.map +1 -0
  293. package/dist/esm/stores/settings/SettingsStore.d.ts +8 -0
  294. package/dist/esm/stores/settings/SettingsStore.d.ts.map +1 -0
  295. package/dist/esm/stores/settings/types.d.ts +5 -2
  296. package/dist/esm/stores/settings/types.d.ts.map +1 -1
  297. package/dist/esm/stores/types.d.ts +9 -0
  298. package/dist/esm/stores/types.d.ts.map +1 -0
  299. package/dist/esm/themes/azureLight.d.ts +0 -1
  300. package/dist/esm/themes/azureLight.d.ts.map +1 -1
  301. package/dist/esm/themes/createTheme.d.ts +0 -1
  302. package/dist/esm/themes/createTheme.d.ts.map +1 -1
  303. package/dist/esm/themes/jumper.d.ts +0 -1
  304. package/dist/esm/themes/jumper.d.ts.map +1 -1
  305. package/dist/esm/themes/palettes.d.ts.map +1 -1
  306. package/dist/esm/themes/types.d.ts +0 -1
  307. package/dist/esm/themes/types.d.ts.map +1 -1
  308. package/dist/esm/themes/watermelonLight.d.ts +0 -1
  309. package/dist/esm/themes/watermelonLight.d.ts.map +1 -1
  310. package/dist/esm/themes/windows95.d.ts +0 -1
  311. package/dist/esm/themes/windows95.d.ts.map +1 -1
  312. package/dist/esm/types/events.d.ts +4 -3
  313. package/dist/esm/types/events.d.ts.map +1 -1
  314. package/dist/esm/types/token.d.ts +1 -2
  315. package/dist/esm/types/token.d.ts.map +1 -1
  316. package/dist/esm/types/widget.d.ts +72 -73
  317. package/dist/esm/types/widget.d.ts.map +1 -1
  318. package/dist/esm/utils/compactNumberFormatter.d.ts +8 -8
  319. package/dist/esm/utils/compactNumberFormatter.d.ts.map +1 -1
  320. package/dist/esm/utils/converters.d.ts +7 -0
  321. package/dist/esm/utils/converters.d.ts.map +1 -0
  322. package/dist/esm/utils/currencyExtendedFormatter.d.ts.map +1 -1
  323. package/dist/esm/utils/elements.d.ts +11 -0
  324. package/dist/esm/utils/elements.d.ts.map +1 -0
  325. package/dist/esm/utils/elements.js +8 -1
  326. package/dist/esm/utils/elements.js.map +1 -1
  327. package/dist/esm/utils/enum.d.ts +5 -0
  328. package/dist/esm/utils/enum.d.ts.map +1 -0
  329. package/dist/esm/utils/fees.d.ts +17 -0
  330. package/dist/esm/utils/fees.d.ts.map +1 -0
  331. package/dist/esm/utils/format.d.ts +14 -14
  332. package/dist/esm/utils/format.d.ts.map +1 -1
  333. package/dist/esm/utils/getPriceImpact.d.ts +1 -7
  334. package/dist/esm/utils/getPriceImpact.d.ts.map +1 -1
  335. package/dist/esm/utils/input.d.ts +5 -0
  336. package/dist/esm/utils/input.d.ts.map +1 -0
  337. package/dist/esm/utils/navigationRoutes.d.ts.map +1 -1
  338. package/dist/esm/utils/percentFormatter.d.ts +5 -5
  339. package/dist/esm/utils/percentFormatter.d.ts.map +1 -1
  340. package/dist/esm/utils/tokenList.js +3 -3
  341. package/dist/esm/utils/tokenList.js.map +1 -1
  342. package/dist/esm/utils/wallet.d.ts +5 -0
  343. package/dist/esm/utils/wallet.d.ts.map +1 -0
  344. package/package.json +28 -20
  345. package/src/components/RouteCard/RouteTokens.tsx +3 -2
  346. package/src/components/SendToWallet/SendToWalletButton.tsx +27 -5
  347. package/src/components/TransactionCard/ActiveTransactionCard.style.tsx +11 -0
  348. package/src/config/version.ts +1 -1
  349. package/src/hooks/useDisplayedTokens.ts +70 -0
  350. package/src/hooks/useListHeight.ts +4 -0
  351. package/src/hooks/useRoutes.ts +360 -325
  352. package/src/hooks/useTokenBalances.ts +8 -53
  353. package/src/hooks/useTokenList.ts +59 -0
  354. package/src/hooks/useTransactionDetails.ts +1 -3
  355. package/src/pages/LanguagesPage.tsx +36 -23
  356. package/src/pages/RoutesPage/RoutesPage.tsx +38 -27
  357. package/src/providers/WalletProvider/WalletProvider.tsx +15 -3
  358. package/src/shared.ts +191 -0
  359. package/src/stores/form/createFormStore.ts +1 -0
  360. package/src/stores/form/types.ts +1 -0
  361. package/src/utils/tokenList.ts +3 -3
@@ -1,10 +1,17 @@
1
1
  //#region src/utils/elements.ts
2
+ let ElementId = /* @__PURE__ */ function(ElementId) {
3
+ ElementId["AppExpandedContainer"] = "widget-app-expanded-container";
4
+ ElementId["Header"] = "widget-header";
5
+ ElementId["RelativeContainer"] = "widget-relative-container";
6
+ ElementId["ScrollableContainer"] = "widget-scrollable-container";
7
+ return ElementId;
8
+ }({});
2
9
  const createElementId = (ElementId, elementId) => elementId ? `${ElementId}-${elementId}` : ElementId;
3
10
  const getAppContainer = (elementId) => document.getElementById(createElementId("widget-app-expanded-container", elementId));
4
11
  const getRelativeContainer = (elementId) => document.getElementById(createElementId("widget-relative-container", elementId));
5
12
  const getScrollableContainer = (elementId) => document.getElementById(createElementId("widget-scrollable-container", elementId));
6
13
  const getHeaderElement = (elementId) => document.getElementById(createElementId("widget-header", elementId));
7
14
  //#endregion
8
- export { createElementId, getAppContainer, getHeaderElement, getRelativeContainer, getScrollableContainer };
15
+ export { ElementId, createElementId, getAppContainer, getHeaderElement, getRelativeContainer, getScrollableContainer };
9
16
 
10
17
  //# sourceMappingURL=elements.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"elements.js","names":[],"sources":["../../../src/utils/elements.ts"],"sourcesContent":["export enum ElementId {\n AppExpandedContainer = 'widget-app-expanded-container',\n Header = 'widget-header',\n RelativeContainer = 'widget-relative-container',\n ScrollableContainer = 'widget-scrollable-container',\n}\n\nexport const createElementId = (\n ElementId: ElementId,\n elementId: string\n): string => (elementId ? `${ElementId}-${elementId}` : ElementId)\n\n// NOTE: The getter functions here are often used with code that can be effected by css changes in the\n// AppExpandedContainer, RelativeContainer and CssBaselineContainer components as defined in AppContainer.ts\n\nexport const getAppContainer = (elementId: string): HTMLElement | null =>\n document.getElementById(\n createElementId(ElementId.AppExpandedContainer, elementId)\n )\n\nexport const getRelativeContainer = (elementId: string): HTMLElement | null =>\n document.getElementById(\n createElementId(ElementId.RelativeContainer, elementId)\n )\n\nexport const getScrollableContainer = (elementId: string): HTMLElement | null =>\n document.getElementById(\n createElementId(ElementId.ScrollableContainer, elementId)\n )\n\nexport const getHeaderElement = (elementId: string): HTMLElement | null =>\n document.getElementById(createElementId(ElementId.Header, elementId))\n"],"mappings":";AAOA,MAAa,mBACX,WACA,cACY,YAAY,GAAG,UAAU,GAAG,cAAc;AAKxD,MAAa,mBAAmB,cAC9B,SAAS,eACP,gBAAA,iCAAgD,SAAS,CAC3D;AAEF,MAAa,wBAAwB,cACnC,SAAS,eACP,gBAAA,6BAA6C,SAAS,CACxD;AAEF,MAAa,0BAA0B,cACrC,SAAS,eACP,gBAAA,+BAA+C,SAAS,CAC1D;AAEF,MAAa,oBAAoB,cAC/B,SAAS,eAAe,gBAAA,iBAAkC,SAAS,CAAC"}
1
+ {"version":3,"file":"elements.js","names":[],"sources":["../../../src/utils/elements.ts"],"sourcesContent":["export enum ElementId {\n AppExpandedContainer = 'widget-app-expanded-container',\n Header = 'widget-header',\n RelativeContainer = 'widget-relative-container',\n ScrollableContainer = 'widget-scrollable-container',\n}\n\nexport const createElementId = (\n ElementId: ElementId,\n elementId: string\n): string => (elementId ? `${ElementId}-${elementId}` : ElementId)\n\n// NOTE: The getter functions here are often used with code that can be effected by css changes in the\n// AppExpandedContainer, RelativeContainer and CssBaselineContainer components as defined in AppContainer.ts\n\nexport const getAppContainer = (elementId: string): HTMLElement | null =>\n document.getElementById(\n createElementId(ElementId.AppExpandedContainer, elementId)\n )\n\nexport const getRelativeContainer = (elementId: string): HTMLElement | null =>\n document.getElementById(\n createElementId(ElementId.RelativeContainer, elementId)\n )\n\nexport const getScrollableContainer = (elementId: string): HTMLElement | null =>\n document.getElementById(\n createElementId(ElementId.ScrollableContainer, elementId)\n )\n\nexport const getHeaderElement = (elementId: string): HTMLElement | null =>\n document.getElementById(createElementId(ElementId.Header, elementId))\n"],"mappings":";AAAA,IAAY,YAAL,yBAAA,WAAA;CACL,UAAA,0BAAA;CACA,UAAA,YAAA;CACA,UAAA,uBAAA;CACA,UAAA,yBAAA;;AACF,EAAA,CAAA,CAAA;AAEA,MAAa,mBACX,WACA,cACY,YAAY,GAAG,UAAU,GAAG,cAAc;AAKxD,MAAa,mBAAmB,cAC9B,SAAS,eACP,gBAAA,iCAAgD,SAAS,CAC3D;AAEF,MAAa,wBAAwB,cACnC,SAAS,eACP,gBAAA,6BAA6C,SAAS,CACxD;AAEF,MAAa,0BAA0B,cACrC,SAAS,eACP,gBAAA,+BAA+C,SAAS,CAC1D;AAEF,MAAa,oBAAoB,cAC/B,SAAS,eAAe,gBAAA,iBAAkC,SAAS,CAAC"}
@@ -0,0 +1,5 @@
1
+ //#region src/utils/enum.d.ts
2
+ declare const hasEnumFlag: <T extends number | bigint>(flags: T, flag: T) => boolean;
3
+ //#endregion
4
+ export { hasEnumFlag };
5
+ //# sourceMappingURL=enum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum.d.ts","names":[],"sources":["../../../src/utils/enum.ts"],"mappings":";cAAa,cAAe,2BAC1B,OAAO,GACP,MAAM"}
@@ -0,0 +1,17 @@
1
+ import { RouteExtended, Token } from "@lifi/sdk";
2
+ //#region src/utils/fees.d.ts
3
+ interface FeesBreakdown {
4
+ amount: bigint;
5
+ amountUSD: number;
6
+ token: Token;
7
+ }
8
+ declare const getAccumulatedFeeCostsBreakdown: (route: RouteExtended, included?: boolean) => {
9
+ gasCosts: FeesBreakdown[];
10
+ feeCosts: FeesBreakdown[];
11
+ gasCostUSD: number;
12
+ feeCostUSD: number;
13
+ combinedFeesUSD: number;
14
+ };
15
+ //#endregion
16
+ export { FeesBreakdown, getAccumulatedFeeCostsBreakdown };
17
+ //# sourceMappingURL=fees.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fees.d.ts","names":[],"sources":["../../../src/utils/fees.ts"],"mappings":";;UAGiB;EACf;EACA;EACA,OAAO;;cAGI,kCACX,OAAO,eACP;EAEA,UAAU;EACV,UAAU;EACV;EACA;EACA"}
@@ -1,26 +1,26 @@
1
1
  //#region src/utils/format.d.ts
2
2
  declare const usdDecimals = 2;
3
3
  /**
4
- * Format token amount to at least 6 decimals.
5
- * @param amount amount to format.
6
- * @returns formatted amount.
7
- */
4
+ * Format token amount to at least 6 decimals.
5
+ * @param amount amount to format.
6
+ * @returns formatted amount.
7
+ */
8
8
  declare function formatTokenAmount(amount: bigint | undefined, decimals: number): string;
9
9
  declare function formatSlippage(slippage?: string, defaultValue?: string, returnInitial?: boolean): string;
10
10
  /**
11
- * Formats a user input amount string, normalizing it and optionally limiting decimal places.
12
- * @param amount - The amount string to format (e.g., '123.45', '1,23', '0..')
13
- * @param decimals - Maximum number of decimal places to allow. If null, no limit is applied.
14
- * @param returnInitial - If true, preserves the input format during typing (e.g., keeps trailing dots,
15
- * preserves leading zeros, keeps negative signs). If false (default), cleans up the
16
- * format on blur (removes leading/trailing zeros, removes negative signs).
17
- * @returns The formatted amount string, or empty string for invalid input.
18
- */
11
+ * Formats a user input amount string, normalizing it and optionally limiting decimal places.
12
+ * @param amount - The amount string to format (e.g., '123.45', '1,23', '0..')
13
+ * @param decimals - Maximum number of decimal places to allow. If null, no limit is applied.
14
+ * @param returnInitial - If true, preserves the input format during typing (e.g., keeps trailing dots,
15
+ * preserves leading zeros, keeps negative signs). If false (default), cleans up the
16
+ * format on blur (removes leading/trailing zeros, removes negative signs).
17
+ * @returns The formatted amount string, or empty string for invalid input.
18
+ */
19
19
  declare function formatInputAmount(amount: string, decimals?: number | null, returnInitial?: boolean): string;
20
20
  declare function formatTokenPrice(amount?: string | bigint, price?: string, decimals?: number): number;
21
21
  /**
22
- * Convert price value to token amount
23
- */
22
+ * Convert price value to token amount
23
+ */
24
24
  declare function priceToTokenAmount(priceValue: string, priceUSD?: string): string;
25
25
  declare function formatDuration(seconds: number, locale: string, unitDisplay?: Intl.NumberFormatOptions["unitDisplay"]): string;
26
26
  declare function wrapLongWords(text: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","names":[],"sources":["../../../src/utils/format.ts"],"mappings":";cAEa,WAAA;AAAb;;;;AAAa;AAAb,iBAOgB,iBAAA,CACd,MAAA,sBACA,QAAA;AAAA,iBAWc,cAAA,CACd,QAAA,WACA,YAAA,WACA,aAAA;;;AAdA;AAWF;;;;;;iBAoCgB,iBAAA,CACd,MAAA,UACA,QAAA,kBACA,aAAA;AAAA,iBAqDc,gBAAA,CACd,MAAA,oBACA,KAAA,WACA,QAAA;AA5FA;AAiCF;;AAjCE,iBA2Hc,kBAAA,CACd,UAAA,UACA,QAAA;AAAA,iBA2Bc,cAAA,CACd,OAAA,UACA,MAAA,UACA,WAAA,GAAa,IAAA,CAAK,mBAAA;AAAA,iBAaJ,aAAA,CAAc,IAAA"}
1
+ {"version":3,"file":"format.d.ts","names":[],"sources":["../../../src/utils/format.ts"],"mappings":";cAEa;;;;;;iBAOG,kBACd,4BACA;iBAWc,eACd,mBACA,uBACA;;;;;;;;;;iBAiCc,kBACd,gBACA,0BACA;iBAqDc,iBACd,0BACA,gBACA;;;;iBA+Bc,mBACd,oBACA;iBA2Bc,eACd,iBACA,gBACA,cAAa,KAAK;iBAaJ,cAAc"}
@@ -1,5 +1,4 @@
1
1
  import { Token } from "@lifi/sdk";
2
-
3
2
  //#region src/utils/getPriceImpact.d.ts
4
3
  interface GetPriceImpactProps {
5
4
  fromToken: Token;
@@ -7,12 +6,7 @@ interface GetPriceImpactProps {
7
6
  fromAmount?: bigint;
8
7
  toAmount?: bigint;
9
8
  }
10
- declare const getPriceImpact: ({
11
- fromToken,
12
- toToken,
13
- fromAmount,
14
- toAmount
15
- }: GetPriceImpactProps) => number;
9
+ declare const getPriceImpact: ({ fromToken, toToken, fromAmount, toAmount }: GetPriceImpactProps) => number;
16
10
  //#endregion
17
11
  export { getPriceImpact };
18
12
  //# sourceMappingURL=getPriceImpact.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getPriceImpact.d.ts","names":[],"sources":["../../../src/utils/getPriceImpact.ts"],"mappings":";;;UAGU,mBAAA;EACR,SAAA,EAAW,KAAA;EACX,OAAA,EAAS,KAAA;EACT,UAAA;EACA,QAAA;AAAA;AAAA,cAGW,cAAA;EACX,SAAA;EACA,OAAA;EACA,UAAA;EACA;AAAA,GACC,mBAAA"}
1
+ {"version":3,"file":"getPriceImpact.d.ts","names":[],"sources":["../../../src/utils/getPriceImpact.ts"],"mappings":";;UAGU;EACR,WAAW;EACX,SAAS;EACT;EACA;;cAGW,mBACX,WACA,SACA,YACA,YACC"}
@@ -0,0 +1,5 @@
1
+ //#region src/utils/input.d.ts
2
+ declare const fitInputText: (maxFontSize: number, minFontSize: number, element: HTMLElement) => void;
3
+ //#endregion
4
+ export { fitInputText };
5
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","names":[],"sources":["../../../src/utils/input.ts"],"mappings":";cAAa,eACX,qBACA,qBACA,SAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"navigationRoutes.d.ts","names":[],"sources":["../../../src/utils/navigationRoutes.ts"],"mappings":";cAAa,gBAAA;EACX,IAAA;EACA,UAAA;EACA,OAAA;EACA,SAAA;EACA,SAAA;EACA,SAAA;EACA,SAAA;EACA,MAAA;EACA,QAAA;EACA,aAAA;EACA,QAAA;EACA,OAAA;EACA,OAAA;EACA,aAAA;EACA,kBAAA;EACA,oBAAA;EACA,YAAA;EACA,SAAA;EACA,aAAA;EACA,gBAAA;EACA,iBAAA;AAAA;AAAA,KAiDG,uBAAA,gBAAuC,gBAAA;AAAA,KAEhC,mBAAA,WACF,gBAAA,EAAkB,uBAAA"}
1
+ {"version":3,"file":"navigationRoutes.d.ts","names":[],"sources":["../../../src/utils/navigationRoutes.ts"],"mappings":";cAAa;EACX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;KAiDG,uCAAuC;KAEhC,8BACF,kBAAkB"}
@@ -1,10 +1,10 @@
1
1
  //#region src/utils/percentFormatter.d.ts
2
2
  /**
3
- * We use <0.01% for both small positive and negative changes to keep it simple and clear, focusing on minimal impact rather than direction.
4
- * Examples:
5
- * +0.007% -> <0.01%
6
- * -0.003% -> <0.01%
7
- */
3
+ * We use <0.01% for both small positive and negative changes to keep it simple and clear, focusing on minimal impact rather than direction.
4
+ * Examples:
5
+ * +0.007% -> <0.01%
6
+ * -0.003% -> <0.01%
7
+ */
8
8
  declare const percentFormatter: (lng: string | undefined, options: any) => ((value: any) => string);
9
9
  //#endregion
10
10
  export { percentFormatter };
@@ -1 +1 @@
1
- {"version":3,"file":"percentFormatter.d.ts","names":[],"sources":["../../../src/utils/percentFormatter.ts"],"mappings":";;AAMA;;;;;cAAa,gBAAA,GACX,GAAA,sBACA,OAAA,YACG,KAAA"}
1
+ {"version":3,"file":"percentFormatter.d.ts","names":[],"sources":["../../../src/utils/percentFormatter.ts"],"mappings":";;;;;;;cAMa,mBACX,yBACA,mBACG"}
@@ -2,8 +2,8 @@ import { formatUnits } from "@lifi/sdk";
2
2
  //#region src/utils/tokenList.ts
3
3
  const sortByBalances = (a, b) => Number.parseFloat(formatUnits(b.amount ?? 0n, b.decimals)) * Number.parseFloat(b.priceUSD ?? "0") - Number.parseFloat(formatUnits(a.amount ?? 0n, a.decimals)) * Number.parseFloat(a.priceUSD ?? "0");
4
4
  const sortByVolume = (a, b) => (b.volumeUSD24H ?? 0) - (a.volumeUSD24H ?? 0);
5
- const processTokenBalances = (isBalanceLoading, noCategories, configTokens, selectedChainId, tokens, tokensWithBalances, isPinnedToken) => {
6
- if (isBalanceLoading) if (noCategories) {
5
+ const processTokenList = (withoutBalances, noCategories, configTokens, selectedChainId, tokens, tokensWithBalances, isPinnedToken) => {
6
+ if (withoutBalances) if (noCategories) {
7
7
  const sortedTokens = [...tokens ?? []].sort(sortByVolume);
8
8
  if (isPinnedToken) {
9
9
  const pinned = [];
@@ -142,6 +142,6 @@ const isSupportedToken = (token) => {
142
142
  return Boolean(token.name && token.symbol && token.priceUSD && token.chainId);
143
143
  };
144
144
  //#endregion
145
- export { isSearchMatch, isSupportedToken, processTokenBalances };
145
+ export { isSearchMatch, isSupportedToken, processTokenList };
146
146
 
147
147
  //# sourceMappingURL=tokenList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokenList.js","names":[],"sources":["../../../src/utils/tokenList.ts"],"sourcesContent":["import {\n formatUnits,\n type TokenExtended,\n type WalletTokenExtended,\n} from '@lifi/sdk'\nimport type { TokenAmount, TokenAmountExtended } from '../types/token.js'\nimport type { WidgetTokens } from '../types/widget.js'\n\nconst sortByBalances = (a: TokenAmount, b: TokenAmount) =>\n Number.parseFloat(formatUnits(b.amount ?? 0n, b.decimals)) *\n Number.parseFloat(b.priceUSD ?? '0') -\n Number.parseFloat(formatUnits(a.amount ?? 0n, a.decimals)) *\n Number.parseFloat(a.priceUSD ?? '0')\n\nconst sortByVolume = (a: TokenExtended, b: TokenExtended) =>\n (b.volumeUSD24H ?? 0) - (a.volumeUSD24H ?? 0)\n\nexport const processTokenBalances = (\n isBalanceLoading: boolean,\n noCategories: boolean,\n configTokens?: WidgetTokens,\n selectedChainId?: number,\n tokens?: TokenExtended[],\n tokensWithBalances?: TokenAmount[],\n isPinnedToken?: (chainId: number, tokenAddress: string) => boolean\n): {\n processedTokens: TokenAmount[]\n withCategories: boolean\n withPinnedTokens: boolean\n} => {\n if (isBalanceLoading) {\n if (noCategories) {\n const sortedTokens = [...(tokens ?? [])].sort(sortByVolume)\n // Separate pinned tokens\n if (isPinnedToken) {\n const pinned: TokenAmount[] = []\n const notPinned: TokenAmount[] = []\n for (const token of sortedTokens) {\n if (isPinnedToken(token.chainId, token.address)) {\n const pinnedToken = { ...token, pinned: true } as TokenAmount\n pinned.push(pinnedToken)\n } else {\n notPinned.push(token)\n }\n }\n return {\n processedTokens: [...pinned, ...notPinned],\n withCategories: false,\n withPinnedTokens: !!pinned.length,\n }\n }\n return {\n processedTokens: sortedTokens,\n withCategories: false,\n withPinnedTokens: false,\n }\n } else {\n return processedTypedTokens(\n tokens ?? [],\n [],\n selectedChainId,\n configTokens,\n isPinnedToken\n )\n }\n }\n\n const sortedTokensWithBalances = [...(tokensWithBalances ?? [])].sort(\n sortByBalances\n )\n\n const tokensWithBalancesSet = new Set(\n sortedTokensWithBalances.map(\n (token) => `${token.chainId}-${token.address.toLowerCase()}`\n )\n )\n const tokensWithoutBalances =\n tokens\n ?.filter((token) => {\n const tokenKey = `${token.chainId}-${token.address.toLowerCase()}`\n return !tokensWithBalancesSet.has(tokenKey)\n })\n .sort(sortByVolume) ?? []\n\n if (noCategories) {\n // Separate pinned tokens\n if (isPinnedToken) {\n const pinnedWithBalances: TokenAmount[] = []\n const notPinnedWithBalances: TokenAmount[] = []\n const pinnedWithoutBalances: TokenAmount[] = []\n const notPinnedWithoutBalances: TokenAmount[] = []\n\n for (const token of sortedTokensWithBalances) {\n if (isPinnedToken(token.chainId, token.address)) {\n const pinnedToken = { ...token, pinned: true } as TokenAmount\n pinnedWithBalances.push(pinnedToken)\n } else {\n notPinnedWithBalances.push(token)\n }\n }\n\n for (const token of tokensWithoutBalances) {\n if (isPinnedToken(token.chainId, token.address)) {\n const pinnedToken = { ...token, pinned: true } as TokenAmount\n pinnedWithoutBalances.push(pinnedToken)\n } else {\n notPinnedWithoutBalances.push(token)\n }\n }\n\n return {\n processedTokens: [\n ...pinnedWithBalances,\n ...pinnedWithoutBalances,\n ...notPinnedWithBalances,\n ...notPinnedWithoutBalances,\n ],\n withCategories: false,\n withPinnedTokens:\n !!pinnedWithBalances.length || !!pinnedWithoutBalances.length,\n }\n }\n return {\n processedTokens: [...sortedTokensWithBalances, ...tokensWithoutBalances],\n withCategories: false,\n withPinnedTokens: false,\n }\n } else {\n return processedTypedTokens(\n tokensWithoutBalances,\n sortedTokensWithBalances,\n selectedChainId,\n configTokens,\n isPinnedToken\n )\n }\n}\n\n// NB: only for non-all-networks\nconst processedTypedTokens = (\n tokens: TokenAmount[],\n tokensWithBalances: TokenAmount[],\n selectedChainId?: number,\n configTokens?: WidgetTokens,\n isPinnedToken?: (chainId: number, tokenAddress: string) => boolean\n) => {\n const filteredTokensMap = new Map(\n tokens.map((token) => [token.address, token])\n )\n\n const pinnedTokens: TokenAmount[] = []\n const featuredTokensFromConfig: TokenAmount[] = []\n const popularTokensFromConfig: TokenAmount[] = []\n\n ;(['popular', 'featured'] as const).forEach((tokenType) => {\n const typedTokens = configTokens?.[tokenType]?.filter(\n (token) => token.chainId === selectedChainId\n )\n\n typedTokens?.forEach((token) => {\n const tokenAmount = { ...token } as TokenAmount\n tokenAmount[tokenType] = true\n // Config tokens are explicitly set by integrator, mark as verified\n tokenAmount.verified = true\n\n const match = filteredTokensMap.get(token.address)\n if (match?.priceUSD) {\n tokenAmount.priceUSD = match.priceUSD\n }\n if (!token.logoURI && match?.logoURI) {\n tokenAmount.logoURI = match.logoURI\n }\n\n if (tokenType === 'popular') {\n popularTokensFromConfig.push(tokenAmount)\n } else {\n featuredTokensFromConfig.push(tokenAmount)\n }\n\n // Additionally add to pinned tokens if it is pinned\n const isPinned =\n isPinnedToken && selectedChainId\n ? isPinnedToken(selectedChainId, token.address)\n : false\n if (isPinned) {\n const pinnedToken = { ...tokenAmount, pinned: true } as TokenAmount\n pinnedTokens.push(pinnedToken)\n }\n })\n })\n\n // Filter out config-added tokens from main list\n const configTokenAddresses = new Set(\n [...popularTokensFromConfig, ...featuredTokensFromConfig].map((t) =>\n t.address.toLowerCase()\n )\n )\n\n const remainingTokens = tokens.filter(\n (token) => !configTokenAddresses.has(token.address.toLowerCase())\n )\n\n const otherTokens: TokenAmount[] = []\n\n // Separate pinned tokens and categorize remaining tokens\n for (const token of remainingTokens) {\n const isPinned =\n isPinnedToken && selectedChainId\n ? isPinnedToken(selectedChainId, token.address)\n : false\n\n if (isPinned) {\n const pinnedToken = { ...token, pinned: true } as TokenAmount\n pinnedTokens.push(pinnedToken)\n } else if (token.featured) {\n featuredTokensFromConfig.push(token)\n } else if (token.popular) {\n popularTokensFromConfig.push(token)\n } else {\n otherTokens.push(token)\n }\n }\n\n // Also check tokens with balances for pinned status\n const pinnedTokensWithBalances: TokenAmount[] = []\n const nonPinnedTokensWithBalances: TokenAmount[] = []\n\n if (isPinnedToken && selectedChainId) {\n for (const token of tokensWithBalances) {\n if (isPinnedToken(selectedChainId, token.address)) {\n const pinnedToken = { ...token, pinned: true } as TokenAmount\n pinnedTokensWithBalances.push(pinnedToken)\n } else {\n nonPinnedTokensWithBalances.push(token)\n }\n }\n } else {\n nonPinnedTokensWithBalances.push(...tokensWithBalances)\n }\n\n const sortedPinnedTokens = [\n ...pinnedTokens,\n ...pinnedTokensWithBalances,\n ].sort(sortByVolume)\n const sortedFeaturedTokens = [...featuredTokensFromConfig].sort(sortByVolume)\n const sortedPopularTokens = [...popularTokensFromConfig].sort(sortByVolume)\n const sortedOtherTokens = [...otherTokens].sort(sortByVolume)\n\n return {\n processedTokens: [\n ...sortedPinnedTokens,\n ...sortedFeaturedTokens,\n ...nonPinnedTokensWithBalances,\n ...sortedPopularTokens,\n ...sortedOtherTokens,\n ],\n withCategories:\n !!featuredTokensFromConfig.length || !!popularTokensFromConfig.length,\n withPinnedTokens: !!sortedPinnedTokens.length,\n }\n}\n\nexport const isSearchMatch = (\n token: TokenExtended | TokenAmountExtended,\n search?: string\n): boolean => {\n if (!search) {\n return true\n }\n\n const searchLowerCase = search.toLowerCase()\n return (\n token.name?.toLowerCase().includes(searchLowerCase) ||\n token.symbol\n ?.replaceAll('₮', 'T')\n .toLowerCase()\n .includes(searchLowerCase) ||\n token.address?.toLowerCase().includes(searchLowerCase)\n )\n}\n\nexport const isSupportedToken = (token: WalletTokenExtended): boolean => {\n return Boolean(token.name && token.symbol && token.priceUSD && token.chainId)\n}\n"],"mappings":";;AAQA,MAAM,kBAAkB,GAAgB,MACtC,OAAO,WAAW,YAAY,EAAE,UAAU,IAAI,EAAE,QAAQ,CAAC,IACvD,OAAO,WAAW,EAAE,YAAY,GAAG,IACrC,OAAO,WAAW,YAAY,EAAE,UAAU,IAAI,EAAE,QAAQ,CAAC,IACvD,OAAO,WAAW,EAAE,YAAY,GAAG;AAEvC,MAAM,gBAAgB,GAAkB,OACrC,EAAE,gBAAgB,MAAM,EAAE,gBAAgB;AAE7C,MAAa,wBACX,kBACA,cACA,cACA,iBACA,QACA,oBACA,kBAKG;CACH,IAAI,kBACF,IAAI,cAAc;EAChB,MAAM,eAAe,CAAC,GAAI,UAAU,CAAC,CAAE,CAAC,CAAC,KAAK,YAAY;EAE1D,IAAI,eAAe;GACjB,MAAM,SAAwB,CAAC;GAC/B,MAAM,YAA2B,CAAC;GAClC,KAAK,MAAM,SAAS,cAClB,IAAI,cAAc,MAAM,SAAS,MAAM,OAAO,GAAG;IAC/C,MAAM,cAAc;KAAE,GAAG;KAAO,QAAQ;IAAK;IAC7C,OAAO,KAAK,WAAW;GACzB,OACE,UAAU,KAAK,KAAK;GAGxB,OAAO;IACL,iBAAiB,CAAC,GAAG,QAAQ,GAAG,SAAS;IACzC,gBAAgB;IAChB,kBAAkB,CAAC,CAAC,OAAO;GAC7B;EACF;EACA,OAAO;GACL,iBAAiB;GACjB,gBAAgB;GAChB,kBAAkB;EACpB;CACF,OACE,OAAO,qBACL,UAAU,CAAC,GACX,CAAC,GACD,iBACA,cACA,aACF;CAIJ,MAAM,2BAA2B,CAAC,GAAI,sBAAsB,CAAC,CAAE,CAAC,CAAC,KAC/D,cACF;CAEA,MAAM,wBAAwB,IAAI,IAChC,yBAAyB,KACtB,UAAU,GAAG,MAAM,QAAQ,GAAG,MAAM,QAAQ,YAAY,GAC3D,CACF;CACA,MAAM,wBACJ,QACI,QAAQ,UAAU;EAClB,MAAM,WAAW,GAAG,MAAM,QAAQ,GAAG,MAAM,QAAQ,YAAY;EAC/D,OAAO,CAAC,sBAAsB,IAAI,QAAQ;CAC5C,CAAC,CAAC,CACD,KAAK,YAAY,KAAK,CAAC;CAE5B,IAAI,cAAc;EAEhB,IAAI,eAAe;GACjB,MAAM,qBAAoC,CAAC;GAC3C,MAAM,wBAAuC,CAAC;GAC9C,MAAM,wBAAuC,CAAC;GAC9C,MAAM,2BAA0C,CAAC;GAEjD,KAAK,MAAM,SAAS,0BAClB,IAAI,cAAc,MAAM,SAAS,MAAM,OAAO,GAAG;IAC/C,MAAM,cAAc;KAAE,GAAG;KAAO,QAAQ;IAAK;IAC7C,mBAAmB,KAAK,WAAW;GACrC,OACE,sBAAsB,KAAK,KAAK;GAIpC,KAAK,MAAM,SAAS,uBAClB,IAAI,cAAc,MAAM,SAAS,MAAM,OAAO,GAAG;IAC/C,MAAM,cAAc;KAAE,GAAG;KAAO,QAAQ;IAAK;IAC7C,sBAAsB,KAAK,WAAW;GACxC,OACE,yBAAyB,KAAK,KAAK;GAIvC,OAAO;IACL,iBAAiB;KACf,GAAG;KACH,GAAG;KACH,GAAG;KACH,GAAG;IACL;IACA,gBAAgB;IAChB,kBACE,CAAC,CAAC,mBAAmB,UAAU,CAAC,CAAC,sBAAsB;GAC3D;EACF;EACA,OAAO;GACL,iBAAiB,CAAC,GAAG,0BAA0B,GAAG,qBAAqB;GACvE,gBAAgB;GAChB,kBAAkB;EACpB;CACF,OACE,OAAO,qBACL,uBACA,0BACA,iBACA,cACA,aACF;AAEJ;AAGA,MAAM,wBACJ,QACA,oBACA,iBACA,cACA,kBACG;CACH,MAAM,oBAAoB,IAAI,IAC5B,OAAO,KAAK,UAAU,CAAC,MAAM,SAAS,KAAK,CAAC,CAC9C;CAEA,MAAM,eAA8B,CAAC;CACrC,MAAM,2BAA0C,CAAC;CACjD,MAAM,0BAAyC,CAAC;CAE/C,CAAE,WAAW,UAAU,CAAC,CAAW,SAAS,cAAc;EAKzD,CAJoB,eAAe,UAAU,EAAE,QAC5C,UAAU,MAAM,YAAY,eAC/B,EAAA,EAEa,SAAS,UAAU;GAC9B,MAAM,cAAc,EAAE,GAAG,MAAM;GAC/B,YAAY,aAAa;GAEzB,YAAY,WAAW;GAEvB,MAAM,QAAQ,kBAAkB,IAAI,MAAM,OAAO;GACjD,IAAI,OAAO,UACT,YAAY,WAAW,MAAM;GAE/B,IAAI,CAAC,MAAM,WAAW,OAAO,SAC3B,YAAY,UAAU,MAAM;GAG9B,IAAI,cAAc,WAChB,wBAAwB,KAAK,WAAW;QAExC,yBAAyB,KAAK,WAAW;GAQ3C,IAHE,iBAAiB,kBACb,cAAc,iBAAiB,MAAM,OAAO,IAC5C,OACQ;IACZ,MAAM,cAAc;KAAE,GAAG;KAAa,QAAQ;IAAK;IACnD,aAAa,KAAK,WAAW;GAC/B;EACF,CAAC;CACH,CAAC;CAGD,MAAM,uBAAuB,IAAI,IAC/B,CAAC,GAAG,yBAAyB,GAAG,wBAAwB,CAAC,CAAC,KAAK,MAC7D,EAAE,QAAQ,YAAY,CACxB,CACF;CAEA,MAAM,kBAAkB,OAAO,QAC5B,UAAU,CAAC,qBAAqB,IAAI,MAAM,QAAQ,YAAY,CAAC,CAClE;CAEA,MAAM,cAA6B,CAAC;CAGpC,KAAK,MAAM,SAAS,iBAMlB,IAJE,iBAAiB,kBACb,cAAc,iBAAiB,MAAM,OAAO,IAC5C,OAEQ;EACZ,MAAM,cAAc;GAAE,GAAG;GAAO,QAAQ;EAAK;EAC7C,aAAa,KAAK,WAAW;CAC/B,OAAO,IAAI,MAAM,UACf,yBAAyB,KAAK,KAAK;MAC9B,IAAI,MAAM,SACf,wBAAwB,KAAK,KAAK;MAElC,YAAY,KAAK,KAAK;CAK1B,MAAM,2BAA0C,CAAC;CACjD,MAAM,8BAA6C,CAAC;CAEpD,IAAI,iBAAiB,iBACnB,KAAK,MAAM,SAAS,oBAClB,IAAI,cAAc,iBAAiB,MAAM,OAAO,GAAG;EACjD,MAAM,cAAc;GAAE,GAAG;GAAO,QAAQ;EAAK;EAC7C,yBAAyB,KAAK,WAAW;CAC3C,OACE,4BAA4B,KAAK,KAAK;MAI1C,4BAA4B,KAAK,GAAG,kBAAkB;CAGxD,MAAM,qBAAqB,CACzB,GAAG,cACH,GAAG,wBACL,CAAC,CAAC,KAAK,YAAY;CACnB,MAAM,uBAAuB,CAAC,GAAG,wBAAwB,CAAC,CAAC,KAAK,YAAY;CAC5E,MAAM,sBAAsB,CAAC,GAAG,uBAAuB,CAAC,CAAC,KAAK,YAAY;CAC1E,MAAM,oBAAoB,CAAC,GAAG,WAAW,CAAC,CAAC,KAAK,YAAY;CAE5D,OAAO;EACL,iBAAiB;GACf,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;EACL;EACA,gBACE,CAAC,CAAC,yBAAyB,UAAU,CAAC,CAAC,wBAAwB;EACjE,kBAAkB,CAAC,CAAC,mBAAmB;CACzC;AACF;AAEA,MAAa,iBACX,OACA,WACY;CACZ,IAAI,CAAC,QACH,OAAO;CAGT,MAAM,kBAAkB,OAAO,YAAY;CAC3C,OACE,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,eAAe,KAClD,MAAM,QACF,WAAW,KAAK,GAAG,CAAC,CACrB,YAAY,CAAC,CACb,SAAS,eAAe,KAC3B,MAAM,SAAS,YAAY,CAAC,CAAC,SAAS,eAAe;AAEzD;AAEA,MAAa,oBAAoB,UAAwC;CACvE,OAAO,QAAQ,MAAM,QAAQ,MAAM,UAAU,MAAM,YAAY,MAAM,OAAO;AAC9E"}
1
+ {"version":3,"file":"tokenList.js","names":[],"sources":["../../../src/utils/tokenList.ts"],"sourcesContent":["import {\n formatUnits,\n type TokenExtended,\n type WalletTokenExtended,\n} from '@lifi/sdk'\nimport type { TokenAmount, TokenAmountExtended } from '../types/token.js'\nimport type { WidgetTokens } from '../types/widget.js'\n\nconst sortByBalances = (a: TokenAmount, b: TokenAmount) =>\n Number.parseFloat(formatUnits(b.amount ?? 0n, b.decimals)) *\n Number.parseFloat(b.priceUSD ?? '0') -\n Number.parseFloat(formatUnits(a.amount ?? 0n, a.decimals)) *\n Number.parseFloat(a.priceUSD ?? '0')\n\nconst sortByVolume = (a: TokenExtended, b: TokenExtended) =>\n (b.volumeUSD24H ?? 0) - (a.volumeUSD24H ?? 0)\n\nexport const processTokenList = (\n withoutBalances: boolean,\n noCategories: boolean,\n configTokens?: WidgetTokens,\n selectedChainId?: number,\n tokens?: TokenExtended[],\n tokensWithBalances?: TokenAmount[],\n isPinnedToken?: (chainId: number, tokenAddress: string) => boolean\n): {\n processedTokens: TokenAmount[]\n withCategories: boolean\n withPinnedTokens: boolean\n} => {\n if (withoutBalances) {\n if (noCategories) {\n const sortedTokens = [...(tokens ?? [])].sort(sortByVolume)\n // Separate pinned tokens\n if (isPinnedToken) {\n const pinned: TokenAmount[] = []\n const notPinned: TokenAmount[] = []\n for (const token of sortedTokens) {\n if (isPinnedToken(token.chainId, token.address)) {\n const pinnedToken = { ...token, pinned: true } as TokenAmount\n pinned.push(pinnedToken)\n } else {\n notPinned.push(token)\n }\n }\n return {\n processedTokens: [...pinned, ...notPinned],\n withCategories: false,\n withPinnedTokens: !!pinned.length,\n }\n }\n return {\n processedTokens: sortedTokens,\n withCategories: false,\n withPinnedTokens: false,\n }\n } else {\n return processedTypedTokens(\n tokens ?? [],\n [],\n selectedChainId,\n configTokens,\n isPinnedToken\n )\n }\n }\n\n const sortedTokensWithBalances = [...(tokensWithBalances ?? [])].sort(\n sortByBalances\n )\n\n const tokensWithBalancesSet = new Set(\n sortedTokensWithBalances.map(\n (token) => `${token.chainId}-${token.address.toLowerCase()}`\n )\n )\n const tokensWithoutBalances =\n tokens\n ?.filter((token) => {\n const tokenKey = `${token.chainId}-${token.address.toLowerCase()}`\n return !tokensWithBalancesSet.has(tokenKey)\n })\n .sort(sortByVolume) ?? []\n\n if (noCategories) {\n // Separate pinned tokens\n if (isPinnedToken) {\n const pinnedWithBalances: TokenAmount[] = []\n const notPinnedWithBalances: TokenAmount[] = []\n const pinnedWithoutBalances: TokenAmount[] = []\n const notPinnedWithoutBalances: TokenAmount[] = []\n\n for (const token of sortedTokensWithBalances) {\n if (isPinnedToken(token.chainId, token.address)) {\n const pinnedToken = { ...token, pinned: true } as TokenAmount\n pinnedWithBalances.push(pinnedToken)\n } else {\n notPinnedWithBalances.push(token)\n }\n }\n\n for (const token of tokensWithoutBalances) {\n if (isPinnedToken(token.chainId, token.address)) {\n const pinnedToken = { ...token, pinned: true } as TokenAmount\n pinnedWithoutBalances.push(pinnedToken)\n } else {\n notPinnedWithoutBalances.push(token)\n }\n }\n\n return {\n processedTokens: [\n ...pinnedWithBalances,\n ...pinnedWithoutBalances,\n ...notPinnedWithBalances,\n ...notPinnedWithoutBalances,\n ],\n withCategories: false,\n withPinnedTokens:\n !!pinnedWithBalances.length || !!pinnedWithoutBalances.length,\n }\n }\n return {\n processedTokens: [...sortedTokensWithBalances, ...tokensWithoutBalances],\n withCategories: false,\n withPinnedTokens: false,\n }\n } else {\n return processedTypedTokens(\n tokensWithoutBalances,\n sortedTokensWithBalances,\n selectedChainId,\n configTokens,\n isPinnedToken\n )\n }\n}\n\n// NB: only for non-all-networks\nconst processedTypedTokens = (\n tokens: TokenAmount[],\n tokensWithBalances: TokenAmount[],\n selectedChainId?: number,\n configTokens?: WidgetTokens,\n isPinnedToken?: (chainId: number, tokenAddress: string) => boolean\n) => {\n const filteredTokensMap = new Map(\n tokens.map((token) => [token.address, token])\n )\n\n const pinnedTokens: TokenAmount[] = []\n const featuredTokensFromConfig: TokenAmount[] = []\n const popularTokensFromConfig: TokenAmount[] = []\n\n ;(['popular', 'featured'] as const).forEach((tokenType) => {\n const typedTokens = configTokens?.[tokenType]?.filter(\n (token) => token.chainId === selectedChainId\n )\n\n typedTokens?.forEach((token) => {\n const tokenAmount = { ...token } as TokenAmount\n tokenAmount[tokenType] = true\n // Config tokens are explicitly set by integrator, mark as verified\n tokenAmount.verified = true\n\n const match = filteredTokensMap.get(token.address)\n if (match?.priceUSD) {\n tokenAmount.priceUSD = match.priceUSD\n }\n if (!token.logoURI && match?.logoURI) {\n tokenAmount.logoURI = match.logoURI\n }\n\n if (tokenType === 'popular') {\n popularTokensFromConfig.push(tokenAmount)\n } else {\n featuredTokensFromConfig.push(tokenAmount)\n }\n\n // Additionally add to pinned tokens if it is pinned\n const isPinned =\n isPinnedToken && selectedChainId\n ? isPinnedToken(selectedChainId, token.address)\n : false\n if (isPinned) {\n const pinnedToken = { ...tokenAmount, pinned: true } as TokenAmount\n pinnedTokens.push(pinnedToken)\n }\n })\n })\n\n // Filter out config-added tokens from main list\n const configTokenAddresses = new Set(\n [...popularTokensFromConfig, ...featuredTokensFromConfig].map((t) =>\n t.address.toLowerCase()\n )\n )\n\n const remainingTokens = tokens.filter(\n (token) => !configTokenAddresses.has(token.address.toLowerCase())\n )\n\n const otherTokens: TokenAmount[] = []\n\n // Separate pinned tokens and categorize remaining tokens\n for (const token of remainingTokens) {\n const isPinned =\n isPinnedToken && selectedChainId\n ? isPinnedToken(selectedChainId, token.address)\n : false\n\n if (isPinned) {\n const pinnedToken = { ...token, pinned: true } as TokenAmount\n pinnedTokens.push(pinnedToken)\n } else if (token.featured) {\n featuredTokensFromConfig.push(token)\n } else if (token.popular) {\n popularTokensFromConfig.push(token)\n } else {\n otherTokens.push(token)\n }\n }\n\n // Also check tokens with balances for pinned status\n const pinnedTokensWithBalances: TokenAmount[] = []\n const nonPinnedTokensWithBalances: TokenAmount[] = []\n\n if (isPinnedToken && selectedChainId) {\n for (const token of tokensWithBalances) {\n if (isPinnedToken(selectedChainId, token.address)) {\n const pinnedToken = { ...token, pinned: true } as TokenAmount\n pinnedTokensWithBalances.push(pinnedToken)\n } else {\n nonPinnedTokensWithBalances.push(token)\n }\n }\n } else {\n nonPinnedTokensWithBalances.push(...tokensWithBalances)\n }\n\n const sortedPinnedTokens = [\n ...pinnedTokens,\n ...pinnedTokensWithBalances,\n ].sort(sortByVolume)\n const sortedFeaturedTokens = [...featuredTokensFromConfig].sort(sortByVolume)\n const sortedPopularTokens = [...popularTokensFromConfig].sort(sortByVolume)\n const sortedOtherTokens = [...otherTokens].sort(sortByVolume)\n\n return {\n processedTokens: [\n ...sortedPinnedTokens,\n ...sortedFeaturedTokens,\n ...nonPinnedTokensWithBalances,\n ...sortedPopularTokens,\n ...sortedOtherTokens,\n ],\n withCategories:\n !!featuredTokensFromConfig.length || !!popularTokensFromConfig.length,\n withPinnedTokens: !!sortedPinnedTokens.length,\n }\n}\n\nexport const isSearchMatch = (\n token: TokenExtended | TokenAmountExtended,\n search?: string\n): boolean => {\n if (!search) {\n return true\n }\n\n const searchLowerCase = search.toLowerCase()\n return (\n token.name?.toLowerCase().includes(searchLowerCase) ||\n token.symbol\n ?.replaceAll('₮', 'T')\n .toLowerCase()\n .includes(searchLowerCase) ||\n token.address?.toLowerCase().includes(searchLowerCase)\n )\n}\n\nexport const isSupportedToken = (token: WalletTokenExtended): boolean => {\n return Boolean(token.name && token.symbol && token.priceUSD && token.chainId)\n}\n"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ //#region src/utils/wallet.d.ts
2
+ declare const shortenAddress: (address?: string) => string | null;
3
+ //#endregion
4
+ export { shortenAddress };
5
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","names":[],"sources":["../../../src/utils/wallet.ts"],"mappings":";cAAa,iBAAkB"}
package/package.json CHANGED
@@ -1,10 +1,28 @@
1
1
  {
2
2
  "name": "@lifi/widget",
3
- "version": "4.3.0",
3
+ "version": "4.4.0",
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",
7
7
  "types": "./dist/esm/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/esm/index.d.ts",
11
+ "import": "./dist/esm/index.js",
12
+ "default": "./dist/esm/index.js"
13
+ },
14
+ "./skeleton": {
15
+ "types": "./dist/esm/components/Skeleton/WidgetSkeleton.d.ts",
16
+ "import": "./dist/esm/components/Skeleton/WidgetSkeleton.js",
17
+ "default": "./dist/esm/components/Skeleton/WidgetSkeleton.js"
18
+ },
19
+ "./shared": {
20
+ "types": "./dist/esm/shared.d.ts",
21
+ "import": "./dist/esm/shared.js",
22
+ "default": "./dist/esm/shared.js"
23
+ },
24
+ "./package.json": "./package.json"
25
+ },
8
26
  "sideEffects": false,
9
27
  "author": "Eugene Chybisov <eugene@li.finance>",
10
28
  "homepage": "https://github.com/lifinance/widget",
@@ -41,15 +59,15 @@
41
59
  "@tanstack/react-router": "^1.170.17",
42
60
  "@tanstack/react-virtual": "^3.14.5",
43
61
  "eventemitter3": "^5.0.4",
44
- "i18next": "^26.3.4",
62
+ "i18next": "^26.3.6",
45
63
  "microdiff": "^1.5.0",
46
64
  "motion": "^12.42.2",
47
- "react-i18next": "^17.0.8",
48
- "react-intersection-observer": "^10.0.3",
65
+ "react-i18next": "^17.0.9",
66
+ "react-intersection-observer": "^10.1.0",
49
67
  "react-transition-group": "^4.4.5",
50
68
  "zustand": "^5.0.14",
51
- "@lifi/wallet-management": "4.1.1",
52
- "@lifi/widget-provider": "4.2.0"
69
+ "@lifi/wallet-management": "4.1.2",
70
+ "@lifi/widget-provider": "4.3.0"
53
71
  },
54
72
  "peerDependencies": {
55
73
  "@tanstack/react-query": ">=5.90.0",
@@ -61,6 +79,9 @@
61
79
  "*": {
62
80
  "skeleton": [
63
81
  "./dist/esm/components/Skeleton/WidgetSkeleton.d.ts"
82
+ ],
83
+ "shared": [
84
+ "./dist/esm/shared.d.ts"
64
85
  ]
65
86
  }
66
87
  },
@@ -78,18 +99,5 @@
78
99
  "!*.tmp",
79
100
  "!*.env",
80
101
  "!tsconfig.json"
81
- ],
82
- "exports": {
83
- ".": {
84
- "types": "./dist/esm/index.d.ts",
85
- "import": "./dist/esm/index.js",
86
- "default": "./dist/esm/index.js"
87
- },
88
- "./skeleton": {
89
- "types": "./dist/esm/components/Skeleton/WidgetSkeleton.d.ts",
90
- "import": "./dist/esm/components/Skeleton/WidgetSkeleton.js",
91
- "default": "./dist/esm/components/Skeleton/WidgetSkeleton.js"
92
- },
93
- "./package.json": "./package.json"
94
- }
102
+ ]
95
103
  }
@@ -9,7 +9,8 @@ export const RouteTokens: React.FC<{
9
9
  route: RouteExtended
10
10
  showEssentials?: boolean
11
11
  defaultExpanded?: boolean
12
- }> = ({ route, showEssentials, defaultExpanded }) => {
12
+ fromSlot?: React.ReactNode
13
+ }> = ({ route, showEssentials, defaultExpanded, fromSlot }) => {
13
14
  const { mode } = useWidgetConfig()
14
15
 
15
16
  const fromToken = {
@@ -30,7 +31,7 @@ export const RouteTokens: React.FC<{
30
31
 
31
32
  return (
32
33
  <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5 }}>
33
- {fromToken ? <Token token={fromToken} /> : null}
34
+ {fromSlot ?? (fromToken ? <Token token={fromToken} /> : null)}
34
35
  <Box
35
36
  sx={{
36
37
  width: 40,
@@ -27,7 +27,16 @@ import {
27
27
  SendToWalletRequiredLabelText,
28
28
  } from './SendToWalletButton.style.js'
29
29
 
30
- export const SendToWalletButton: React.FC<CardProps> = (props) => {
30
+ export const SendToWalletButton: React.FC<
31
+ CardProps & {
32
+ onEditAddress?: (() => void) | null
33
+ onClearAddress?: () => void
34
+ // Keep the card visible (and flag it required when empty) even when the
35
+ // widget's own toAddress requirement is off, e.g. a user-settable checkout
36
+ // recipient that must be filled before continuing.
37
+ requireAddress?: boolean
38
+ }
39
+ > = ({ onEditAddress, onClearAddress, requireAddress, ...props }) => {
31
40
  const { t } = useTranslation()
32
41
  const navigate = useNavigate()
33
42
  const { disabledUI, hiddenUI, toAddress, toAddresses, mode, modeOptions } =
@@ -87,7 +96,15 @@ export const SendToWalletButton: React.FC<CardProps> = (props) => {
87
96
 
88
97
  const disabledForChanges = Boolean(toAddressFieldValue) && disabledToAddress
89
98
 
99
+ // `onEditAddress === null` renders the card read-only (consumer-controlled,
100
+ // e.g. a fixed checkout recipient); a function overrides the default route nav.
101
+ const readOnly = onEditAddress === null || disabledForChanges
102
+
90
103
  const handleOnClick = () => {
104
+ if (onEditAddress !== undefined) {
105
+ onEditAddress?.()
106
+ return
107
+ }
91
108
  navigate({
92
109
  to: toAddresses?.length
93
110
  ? navigationRoutes.configuredWallets
@@ -97,6 +114,10 @@ export const SendToWalletButton: React.FC<CardProps> = (props) => {
97
114
 
98
115
  const clearSelectedBookmark: MouseEventHandler<HTMLButtonElement> = (e) => {
99
116
  e.stopPropagation()
117
+ if (onClearAddress) {
118
+ onClearAddress()
119
+ return
120
+ }
100
121
  setFieldValue('toAddress', '', { isTouched: true })
101
122
  setSelectedBookmark()
102
123
  }
@@ -114,8 +135,9 @@ export const SendToWalletButton: React.FC<CardProps> = (props) => {
114
135
  return () => clearTimeout(timeout)
115
136
  }, [])
116
137
 
138
+ const addressRequired = requireAddress || requiredToAddress
117
139
  const isOpenCollapse =
118
- !hiddenToAddress && (requiredToAddress || !!toAddressFieldValue)
140
+ !hiddenToAddress && (addressRequired || !!toAddressFieldValue)
119
141
 
120
142
  const title =
121
143
  mode === 'custom' && modeOptions?.custom?.type === 'deposit'
@@ -131,12 +153,12 @@ export const SendToWalletButton: React.FC<CardProps> = (props) => {
131
153
  >
132
154
  <Card
133
155
  role="button"
134
- onClick={disabledForChanges ? undefined : handleOnClick}
156
+ onClick={readOnly ? undefined : handleOnClick}
135
157
  sx={{ width: '100%', ...props.sx }}
136
158
  >
137
159
  <SendToWalletCardTitleRow>
138
160
  <CardTitle sx={{ p: 0 }}>{title}</CardTitle>
139
- {requiredToAddress && !toAddressFieldValue ? (
161
+ {addressRequired && !toAddressFieldValue ? (
140
162
  <SendToWalletRequiredLabel variant="warning">
141
163
  <WarningRounded sx={{ fontSize: 14 }} />
142
164
  <SendToWalletRequiredLabelText type="icon">
@@ -165,7 +187,7 @@ export const SendToWalletButton: React.FC<CardProps> = (props) => {
165
187
  subheader={headerSubheader}
166
188
  selected={!!toAddressFieldValue || disabledToAddress}
167
189
  action={
168
- toAddressFieldValue && !disabledForChanges ? (
190
+ toAddressFieldValue && !readOnly ? (
169
191
  <CardIconButton onClick={clearSelectedBookmark} size="small">
170
192
  <CloseRounded fontSize="inherit" />
171
193
  </CardIconButton>
@@ -22,3 +22,14 @@ export const DeleteButton: React.FC<React.ComponentProps<typeof IconButton>> =
22
22
  width: 24,
23
23
  height: 24,
24
24
  }))
25
+
26
+ export const RetryButton: React.FC<React.ComponentProps<typeof IconButton>> =
27
+ styled(IconButton)(({ theme }) => ({
28
+ fontWeight: 700,
29
+ fontSize: 12,
30
+ height: 24,
31
+ borderRadius: theme.vars.shape.borderRadius,
32
+ padding: theme.spacing(0.5, 1.5),
33
+ color: theme.vars.palette.text.primary,
34
+ backgroundColor: theme.vars.palette.background.paper,
35
+ }))
@@ -1,2 +1,2 @@
1
1
  export const name = '@lifi/widget'
2
- export const version = '4.3.0'
2
+ export const version = '4.4.0'
@@ -0,0 +1,70 @@
1
+ import type { TokenExtended } from '@lifi/sdk'
2
+ import { useMemo } from 'react'
3
+ import type { FormType } from '../stores/form/types.js'
4
+ import { usePinnedTokensStore } from '../stores/pinnedTokens/PinnedTokensStore.js'
5
+ import { isSearchMatch } from '../utils/tokenList.js'
6
+ import { useTokens } from './useTokens.js'
7
+
8
+ export type IsPinnedToken = (chainId: number, tokenAddress: string) => boolean
9
+
10
+ // Balance-free core shared by useTokenList and useTokenBalances.
11
+ export const useDisplayedTokens = (
12
+ selectedChainId?: number,
13
+ formType?: FormType,
14
+ isAllNetworks?: boolean,
15
+ search?: string
16
+ ): {
17
+ allTokens: Record<number, TokenExtended[]> | undefined
18
+ displayedTokensList: TokenExtended[]
19
+ isPinnedToken: IsPinnedToken | undefined
20
+ isTokensLoading: boolean
21
+ isSearchLoading: boolean
22
+ } => {
23
+ const {
24
+ allTokens,
25
+ isLoading: isTokensLoading,
26
+ isSearchLoading,
27
+ } = useTokens(formType, search, isAllNetworks ? undefined : selectedChainId)
28
+
29
+ const pinnedTokens = usePinnedTokensStore((state) => state.pinnedTokens)
30
+
31
+ const isPinnedToken = useMemo<IsPinnedToken | undefined>(() => {
32
+ if (isAllNetworks) {
33
+ const pinnedSet = new Set<string>()
34
+ Object.entries(pinnedTokens).forEach(([chainIdStr, addresses]) => {
35
+ const chainId = Number.parseInt(chainIdStr, 10)
36
+ addresses.forEach((address) => {
37
+ pinnedSet.add(`${chainId}-${address.toLowerCase()}`)
38
+ })
39
+ })
40
+ return (chainId, tokenAddress) =>
41
+ pinnedSet.has(`${chainId}-${tokenAddress.toLowerCase()}`)
42
+ }
43
+ if (selectedChainId) {
44
+ const chainPinnedTokens = pinnedTokens[selectedChainId] || []
45
+ const pinnedSet = new Set(
46
+ chainPinnedTokens.map((addr) => addr.toLowerCase())
47
+ )
48
+ return (chainId, tokenAddress) =>
49
+ chainId === selectedChainId && pinnedSet.has(tokenAddress.toLowerCase())
50
+ }
51
+ return undefined
52
+ }, [isAllNetworks, selectedChainId, pinnedTokens])
53
+
54
+ const displayedTokensList = useMemo(() => {
55
+ const tokensByChain = isAllNetworks
56
+ ? Object.values(allTokens ?? {}).flat()
57
+ : selectedChainId
58
+ ? allTokens?.[selectedChainId]
59
+ : undefined
60
+ return tokensByChain?.filter((t) => isSearchMatch(t, search)) ?? []
61
+ }, [allTokens, isAllNetworks, selectedChainId, search])
62
+
63
+ return {
64
+ allTokens,
65
+ displayedTokensList,
66
+ isPinnedToken,
67
+ isTokensLoading,
68
+ isSearchLoading,
69
+ }
70
+ }
@@ -32,6 +32,10 @@ const getContentHeight = (
32
32
  console.warn(
33
33
  `Can't find ${ElementId.ScrollableContainer} or ${ElementId.Header} id.`
34
34
  )
35
+ // Restore the height we zeroed above before returning early
36
+ if (listParentElement && oldHeight !== undefined) {
37
+ listParentElement.style.height = oldHeight
38
+ }
35
39
  return 0
36
40
  }
37
41
  const { height: containerHeight } = containerElement.getBoundingClientRect()