@lifi/widget 4.0.0-beta.14 → 4.0.0-beta.18

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 (294) hide show
  1. package/dist/esm/AppDefault.js +31 -29
  2. package/dist/esm/AppDefault.js.map +1 -1
  3. package/dist/esm/AppLayout.js +2 -2
  4. package/dist/esm/AppLayout.js.map +1 -1
  5. package/dist/esm/components/AmountInput/AmountInput.js +2 -2
  6. package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
  7. package/dist/esm/components/AmountInput/AmountInputStartAdornment.js.map +1 -1
  8. package/dist/esm/components/AmountInput/PriceFormHelperText.js.map +1 -1
  9. package/dist/esm/components/AppContainer.js +3 -3
  10. package/dist/esm/components/AppContainer.js.map +1 -1
  11. package/dist/esm/components/ChainSelect/ChainSelect.js.map +1 -1
  12. package/dist/esm/components/ChainSelect/useChainSelect.js.map +1 -1
  13. package/dist/esm/components/Chains/AllChainsAvatar.js +7 -1
  14. package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -1
  15. package/dist/esm/components/Chains/SelectChainContent.js.map +1 -1
  16. package/dist/esm/components/ContractComponent/ItemPrice.js +1 -1
  17. package/dist/esm/components/ContractComponent/ItemPrice.js.map +1 -1
  18. package/dist/esm/components/ContractComponent/NFT/NFTBase.js +1 -1
  19. package/dist/esm/components/ContractComponent/NFT/NFTBase.js.map +1 -1
  20. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  21. package/dist/esm/components/Expansion/Expansion.js +4 -4
  22. package/dist/esm/components/Expansion/Expansion.js.map +1 -1
  23. package/dist/esm/components/Header/ActivitiesButton.js +1 -1
  24. package/dist/esm/components/Header/ActivitiesButton.js.map +1 -1
  25. package/dist/esm/components/Header/Header.js +2 -2
  26. package/dist/esm/components/Header/Header.js.map +1 -1
  27. package/dist/esm/components/Header/NavigationHeader.js +3 -3
  28. package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
  29. package/dist/esm/components/Header/WalletHeader.js +3 -3
  30. package/dist/esm/components/Header/WalletHeader.js.map +1 -1
  31. package/dist/esm/components/IconCircle/IconCircle.js.map +1 -1
  32. package/dist/esm/components/IconTypography.js.map +1 -1
  33. package/dist/esm/components/Messages/AlertMessage.js +1 -1
  34. package/dist/esm/components/Messages/AlertMessage.js.map +1 -1
  35. package/dist/esm/components/PageEntered.js +2 -2
  36. package/dist/esm/components/PageEntered.js.map +1 -1
  37. package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.js.map +1 -1
  38. package/dist/esm/components/RouteCard/RouteCard.js +2 -2
  39. package/dist/esm/components/RouteCard/RouteCard.js.map +1 -1
  40. package/dist/esm/components/RouteCard/RouteCardEssentials.js +10 -4
  41. package/dist/esm/components/RouteCard/RouteCardEssentials.js.map +1 -1
  42. package/dist/esm/components/RouteCard/RouteToken.js +2 -2
  43. package/dist/esm/components/RouteCard/RouteToken.js.map +1 -1
  44. package/dist/esm/components/Routes/RoutesExpanded.js +3 -3
  45. package/dist/esm/components/Routes/RoutesExpanded.js.map +1 -1
  46. package/dist/esm/components/SelectChainAndToken.js +8 -5
  47. package/dist/esm/components/SelectChainAndToken.js.map +1 -1
  48. package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.js +1 -2
  49. package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.js.map +1 -1
  50. package/dist/esm/components/SendToWallet/SendToWalletButton.js +4 -4
  51. package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
  52. package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js +3 -3
  53. package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js.map +1 -1
  54. package/dist/esm/components/Skeleton/WidgetSkeleton.js.map +1 -1
  55. package/dist/esm/components/Step/Step.js +20 -9
  56. package/dist/esm/components/Step/Step.js.map +1 -1
  57. package/dist/esm/components/Step/StepActions.js +2 -2
  58. package/dist/esm/components/Step/StepActions.js.map +1 -1
  59. package/dist/esm/components/StepActions/StepActions.js +2 -2
  60. package/dist/esm/components/StepActions/StepActions.js.map +1 -1
  61. package/dist/esm/components/Tabs/Tabs.style.js.map +1 -1
  62. package/dist/esm/components/Timer/StepTimer.js.map +1 -1
  63. package/dist/esm/components/Timer/TimerContent.js +1 -0
  64. package/dist/esm/components/Timer/TimerContent.js.map +1 -1
  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/TokenDetailsSheetContent.js +6 -4
  68. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
  69. package/dist/esm/components/TokenList/TokenList.js +2 -2
  70. package/dist/esm/components/TokenList/TokenList.js.map +1 -1
  71. package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
  72. package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
  73. package/dist/esm/components/TokenList/useTokenSelect.js +2 -2
  74. package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
  75. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js +2 -3
  76. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
  77. package/dist/esm/components/TransactionDetails.js +5 -2
  78. package/dist/esm/components/TransactionDetails.js.map +1 -1
  79. package/dist/esm/config/version.d.ts +1 -1
  80. package/dist/esm/config/version.js +1 -1
  81. package/dist/esm/config/version.js.map +1 -1
  82. package/dist/esm/hooks/timer/time.js.map +1 -1
  83. package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -1
  84. package/dist/esm/hooks/useActionMessage.js +2 -2
  85. package/dist/esm/hooks/useActionMessage.js.map +1 -1
  86. package/dist/esm/hooks/useAddressActivity.js.map +1 -1
  87. package/dist/esm/hooks/useAddressValidation.js +3 -8
  88. package/dist/esm/hooks/useAddressValidation.js.map +1 -1
  89. package/dist/esm/hooks/useAvailableChains.js +2 -1
  90. package/dist/esm/hooks/useAvailableChains.js.map +1 -1
  91. package/dist/esm/hooks/useChain.js.map +1 -1
  92. package/dist/esm/hooks/useChains.js.map +1 -1
  93. package/dist/esm/hooks/useContactSupport.js +3 -3
  94. package/dist/esm/hooks/useContactSupport.js.map +1 -1
  95. package/dist/esm/hooks/useDebouncedWatch.js.map +1 -1
  96. package/dist/esm/hooks/useExplorer.js +15 -4
  97. package/dist/esm/hooks/useExplorer.js.map +1 -1
  98. package/dist/esm/hooks/useFilteredByTokenBalances.js.map +1 -1
  99. package/dist/esm/hooks/useFromAmountThreshold.js.map +1 -1
  100. package/dist/esm/hooks/useFromTokenSufficiency.js.map +1 -1
  101. package/dist/esm/hooks/useGasRecommendation.js +2 -2
  102. package/dist/esm/hooks/useGasRecommendation.js.map +1 -1
  103. package/dist/esm/hooks/useGasRefuel.js +2 -2
  104. package/dist/esm/hooks/useGasRefuel.js.map +1 -1
  105. package/dist/esm/hooks/useGasSufficiency.js +2 -2
  106. package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
  107. package/dist/esm/hooks/useHasChainExpansion.js +3 -3
  108. package/dist/esm/hooks/useHasChainExpansion.js.map +1 -1
  109. package/dist/esm/hooks/useIsContractAddress.js.map +1 -1
  110. package/dist/esm/hooks/useListHeight.js +2 -2
  111. package/dist/esm/hooks/useListHeight.js.map +1 -1
  112. package/dist/esm/hooks/useLongPress.js.map +1 -1
  113. package/dist/esm/hooks/useNavigateBack.js.map +1 -1
  114. package/dist/esm/hooks/useRouteExecution.js +5 -7
  115. package/dist/esm/hooks/useRouteExecution.js.map +1 -1
  116. package/dist/esm/hooks/useRoutes.js +4 -4
  117. package/dist/esm/hooks/useRoutes.js.map +1 -1
  118. package/dist/esm/hooks/useScrollableContainer.js.map +1 -1
  119. package/dist/esm/hooks/useSwapOnly.js.map +1 -1
  120. package/dist/esm/hooks/useToAddressAutoPopulate.js.map +1 -1
  121. package/dist/esm/hooks/useToAddressRequirements.js +2 -2
  122. package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
  123. package/dist/esm/hooks/useToAddressReset.js +2 -2
  124. package/dist/esm/hooks/useToAddressReset.js.map +1 -1
  125. package/dist/esm/hooks/useTokenBalance.js.map +1 -1
  126. package/dist/esm/hooks/useTokenBalances.js +2 -2
  127. package/dist/esm/hooks/useTokenBalances.js.map +1 -1
  128. package/dist/esm/hooks/useTokenBalancesQueries.js.map +1 -1
  129. package/dist/esm/hooks/useTokenSearch.js.map +1 -1
  130. package/dist/esm/hooks/useTokens.js +4 -2
  131. package/dist/esm/hooks/useTokens.js.map +1 -1
  132. package/dist/esm/hooks/useTransactionDetails.js.map +1 -1
  133. package/dist/esm/hooks/useTransactionHistory.js.map +1 -1
  134. package/dist/esm/hooks/useTransactionList.js +2 -3
  135. package/dist/esm/hooks/useTransactionList.js.map +1 -1
  136. package/dist/esm/hooks/useWidgetEvents.js.map +1 -1
  137. package/dist/esm/i18n/bn.json +3 -0
  138. package/dist/esm/i18n/de.json +3 -0
  139. package/dist/esm/i18n/en.json +3 -0
  140. package/dist/esm/i18n/es.json +3 -0
  141. package/dist/esm/i18n/fr.json +3 -0
  142. package/dist/esm/i18n/hi.json +3 -0
  143. package/dist/esm/i18n/id.json +3 -0
  144. package/dist/esm/i18n/it.json +3 -0
  145. package/dist/esm/i18n/ja.json +3 -0
  146. package/dist/esm/i18n/ko.json +3 -0
  147. package/dist/esm/i18n/pl.json +3 -0
  148. package/dist/esm/i18n/pt.json +3 -0
  149. package/dist/esm/i18n/th.json +3 -0
  150. package/dist/esm/i18n/tr.json +3 -0
  151. package/dist/esm/i18n/uk.json +3 -0
  152. package/dist/esm/i18n/vi.json +3 -0
  153. package/dist/esm/i18n/zh.json +3 -0
  154. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js +1 -2
  155. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js.map +1 -1
  156. package/dist/esm/pages/ActivitiesPage/ActivitiesPageMenuButton.js +1 -1
  157. package/dist/esm/pages/ActivitiesPage/ActivitiesPageMenuButton.js.map +1 -1
  158. package/dist/esm/pages/MainPage/MainPage.js +6 -6
  159. package/dist/esm/pages/MainPage/MainPage.js.map +1 -1
  160. package/dist/esm/pages/MainPage/ReviewButton.js +2 -2
  161. package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
  162. package/dist/esm/pages/RoutesPage/RoutesPage.js +3 -3
  163. package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
  164. package/dist/esm/pages/SelectChainPage/SelectChainPage.js.map +1 -1
  165. package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
  166. package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js +3 -3
  167. package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js.map +1 -1
  168. package/dist/esm/pages/SendToWallet/BookmarksPage.js +1 -1
  169. package/dist/esm/pages/SendToWallet/BookmarksPage.js.map +1 -1
  170. package/dist/esm/pages/SendToWallet/RecentWalletsPage.js +1 -1
  171. package/dist/esm/pages/SendToWallet/RecentWalletsPage.js.map +1 -1
  172. package/dist/esm/pages/SendToWallet/SendToWalletPage.js +6 -6
  173. package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
  174. package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js +2 -2
  175. package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js.map +1 -1
  176. package/dist/esm/pages/SettingsPage/LanguageSetting.js +2 -2
  177. package/dist/esm/pages/SettingsPage/LanguageSetting.js.map +1 -1
  178. package/dist/esm/pages/SettingsPage/SettingsPage.js +2 -2
  179. package/dist/esm/pages/SettingsPage/SettingsPage.js.map +1 -1
  180. package/dist/esm/pages/SettingsPage/SmallBalanceFilterSettings.js.map +1 -1
  181. package/dist/esm/pages/SettingsPage/ThemeSettings.js +2 -2
  182. package/dist/esm/pages/SettingsPage/ThemeSettings.js.map +1 -1
  183. package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.js.map +1 -1
  184. package/dist/esm/pages/TransactionDetailsPage/StepActionRow.js +2 -2
  185. package/dist/esm/pages/TransactionDetailsPage/StepActionRow.js.map +1 -1
  186. package/dist/esm/pages/TransactionDetailsPage/StepActionsList.js +11 -5
  187. package/dist/esm/pages/TransactionDetailsPage/StepActionsList.js.map +1 -1
  188. package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsPage.js.map +1 -1
  189. package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.js +2 -2
  190. package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.js.map +1 -1
  191. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js +2 -2
  192. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js.map +1 -1
  193. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js +1 -1
  194. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js.map +1 -1
  195. package/dist/esm/pages/TransactionPage/StartTransactionButton.js.map +1 -1
  196. package/dist/esm/pages/TransactionPage/StatusBottomSheet.js +20 -21
  197. package/dist/esm/pages/TransactionPage/StatusBottomSheet.js.map +1 -1
  198. package/dist/esm/pages/TransactionPage/StatusBottomSheet.style.js +5 -6
  199. package/dist/esm/pages/TransactionPage/StatusBottomSheet.style.js.map +1 -1
  200. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js +14 -4
  201. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
  202. package/dist/esm/pages/TransactionPage/TransactionPage.js +15 -19
  203. package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
  204. package/dist/esm/providers/I18nProvider/I18nProvider.js.map +1 -1
  205. package/dist/esm/providers/I18nProvider/i18n.js.map +1 -1
  206. package/dist/esm/providers/QueryClientProvider.js.map +1 -1
  207. package/dist/esm/providers/ThemeProvider/ThemeProvider.js.map +1 -1
  208. package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
  209. package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js +7 -3
  210. package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js.map +1 -1
  211. package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
  212. package/dist/esm/stores/bookmarks/useBookmarkActions.js.map +1 -1
  213. package/dist/esm/stores/chains/ChainOrderStore.js +2 -2
  214. package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
  215. package/dist/esm/stores/chains/createChainOrderStore.js +2 -2
  216. package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
  217. package/dist/esm/stores/chains/useChainOrder.js.map +1 -1
  218. package/dist/esm/stores/form/URLSearchParamsBuilder.js.map +1 -1
  219. package/dist/esm/stores/form/createFormStore.js.map +1 -1
  220. package/dist/esm/stores/form/useFieldActions.js +3 -3
  221. package/dist/esm/stores/form/useFieldActions.js.map +1 -1
  222. package/dist/esm/stores/form/useFieldValues.js.map +1 -1
  223. package/dist/esm/stores/form/useFormRef.js +2 -2
  224. package/dist/esm/stores/form/useFormRef.js.map +1 -1
  225. package/dist/esm/stores/form/useTouchedFields.js.map +1 -1
  226. package/dist/esm/stores/header/useHeaderStore.js.map +1 -1
  227. package/dist/esm/stores/routes/RouteExecutionStore.js.map +1 -1
  228. package/dist/esm/stores/routes/createRouteExecutionStore.js +8 -9
  229. package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
  230. package/dist/esm/stores/routes/useRouteExecutionIndicator.js +2 -3
  231. package/dist/esm/stores/routes/useRouteExecutionIndicator.js.map +1 -1
  232. package/dist/esm/stores/routes/utils.js.map +1 -1
  233. package/dist/esm/stores/settings/SettingsStore.js.map +1 -1
  234. package/dist/esm/stores/settings/createSettingsStore.js +1 -5
  235. package/dist/esm/stores/settings/createSettingsStore.js.map +1 -1
  236. package/dist/esm/stores/settings/useSettingsActions.js +2 -2
  237. package/dist/esm/stores/settings/useSettingsActions.js.map +1 -1
  238. package/dist/esm/stores/settings/useSplitSubvariantStore.js.map +1 -1
  239. package/dist/esm/themes/createTheme.js +4 -4
  240. package/dist/esm/themes/createTheme.js.map +1 -1
  241. package/dist/esm/types/events.d.ts +0 -5
  242. package/dist/esm/types/events.d.ts.map +1 -1
  243. package/dist/esm/types/events.js +0 -4
  244. package/dist/esm/types/events.js.map +1 -1
  245. package/dist/esm/types/widget.d.ts +1 -5
  246. package/dist/esm/types/widget.d.ts.map +1 -1
  247. package/dist/esm/types/widget.js.map +1 -1
  248. package/dist/esm/utils/converters.js.map +1 -1
  249. package/dist/esm/utils/elements.js +5 -12
  250. package/dist/esm/utils/elements.js.map +1 -1
  251. package/dist/esm/utils/format.js.map +1 -1
  252. package/dist/esm/utils/timer.js.map +1 -1
  253. package/dist/esm/utils/token.js.map +1 -1
  254. package/package.json +11 -11
  255. package/src/AppDefault.tsx +9 -11
  256. package/src/components/Chains/AllChainsAvatar.tsx +7 -1
  257. package/src/components/ContractComponent/ItemPrice.tsx +1 -1
  258. package/src/components/ContractComponent/NFT/NFTBase.tsx +1 -1
  259. package/src/components/Header/ActivitiesButton.tsx +1 -1
  260. package/src/components/IconTypography.ts +8 -8
  261. package/src/components/Messages/AlertMessage.tsx +1 -1
  262. package/src/components/RouteCard/RouteCardEssentials.tsx +2 -2
  263. package/src/components/SelectChainAndToken.tsx +1 -1
  264. package/src/components/SendToWallet/SendToWalletButton.tsx +1 -1
  265. package/src/components/Step/Step.tsx +6 -7
  266. package/src/components/Timer/TimerContent.tsx +1 -0
  267. package/src/components/Token/Token.tsx +2 -2
  268. package/src/components/TokenList/TokenDetailsSheetContent.tsx +6 -4
  269. package/src/components/TransactionCard/ActiveTransactionCard.tsx +1 -1
  270. package/src/components/TransactionDetails.tsx +1 -1
  271. package/src/config/version.ts +1 -1
  272. package/src/hooks/useActionMessage.ts +4 -3
  273. package/src/hooks/useAvailableChains.ts +1 -0
  274. package/src/hooks/useExplorer.ts +16 -5
  275. package/src/hooks/useRouteExecution.ts +0 -2
  276. package/src/hooks/useTokens.ts +2 -0
  277. package/src/pages/ActivitiesPage/ActivitiesPageMenuButton.tsx +1 -1
  278. package/src/pages/MainPage/MainPage.tsx +3 -3
  279. package/src/pages/RoutesPage/RoutesPage.tsx +6 -1
  280. package/src/pages/SendToWallet/BookmarksPage.tsx +1 -1
  281. package/src/pages/SendToWallet/RecentWalletsPage.tsx +1 -1
  282. package/src/pages/TransactionDetailsPage/StepActionRow.tsx +3 -2
  283. package/src/pages/TransactionDetailsPage/StepActionsList.tsx +19 -12
  284. package/src/pages/TransactionPage/ExchangeRateBottomSheet.tsx +1 -1
  285. package/src/pages/TransactionPage/StatusBottomSheet.tsx +1 -1
  286. package/src/pages/TransactionPage/TokenValueBottomSheet.tsx +27 -5
  287. package/src/pages/TransactionPage/TransactionPage.tsx +2 -9
  288. package/src/providers/WalletProvider/useExternalWalletProvider.ts +9 -1
  289. package/src/stores/settings/createSettingsStore.ts +1 -9
  290. package/src/themes/createTheme.ts +4 -6
  291. package/src/types/events.ts +0 -5
  292. package/src/types/widget.ts +1 -4
  293. package/dist/esm/stores/routes/types.js +0 -14
  294. package/dist/esm/stores/routes/types.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"converters.js","names":[],"sources":["../../../src/utils/converters.ts"],"sourcesContent":["import type {\n ExecutionAction,\n ExecutionActionStatus,\n ExtendedTransactionInfo,\n FeeCost,\n FullStatusData,\n Substatus,\n TokenAmount,\n ToolsResponse,\n} from '@lifi/sdk'\nimport type { RouteExecution } from '../stores/routes/types.js'\nimport { formatTokenPrice } from './format.js'\n\nconst buildActionsFromTxHistory = (tx: FullStatusData): ExecutionAction[] => {\n const sending = tx.sending as ExtendedTransactionInfo\n const receiving = tx.receiving as ExtendedTransactionInfo\n\n if (!sending.token?.chainId || !receiving.token?.chainId) {\n return []\n }\n\n const actionStatus: ExecutionActionStatus =\n tx.status === 'DONE' ? 'DONE' : 'FAILED'\n const substatus: Substatus =\n actionStatus === 'FAILED' ? 'UNKNOWN_ERROR' : 'COMPLETED'\n\n if (sending.chainId === receiving.chainId) {\n return [\n {\n type: 'SWAP', // operations on same chain will be swaps\n message: '',\n status: actionStatus,\n chainId: sending.chainId,\n txHash: sending.txHash,\n txLink: sending.txLink,\n substatus,\n substatusMessage: '',\n },\n ]\n }\n\n const actions: ExecutionAction[] = [\n {\n type: 'CROSS_CHAIN', // first step of bridging, ignoring the approvals\n message: '',\n status: actionStatus, // can be FAILED\n chainId: sending.chainId,\n txHash: sending.txHash,\n txLink: sending.txLink,\n },\n {\n type: 'RECEIVING_CHAIN', // final step of bridging, post swaps\n message: '',\n status: actionStatus,\n substatus,\n substatusMessage: '',\n chainId: receiving.chainId,\n txHash: receiving.txHash,\n txLink: receiving.txLink,\n },\n ]\n\n return actions\n}\n\nexport const buildRouteFromTxHistory = (\n tx: FullStatusData,\n tools?: ToolsResponse\n): RouteExecution | undefined => {\n const sending = tx.sending as ExtendedTransactionInfo\n const receiving = tx.receiving as ExtendedTransactionInfo\n\n if (!sending.token?.chainId || !receiving.token?.chainId) {\n return\n }\n\n let usedTool = tx.sending.includedSteps?.find(\n (step) => step.toolDetails.key === tx.tool\n )?.toolDetails\n\n if (!usedTool) {\n const selectedBridge = tools?.bridges.find(\n (bridge) => bridge.key === tx.tool\n )\n\n const selectedExchange = tools?.exchanges.find(\n (exchange) => exchange.key === tx.tool\n )\n usedTool = {\n key: tx.tool,\n name: selectedBridge?.name ?? selectedExchange?.name ?? tx.tool,\n logoURI: selectedBridge?.logoURI ?? selectedExchange?.logoURI ?? '',\n }\n }\n\n const fromToken: TokenAmount = {\n ...sending.token,\n amount: BigInt(sending.amount ?? 0),\n }\n\n const toToken: TokenAmount = {\n ...receiving.token,\n amount: BigInt(receiving.amount ?? 0),\n }\n\n const sendingValue = sending.value ? BigInt(sending.value) : 0n\n const sendingFeeAmount =\n sending.gasToken.address === sending.token.address && sending.amount\n ? sendingValue - BigInt(sending.amount)\n : sendingValue\n const sendingFeeAmountUsd =\n sending.gasToken.priceUSD && sendingFeeAmount\n ? formatTokenPrice(\n sendingFeeAmount,\n sending.gasToken.priceUSD,\n sending.gasToken.decimals\n )\n : 0\n\n const feeCosts: FeeCost[] | undefined = sendingFeeAmount\n ? [\n {\n amount: sendingFeeAmount.toString(),\n amountUSD: sendingFeeAmountUsd.toFixed(2),\n token: sending.gasToken,\n included: false,\n // Not used\n description: '',\n name: '',\n percentage: '',\n },\n ]\n : undefined\n\n const routeExecution: RouteExecution = {\n status: 1,\n route: {\n id: (tx as FullStatusData).transactionId,\n fromAddress: (tx as FullStatusData).fromAddress,\n toAddress: (tx as FullStatusData).toAddress,\n fromChainId: sending.chainId,\n fromAmount: sending.amount ?? '',\n fromAmountUSD: sending.amountUSD ?? '',\n toAmount: receiving.amount ?? '',\n toAmountMin: receiving.amount ?? '',\n toAmountUSD: receiving.amountUSD ?? '',\n toChainId: receiving.chainId,\n fromToken,\n toToken,\n gasCostUSD: sending.gasAmountUSD,\n steps: [\n {\n id: (tx as FullStatusData).transactionId,\n type: 'lifi',\n tool: tx.tool,\n toolDetails: usedTool,\n action: {\n fromToken: sending.token,\n fromAmount: sending.amount ?? '',\n fromChainId: sending.chainId,\n fromAddress: (tx as FullStatusData).fromAddress,\n toToken: receiving.token,\n toChainId: receiving.chainId,\n toAddress: (tx as FullStatusData).toAddress,\n slippage: 0,\n },\n estimate: {\n tool: tx.tool,\n approvalAddress: '',\n fromAmount: sending.amount ?? '',\n fromAmountUSD: sending.amountUSD ?? '',\n toAmountMin: receiving.amount ?? '',\n toAmount: receiving.amount ?? '',\n toAmountUSD: receiving.amountUSD ?? '',\n executionDuration: 0,\n },\n includedSteps: [\n {\n id: (tx as FullStatusData).transactionId,\n type: sending.chainId === receiving.chainId ? 'swap' : 'cross',\n action: {\n fromChainId: sending.chainId,\n fromAmount: sending.amount ?? '',\n fromToken: sending.token,\n toChainId: receiving.chainId,\n toToken: receiving.token,\n slippage: 0,\n fromAddress: (tx as FullStatusData).fromAddress,\n toAddress: (tx as FullStatusData).toAddress,\n },\n estimate: {\n tool: tx.tool,\n fromAmount: sending.amount ?? '',\n toAmount: receiving.amount ?? '',\n toAmountMin: receiving.amount ?? '',\n approvalAddress: '',\n executionDuration: 0,\n },\n tool: tx.tool,\n toolDetails: usedTool,\n },\n ],\n integrator: tx.metadata?.integrator ?? '',\n execution: {\n status: 'DONE', // can be FAILED\n startedAt: sending.timestamp\n ? sending.timestamp * 1000\n : Date.now(),\n actions: buildActionsFromTxHistory(tx),\n fromAmount: sending.amount,\n toAmount: receiving.amount,\n toToken: receiving.token,\n internalTxLink: tx.lifiExplorerLink,\n externalTxLink: tx.bridgeExplorerLink,\n gasCosts: [\n {\n amount: sending.gasAmount,\n amountUSD: sending.gasAmountUSD,\n token: sending.gasToken,\n estimate: '0',\n limit: '0',\n price: '0',\n type: 'SEND',\n },\n ],\n feeCosts,\n },\n },\n ],\n insurance: {\n state: 'NOT_INSURABLE',\n feeAmountUsd: '0',\n },\n },\n }\n\n return routeExecution\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"converters.js","names":[],"sources":["../../../src/utils/converters.ts"],"sourcesContent":["import type {\n ExecutionAction,\n ExecutionActionStatus,\n ExtendedTransactionInfo,\n FeeCost,\n FullStatusData,\n Substatus,\n TokenAmount,\n ToolsResponse,\n} from '@lifi/sdk'\nimport type { RouteExecution } from '../stores/routes/types.js'\nimport { formatTokenPrice } from './format.js'\n\nconst buildActionsFromTxHistory = (tx: FullStatusData): ExecutionAction[] => {\n const sending = tx.sending as ExtendedTransactionInfo\n const receiving = tx.receiving as ExtendedTransactionInfo\n\n if (!sending.token?.chainId || !receiving.token?.chainId) {\n return []\n }\n\n const actionStatus: ExecutionActionStatus =\n tx.status === 'DONE' ? 'DONE' : 'FAILED'\n const substatus: Substatus =\n actionStatus === 'FAILED' ? 'UNKNOWN_ERROR' : 'COMPLETED'\n\n if (sending.chainId === receiving.chainId) {\n return [\n {\n type: 'SWAP', // operations on same chain will be swaps\n message: '',\n status: actionStatus,\n chainId: sending.chainId,\n txHash: sending.txHash,\n txLink: sending.txLink,\n substatus,\n substatusMessage: '',\n },\n ]\n }\n\n const actions: ExecutionAction[] = [\n {\n type: 'CROSS_CHAIN', // first step of bridging, ignoring the approvals\n message: '',\n status: actionStatus, // can be FAILED\n chainId: sending.chainId,\n txHash: sending.txHash,\n txLink: sending.txLink,\n },\n {\n type: 'RECEIVING_CHAIN', // final step of bridging, post swaps\n message: '',\n status: actionStatus,\n substatus,\n substatusMessage: '',\n chainId: receiving.chainId,\n txHash: receiving.txHash,\n txLink: receiving.txLink,\n },\n ]\n\n return actions\n}\n\nexport const buildRouteFromTxHistory = (\n tx: FullStatusData,\n tools?: ToolsResponse\n): RouteExecution | undefined => {\n const sending = tx.sending as ExtendedTransactionInfo\n const receiving = tx.receiving as ExtendedTransactionInfo\n\n if (!sending.token?.chainId || !receiving.token?.chainId) {\n return\n }\n\n let usedTool = tx.sending.includedSteps?.find(\n (step) => step.toolDetails.key === tx.tool\n )?.toolDetails\n\n if (!usedTool) {\n const selectedBridge = tools?.bridges.find(\n (bridge) => bridge.key === tx.tool\n )\n\n const selectedExchange = tools?.exchanges.find(\n (exchange) => exchange.key === tx.tool\n )\n usedTool = {\n key: tx.tool,\n name: selectedBridge?.name ?? selectedExchange?.name ?? tx.tool,\n logoURI: selectedBridge?.logoURI ?? selectedExchange?.logoURI ?? '',\n }\n }\n\n const fromToken: TokenAmount = {\n ...sending.token,\n amount: BigInt(sending.amount ?? 0),\n }\n\n const toToken: TokenAmount = {\n ...receiving.token,\n amount: BigInt(receiving.amount ?? 0),\n }\n\n const sendingValue = sending.value ? BigInt(sending.value) : 0n\n const sendingFeeAmount =\n sending.gasToken.address === sending.token.address && sending.amount\n ? sendingValue - BigInt(sending.amount)\n : sendingValue\n const sendingFeeAmountUsd =\n sending.gasToken.priceUSD && sendingFeeAmount\n ? formatTokenPrice(\n sendingFeeAmount,\n sending.gasToken.priceUSD,\n sending.gasToken.decimals\n )\n : 0\n\n const feeCosts: FeeCost[] | undefined = sendingFeeAmount\n ? [\n {\n amount: sendingFeeAmount.toString(),\n amountUSD: sendingFeeAmountUsd.toFixed(2),\n token: sending.gasToken,\n included: false,\n // Not used\n description: '',\n name: '',\n percentage: '',\n },\n ]\n : undefined\n\n const routeExecution: RouteExecution = {\n status: 1,\n route: {\n id: (tx as FullStatusData).transactionId,\n fromAddress: (tx as FullStatusData).fromAddress,\n toAddress: (tx as FullStatusData).toAddress,\n fromChainId: sending.chainId,\n fromAmount: sending.amount ?? '',\n fromAmountUSD: sending.amountUSD ?? '',\n toAmount: receiving.amount ?? '',\n toAmountMin: receiving.amount ?? '',\n toAmountUSD: receiving.amountUSD ?? '',\n toChainId: receiving.chainId,\n fromToken,\n toToken,\n gasCostUSD: sending.gasAmountUSD,\n steps: [\n {\n id: (tx as FullStatusData).transactionId,\n type: 'lifi',\n tool: tx.tool,\n toolDetails: usedTool,\n action: {\n fromToken: sending.token,\n fromAmount: sending.amount ?? '',\n fromChainId: sending.chainId,\n fromAddress: (tx as FullStatusData).fromAddress,\n toToken: receiving.token,\n toChainId: receiving.chainId,\n toAddress: (tx as FullStatusData).toAddress,\n slippage: 0,\n },\n estimate: {\n tool: tx.tool,\n approvalAddress: '',\n fromAmount: sending.amount ?? '',\n fromAmountUSD: sending.amountUSD ?? '',\n toAmountMin: receiving.amount ?? '',\n toAmount: receiving.amount ?? '',\n toAmountUSD: receiving.amountUSD ?? '',\n executionDuration: 0,\n },\n includedSteps: [\n {\n id: (tx as FullStatusData).transactionId,\n type: sending.chainId === receiving.chainId ? 'swap' : 'cross',\n action: {\n fromChainId: sending.chainId,\n fromAmount: sending.amount ?? '',\n fromToken: sending.token,\n toChainId: receiving.chainId,\n toToken: receiving.token,\n slippage: 0,\n fromAddress: (tx as FullStatusData).fromAddress,\n toAddress: (tx as FullStatusData).toAddress,\n },\n estimate: {\n tool: tx.tool,\n fromAmount: sending.amount ?? '',\n toAmount: receiving.amount ?? '',\n toAmountMin: receiving.amount ?? '',\n approvalAddress: '',\n executionDuration: 0,\n },\n tool: tx.tool,\n toolDetails: usedTool,\n },\n ],\n integrator: tx.metadata?.integrator ?? '',\n execution: {\n status: 'DONE', // can be FAILED\n startedAt: sending.timestamp\n ? sending.timestamp * 1000\n : Date.now(),\n actions: buildActionsFromTxHistory(tx),\n fromAmount: sending.amount,\n toAmount: receiving.amount,\n toToken: receiving.token,\n internalTxLink: tx.lifiExplorerLink,\n externalTxLink: tx.bridgeExplorerLink,\n gasCosts: [\n {\n amount: sending.gasAmount,\n amountUSD: sending.gasAmountUSD,\n token: sending.gasToken,\n estimate: '0',\n limit: '0',\n price: '0',\n type: 'SEND',\n },\n ],\n feeCosts,\n },\n },\n ],\n insurance: {\n state: 'NOT_INSURABLE',\n feeAmountUsd: '0',\n },\n },\n }\n\n return routeExecution\n}\n"],"mappings":"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"}
@@ -1,17 +1,10 @@
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
- }({});
9
2
  const createElementId = (ElementId, elementId) => elementId ? `${ElementId}-${elementId}` : ElementId;
10
- const getAppContainer = (elementId) => document.getElementById(createElementId(ElementId.AppExpandedContainer, elementId));
11
- const getRelativeContainer = (elementId) => document.getElementById(createElementId(ElementId.RelativeContainer, elementId));
12
- const getScrollableContainer = (elementId) => document.getElementById(createElementId(ElementId.ScrollableContainer, elementId));
13
- const getHeaderElement = (elementId) => document.getElementById(createElementId(ElementId.Header, elementId));
3
+ const getAppContainer = (elementId) => document.getElementById(createElementId("widget-app-expanded-container", elementId));
4
+ const getRelativeContainer = (elementId) => document.getElementById(createElementId("widget-relative-container", elementId));
5
+ const getScrollableContainer = (elementId) => document.getElementById(createElementId("widget-scrollable-container", elementId));
6
+ const getHeaderElement = (elementId) => document.getElementById(createElementId("widget-header", elementId));
14
7
  //#endregion
15
- export { ElementId, createElementId, getAppContainer, getHeaderElement, getRelativeContainer, getScrollableContainer };
8
+ export { createElementId, getAppContainer, getHeaderElement, getRelativeContainer, getScrollableContainer };
16
9
 
17
10
  //# 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":";AAAA,IAAY,YAAL,yBAAA,WAAA;AACL,WAAA,0BAAA;AACA,WAAA,YAAA;AACA,WAAA,uBAAA;AACA,WAAA,yBAAA;;KACD;AAED,MAAa,mBACX,WACA,cACY,YAAY,GAAG,UAAU,GAAG,cAAc;AAKxD,MAAa,mBAAmB,cAC9B,SAAS,eACP,gBAAgB,UAAU,sBAAsB,UAAU,CAC3D;AAEH,MAAa,wBAAwB,cACnC,SAAS,eACP,gBAAgB,UAAU,mBAAmB,UAAU,CACxD;AAEH,MAAa,0BAA0B,cACrC,SAAS,eACP,gBAAgB,UAAU,qBAAqB,UAAU,CAC1D;AAEH,MAAa,oBAAoB,cAC/B,SAAS,eAAe,gBAAgB,UAAU,QAAQ,UAAU,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":";AAOA,MAAa,mBACX,WACA,cACY,YAAY,GAAG,UAAU,GAAG,cAAc;AAKxD,MAAa,mBAAmB,cAC9B,SAAS,eACP,gBAAA,iCAAgD,UAAU,CAC3D;AAEH,MAAa,wBAAwB,cACnC,SAAS,eACP,gBAAA,6BAA6C,UAAU,CACxD;AAEH,MAAa,0BAA0B,cACrC,SAAS,eACP,gBAAA,+BAA+C,UAAU,CAC1D;AAEH,MAAa,oBAAoB,cAC/B,SAAS,eAAe,gBAAA,iBAAkC,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","names":[],"sources":["../../../src/utils/format.ts"],"sourcesContent":["import { formatUnits } from '@lifi/sdk'\n\nexport const usdDecimals = 2\n\n/**\n * Format token amount to at least 6 decimals.\n * @param amount amount to format.\n * @returns formatted amount.\n */\nexport function formatTokenAmount(\n amount: bigint | undefined,\n decimals: number\n): string {\n const formattedAmount = amount ? formatUnits(amount, decimals) : '0'\n const parsedAmount = Number.parseFloat(formattedAmount)\n if (!parsedAmount || Number.isNaN(Number(formattedAmount))) {\n return '0'\n }\n\n return formattedAmount\n}\n\nexport function formatSlippage(\n slippage = '',\n defaultValue = '',\n returnInitial = false\n): string {\n if (!slippage) {\n return slippage\n }\n const parsedSlippage = Number.parseFloat(slippage)\n if (Number.isNaN(Number(slippage)) && !Number.isNaN(parsedSlippage)) {\n return parsedSlippage.toString()\n }\n if (Number.isNaN(parsedSlippage)) {\n return defaultValue\n }\n if (parsedSlippage >= 100) {\n return '100'\n }\n if (parsedSlippage < 0) {\n return Math.abs(parsedSlippage).toString()\n }\n if (returnInitial) {\n return slippage\n }\n return parsedSlippage.toString()\n}\n\n/**\n * Formats a user input amount string, normalizing it and optionally limiting decimal places.\n * @param amount - The amount string to format (e.g., '123.45', '1,23', '0..')\n * @param decimals - Maximum number of decimal places to allow. If null, no limit is applied.\n * @param returnInitial - If true, preserves the input format during typing (e.g., keeps trailing dots,\n * preserves leading zeros, keeps negative signs). If false (default), cleans up the\n * format on blur (removes leading/trailing zeros, removes negative signs).\n * @returns The formatted amount string, or empty string for invalid input.\n */\nexport function formatInputAmount(\n amount: string,\n decimals: number | null = null,\n returnInitial: boolean = false\n): string {\n if (!amount) {\n return amount\n }\n\n // Replace commas with dots\n let formattedAmount = amount.trim().replaceAll(',', '.')\n\n // Keep only the first dot, remove all subsequent dots\n const dotIndex = formattedAmount.indexOf('.')\n if (dotIndex !== -1) {\n formattedAmount = `${formattedAmount.slice(0, dotIndex + 1)}${formattedAmount.slice(dotIndex + 1).replaceAll('.', '')}`\n }\n\n // If the amount starts with a dot, prepend 0\n if (\n (!returnInitial && formattedAmount.startsWith('.')) ||\n formattedAmount === '.'\n ) {\n formattedAmount = `0${formattedAmount}`\n }\n\n // Parse the valid part of the amount\n const parsedAmount = Number.parseFloat(formattedAmount)\n if (Number.isNaN(Number(formattedAmount)) && !Number.isNaN(parsedAmount)) {\n formattedAmount = parsedAmount.toString()\n }\n if (Number.isNaN(Math.abs(Number(formattedAmount)))) {\n return ''\n }\n\n // Split and limit decimals\n let [integer, fraction = ''] = formattedAmount.split('.')\n if (decimals !== null && fraction.length > decimals) {\n fraction = fraction.slice(0, decimals)\n }\n\n if (returnInitial) {\n if (!fraction) {\n return formattedAmount\n }\n return `${integer}${fraction ? `.${fraction}` : ''}`\n }\n\n // Remove leading zeros and minus sign\n integer = integer.replace(/^0+|-/, '')\n // Remove trailing zeros\n fraction = fraction.replace(/(0+)$/, '')\n\n return `${integer || (fraction ? '0' : '')}${fraction ? `.${fraction}` : ''}`\n}\n\nexport function formatTokenPrice(\n amount?: string | bigint,\n price?: string,\n decimals?: number\n): number {\n if (!amount || !price) {\n return 0\n }\n\n const formattedAmount =\n typeof amount === 'bigint' && decimals !== undefined\n ? formatUnits(amount, decimals)\n : amount.toString()\n\n if (Number.isNaN(Number(formattedAmount)) || Number.isNaN(Number(price))) {\n return 0\n }\n return Number.parseFloat(formattedAmount) * Number.parseFloat(price)\n}\n\n/**\n * Formatter for price value to token amount\n */\nconst formatter = new Intl.NumberFormat('en', {\n notation: 'standard',\n roundingPriority: 'morePrecision',\n maximumSignificantDigits: 20,\n maximumFractionDigits: 20,\n useGrouping: false,\n})\n\n/**\n * Convert price value to token amount\n */\nexport function priceToTokenAmount(\n priceValue: string,\n priceUSD?: string\n): string {\n if (!priceValue || !priceUSD) {\n return '0'\n }\n\n const numericPriceValue = Number.parseFloat(priceValue)\n const numericPrice = Number.parseFloat(priceUSD)\n\n if (\n Number.isNaN(numericPriceValue) ||\n Number.isNaN(numericPrice) ||\n !numericPrice\n ) {\n return '0'\n }\n\n return formatter.format(numericPriceValue / numericPrice)\n}\n\nconst units = [\n ['day', 86400],\n ['hour', 3600],\n ['minute', 60],\n ['second', 1],\n] as const\n\nexport function formatDuration(seconds: number, locale: string): string {\n const match = units.find(([, v]) => seconds >= v)\n const amount = match ? Math.floor(seconds / match[1]) : 0\n const unit = match?.[0] ?? 'second'\n\n return amount.toLocaleString(locale, {\n style: 'unit',\n unit,\n unitDisplay: 'narrow',\n })\n}\n\nexport function wrapLongWords(text: string): string {\n return text.replace(\n /\\S{32,}/g,\n (word) => `${word.slice(0, 8)}...${word.slice(-4)}`\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"format.js","names":[],"sources":["../../../src/utils/format.ts"],"sourcesContent":["import { formatUnits } from '@lifi/sdk'\n\nexport const usdDecimals = 2\n\n/**\n * Format token amount to at least 6 decimals.\n * @param amount amount to format.\n * @returns formatted amount.\n */\nexport function formatTokenAmount(\n amount: bigint | undefined,\n decimals: number\n): string {\n const formattedAmount = amount ? formatUnits(amount, decimals) : '0'\n const parsedAmount = Number.parseFloat(formattedAmount)\n if (!parsedAmount || Number.isNaN(Number(formattedAmount))) {\n return '0'\n }\n\n return formattedAmount\n}\n\nexport function formatSlippage(\n slippage = '',\n defaultValue = '',\n returnInitial = false\n): string {\n if (!slippage) {\n return slippage\n }\n const parsedSlippage = Number.parseFloat(slippage)\n if (Number.isNaN(Number(slippage)) && !Number.isNaN(parsedSlippage)) {\n return parsedSlippage.toString()\n }\n if (Number.isNaN(parsedSlippage)) {\n return defaultValue\n }\n if (parsedSlippage >= 100) {\n return '100'\n }\n if (parsedSlippage < 0) {\n return Math.abs(parsedSlippage).toString()\n }\n if (returnInitial) {\n return slippage\n }\n return parsedSlippage.toString()\n}\n\n/**\n * Formats a user input amount string, normalizing it and optionally limiting decimal places.\n * @param amount - The amount string to format (e.g., '123.45', '1,23', '0..')\n * @param decimals - Maximum number of decimal places to allow. If null, no limit is applied.\n * @param returnInitial - If true, preserves the input format during typing (e.g., keeps trailing dots,\n * preserves leading zeros, keeps negative signs). If false (default), cleans up the\n * format on blur (removes leading/trailing zeros, removes negative signs).\n * @returns The formatted amount string, or empty string for invalid input.\n */\nexport function formatInputAmount(\n amount: string,\n decimals: number | null = null,\n returnInitial: boolean = false\n): string {\n if (!amount) {\n return amount\n }\n\n // Replace commas with dots\n let formattedAmount = amount.trim().replaceAll(',', '.')\n\n // Keep only the first dot, remove all subsequent dots\n const dotIndex = formattedAmount.indexOf('.')\n if (dotIndex !== -1) {\n formattedAmount = `${formattedAmount.slice(0, dotIndex + 1)}${formattedAmount.slice(dotIndex + 1).replaceAll('.', '')}`\n }\n\n // If the amount starts with a dot, prepend 0\n if (\n (!returnInitial && formattedAmount.startsWith('.')) ||\n formattedAmount === '.'\n ) {\n formattedAmount = `0${formattedAmount}`\n }\n\n // Parse the valid part of the amount\n const parsedAmount = Number.parseFloat(formattedAmount)\n if (Number.isNaN(Number(formattedAmount)) && !Number.isNaN(parsedAmount)) {\n formattedAmount = parsedAmount.toString()\n }\n if (Number.isNaN(Math.abs(Number(formattedAmount)))) {\n return ''\n }\n\n // Split and limit decimals\n let [integer, fraction = ''] = formattedAmount.split('.')\n if (decimals !== null && fraction.length > decimals) {\n fraction = fraction.slice(0, decimals)\n }\n\n if (returnInitial) {\n if (!fraction) {\n return formattedAmount\n }\n return `${integer}${fraction ? `.${fraction}` : ''}`\n }\n\n // Remove leading zeros and minus sign\n integer = integer.replace(/^0+|-/, '')\n // Remove trailing zeros\n fraction = fraction.replace(/(0+)$/, '')\n\n return `${integer || (fraction ? '0' : '')}${fraction ? `.${fraction}` : ''}`\n}\n\nexport function formatTokenPrice(\n amount?: string | bigint,\n price?: string,\n decimals?: number\n): number {\n if (!amount || !price) {\n return 0\n }\n\n const formattedAmount =\n typeof amount === 'bigint' && decimals !== undefined\n ? formatUnits(amount, decimals)\n : amount.toString()\n\n if (Number.isNaN(Number(formattedAmount)) || Number.isNaN(Number(price))) {\n return 0\n }\n return Number.parseFloat(formattedAmount) * Number.parseFloat(price)\n}\n\n/**\n * Formatter for price value to token amount\n */\nconst formatter = new Intl.NumberFormat('en', {\n notation: 'standard',\n roundingPriority: 'morePrecision',\n maximumSignificantDigits: 20,\n maximumFractionDigits: 20,\n useGrouping: false,\n})\n\n/**\n * Convert price value to token amount\n */\nexport function priceToTokenAmount(\n priceValue: string,\n priceUSD?: string\n): string {\n if (!priceValue || !priceUSD) {\n return '0'\n }\n\n const numericPriceValue = Number.parseFloat(priceValue)\n const numericPrice = Number.parseFloat(priceUSD)\n\n if (\n Number.isNaN(numericPriceValue) ||\n Number.isNaN(numericPrice) ||\n !numericPrice\n ) {\n return '0'\n }\n\n return formatter.format(numericPriceValue / numericPrice)\n}\n\nconst units = [\n ['day', 86400],\n ['hour', 3600],\n ['minute', 60],\n ['second', 1],\n] as const\n\nexport function formatDuration(seconds: number, locale: string): string {\n const match = units.find(([, v]) => seconds >= v)\n const amount = match ? Math.floor(seconds / match[1]) : 0\n const unit = match?.[0] ?? 'second'\n\n return amount.toLocaleString(locale, {\n style: 'unit',\n unit,\n unitDisplay: 'narrow',\n })\n}\n\nexport function wrapLongWords(text: string): string {\n return text.replace(\n /\\S{32,}/g,\n (word) => `${word.slice(0, 8)}...${word.slice(-4)}`\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"timer.js","names":[],"sources":["../../../src/utils/timer.ts"],"sourcesContent":["export const formatTimer = ({\n days = 0,\n hours = 0,\n minutes = 0,\n seconds = 0,\n locale = 'en',\n}: {\n days?: number\n hours?: number\n minutes?: number\n seconds?: number\n locale?: string\n}): string => {\n if (typeof (Intl as any).DurationFormat === 'function') {\n const time = new (Intl as any).DurationFormat(locale, {\n style: 'digital',\n hours: '2-digit',\n hoursDisplay: 'auto',\n }).format({\n days,\n hours,\n minutes,\n seconds,\n })\n // This handles a fixed bug with Webkit, and Safari\n // https://github.com/WebKit/WebKit/pull/38357\n // https://developer.apple.com/documentation/safari-release-notes/safari-18_4-release-notes#JavaScript\n //\n // Since most users haven't updated their browsers yet, they would have this issue\n // it should be safe to remove the check after a while.\n return time.replace(/^:, /, '')\n }\n\n return ''\n}\n"],"mappings":";AAAA,MAAa,eAAe,EAC1B,OAAO,GACP,QAAQ,GACR,UAAU,GACV,UAAU,GACV,SAAS,WAOG;AACZ,KAAI,OAAQ,KAAa,mBAAmB,WAiB1C,QAhBa,IAAK,KAAa,eAAe,QAAQ;EACpD,OAAO;EACP,OAAO;EACP,cAAc;EACf,CAAC,CAAC,OAAO;EACR;EACA;EACA;EACA;EACD,CAAC,CAOU,QAAQ,QAAQ,GAAG;AAGjC,QAAO"}
1
+ {"version":3,"file":"timer.js","names":[],"sources":["../../../src/utils/timer.ts"],"sourcesContent":["export const formatTimer = ({\n days = 0,\n hours = 0,\n minutes = 0,\n seconds = 0,\n locale = 'en',\n}: {\n days?: number\n hours?: number\n minutes?: number\n seconds?: number\n locale?: string\n}): string => {\n if (typeof (Intl as any).DurationFormat === 'function') {\n const time = new (Intl as any).DurationFormat(locale, {\n style: 'digital',\n hours: '2-digit',\n hoursDisplay: 'auto',\n }).format({\n days,\n hours,\n minutes,\n seconds,\n })\n // This handles a fixed bug with Webkit, and Safari\n // https://github.com/WebKit/WebKit/pull/38357\n // https://developer.apple.com/documentation/safari-release-notes/safari-18_4-release-notes#JavaScript\n //\n // Since most users haven't updated their browsers yet, they would have this issue\n // it should be safe to remove the check after a while.\n return time.replace(/^:, /, '')\n }\n\n return ''\n}\n"],"mappings":";AAAA,MAAa,eAAe,EAC1B,OAAO,GACP,QAAQ,GACR,UAAU,GACV,UAAU,GACV,SAAS,WAOG;AACZ,KAAI,OAAQ,KAAa,mBAAmB,WAiB1C,QAhBa,IAAK,KAAa,eAAe,QAAQ;EACpD,OAAO;EACP,OAAO;EACP,cAAc;EACf,CAAC,CAAC,OAAO;EACR;EACA;EACA;EACA;EACD,CAOU,CAAC,QAAQ,QAAQ,GAAG;AAGjC,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","names":[],"sources":["../../../src/utils/token.ts"],"sourcesContent":["import type { BaseToken, Token, TokenExtended } from '@lifi/sdk'\nimport type { FormType } from '../stores/form/types.js'\nimport type { TokensByChain } from '../types/token.js'\nimport type { WidgetChains, WidgetTokens } from '../types/widget.js'\nimport { getConfigItemSets, isFormItemAllowed } from './item.js'\n\n/**\n * Merges verified tokens with search tokens.\n * Verified tokens take priority - search tokens are only added if they don't already exist.\n */\nexport const mergeVerifiedWithSearchTokens = (\n verifiedTokens?: TokensByChain,\n searchTokens?: TokensByChain\n): TokensByChain | undefined => {\n if (!verifiedTokens) {\n return searchTokens\n }\n if (!searchTokens) {\n return verifiedTokens\n }\n\n const result = { ...verifiedTokens }\n\n for (const [chainId, tokens] of Object.entries(searchTokens)) {\n const chainIdNum = Number(chainId)\n const existingTokens = result[chainIdNum] || []\n const existingAddresses = new Set(\n existingTokens.map((t) => t.address.toLowerCase())\n )\n\n const newTokens = tokens.filter(\n (t) => !existingAddresses.has(t.address.toLowerCase())\n )\n\n if (newTokens.length) {\n result[chainIdNum] = [...existingTokens, ...newTokens]\n }\n }\n\n return result\n}\n\n/**\n * Updates a token in the cache by chainId and address.\n * Returns a new cache object with the token updated, or the original if not found.\n */\nexport const updateTokenInCache = (\n data: TokensByChain | undefined,\n token: Token\n): TokensByChain | undefined => {\n if (!data) {\n return data\n }\n const chainTokens = data[token.chainId]\n if (!chainTokens) {\n return data\n }\n const index = chainTokens.findIndex((t) => t.address === token.address)\n if (index < 0) {\n return data\n }\n return {\n ...data,\n [token.chainId]: chainTokens.map((t, i) =>\n i === index ? { ...t, ...token } : t\n ),\n }\n}\n\nexport const filterAllowedTokens = (\n dataTokens: { [chainId: number]: TokenExtended[] } | undefined,\n configTokens?: WidgetTokens,\n chainsConfig?: WidgetChains,\n formType?: FormType\n): { [chainId: number]: TokenExtended[] } | undefined => {\n if (!dataTokens) {\n return\n }\n\n const includedTokens = configTokens?.include || []\n const allChainIds = Array.from(\n new Set([\n ...includedTokens.map((t) => t.chainId),\n ...Object.keys(dataTokens),\n ])\n ).map((chainId) => Number(chainId))\n\n const configChainIdsSet = getConfigItemSets(\n chainsConfig,\n (chainIds: number[]) => new Set(chainIds),\n formType\n )\n\n const allowedChainIds = configChainIdsSet\n ? allChainIds.filter((chainId) =>\n isFormItemAllowed(chainId, configChainIdsSet, formType)\n )\n : allChainIds\n\n const allowedTokensByChain: { [chainId: number]: TokenExtended[] } = {}\n for (const chainId of allowedChainIds) {\n const chainTokens = [\n ...dataTokens[chainId],\n ...includedTokens.filter((t) => Number(t.chainId) === chainId),\n ]\n\n const allowedAddresses = getConfigItemSets(\n configTokens,\n (tokens: BaseToken[]) =>\n new Set(\n tokens\n .filter((t) => Number(t.chainId) === chainId)\n .map((t) => t.address.toLowerCase())\n ),\n formType\n )\n\n const filtered = chainTokens.filter((token) =>\n isFormItemAllowed(token, allowedAddresses, formType, (t) =>\n t.address.toLowerCase()\n )\n )\n\n allowedTokensByChain[chainId] = filtered\n }\n\n return allowedTokensByChain\n}\n"],"mappings":";;;;;;AAUA,MAAa,iCACX,gBACA,iBAC8B;AAC9B,KAAI,CAAC,eACH,QAAO;AAET,KAAI,CAAC,aACH,QAAO;CAGT,MAAM,SAAS,EAAE,GAAG,gBAAgB;AAEpC,MAAK,MAAM,CAAC,SAAS,WAAW,OAAO,QAAQ,aAAa,EAAE;EAC5D,MAAM,aAAa,OAAO,QAAQ;EAClC,MAAM,iBAAiB,OAAO,eAAe,EAAE;EAC/C,MAAM,oBAAoB,IAAI,IAC5B,eAAe,KAAK,MAAM,EAAE,QAAQ,aAAa,CAAC,CACnD;EAED,MAAM,YAAY,OAAO,QACtB,MAAM,CAAC,kBAAkB,IAAI,EAAE,QAAQ,aAAa,CAAC,CACvD;AAED,MAAI,UAAU,OACZ,QAAO,cAAc,CAAC,GAAG,gBAAgB,GAAG,UAAU;;AAI1D,QAAO;;;;;;AAOT,MAAa,sBACX,MACA,UAC8B;AAC9B,KAAI,CAAC,KACH,QAAO;CAET,MAAM,cAAc,KAAK,MAAM;AAC/B,KAAI,CAAC,YACH,QAAO;CAET,MAAM,QAAQ,YAAY,WAAW,MAAM,EAAE,YAAY,MAAM,QAAQ;AACvE,KAAI,QAAQ,EACV,QAAO;AAET,QAAO;EACL,GAAG;GACF,MAAM,UAAU,YAAY,KAAK,GAAG,MACnC,MAAM,QAAQ;GAAE,GAAG;GAAG,GAAG;GAAO,GAAG,EACpC;EACF;;AAGH,MAAa,uBACX,YACA,cACA,cACA,aACuD;AACvD,KAAI,CAAC,WACH;CAGF,MAAM,iBAAiB,cAAc,WAAW,EAAE;CAClD,MAAM,cAAc,MAAM,KACxB,IAAI,IAAI,CACN,GAAG,eAAe,KAAK,MAAM,EAAE,QAAQ,EACvC,GAAG,OAAO,KAAK,WAAW,CAC3B,CAAC,CACH,CAAC,KAAK,YAAY,OAAO,QAAQ,CAAC;CAEnC,MAAM,oBAAoB,kBACxB,eACC,aAAuB,IAAI,IAAI,SAAS,EACzC,SACD;CAED,MAAM,kBAAkB,oBACpB,YAAY,QAAQ,YAClB,kBAAkB,SAAS,mBAAmB,SAAS,CACxD,GACD;CAEJ,MAAM,uBAA+D,EAAE;AACvE,MAAK,MAAM,WAAW,iBAAiB;EACrC,MAAM,cAAc,CAClB,GAAG,WAAW,UACd,GAAG,eAAe,QAAQ,MAAM,OAAO,EAAE,QAAQ,KAAK,QAAQ,CAC/D;EAED,MAAM,mBAAmB,kBACvB,eACC,WACC,IAAI,IACF,OACG,QAAQ,MAAM,OAAO,EAAE,QAAQ,KAAK,QAAQ,CAC5C,KAAK,MAAM,EAAE,QAAQ,aAAa,CAAC,CACvC,EACH,SACD;AAQD,uBAAqB,WANJ,YAAY,QAAQ,UACnC,kBAAkB,OAAO,kBAAkB,WAAW,MACpD,EAAE,QAAQ,aAAa,CACxB,CACF;;AAKH,QAAO"}
1
+ {"version":3,"file":"token.js","names":[],"sources":["../../../src/utils/token.ts"],"sourcesContent":["import type { BaseToken, Token, TokenExtended } from '@lifi/sdk'\nimport type { FormType } from '../stores/form/types.js'\nimport type { TokensByChain } from '../types/token.js'\nimport type { WidgetChains, WidgetTokens } from '../types/widget.js'\nimport { getConfigItemSets, isFormItemAllowed } from './item.js'\n\n/**\n * Merges verified tokens with search tokens.\n * Verified tokens take priority - search tokens are only added if they don't already exist.\n */\nexport const mergeVerifiedWithSearchTokens = (\n verifiedTokens?: TokensByChain,\n searchTokens?: TokensByChain\n): TokensByChain | undefined => {\n if (!verifiedTokens) {\n return searchTokens\n }\n if (!searchTokens) {\n return verifiedTokens\n }\n\n const result = { ...verifiedTokens }\n\n for (const [chainId, tokens] of Object.entries(searchTokens)) {\n const chainIdNum = Number(chainId)\n const existingTokens = result[chainIdNum] || []\n const existingAddresses = new Set(\n existingTokens.map((t) => t.address.toLowerCase())\n )\n\n const newTokens = tokens.filter(\n (t) => !existingAddresses.has(t.address.toLowerCase())\n )\n\n if (newTokens.length) {\n result[chainIdNum] = [...existingTokens, ...newTokens]\n }\n }\n\n return result\n}\n\n/**\n * Updates a token in the cache by chainId and address.\n * Returns a new cache object with the token updated, or the original if not found.\n */\nexport const updateTokenInCache = (\n data: TokensByChain | undefined,\n token: Token\n): TokensByChain | undefined => {\n if (!data) {\n return data\n }\n const chainTokens = data[token.chainId]\n if (!chainTokens) {\n return data\n }\n const index = chainTokens.findIndex((t) => t.address === token.address)\n if (index < 0) {\n return data\n }\n return {\n ...data,\n [token.chainId]: chainTokens.map((t, i) =>\n i === index ? { ...t, ...token } : t\n ),\n }\n}\n\nexport const filterAllowedTokens = (\n dataTokens: { [chainId: number]: TokenExtended[] } | undefined,\n configTokens?: WidgetTokens,\n chainsConfig?: WidgetChains,\n formType?: FormType\n): { [chainId: number]: TokenExtended[] } | undefined => {\n if (!dataTokens) {\n return\n }\n\n const includedTokens = configTokens?.include || []\n const allChainIds = Array.from(\n new Set([\n ...includedTokens.map((t) => t.chainId),\n ...Object.keys(dataTokens),\n ])\n ).map((chainId) => Number(chainId))\n\n const configChainIdsSet = getConfigItemSets(\n chainsConfig,\n (chainIds: number[]) => new Set(chainIds),\n formType\n )\n\n const allowedChainIds = configChainIdsSet\n ? allChainIds.filter((chainId) =>\n isFormItemAllowed(chainId, configChainIdsSet, formType)\n )\n : allChainIds\n\n const allowedTokensByChain: { [chainId: number]: TokenExtended[] } = {}\n for (const chainId of allowedChainIds) {\n const chainTokens = [\n ...dataTokens[chainId],\n ...includedTokens.filter((t) => Number(t.chainId) === chainId),\n ]\n\n const allowedAddresses = getConfigItemSets(\n configTokens,\n (tokens: BaseToken[]) =>\n new Set(\n tokens\n .filter((t) => Number(t.chainId) === chainId)\n .map((t) => t.address.toLowerCase())\n ),\n formType\n )\n\n const filtered = chainTokens.filter((token) =>\n isFormItemAllowed(token, allowedAddresses, formType, (t) =>\n t.address.toLowerCase()\n )\n )\n\n allowedTokensByChain[chainId] = filtered\n }\n\n return allowedTokensByChain\n}\n"],"mappings":";;;;;;AAUA,MAAa,iCACX,gBACA,iBAC8B;AAC9B,KAAI,CAAC,eACH,QAAO;AAET,KAAI,CAAC,aACH,QAAO;CAGT,MAAM,SAAS,EAAE,GAAG,gBAAgB;AAEpC,MAAK,MAAM,CAAC,SAAS,WAAW,OAAO,QAAQ,aAAa,EAAE;EAC5D,MAAM,aAAa,OAAO,QAAQ;EAClC,MAAM,iBAAiB,OAAO,eAAe,EAAE;EAC/C,MAAM,oBAAoB,IAAI,IAC5B,eAAe,KAAK,MAAM,EAAE,QAAQ,aAAa,CAAC,CACnD;EAED,MAAM,YAAY,OAAO,QACtB,MAAM,CAAC,kBAAkB,IAAI,EAAE,QAAQ,aAAa,CAAC,CACvD;AAED,MAAI,UAAU,OACZ,QAAO,cAAc,CAAC,GAAG,gBAAgB,GAAG,UAAU;;AAI1D,QAAO;;;;;;AAOT,MAAa,sBACX,MACA,UAC8B;AAC9B,KAAI,CAAC,KACH,QAAO;CAET,MAAM,cAAc,KAAK,MAAM;AAC/B,KAAI,CAAC,YACH,QAAO;CAET,MAAM,QAAQ,YAAY,WAAW,MAAM,EAAE,YAAY,MAAM,QAAQ;AACvE,KAAI,QAAQ,EACV,QAAO;AAET,QAAO;EACL,GAAG;GACF,MAAM,UAAU,YAAY,KAAK,GAAG,MACnC,MAAM,QAAQ;GAAE,GAAG;GAAG,GAAG;GAAO,GAAG,EACpC;EACF;;AAGH,MAAa,uBACX,YACA,cACA,cACA,aACuD;AACvD,KAAI,CAAC,WACH;CAGF,MAAM,iBAAiB,cAAc,WAAW,EAAE;CAClD,MAAM,cAAc,MAAM,KACxB,IAAI,IAAI,CACN,GAAG,eAAe,KAAK,MAAM,EAAE,QAAQ,EACvC,GAAG,OAAO,KAAK,WAAW,CAC3B,CAAC,CACH,CAAC,KAAK,YAAY,OAAO,QAAQ,CAAC;CAEnC,MAAM,oBAAoB,kBACxB,eACC,aAAuB,IAAI,IAAI,SAAS,EACzC,SACD;CAED,MAAM,kBAAkB,oBACpB,YAAY,QAAQ,YAClB,kBAAkB,SAAS,mBAAmB,SAAS,CACxD,GACD;CAEJ,MAAM,uBAA+D,EAAE;AACvE,MAAK,MAAM,WAAW,iBAAiB;EACrC,MAAM,cAAc,CAClB,GAAG,WAAW,UACd,GAAG,eAAe,QAAQ,MAAM,OAAO,EAAE,QAAQ,KAAK,QAAQ,CAC/D;EAED,MAAM,mBAAmB,kBACvB,eACC,WACC,IAAI,IACF,OACG,QAAQ,MAAM,OAAO,EAAE,QAAQ,KAAK,QAAQ,CAC5C,KAAK,MAAM,EAAE,QAAQ,aAAa,CAAC,CACvC,EACH,SACD;AAQD,uBAAqB,WANJ,YAAY,QAAQ,UACnC,kBAAkB,OAAO,kBAAkB,WAAW,MACpD,EAAE,QAAQ,aAAa,CACxB,CAGqC;;AAG1C,QAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/widget",
3
- "version": "4.0.0-beta.14",
3
+ "version": "4.0.0-beta.18",
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,21 +34,21 @@
34
34
  "dependencies": {
35
35
  "@emotion/react": "^11.14.0",
36
36
  "@emotion/styled": "^11.14.1",
37
- "@lifi/sdk": "4.0.0-beta.5",
38
- "@mui/icons-material": "^7.3.10",
39
- "@mui/material": "^7.3.10",
40
- "@mui/system": "^7.3.10",
41
- "@tanstack/react-router": "^1.168.10",
42
- "@tanstack/react-virtual": "^3.13.23",
43
- "i18next": "^26.0.4",
37
+ "@lifi/sdk": "^4.0.0-beta.8",
38
+ "@mui/icons-material": "^9.0.0",
39
+ "@mui/material": "^9.0.0",
40
+ "@mui/system": "^9.0.0",
41
+ "@tanstack/react-router": "^1.168.26",
42
+ "@tanstack/react-virtual": "^3.13.24",
43
+ "i18next": "^26.0.8",
44
44
  "microdiff": "^1.5.0",
45
45
  "mitt": "^3.0.1",
46
- "react-i18next": "^17.0.2",
46
+ "react-i18next": "^17.0.6",
47
47
  "react-intersection-observer": "^10.0.3",
48
48
  "react-transition-group": "^4.4.5",
49
49
  "zustand": "^5.0.12",
50
- "@lifi/wallet-management": "4.0.0-beta.12",
51
- "@lifi/widget-provider": "4.0.0-beta.11"
50
+ "@lifi/wallet-management": "4.0.0-beta.18",
51
+ "@lifi/widget-provider": "4.0.0-beta.18"
52
52
  },
53
53
  "peerDependencies": {
54
54
  "@tanstack/react-query": ">=5.90.0",
@@ -6,6 +6,7 @@ import {
6
6
  RouterProvider,
7
7
  } from '@tanstack/react-router'
8
8
  import type { JSX } from 'react'
9
+ import { useState } from 'react'
9
10
  import { AppLayout } from './AppLayout.js'
10
11
  import { NotFound } from './components/NotFound.js'
11
12
  import { ActivitiesPage } from './pages/ActivitiesPage/ActivitiesPage.js'
@@ -247,22 +248,19 @@ const routeTree = rootRoute.addChildren([
247
248
  configuredWalletsRoute,
248
249
  ])
249
250
 
250
- const history = createMemoryHistory({
251
- initialEntries: ['/'],
252
- })
253
-
254
- const router: ReturnType<typeof createRouter> = createRouter({
255
- routeTree,
256
- history,
257
- defaultPreload: 'intent',
258
- })
259
-
260
251
  declare module '@tanstack/react-router' {
261
252
  interface Register {
262
- router: typeof router
253
+ router: ReturnType<typeof createRouter>
263
254
  }
264
255
  }
265
256
 
266
257
  export const AppDefault = (): JSX.Element => {
258
+ const [router] = useState(() =>
259
+ createRouter({
260
+ routeTree,
261
+ history: createMemoryHistory({ initialEntries: ['/'] }),
262
+ defaultPreload: 'intent',
263
+ })
264
+ )
267
265
  return <RouterProvider router={router} />
268
266
  }
@@ -38,9 +38,15 @@ const chainTypeIcons = [
38
38
  icon: 'https://lifinance.github.io/types/src/assets/icons/chains/sui.svg',
39
39
  defaultChainId: ChainId.SUI,
40
40
  },
41
+ {
42
+ name: 'Tron',
43
+ chainType: ChainType.TVM,
44
+ icon: 'https://lifinance.github.io/types/src/assets/icons/chains/tron.svg',
45
+ defaultChainId: ChainId.TRN,
46
+ },
41
47
  ]
42
48
 
43
- const maxChainAvatarsCount = chainTypeIcons.length
49
+ const maxChainAvatarsCount = 4
44
50
 
45
51
  export const AllChainsAvatar: React.NamedExoticComponent<AllChainsAvatarProps> =
46
52
  memo(({ chains, size }: AllChainsAvatarProps): JSX.Element => {
@@ -33,5 +33,5 @@ export const ItemPrice: React.FC<ItemPriceProps> = ({
33
33
  })
34
34
  }
35
35
  }, [contractCalls, setFieldValue, token])
36
- return <Token token={token} p={2} />
36
+ return <Token token={token} sx={{ p: 2 }} />
37
37
  }
@@ -85,7 +85,7 @@ export const NFTBase: React.FC<NFTProps> = ({
85
85
  ) : null}
86
86
  </Box>
87
87
  </Box>
88
- <Token token={token} isLoading={isLoading} mt={2} />
88
+ <Token token={token} isLoading={isLoading} sx={{ mt: 2 }} />
89
89
  </Box>
90
90
  )
91
91
  }
@@ -25,7 +25,7 @@ export const ActivitiesButton = (): JSX.Element => {
25
25
  active={indicator.active || indicator.failed}
26
26
  size="medium"
27
27
  onClick={() => navigate({ to: navigationRoutes.activities })}
28
- disableRipple
28
+ disableRipple={indicator.active || indicator.failed}
29
29
  >
30
30
  <ErrorBadge
31
31
  invisible={!indicator.failed}
@@ -1,11 +1,11 @@
1
+ import type { BoxProps } from '@mui/material'
1
2
  import { Box, styled } from '@mui/material'
2
3
  import type React from 'react'
3
4
 
4
- export const IconTypography: React.FC<React.ComponentProps<typeof Box>> =
5
- styled(Box)(({ theme }) => ({
6
- color: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 40%, transparent)`,
7
- lineHeight: 0,
8
- ...theme.applyStyles('dark', {
9
- color: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 32%, transparent)`,
10
- }),
11
- }))
5
+ export const IconTypography: React.FC<BoxProps> = styled(Box)(({ theme }) => ({
6
+ color: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 40%, transparent)`,
7
+ lineHeight: 0,
8
+ ...theme.applyStyles('dark', {
9
+ color: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 32%, transparent)`,
10
+ }),
11
+ }))
@@ -24,7 +24,7 @@ export const AlertMessage = ({
24
24
  <AlertMessageCard severity={severity} {...rest}>
25
25
  <AlertMessageCardTitle
26
26
  severity={severity}
27
- alignItems={multiline ? 'start' : 'center'}
27
+ sx={{ alignItems: multiline ? 'start' : 'center' }}
28
28
  >
29
29
  {icon}
30
30
  {title}
@@ -51,7 +51,7 @@ export const RouteCardEssentials: React.FC<RouteCardEssentialsProps> = ({
51
51
  alignItems: 'center',
52
52
  }}
53
53
  >
54
- <IconTypography mr={0.5} fontSize={16}>
54
+ <IconTypography component="span" sx={{ mr: 0.5, fontSize: 16 }}>
55
55
  <LocalGasStationRounded fontSize="inherit" />
56
56
  </IconTypography>
57
57
  <Typography
@@ -78,7 +78,7 @@ export const RouteCardEssentials: React.FC<RouteCardEssentialsProps> = ({
78
78
  alignItems: 'center',
79
79
  }}
80
80
  >
81
- <IconTypography mr={0.5} fontSize={16}>
81
+ <IconTypography component="span" sx={{ mr: 0.5, fontSize: 16 }}>
82
82
  <AccessTimeFilled fontSize="inherit" />
83
83
  </IconTypography>
84
84
  <Typography
@@ -24,7 +24,7 @@ export const SelectChainAndToken: React.FC<BoxProps> = (props) => {
24
24
  const showReverseButton = !hiddenToToken && !hiddenFromToken
25
25
 
26
26
  return (
27
- <Box sx={{ display: 'flex' }} {...props}>
27
+ <Box {...props} sx={{ display: 'flex', ...props.sx }}>
28
28
  {!hiddenFromToken ? (
29
29
  <SelectTokenButton formType="from" hiddenReverse={hiddenReverse} />
30
30
  ) : null}
@@ -172,7 +172,7 @@ export const SendToWalletButton: React.FC<CardProps> = (props) => {
172
172
  subheader={headerSubheader}
173
173
  selected={!!toAddressFieldValue || disabledToAddress}
174
174
  action={
175
- !!toAddressFieldValue && !disabledForChanges ? (
175
+ toAddressFieldValue && !disabledForChanges ? (
176
176
  <CardIconButton onClick={clearSelectedBookmark} size="small">
177
177
  <CloseRounded fontSize="inherit" />
178
178
  </CardIconButton>
@@ -87,18 +87,18 @@ export const Step: React.FC<{
87
87
  flex: 1,
88
88
  }}
89
89
  >
90
- <CardTitle flex={1}>{getCardTitle()}</CardTitle>
91
- <CardTitle sx={{ fontWeight: 600 }}>
90
+ <CardTitle sx={{ flex: 1 }}>{getCardTitle()}</CardTitle>
91
+ <Box sx={{ p: 2, pb: 0, fontSize: 14, fontWeight: 600 }}>
92
92
  <StepTimer step={step} />
93
- </CardTitle>
93
+ </Box>
94
94
  </Box>
95
95
  <Box
96
96
  sx={{
97
97
  py: 1,
98
98
  }}
99
99
  >
100
- {fromToken ? <Token token={fromToken} px={2} py={1} /> : null}
101
- <StepActions step={step} px={2} py={1} dense />
100
+ {fromToken ? <Token token={fromToken} sx={{ px: 2, py: 1 }} /> : null}
101
+ <StepActions step={step} sx={{ px: 2, py: 1 }} dense />
102
102
  {prepareActions(step.execution?.actions ?? []).map(
103
103
  (actionsGroup, index) => (
104
104
  <StepAction key={index} step={step} actionsGroup={actionsGroup} />
@@ -128,8 +128,7 @@ export const Step: React.FC<{
128
128
  token={toToken}
129
129
  impactToken={impactToken}
130
130
  enableImpactTokenTooltip
131
- px={2}
132
- py={1}
131
+ sx={{ px: 2, py: 1 }}
133
132
  />
134
133
  ) : null}
135
134
  </Box>
@@ -17,6 +17,7 @@ export const TimerContent: FC<PropsWithChildren> = ({ children }) => {
17
17
  }}
18
18
  >
19
19
  <IconTypography
20
+ component="span"
20
21
  sx={{ marginRight: 0.5, fontSize: 16, display: 'inline-flex' }}
21
22
  >
22
23
  <AccessTimeFilled fontSize="inherit" />
@@ -151,7 +151,7 @@ const TokenBase: FC<TokenProps & BoxProps> = ({
151
151
  })}
152
152
  </TextSecondary>
153
153
  {impactToken ? (
154
- <TextSecondary px={0.5} dot>
154
+ <TextSecondary sx={{ px: 0.5 }} dot>
155
155
  &#x2022;
156
156
  </TextSecondary>
157
157
  ) : null}
@@ -176,7 +176,7 @@ const TokenBase: FC<TokenProps & BoxProps> = ({
176
176
  )
177
177
  ) : null}
178
178
  {!disableDescription ? (
179
- <TextSecondary px={0.5} dot>
179
+ <TextSecondary sx={{ px: 0.5 }} dot>
180
180
  &#x2022;
181
181
  </TextSecondary>
182
182
  ) : null}
@@ -75,10 +75,12 @@ export const TokenDetailsSheetContent: React.ForwardRefExoticComponent<
75
75
  ) : (
76
76
  <>
77
77
  <Typography
78
- fontWeight={700}
79
- fontSize="24px"
80
- lineHeight="24px"
81
- color="text.primary"
78
+ sx={{
79
+ fontWeight: 700,
80
+ fontSize: '24px',
81
+ lineHeight: '24px',
82
+ color: 'text.primary',
83
+ }}
82
84
  >
83
85
  {token?.symbol || noDataLabel}
84
86
  </Typography>
@@ -1,5 +1,5 @@
1
1
  import type { RouteExtended } from '@lifi/sdk'
2
- import DeleteOutline from '@mui/icons-material/DeleteOutline'
2
+ import DeleteOutline from '@mui/icons-material/DeleteOutlined'
3
3
  import { Box, Tooltip, Typography } from '@mui/material'
4
4
  import type { JSX, MouseEvent } from 'react'
5
5
  import { useTranslation } from 'react-i18next'
@@ -113,7 +113,7 @@ export const TransactionDetails: React.FC<TransactionDetailsProps> = ({
113
113
  cursor: 'pointer',
114
114
  }}
115
115
  >
116
- <IconTypography mr={0.5} fontSize={16}>
116
+ <IconTypography component="span" sx={{ mr: 0.5, fontSize: 16 }}>
117
117
  <LocalGasStationRounded fontSize="inherit" />
118
118
  </IconTypography>
119
119
  <Typography
@@ -1,2 +1,2 @@
1
1
  export const name = '@lifi/widget'
2
- export const version = '4.0.0-beta.14'
2
+ export const version = '4.0.0-beta.18'
@@ -7,7 +7,8 @@ import { useAvailableChains } from './useAvailableChains.js'
7
7
 
8
8
  export const useActionMessage = (
9
9
  step?: LiFiStepExtended,
10
- action?: ExecutionAction
10
+ action?: ExecutionAction,
11
+ defaultLabelsOnly?: boolean
11
12
  ): { title?: string; message?: string } => {
12
13
  const { subvariant, subvariantOptions } = useWidgetConfig()
13
14
  const { t } = useTranslation()
@@ -27,7 +28,7 @@ export const useActionMessage = (
27
28
  action.type,
28
29
  action.status,
29
30
  action.substatus,
30
- subvariant,
31
- subvariantOptions
31
+ defaultLabelsOnly ? undefined : subvariant,
32
+ defaultLabelsOnly ? undefined : subvariantOptions
32
33
  )
33
34
  }
@@ -18,6 +18,7 @@ const supportedChainTypes = [
18
18
  ChainType.SVM,
19
19
  ChainType.UTXO,
20
20
  ChainType.MVM,
21
+ ChainType.TVM,
21
22
  ]
22
23
 
23
24
  export const useAvailableChains = (
@@ -6,6 +6,13 @@ import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'
6
6
 
7
7
  const sanitiseBaseUrl = (baseUrl: string) => baseUrl.trim().replace(/\/+$/, '')
8
8
 
9
+ const explorerPathOverrides: Partial<
10
+ Record<ChainType | ChainId, { txPath: string; addressPath: string }>
11
+ > = {
12
+ [ChainId.SUI]: { txPath: 'txblock', addressPath: 'coin' },
13
+ [ChainType.TVM]: { txPath: '#/transaction', addressPath: '#/address' },
14
+ }
15
+
9
16
  type TransactionLinkProps = { chain?: Chain | number } & (
10
17
  | {
11
18
  txHash: string
@@ -35,11 +42,15 @@ export const useExplorer = (): {
35
42
  resolvedChain.metamask.blockExplorerUrls[0])
36
43
  : explorerUrls?.internal?.[0]) || internalExplorerUrl
37
44
 
38
- const url = typeof explorerUrl === 'string' ? explorerUrl : explorerUrl.url
45
+ const baseUrl =
46
+ typeof explorerUrl === 'string' ? explorerUrl : explorerUrl.url
47
+
48
+ const overrides =
49
+ explorerPathOverrides[resolvedChain?.id as ChainId] ??
50
+ explorerPathOverrides[resolvedChain?.chainType as ChainType]
39
51
 
40
- const defaultTxPath = resolvedChain?.id === ChainId.SUI ? 'txblock' : 'tx'
41
- const defaultAddressPath =
42
- resolvedChain?.id === ChainId.SUI ? 'coin' : 'address'
52
+ const defaultTxPath = overrides?.txPath ?? 'tx'
53
+ const defaultAddressPath = overrides?.addressPath ?? 'address'
43
54
  const txPath =
44
55
  typeof explorerUrl === 'string'
45
56
  ? defaultTxPath
@@ -50,7 +61,7 @@ export const useExplorer = (): {
50
61
  : explorerUrl.addressPath || defaultAddressPath
51
62
 
52
63
  return {
53
- url: sanitiseBaseUrl(url),
64
+ url: sanitiseBaseUrl(baseUrl),
54
65
  txPath,
55
66
  addressPath,
56
67
  resolvedChain,
@@ -139,7 +139,6 @@ export const useRouteExecution = ({
139
139
  return executeRoute(sdkClient, routeExecution.route, {
140
140
  updateRouteHook,
141
141
  acceptExchangeRateUpdateHook,
142
- infiniteApproval: false,
143
142
  executeInBackground,
144
143
  ...sdkClient.config?.executionOptions,
145
144
  })
@@ -164,7 +163,6 @@ export const useRouteExecution = ({
164
163
  return resumeRoute(sdkClient, resumedRoute ?? routeExecution.route, {
165
164
  updateRouteHook,
166
165
  acceptExchangeRateUpdateHook,
167
- infiniteApproval: false,
168
166
  executeInBackground,
169
167
  })
170
168
  },
@@ -48,6 +48,7 @@ export const useTokens = (
48
48
  ChainType.SVM,
49
49
  ChainType.UTXO,
50
50
  ChainType.MVM,
51
+ ChainType.TVM,
51
52
  ].filter((chainType) => isItemAllowed(chainType, chainsConfig?.types))
52
53
 
53
54
  const tokensResponse: TokensExtendedResponse = await getTokens(
@@ -90,6 +91,7 @@ export const useTokens = (
90
91
  ChainType.SVM,
91
92
  ChainType.UTXO,
92
93
  ChainType.MVM,
94
+ ChainType.TVM,
93
95
  ].filter((chainType) => isItemAllowed(chainType, chainsConfig?.types))
94
96
 
95
97
  const tokensResponse: TokensExtendedResponse = await getTokens(
@@ -1,5 +1,5 @@
1
1
  import { useAccount } from '@lifi/wallet-management'
2
- import DeleteOutlineIcon from '@mui/icons-material/DeleteOutline'
2
+ import DeleteOutlineIcon from '@mui/icons-material/DeleteOutlined'
3
3
  import { Button } from '@mui/material'
4
4
  import { useMemo, useState } from 'react'
5
5
  import { useTranslation } from 'react-i18next'
@@ -49,14 +49,14 @@ export const MainPage: React.FC = () => {
49
49
  {custom ? (
50
50
  <ContractComponent sx={marginSx}>{contractComponent}</ContractComponent>
51
51
  ) : null}
52
- <SelectChainAndToken mb={2} />
52
+ <SelectChainAndToken sx={marginSx} />
53
53
  {!custom || subvariantOptions?.custom === 'deposit' ? (
54
54
  <AmountInput formType="from" sx={marginSx} />
55
55
  ) : null}
56
56
  {!wideVariant ? <Routes sx={marginSx} /> : null}
57
57
  <SendToWalletButton sx={marginSx} />
58
- {showGasRefuelMessage ? <GasRefuelMessage mb={2} /> : null}
59
- <MainWarningMessages mb={2} />
58
+ {showGasRefuelMessage ? <GasRefuelMessage sx={marginSx} /> : null}
59
+ <MainWarningMessages sx={marginSx} />
60
60
  <Box
61
61
  sx={{
62
62
  display: 'flex',
@@ -69,7 +69,12 @@ export const RoutesPage = (): JSX.Element => {
69
69
  const allowInteraction = account.isConnected && !toAddressUnsatisfied
70
70
 
71
71
  return (
72
- <Stack className="long-list" direction="column" spacing={2} flex={1}>
72
+ <Stack
73
+ className="long-list"
74
+ direction="column"
75
+ spacing={2}
76
+ sx={{ flex: 1 }}
77
+ >
73
78
  {routeNotFound ? (
74
79
  <RouteNotFoundCard />
75
80
  ) : isLoading && !routes?.length ? (