0xtrails 0.13.1 → 0.14.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 (804) hide show
  1. package/dist/abis/trailsHydrate.d.ts +5 -42
  2. package/dist/abis/trailsHydrate.d.ts.map +1 -1
  3. package/dist/abis/trailsRouter.d.ts +1 -1
  4. package/dist/abis/trailsRouter.d.ts.map +1 -1
  5. package/dist/{widget/analytics → analytics/hooks}/useWidgetAnalytics.d.ts +2 -4
  6. package/dist/analytics/hooks/useWidgetAnalytics.d.ts.map +1 -0
  7. package/dist/analytics.d.ts.map +1 -1
  8. package/dist/chainSwitch.d.ts.map +1 -1
  9. package/dist/chains-C1NhDLF_.js +4 -0
  10. package/dist/chains-CcoarGia.js +658 -0
  11. package/dist/chains.d.ts +0 -1
  12. package/dist/chains.d.ts.map +1 -1
  13. package/dist/committedIntentStore.d.ts +5 -0
  14. package/dist/committedIntentStore.d.ts.map +1 -0
  15. package/dist/config.d.ts +2 -0
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/constants.d.ts +3 -1
  18. package/dist/constants.d.ts.map +1 -1
  19. package/dist/customTokens.d.ts.map +1 -1
  20. package/dist/error.d.ts +73 -4
  21. package/dist/error.d.ts.map +1 -1
  22. package/dist/hooks/useAddressWalletIcon.d.ts.map +1 -0
  23. package/dist/hooks/useAmountUsd.d.ts.map +1 -0
  24. package/dist/hooks/useBalanceVisible.d.ts.map +1 -0
  25. package/dist/hooks/useChainFilter.d.ts.map +1 -0
  26. package/dist/{widget/hooks → hooks}/useCheckout.d.ts +15 -15
  27. package/dist/hooks/useCheckout.d.ts.map +1 -0
  28. package/dist/hooks/useClickTracking.d.ts.map +1 -0
  29. package/dist/{widget/hooks → hooks}/useCombinedHistory.d.ts +3 -2
  30. package/dist/hooks/useCombinedHistory.d.ts.map +1 -0
  31. package/dist/hooks/useConnector.d.ts.map +1 -0
  32. package/dist/{widget/hooks → hooks}/useCustomTokenSearch.d.ts +7 -2
  33. package/dist/hooks/useCustomTokenSearch.d.ts.map +1 -0
  34. package/dist/hooks/useDebounce.d.ts.map +1 -0
  35. package/dist/{widget/hooks → hooks}/useDebugScreens.d.ts +2 -2
  36. package/dist/hooks/useDebugScreens.d.ts.map +1 -0
  37. package/dist/{widget/hooks → hooks}/useDefaultDestinationToken.d.ts +1 -1
  38. package/dist/hooks/useDefaultDestinationToken.d.ts.map +1 -0
  39. package/dist/{widget/hooks → hooks}/useDefaultOriginToken.d.ts +1 -1
  40. package/dist/hooks/useDefaultOriginToken.d.ts.map +1 -0
  41. package/dist/hooks/useDepositMonitor.d.ts.map +1 -0
  42. package/dist/{widget/hooks → hooks}/useDestinationSelectedToken.d.ts +2 -2
  43. package/dist/hooks/useDestinationSelectedToken.d.ts.map +1 -0
  44. package/dist/hooks/useDisplayCurrencyPreference.d.ts.map +1 -0
  45. package/dist/{widget/hooks → hooks}/useEarnPool.d.ts +1 -1
  46. package/dist/hooks/useEarnPool.d.ts.map +1 -0
  47. package/dist/hooks/useEffectiveFundBalance.d.ts +28 -0
  48. package/dist/hooks/useEffectiveFundBalance.d.ts.map +1 -0
  49. package/dist/hooks/useExecutingIntentsCount.d.ts.map +1 -0
  50. package/dist/{widget/hooks → hooks}/useExternalFundingReceiptSync.d.ts +1 -1
  51. package/dist/hooks/useExternalFundingReceiptSync.d.ts.map +1 -0
  52. package/dist/{widget/hooks → hooks}/useFiatOnRampCurrencies.d.ts +2 -2
  53. package/dist/hooks/useFiatOnRampCurrencies.d.ts.map +1 -0
  54. package/dist/hooks/useFiatSelectedCurrency.d.ts.map +1 -0
  55. package/dist/hooks/useGetIntent.d.ts.map +1 -0
  56. package/dist/{widget/hooks → hooks}/useIntentReceiptBalances.d.ts +1 -1
  57. package/dist/hooks/useIntentReceiptBalances.d.ts.map +1 -0
  58. package/dist/{widget/hooks → hooks}/useIntentTransactionHistory.d.ts +2 -1
  59. package/dist/hooks/useIntentTransactionHistory.d.ts.map +1 -0
  60. package/dist/hooks/useIsMobile.d.ts.map +1 -0
  61. package/dist/hooks/useIsSequenceWallet.d.ts.map +1 -0
  62. package/dist/hooks/useLocalePreference.d.ts.map +1 -0
  63. package/dist/hooks/useMeldTransactionHistory.d.ts.map +1 -0
  64. package/dist/hooks/useMeldTransactionStatus.d.ts.map +1 -0
  65. package/dist/hooks/useOnRampCountryDefaults.d.ts.map +1 -0
  66. package/dist/{widget/hooks → hooks}/useOnRampPaymentMethods.d.ts +2 -2
  67. package/dist/hooks/useOnRampPaymentMethods.d.ts.map +1 -0
  68. package/dist/{widget/hooks → hooks}/useOnRampProviderWidget.d.ts +1 -1
  69. package/dist/hooks/useOnRampProviderWidget.d.ts.map +1 -0
  70. package/dist/{widget/hooks → hooks}/useOnRampQuote.d.ts +3 -3
  71. package/dist/hooks/useOnRampQuote.d.ts.map +1 -0
  72. package/dist/{widget/hooks → hooks}/useOnRampTransactionStatus.d.ts +1 -1
  73. package/dist/hooks/useOnRampTransactionStatus.d.ts.map +1 -0
  74. package/dist/{widget/hooks → hooks}/useOriginSelectedToken.d.ts +1 -1
  75. package/dist/hooks/useOriginSelectedToken.d.ts.map +1 -0
  76. package/dist/hooks/usePayMessage.d.ts.map +1 -0
  77. package/dist/hooks/usePriceImpactWarning.d.ts.map +1 -0
  78. package/dist/hooks/useQuote.d.ts +439 -0
  79. package/dist/hooks/useQuote.d.ts.map +1 -0
  80. package/dist/{widget/hooks → hooks}/useRecentTokens.d.ts +1 -1
  81. package/dist/hooks/useRecentTokens.d.ts.map +1 -0
  82. package/dist/hooks/useRecipients.d.ts.map +1 -0
  83. package/dist/hooks/useSelectedFeeOption.d.ts.map +1 -0
  84. package/dist/{widget/hooks → hooks}/useSelectedFundMethod.d.ts +18 -1
  85. package/dist/hooks/useSelectedFundMethod.d.ts.map +1 -0
  86. package/dist/hooks/useSelectedRecipient.d.ts.map +1 -0
  87. package/dist/{widget/hooks → hooks}/useSendForm.d.ts +6 -11
  88. package/dist/hooks/useSendForm.d.ts.map +1 -0
  89. package/dist/hooks/useSwapAmount.d.ts.map +1 -0
  90. package/dist/{widget/hooks → hooks}/useSwapState.d.ts +1 -1
  91. package/dist/hooks/useSwapState.d.ts.map +1 -0
  92. package/dist/hooks/useTargetAmount.d.ts.map +1 -0
  93. package/dist/hooks/useTheme.d.ts.map +1 -0
  94. package/dist/{widget/hooks → hooks}/useTokenList.d.ts +9 -3
  95. package/dist/hooks/useTokenList.d.ts.map +1 -0
  96. package/dist/{widget/hooks → hooks}/useTrailsSendTransaction.d.ts +1 -1
  97. package/dist/hooks/useTrailsSendTransaction.d.ts.map +1 -0
  98. package/dist/{widget/hooks → hooks}/useViewManager.d.ts +1 -1
  99. package/dist/hooks/useViewManager.d.ts.map +1 -0
  100. package/dist/hooks/useWalletConnectUri.d.ts +19 -0
  101. package/dist/hooks/useWalletConnectUri.d.ts.map +1 -0
  102. package/dist/hooks/useWalletConnectionContext.d.ts.map +1 -0
  103. package/dist/{widget/hooks → hooks}/useWidgetProps.d.ts +1 -1
  104. package/dist/hooks/useWidgetProps.d.ts.map +1 -0
  105. package/dist/hydrate/builder.d.ts +131 -0
  106. package/dist/hydrate/builder.d.ts.map +1 -0
  107. package/dist/hydrate/constants.d.ts +13 -0
  108. package/dist/hydrate/constants.d.ts.map +1 -0
  109. package/dist/hydrate/encodeExecute.d.ts +73 -0
  110. package/dist/hydrate/encodeExecute.d.ts.map +1 -0
  111. package/dist/hydrate/index.d.ts +6 -0
  112. package/dist/hydrate/index.d.ts.map +1 -0
  113. package/dist/hydrate/index.js +11 -0
  114. package/dist/hydrate/payload.d.ts +38 -0
  115. package/dist/hydrate/payload.d.ts.map +1 -0
  116. package/dist/hydrate/selectors.d.ts +28 -0
  117. package/dist/hydrate/selectors.d.ts.map +1 -0
  118. package/dist/hydrate/types.d.ts +19 -0
  119. package/dist/hydrate/types.d.ts.map +1 -0
  120. package/dist/hydrate/utils.d.ts +8 -0
  121. package/dist/hydrate/utils.d.ts.map +1 -0
  122. package/dist/hydrate-Cr9eaeDK.js +654 -0
  123. package/dist/index.d.ts +20 -13
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +156 -610
  126. package/dist/intentConfigStore.d.ts +8 -0
  127. package/dist/intentConfigStore.d.ts.map +1 -0
  128. package/dist/intentProtocolApi.d.ts +11 -0
  129. package/dist/intentProtocolApi.d.ts.map +1 -0
  130. package/dist/intentProtocolEncoding.d.ts +25 -0
  131. package/dist/intentProtocolEncoding.d.ts.map +1 -0
  132. package/dist/intentProtocolResolver.d.ts +28 -0
  133. package/dist/intentProtocolResolver.d.ts.map +1 -0
  134. package/dist/intentReceiptPoller.d.ts.map +1 -1
  135. package/dist/intentValidation.d.ts +5 -0
  136. package/dist/intentValidation.d.ts.map +1 -0
  137. package/dist/intents.d.ts +8 -2
  138. package/dist/intents.d.ts.map +1 -1
  139. package/dist/keyMachineClient.d.ts +9 -0
  140. package/dist/keyMachineClient.d.ts.map +1 -0
  141. package/dist/keymachine/index.d.ts +34 -0
  142. package/dist/keymachine/index.d.ts.map +1 -0
  143. package/dist/keymachine/key-machine.gen.d.ts +461 -0
  144. package/dist/keymachine/key-machine.gen.d.ts.map +1 -0
  145. package/dist/mutations.d.ts.map +1 -1
  146. package/dist/offlineRecovery.d.ts +24 -0
  147. package/dist/offlineRecovery.d.ts.map +1 -0
  148. package/dist/onramp/MeshConnectFlow.d.ts +27 -0
  149. package/dist/onramp/MeshConnectFlow.d.ts.map +1 -0
  150. package/dist/onramp/MeshConnectIframe.d.ts +22 -0
  151. package/dist/onramp/MeshConnectIframe.d.ts.map +1 -0
  152. package/dist/onramp/SendFromExchangeButton.d.ts +16 -0
  153. package/dist/onramp/SendFromExchangeButton.d.ts.map +1 -0
  154. package/dist/onramp/TrailsOnRampProvider.d.ts +31 -0
  155. package/dist/onramp/TrailsOnRampProvider.d.ts.map +1 -0
  156. package/dist/onramp/index.d.ts +13 -0
  157. package/dist/onramp/index.d.ts.map +1 -0
  158. package/dist/onramp/mesh/components/MeshExchangeConfirmation.d.ts +10 -0
  159. package/dist/onramp/mesh/components/MeshExchangeConfirmation.d.ts.map +1 -0
  160. package/dist/onramp/mesh/components/MeshExchangeIcon.d.ts +13 -0
  161. package/dist/onramp/mesh/components/MeshExchangeIcon.d.ts.map +1 -0
  162. package/dist/onramp/mesh/components/MeshExchangeSelection.d.ts +12 -0
  163. package/dist/onramp/mesh/components/MeshExchangeSelection.d.ts.map +1 -0
  164. package/dist/onramp/mesh/components/MeshSessionOptions.d.ts +15 -0
  165. package/dist/onramp/mesh/components/MeshSessionOptions.d.ts.map +1 -0
  166. package/dist/onramp/mesh/hooks/useMeshAccessTokens.d.ts +9 -0
  167. package/dist/onramp/mesh/hooks/useMeshAccessTokens.d.ts.map +1 -0
  168. package/dist/onramp/mesh/hooks/useMeshFundingSelection.d.ts +11 -0
  169. package/dist/onramp/mesh/hooks/useMeshFundingSelection.d.ts.map +1 -0
  170. package/dist/onramp/mesh/hooks/useMeshOnrampFlow.d.ts +71 -0
  171. package/dist/onramp/mesh/hooks/useMeshOnrampFlow.d.ts.map +1 -0
  172. package/dist/onramp/mesh/hooks/useMeshOnrampSessionState.d.ts +32 -0
  173. package/dist/onramp/mesh/hooks/useMeshOnrampSessionState.d.ts.map +1 -0
  174. package/dist/onramp/mesh/hooks/useMeshSelectedTokenBalance.d.ts +19 -0
  175. package/dist/onramp/mesh/hooks/useMeshSelectedTokenBalance.d.ts.map +1 -0
  176. package/dist/onramp/mesh/hooks/useMeshSessionAccountBalance.d.ts +15 -0
  177. package/dist/onramp/mesh/hooks/useMeshSessionAccountBalance.d.ts.map +1 -0
  178. package/dist/onramp/mesh/hooks/useMeshSessionStorage.d.ts +7 -0
  179. package/dist/onramp/mesh/hooks/useMeshSessionStorage.d.ts.map +1 -0
  180. package/dist/onramp/meshSessionStorage.d.ts +13 -0
  181. package/dist/onramp/meshSessionStorage.d.ts.map +1 -0
  182. package/dist/onramp/meshconnect.d.ts +32 -0
  183. package/dist/onramp/meshconnect.d.ts.map +1 -0
  184. package/dist/onramp/trailsOnramp.d.ts +32 -0
  185. package/dist/onramp/trailsOnramp.d.ts.map +1 -0
  186. package/dist/onramp-client/index.d.ts +3 -3
  187. package/dist/onramp-client/index.d.ts.map +1 -1
  188. package/dist/onrampClient.d.ts.map +1 -1
  189. package/dist/prepareSend.d.ts +3 -2
  190. package/dist/prepareSend.d.ts.map +1 -1
  191. package/dist/query/balance.fetchers.d.ts +27 -0
  192. package/dist/query/balance.fetchers.d.ts.map +1 -1
  193. package/dist/query/balance.hooks.d.ts +19 -0
  194. package/dist/query/balance.hooks.d.ts.map +1 -1
  195. package/dist/query/balance.queries.d.ts +18 -1
  196. package/dist/query/balance.queries.d.ts.map +1 -1
  197. package/dist/query/chains.queries.d.ts.map +1 -1
  198. package/dist/query/intentProtocol.queries.d.ts +32 -0
  199. package/dist/query/intentProtocol.queries.d.ts.map +1 -0
  200. package/dist/query/meld.fetchers.d.ts +1 -1
  201. package/dist/query/meld.fetchers.d.ts.map +1 -1
  202. package/dist/query/meld.hooks.d.ts +3 -3
  203. package/dist/query/meld.hooks.d.ts.map +1 -1
  204. package/dist/query/meld.queries.d.ts +1 -1
  205. package/dist/query/meld.queries.d.ts.map +1 -1
  206. package/dist/query/tokenList.queries.d.ts +54 -0
  207. package/dist/query/tokenList.queries.d.ts.map +1 -0
  208. package/dist/recover.d.ts +71 -23
  209. package/dist/recover.d.ts.map +1 -1
  210. package/dist/src-4HYDQv2T.js +48798 -0
  211. package/dist/tokens.d.ts +13 -0
  212. package/dist/tokens.d.ts.map +1 -1
  213. package/dist/transactionIntent/deposits/depositOrchestrator.d.ts +3 -4
  214. package/dist/transactionIntent/deposits/depositOrchestrator.d.ts.map +1 -1
  215. package/dist/transactionIntent/deposits/gaslessDeposit.d.ts +3 -4
  216. package/dist/transactionIntent/deposits/gaslessDeposit.d.ts.map +1 -1
  217. package/dist/transactionIntent/deposits/standardDeposit.d.ts +2 -5
  218. package/dist/transactionIntent/deposits/standardDeposit.d.ts.map +1 -1
  219. package/dist/transactionIntent/handlers/intentHandler.d.ts +4 -4
  220. package/dist/transactionIntent/handlers/intentHandler.d.ts.map +1 -1
  221. package/dist/transactionIntent/helpers/transactionStateHelpers.d.ts.map +1 -1
  222. package/dist/transactionIntent/quote/normalizeQuote.d.ts.map +1 -1
  223. package/dist/transactionIntent/quote/quoteHelpers.d.ts +2 -2
  224. package/dist/transactionIntent/quote/quoteHelpers.d.ts.map +1 -1
  225. package/dist/transactionIntent/types.d.ts +4 -4
  226. package/dist/transactionIntent/types.d.ts.map +1 -1
  227. package/dist/transactions.d.ts +4 -0
  228. package/dist/transactions.d.ts.map +1 -1
  229. package/dist/umd/trails.min.js +1371 -322
  230. package/dist/utils/localStorageGc.d.ts +22 -0
  231. package/dist/utils/localStorageGc.d.ts.map +1 -0
  232. package/dist/walletUtils.d.ts +2 -1
  233. package/dist/walletUtils.d.ts.map +1 -1
  234. package/dist/wallets.d.ts +13 -54
  235. package/dist/wallets.d.ts.map +1 -1
  236. package/dist/widget/components/AccountIntentTransactionHistory.d.ts.map +1 -1
  237. package/dist/widget/components/ClassicSwap.d.ts.map +1 -1
  238. package/dist/widget/components/ConnectWallet.d.ts.map +1 -1
  239. package/dist/widget/components/ConnectedWallets.d.ts +1 -1
  240. package/dist/widget/components/ConnectedWallets.d.ts.map +1 -1
  241. package/dist/widget/components/DirectTransfer.d.ts +1 -1
  242. package/dist/widget/components/DirectTransfer.d.ts.map +1 -1
  243. package/dist/widget/components/Earn.d.ts +2 -6
  244. package/dist/widget/components/Earn.d.ts.map +1 -1
  245. package/dist/widget/components/FeeOption.d.ts +1 -1
  246. package/dist/widget/components/FeeOption.d.ts.map +1 -1
  247. package/dist/widget/components/FeeOptions.d.ts +1 -1
  248. package/dist/widget/components/FeeOptions.d.ts.map +1 -1
  249. package/dist/widget/components/FiatSelector.d.ts +1 -1
  250. package/dist/widget/components/FiatSelector.d.ts.map +1 -1
  251. package/dist/widget/components/FiatSelectorButton.d.ts +1 -1
  252. package/dist/widget/components/FiatSelectorButton.d.ts.map +1 -1
  253. package/dist/widget/components/Fund.d.ts +1 -1
  254. package/dist/widget/components/Fund.d.ts.map +1 -1
  255. package/dist/widget/components/FundMethods.d.ts.map +1 -1
  256. package/dist/widget/components/FundingMethodSelectorButton.d.ts +1 -1
  257. package/dist/widget/components/FundingMethodSelectorButton.d.ts.map +1 -1
  258. package/dist/widget/components/MeldHistory.d.ts +1 -1
  259. package/dist/widget/components/MeldHistory.d.ts.map +1 -1
  260. package/dist/widget/components/MeldTransactionStatus.d.ts +1 -1
  261. package/dist/widget/components/MeldTransactionStatus.d.ts.map +1 -1
  262. package/dist/widget/components/MeshExchangeAccountHeader.d.ts +9 -0
  263. package/dist/widget/components/MeshExchangeAccountHeader.d.ts.map +1 -0
  264. package/dist/widget/components/OnrampHistoryRow.d.ts +2 -2
  265. package/dist/widget/components/OnrampHistoryRow.d.ts.map +1 -1
  266. package/dist/widget/components/OnrampProviderConfirmation.d.ts +1 -1
  267. package/dist/widget/components/OnrampProviderConfirmation.d.ts.map +1 -1
  268. package/dist/widget/components/Pay.d.ts.map +1 -1
  269. package/dist/widget/components/PoolDeposit.d.ts +2 -6
  270. package/dist/widget/components/PoolDeposit.d.ts.map +1 -1
  271. package/dist/widget/components/PoolWithdraw.d.ts +2 -2
  272. package/dist/widget/components/PoolWithdraw.d.ts.map +1 -1
  273. package/dist/widget/components/PulsatingButton.d.ts +9 -0
  274. package/dist/widget/components/PulsatingButton.d.ts.map +1 -0
  275. package/dist/widget/components/QRCodeWalletSelect.d.ts +1 -1
  276. package/dist/widget/components/QRCodeWalletSelect.d.ts.map +1 -1
  277. package/dist/widget/components/QuoteDetails.d.ts.map +1 -1
  278. package/dist/widget/components/Receipt.d.ts +1 -1
  279. package/dist/widget/components/Receipt.d.ts.map +1 -1
  280. package/dist/widget/components/RecipientSelectorButton.d.ts.map +1 -1
  281. package/dist/widget/components/Recipients.d.ts.map +1 -1
  282. package/dist/widget/components/RefundWarning.d.ts.map +1 -1
  283. package/dist/widget/components/Swap.d.ts +2 -6
  284. package/dist/widget/components/Swap.d.ts.map +1 -1
  285. package/dist/widget/components/TokenList.d.ts +1 -0
  286. package/dist/widget/components/TokenList.d.ts.map +1 -1
  287. package/dist/widget/components/TokenSelector.d.ts +1 -2
  288. package/dist/widget/components/TokenSelector.d.ts.map +1 -1
  289. package/dist/widget/components/TransactionDetails.d.ts +1 -0
  290. package/dist/widget/components/TransactionDetails.d.ts.map +1 -1
  291. package/dist/widget/components/TransactionHistoryItem.d.ts +1 -0
  292. package/dist/widget/components/TransactionHistoryItem.d.ts.map +1 -1
  293. package/dist/widget/components/TransferPendingVertical.d.ts +2 -1
  294. package/dist/widget/components/TransferPendingVertical.d.ts.map +1 -1
  295. package/dist/widget/components/WalletAccountHeader.d.ts +7 -0
  296. package/dist/widget/components/WalletAccountHeader.d.ts.map +1 -0
  297. package/dist/widget/components/WalletConfirmation.d.ts +2 -1
  298. package/dist/widget/components/WalletConfirmation.d.ts.map +1 -1
  299. package/dist/widget/components/WalletConnect.d.ts.map +1 -1
  300. package/dist/widget/components/WalletList.d.ts.map +1 -1
  301. package/dist/widget/components/WidgetProviders.d.ts.map +1 -1
  302. package/dist/widget/components/Withdraw.d.ts.map +1 -1
  303. package/dist/widget/index.d.ts +13 -0
  304. package/dist/widget/index.d.ts.map +1 -1
  305. package/dist/widget/index.js +16 -8
  306. package/dist/widget/modes/EarnWidget.d.ts +83 -0
  307. package/dist/widget/modes/EarnWidget.d.ts.map +1 -0
  308. package/dist/widget/modes/FundWidget.d.ts +103 -0
  309. package/dist/widget/modes/FundWidget.d.ts.map +1 -0
  310. package/dist/widget/modes/PayWidget.d.ts +86 -0
  311. package/dist/widget/modes/PayWidget.d.ts.map +1 -0
  312. package/dist/widget/modes/SwapWidget.d.ts +82 -0
  313. package/dist/widget/modes/SwapWidget.d.ts.map +1 -0
  314. package/dist/widget/modes/WithdrawWidget.d.ts +71 -0
  315. package/dist/widget/modes/WithdrawWidget.d.ts.map +1 -0
  316. package/dist/widget/providers/TrailsProvider.d.ts +5 -0
  317. package/dist/widget/providers/TrailsProvider.d.ts.map +1 -1
  318. package/dist/widget/shared/mapSharedProps.d.ts +9 -0
  319. package/dist/widget/shared/mapSharedProps.d.ts.map +1 -0
  320. package/dist/widget/shared/methodMap.d.ts +18 -0
  321. package/dist/widget/shared/methodMap.d.ts.map +1 -0
  322. package/dist/widget/shared/resolution.d.ts +22 -0
  323. package/dist/widget/shared/resolution.d.ts.map +1 -0
  324. package/dist/widget/shared/resolvePaymentSource.d.ts +34 -0
  325. package/dist/widget/shared/resolvePaymentSource.d.ts.map +1 -0
  326. package/dist/widget/shared/types.d.ts +94 -0
  327. package/dist/widget/shared/types.d.ts.map +1 -0
  328. package/dist/widget/types/commonProps.d.ts +3 -7
  329. package/dist/widget/types/commonProps.d.ts.map +1 -1
  330. package/dist/widget/utils/createWagmiConfig.d.ts +2 -2
  331. package/dist/widget/utils/createWagmiConfig.d.ts.map +1 -1
  332. package/dist/widget/utils/fundMethodSwitchState.d.ts +2 -0
  333. package/dist/widget/utils/fundMethodSwitchState.d.ts.map +1 -1
  334. package/dist/widget/utils/meldProviderUtils.d.ts +1 -1
  335. package/dist/widget/utils/meldProviderUtils.d.ts.map +1 -1
  336. package/dist/widget/utils/meshSupportedTokens.d.ts +4 -0
  337. package/dist/widget/utils/meshSupportedTokens.d.ts.map +1 -0
  338. package/dist/widget/utils/onrampConfig.d.ts +11 -0
  339. package/dist/widget/utils/onrampConfig.d.ts.map +1 -0
  340. package/dist/widget/utils/trailsOnrampConfig.d.ts +18 -0
  341. package/dist/widget/utils/trailsOnrampConfig.d.ts.map +1 -0
  342. package/dist/widget/utils/viewManagerGuards.d.ts +1 -1
  343. package/dist/widget/utils/viewManagerGuards.d.ts.map +1 -1
  344. package/dist/widget/widget.d.ts +45 -24
  345. package/dist/widget/widget.d.ts.map +1 -1
  346. package/package.json +20 -24
  347. package/dist/buffer.d.ts +0 -3
  348. package/dist/buffer.d.ts.map +0 -1
  349. package/dist/ccip-DStzFCYT.js +0 -230
  350. package/dist/index-HY9_ppit.js +0 -101240
  351. package/dist/onramp-client/trails-onramp.gen.d.ts +0 -570
  352. package/dist/onramp-client/trails-onramp.gen.d.ts.map +0 -1
  353. package/dist/paymasterSend.d.ts +0 -90
  354. package/dist/paymasterSend.d.ts.map +0 -1
  355. package/dist/sendUserOp.d.ts +0 -122
  356. package/dist/sendUserOp.d.ts.map +0 -1
  357. package/dist/toSimpleSmartAccount.d.ts +0 -95
  358. package/dist/toSimpleSmartAccount.d.ts.map +0 -1
  359. package/dist/transactionIntent/utils/erc20Approval.d.ts +0 -34
  360. package/dist/transactionIntent/utils/erc20Approval.d.ts.map +0 -1
  361. package/dist/utils/allowance.d.ts +0 -19
  362. package/dist/utils/allowance.d.ts.map +0 -1
  363. package/dist/widget/analytics/useWidgetAnalytics.d.ts.map +0 -1
  364. package/dist/widget/components/FeeBreakdown.d.ts +0 -9
  365. package/dist/widget/components/FeeBreakdown.d.ts.map +0 -1
  366. package/dist/widget/components/HideBalances.d.ts +0 -4
  367. package/dist/widget/components/HideBalances.d.ts.map +0 -1
  368. package/dist/widget/components/OnrampDeposit.d.ts +0 -10
  369. package/dist/widget/components/OnrampDeposit.d.ts.map +0 -1
  370. package/dist/widget/components/SwapSettings.d.ts +0 -4
  371. package/dist/widget/components/SwapSettings.d.ts.map +0 -1
  372. package/dist/widget/components/TruncatedAddress.d.ts +0 -12
  373. package/dist/widget/components/TruncatedAddress.d.ts.map +0 -1
  374. package/dist/widget/components/WalletImage.d.ts +0 -8
  375. package/dist/widget/components/WalletImage.d.ts.map +0 -1
  376. package/dist/widget/css/compiled.css +0 -26
  377. package/dist/widget/css/index.css +0 -686
  378. package/dist/widget/hooks/useAddressWalletIcon.d.ts.map +0 -1
  379. package/dist/widget/hooks/useAmountUsd.d.ts.map +0 -1
  380. package/dist/widget/hooks/useBalanceVisible.d.ts.map +0 -1
  381. package/dist/widget/hooks/useChainFilter.d.ts.map +0 -1
  382. package/dist/widget/hooks/useCheckout.d.ts.map +0 -1
  383. package/dist/widget/hooks/useClickTracking.d.ts.map +0 -1
  384. package/dist/widget/hooks/useCombinedHistory.d.ts.map +0 -1
  385. package/dist/widget/hooks/useConnector.d.ts.map +0 -1
  386. package/dist/widget/hooks/useCustomTokenFetch.d.ts +0 -19
  387. package/dist/widget/hooks/useCustomTokenFetch.d.ts.map +0 -1
  388. package/dist/widget/hooks/useCustomTokenSearch.d.ts.map +0 -1
  389. package/dist/widget/hooks/useDebounce.d.ts.map +0 -1
  390. package/dist/widget/hooks/useDebugScreens.d.ts.map +0 -1
  391. package/dist/widget/hooks/useDefaultDestinationToken.d.ts.map +0 -1
  392. package/dist/widget/hooks/useDefaultOriginToken.d.ts.map +0 -1
  393. package/dist/widget/hooks/useDepositMonitor.d.ts.map +0 -1
  394. package/dist/widget/hooks/useDestinationSelectedToken.d.ts.map +0 -1
  395. package/dist/widget/hooks/useDisplayCurrencyPreference.d.ts.map +0 -1
  396. package/dist/widget/hooks/useEarnPool.d.ts.map +0 -1
  397. package/dist/widget/hooks/useExecutingIntentsCount.d.ts.map +0 -1
  398. package/dist/widget/hooks/useExternalFundingReceiptSync.d.ts.map +0 -1
  399. package/dist/widget/hooks/useFiatOnRampCurrencies.d.ts.map +0 -1
  400. package/dist/widget/hooks/useFiatSelectedCurrency.d.ts.map +0 -1
  401. package/dist/widget/hooks/useGetIntent.d.ts.map +0 -1
  402. package/dist/widget/hooks/useIntentReceiptBalances.d.ts.map +0 -1
  403. package/dist/widget/hooks/useIntentTransactionHistory.d.ts.map +0 -1
  404. package/dist/widget/hooks/useIsConnectedWalletSmartContract.d.ts +0 -7
  405. package/dist/widget/hooks/useIsConnectedWalletSmartContract.d.ts.map +0 -1
  406. package/dist/widget/hooks/useIsMobile.d.ts.map +0 -1
  407. package/dist/widget/hooks/useIsSequenceWallet.d.ts.map +0 -1
  408. package/dist/widget/hooks/useLocalePreference.d.ts.map +0 -1
  409. package/dist/widget/hooks/useMeldTransactionHistory.d.ts.map +0 -1
  410. package/dist/widget/hooks/useMeldTransactionStatus.d.ts.map +0 -1
  411. package/dist/widget/hooks/useOnRampCountryDefaults.d.ts.map +0 -1
  412. package/dist/widget/hooks/useOnRampPaymentMethods.d.ts.map +0 -1
  413. package/dist/widget/hooks/useOnRampProviderWidget.d.ts.map +0 -1
  414. package/dist/widget/hooks/useOnRampQuote.d.ts.map +0 -1
  415. package/dist/widget/hooks/useOnRampTransactionStatus.d.ts.map +0 -1
  416. package/dist/widget/hooks/useOriginSelectedToken.d.ts.map +0 -1
  417. package/dist/widget/hooks/usePayMessage.d.ts.map +0 -1
  418. package/dist/widget/hooks/usePriceImpactWarning.d.ts.map +0 -1
  419. package/dist/widget/hooks/useQuote.d.ts +0 -378
  420. package/dist/widget/hooks/useQuote.d.ts.map +0 -1
  421. package/dist/widget/hooks/useRecentTokens.d.ts.map +0 -1
  422. package/dist/widget/hooks/useRecipients.d.ts.map +0 -1
  423. package/dist/widget/hooks/useScreenTracking.d.ts +0 -2
  424. package/dist/widget/hooks/useScreenTracking.d.ts.map +0 -1
  425. package/dist/widget/hooks/useSelectedFeeOption.d.ts.map +0 -1
  426. package/dist/widget/hooks/useSelectedFundMethod.d.ts.map +0 -1
  427. package/dist/widget/hooks/useSelectedRecipient.d.ts.map +0 -1
  428. package/dist/widget/hooks/useSendForm.d.ts.map +0 -1
  429. package/dist/widget/hooks/useSwapAmount.d.ts.map +0 -1
  430. package/dist/widget/hooks/useSwapState.d.ts.map +0 -1
  431. package/dist/widget/hooks/useTargetAmount.d.ts.map +0 -1
  432. package/dist/widget/hooks/useTheme.d.ts.map +0 -1
  433. package/dist/widget/hooks/useTokenList.d.ts.map +0 -1
  434. package/dist/widget/hooks/useTokenWithFreshBalance.d.ts +0 -18
  435. package/dist/widget/hooks/useTokenWithFreshBalance.d.ts.map +0 -1
  436. package/dist/widget/hooks/useTrailsSendTransaction.d.ts.map +0 -1
  437. package/dist/widget/hooks/useViewManager.d.ts.map +0 -1
  438. package/dist/widget/hooks/useWalletConnectUri.d.ts +0 -11
  439. package/dist/widget/hooks/useWalletConnectUri.d.ts.map +0 -1
  440. package/dist/widget/hooks/useWalletConnectionContext.d.ts.map +0 -1
  441. package/dist/widget/hooks/useWidgetProps.d.ts.map +0 -1
  442. package/dist/widget/types.d.ts +0 -44
  443. package/dist/widget/types.d.ts.map +0 -1
  444. package/dist/widget/utils/historyUtils.d.ts +0 -18
  445. package/dist/widget/utils/historyUtils.d.ts.map +0 -1
  446. package/src/abi.ts +0 -38
  447. package/src/abis/erc20.ts +0 -60
  448. package/src/abis/trailsHydrate.ts +0 -185
  449. package/src/abis/trailsRouter.ts +0 -121
  450. package/src/abis/trailsSweep.ts +0 -32
  451. package/src/abortController.ts +0 -35
  452. package/src/analytics.ts +0 -2029
  453. package/src/buffer.ts +0 -10
  454. package/src/chainSwitch.ts +0 -95
  455. package/src/chains.ts +0 -565
  456. package/src/config.ts +0 -118
  457. package/src/constants.ts +0 -237
  458. package/src/contractUtils.ts +0 -46
  459. package/src/cssUtils.ts +0 -5
  460. package/src/customChains.ts +0 -24
  461. package/src/customTokens.ts +0 -147
  462. package/src/decoders.ts +0 -365
  463. package/src/ens.ts +0 -74
  464. package/src/error.ts +0 -268
  465. package/src/estimate.ts +0 -480
  466. package/src/explorer.ts +0 -38
  467. package/src/fees.ts +0 -362
  468. package/src/gasless.ts +0 -638
  469. package/src/index.ts +0 -204
  470. package/src/indexerClient.ts +0 -118
  471. package/src/intentReceiptMonitor.ts +0 -99
  472. package/src/intentReceiptPoller.ts +0 -327
  473. package/src/intents.ts +0 -1125
  474. package/src/localeUtils.ts +0 -244
  475. package/src/logger/index.ts +0 -95
  476. package/src/logger/useSyncLoggerDebug.ts +0 -11
  477. package/src/logger.ts +0 -1
  478. package/src/meld/components/MeldCountriesList.tsx +0 -237
  479. package/src/meld/components/MeldFundMethods.tsx +0 -265
  480. package/src/meld/components/MeldProvidersList.tsx +0 -187
  481. package/src/meld/components/MeldTokensList.tsx +0 -321
  482. package/src/meld/components/SimpleHeader.tsx +0 -35
  483. package/src/meld/utils/meld.ts +0 -77
  484. package/src/mutations.ts +0 -166
  485. package/src/onramp-client/index.ts +0 -54
  486. package/src/onramp-client/trails-onramp.gen.ts +0 -1320
  487. package/src/onrampClient.ts +0 -46
  488. package/src/paymasterSend.ts +0 -521
  489. package/src/placeholder.ts +0 -92
  490. package/src/poolUtils.ts +0 -222
  491. package/src/pools.ts +0 -120
  492. package/src/prepareSend.ts +0 -552
  493. package/src/query/balance.fetchers.ts +0 -623
  494. package/src/query/balance.hooks.ts +0 -298
  495. package/src/query/balance.queries.ts +0 -244
  496. package/src/query/chains.hooks.ts +0 -45
  497. package/src/query/chains.queries.ts +0 -22
  498. package/src/query/client.ts +0 -20
  499. package/src/query/fiat.fetchers.ts +0 -33
  500. package/src/query/fiat.hooks.ts +0 -71
  501. package/src/query/fiat.queries.ts +0 -67
  502. package/src/query/geo.fetchers.ts +0 -100
  503. package/src/query/geo.hooks.ts +0 -16
  504. package/src/query/geo.queries.ts +0 -36
  505. package/src/query/helpers.ts +0 -81
  506. package/src/query/meld.fetchers.ts +0 -97
  507. package/src/query/meld.hooks.ts +0 -18
  508. package/src/query/meld.queries.ts +0 -184
  509. package/src/query/persister.ts +0 -11
  510. package/src/query/price.fetchers.ts +0 -53
  511. package/src/query/price.hooks.ts +0 -46
  512. package/src/query/price.queries.ts +0 -364
  513. package/src/queryParams.ts +0 -100
  514. package/src/recover.ts +0 -1665
  515. package/src/sendUserOp.ts +0 -512
  516. package/src/theme.ts +0 -2
  517. package/src/toSimpleSmartAccount.ts +0 -567
  518. package/src/toast.ts +0 -110
  519. package/src/tokens.ts +0 -1780
  520. package/src/trailsClient.ts +0 -40
  521. package/src/transactionIntent/constants.ts +0 -15
  522. package/src/transactionIntent/deposits/depositOrchestrator.ts +0 -243
  523. package/src/transactionIntent/deposits/gaslessDeposit.ts +0 -705
  524. package/src/transactionIntent/deposits/index.ts +0 -3
  525. package/src/transactionIntent/deposits/standardDeposit.ts +0 -594
  526. package/src/transactionIntent/execution/index.ts +0 -1
  527. package/src/transactionIntent/execution/transactionState.ts +0 -38
  528. package/src/transactionIntent/handlers/index.ts +0 -1
  529. package/src/transactionIntent/handlers/intentHandler.ts +0 -1596
  530. package/src/transactionIntent/helpers/index.ts +0 -1
  531. package/src/transactionIntent/helpers/transactionStateHelpers.ts +0 -437
  532. package/src/transactionIntent/index.ts +0 -10
  533. package/src/transactionIntent/quote/feeExtractors.ts +0 -61
  534. package/src/transactionIntent/quote/index.ts +0 -3
  535. package/src/transactionIntent/quote/normalizeQuote.ts +0 -553
  536. package/src/transactionIntent/quote/quoteHelpers.ts +0 -117
  537. package/src/transactionIntent/types.ts +0 -241
  538. package/src/transactionIntent/utils/balanceChecker.ts +0 -103
  539. package/src/transactionIntent/utils/erc20Approval.ts +0 -171
  540. package/src/transactionIntent/utils/index.ts +0 -2
  541. package/src/transactionIntent/utils/resilientDepositTracker.ts +0 -171
  542. package/src/transactionIntent/utils/testnetHelpers.ts +0 -5
  543. package/src/transactionIntent/validators.ts +0 -27
  544. package/src/transactions.ts +0 -426
  545. package/src/types.d.ts +0 -16
  546. package/src/umd.tsx +0 -33
  547. package/src/utils/address.ts +0 -78
  548. package/src/utils/allowance.ts +0 -47
  549. package/src/utils/fiat.ts +0 -32
  550. package/src/utils/format.ts +0 -625
  551. package/src/utils/passthrough.ts +0 -93
  552. package/src/utils/time.ts +0 -118
  553. package/src/utils/validation.ts +0 -104
  554. package/src/utils.ts +0 -112
  555. package/src/version.ts +0 -8
  556. package/src/vite-env.d.ts +0 -4
  557. package/src/walletUtils.ts +0 -292
  558. package/src/wallets.ts +0 -740
  559. package/src/widget/analytics/useWidgetAnalytics.ts +0 -56
  560. package/src/widget/assets/Binance_Icon_Logo.svg +0 -14
  561. package/src/widget/assets/Bitfinex_Icon_Logo.svg +0 -5
  562. package/src/widget/assets/Coinbase_Icon_Logo.svg +0 -1
  563. package/src/widget/assets/Exchange-icon-black.svg +0 -5
  564. package/src/widget/assets/MetaMask-icon-fox-with-margins.svg +0 -31
  565. package/src/widget/assets/MetaMask-icon-fox.svg +0 -26
  566. package/src/widget/assets/MetaMask-logo-black.svg +0 -3
  567. package/src/widget/assets/MetaMask-logo-white.svg +0 -16
  568. package/src/widget/assets/Trails-logo-black.svg +0 -13
  569. package/src/widget/assets/Trails-logo-white.svg +0 -13
  570. package/src/widget/assets/WalletChange-black.svg +0 -5
  571. package/src/widget/assets/WalletConnect-logo-black.svg +0 -14
  572. package/src/widget/assets/WalletConnect-logo-blue-bg.svg +0 -11
  573. package/src/widget/assets/WalletConnect-logo-blue.svg +0 -14
  574. package/src/widget/assets/WalletConnect-logo-white.svg +0 -14
  575. package/src/widget/assets/WalletConnect-logo.svg +0 -40
  576. package/src/widget/assets/aave.svg +0 -14
  577. package/src/widget/assets/morpho.svg +0 -14
  578. package/src/widget/assets/sequence-logo.svg +0 -15
  579. package/src/widget/compiled.css +0 -26
  580. package/src/widget/components/AccountActionsDropdown.tsx +0 -31
  581. package/src/widget/components/AccountIntentTransactionHistory.tsx +0 -756
  582. package/src/widget/components/AccountIntentTransactionHistoryButton.tsx +0 -34
  583. package/src/widget/components/AccountSettings.tsx +0 -168
  584. package/src/widget/components/AddressOrEnsName.tsx +0 -24
  585. package/src/widget/components/AddressWalletIcon.tsx +0 -49
  586. package/src/widget/components/AllChainsIcon.tsx +0 -54
  587. package/src/widget/components/ChainFilterDropdown.tsx +0 -220
  588. package/src/widget/components/ChainImage.tsx +0 -40
  589. package/src/widget/components/ChainList.tsx +0 -158
  590. package/src/widget/components/ClassicSwap.tsx +0 -1744
  591. package/src/widget/components/ConfigDisplay.tsx +0 -158
  592. package/src/widget/components/ConnectWallet.tsx +0 -564
  593. package/src/widget/components/ConnectedWallets.tsx +0 -417
  594. package/src/widget/components/CopyButton.tsx +0 -108
  595. package/src/widget/components/CountryFilterDropdown.tsx +0 -179
  596. package/src/widget/components/DebugMenu.tsx +0 -50
  597. package/src/widget/components/DebugScreensList.tsx +0 -70
  598. package/src/widget/components/DebugToast.tsx +0 -63
  599. package/src/widget/components/DepositTracker.tsx +0 -326
  600. package/src/widget/components/DirectTransfer.tsx +0 -302
  601. package/src/widget/components/Disconnect.tsx +0 -68
  602. package/src/widget/components/DynamicInputStyles.tsx +0 -121
  603. package/src/widget/components/DynamicSizeInputField.tsx +0 -245
  604. package/src/widget/components/ENSAvatar.tsx +0 -33
  605. package/src/widget/components/Earn.tsx +0 -160
  606. package/src/widget/components/EarnPools.tsx +0 -417
  607. package/src/widget/components/EarnPoolsFilters.tsx +0 -165
  608. package/src/widget/components/ErrorAnimationIcon.tsx +0 -130
  609. package/src/widget/components/ErrorDisplay.tsx +0 -152
  610. package/src/widget/components/ExecutingIntentsBadge.tsx +0 -24
  611. package/src/widget/components/ExecutionStatusBadge.tsx +0 -53
  612. package/src/widget/components/FeeBreakdown.tsx +0 -155
  613. package/src/widget/components/FeeOption.tsx +0 -170
  614. package/src/widget/components/FeeOptions.tsx +0 -247
  615. package/src/widget/components/FiatSelector.tsx +0 -308
  616. package/src/widget/components/FiatSelectorButton.tsx +0 -68
  617. package/src/widget/components/Footer.tsx +0 -67
  618. package/src/widget/components/Fund.tsx +0 -2331
  619. package/src/widget/components/FundMethods.tsx +0 -427
  620. package/src/widget/components/FundWalletSelection.tsx +0 -60
  621. package/src/widget/components/FundingMethodSelectorButton.tsx +0 -106
  622. package/src/widget/components/GreenCheckAnimation.tsx +0 -119
  623. package/src/widget/components/HideBalances.tsx +0 -24
  624. package/src/widget/components/HighPriceImpactBlock.tsx +0 -44
  625. package/src/widget/components/HookModalContent.tsx +0 -377
  626. package/src/widget/components/Identicon.tsx +0 -228
  627. package/src/widget/components/LoadingSpinner.tsx +0 -9
  628. package/src/widget/components/MeldForm.tsx +0 -780
  629. package/src/widget/components/MeldHistory.tsx +0 -433
  630. package/src/widget/components/MeldStepsFlow.tsx +0 -1651
  631. package/src/widget/components/MeldTransactionStatus.tsx +0 -255
  632. package/src/widget/components/Modal.tsx +0 -86
  633. package/src/widget/components/OFTProgressBar.tsx +0 -89
  634. package/src/widget/components/OnRampProviderSelector.tsx +0 -263
  635. package/src/widget/components/OnrampDeposit.tsx +0 -122
  636. package/src/widget/components/OnrampErrorScreen.tsx +0 -163
  637. package/src/widget/components/OnrampHistoryRow.tsx +0 -321
  638. package/src/widget/components/OnrampPaymentMethods.tsx +0 -81
  639. package/src/widget/components/OnrampProviderConfirmation.tsx +0 -1060
  640. package/src/widget/components/OriginSelectionAmount.tsx +0 -144
  641. package/src/widget/components/OriginTransferInformation.tsx +0 -59
  642. package/src/widget/components/Pay.tsx +0 -1181
  643. package/src/widget/components/PaymentMethods.tsx +0 -198
  644. package/src/widget/components/PercentageMaxButtons.tsx +0 -112
  645. package/src/widget/components/PoolDeposit.tsx +0 -651
  646. package/src/widget/components/PoolWithdraw.tsx +0 -761
  647. package/src/widget/components/PriceImpactWarning.tsx +0 -87
  648. package/src/widget/components/QRCodeOptions.tsx +0 -65
  649. package/src/widget/components/QRCodeWalletSelect.tsx +0 -77
  650. package/src/widget/components/QrCode.tsx +0 -216
  651. package/src/widget/components/QuoteDetails.tsx +0 -1266
  652. package/src/widget/components/Receipt.tsx +0 -673
  653. package/src/widget/components/ReceiptRecoverableFunds.tsx +0 -135
  654. package/src/widget/components/RecentTokens.tsx +0 -66
  655. package/src/widget/components/RecipientSelectorButton.tsx +0 -50
  656. package/src/widget/components/Recipients.tsx +0 -412
  657. package/src/widget/components/RefundWarning.tsx +0 -66
  658. package/src/widget/components/RequiredPropsError.tsx +0 -33
  659. package/src/widget/components/ScreenHeader.tsx +0 -123
  660. package/src/widget/components/SearchInputField.tsx +0 -99
  661. package/src/widget/components/SessionTimeoutScreen.tsx +0 -103
  662. package/src/widget/components/ShadowPortal.tsx +0 -99
  663. package/src/widget/components/ShadowRootContext.tsx +0 -17
  664. package/src/widget/components/SimpleRecipientInputScreen.tsx +0 -91
  665. package/src/widget/components/SlippageToleranceSettings.tsx +0 -279
  666. package/src/widget/components/Swap.tsx +0 -50
  667. package/src/widget/components/SwapDisplay.tsx +0 -68
  668. package/src/widget/components/SwapSettings.tsx +0 -52
  669. package/src/widget/components/ThemeProvider.tsx +0 -115
  670. package/src/widget/components/ThemeSyncer.tsx +0 -47
  671. package/src/widget/components/Toast.tsx +0 -336
  672. package/src/widget/components/TokenDisplayNonSelectable.tsx +0 -40
  673. package/src/widget/components/TokenImage.tsx +0 -156
  674. package/src/widget/components/TokenList.tsx +0 -107
  675. package/src/widget/components/TokenSelector.tsx +0 -738
  676. package/src/widget/components/TokenSelectorButton.tsx +0 -123
  677. package/src/widget/components/TokenSkeleton.tsx +0 -53
  678. package/src/widget/components/Tooltip.tsx +0 -64
  679. package/src/widget/components/TrailsHookModal.tsx +0 -107
  680. package/src/widget/components/TransactionDetails.tsx +0 -488
  681. package/src/widget/components/TransactionHistoryItem.tsx +0 -767
  682. package/src/widget/components/TransferPendingVertical.tsx +0 -583
  683. package/src/widget/components/TruncatedAddress.tsx +0 -68
  684. package/src/widget/components/TruncatedTransactionHash.tsx +0 -74
  685. package/src/widget/components/UserPreferences.tsx +0 -570
  686. package/src/widget/components/WaasFeeOptions.tsx +0 -588
  687. package/src/widget/components/WalletConfirmation.tsx +0 -220
  688. package/src/widget/components/WalletConnect.tsx +0 -351
  689. package/src/widget/components/WalletConnectionPending.tsx +0 -178
  690. package/src/widget/components/WalletImage.tsx +0 -64
  691. package/src/widget/components/WalletList.tsx +0 -125
  692. package/src/widget/components/WidgetProviders.tsx +0 -82
  693. package/src/widget/components/Withdraw.tsx +0 -1088
  694. package/src/widget/components/YellowWarningAnimation.tsx +0 -146
  695. package/src/widget/hooks/useAddressWalletIcon.ts +0 -54
  696. package/src/widget/hooks/useAmountUsd.ts +0 -44
  697. package/src/widget/hooks/useBalanceVisible.tsx +0 -95
  698. package/src/widget/hooks/useChainFilter.tsx +0 -56
  699. package/src/widget/hooks/useCheckout.ts +0 -361
  700. package/src/widget/hooks/useClickTracking.ts +0 -74
  701. package/src/widget/hooks/useCombinedHistory.ts +0 -420
  702. package/src/widget/hooks/useConnector.tsx +0 -24
  703. package/src/widget/hooks/useCustomTokenFetch.tsx +0 -74
  704. package/src/widget/hooks/useCustomTokenSearch.tsx +0 -339
  705. package/src/widget/hooks/useDebounce.ts +0 -25
  706. package/src/widget/hooks/useDebugScreens.ts +0 -600
  707. package/src/widget/hooks/useDefaultDestinationToken.tsx +0 -182
  708. package/src/widget/hooks/useDefaultOriginToken.tsx +0 -410
  709. package/src/widget/hooks/useDepositMonitor.ts +0 -118
  710. package/src/widget/hooks/useDestinationSelectedToken.tsx +0 -310
  711. package/src/widget/hooks/useDisplayCurrencyPreference.tsx +0 -145
  712. package/src/widget/hooks/useEarnPool.tsx +0 -36
  713. package/src/widget/hooks/useExecutingIntentsCount.ts +0 -78
  714. package/src/widget/hooks/useExternalFundingReceiptSync.ts +0 -79
  715. package/src/widget/hooks/useFiatOnRampCurrencies.ts +0 -46
  716. package/src/widget/hooks/useFiatSelectedCurrency.tsx +0 -123
  717. package/src/widget/hooks/useGetIntent.ts +0 -54
  718. package/src/widget/hooks/useIntentReceiptBalances.ts +0 -141
  719. package/src/widget/hooks/useIntentTransactionHistory.ts +0 -785
  720. package/src/widget/hooks/useIsConnectedWalletSmartContract.ts +0 -43
  721. package/src/widget/hooks/useIsMobile.tsx +0 -50
  722. package/src/widget/hooks/useIsSequenceWallet.ts +0 -17
  723. package/src/widget/hooks/useLocalePreference.tsx +0 -187
  724. package/src/widget/hooks/useMeldTransactionHistory.ts +0 -184
  725. package/src/widget/hooks/useMeldTransactionStatus.ts +0 -707
  726. package/src/widget/hooks/useOnRampCountryDefaults.ts +0 -57
  727. package/src/widget/hooks/useOnRampPaymentMethods.ts +0 -72
  728. package/src/widget/hooks/useOnRampProviderWidget.ts +0 -184
  729. package/src/widget/hooks/useOnRampQuote.ts +0 -340
  730. package/src/widget/hooks/useOnRampTransactionStatus.ts +0 -196
  731. package/src/widget/hooks/useOriginSelectedToken.tsx +0 -253
  732. package/src/widget/hooks/usePayMessage.tsx +0 -496
  733. package/src/widget/hooks/usePriceImpactWarning.ts +0 -17
  734. package/src/widget/hooks/useQuote.ts +0 -1233
  735. package/src/widget/hooks/useRecentTokens.ts +0 -159
  736. package/src/widget/hooks/useRecipients.ts +0 -167
  737. package/src/widget/hooks/useScreenTracking.ts +0 -14
  738. package/src/widget/hooks/useSelectedFeeOption.tsx +0 -323
  739. package/src/widget/hooks/useSelectedFundMethod.tsx +0 -80
  740. package/src/widget/hooks/useSelectedRecipient.tsx +0 -75
  741. package/src/widget/hooks/useSendForm.ts +0 -1373
  742. package/src/widget/hooks/useSwapAmount.tsx +0 -50
  743. package/src/widget/hooks/useSwapState.tsx +0 -121
  744. package/src/widget/hooks/useTargetAmount.ts +0 -26
  745. package/src/widget/hooks/useTheme.tsx +0 -80
  746. package/src/widget/hooks/useTokenList.ts +0 -1099
  747. package/src/widget/hooks/useTokenWithFreshBalance.ts +0 -246
  748. package/src/widget/hooks/useTrailsSendTransaction.ts +0 -987
  749. package/src/widget/hooks/useViewManager.tsx +0 -505
  750. package/src/widget/hooks/useWalletConnectUri.tsx +0 -307
  751. package/src/widget/hooks/useWalletConnectionContext.tsx +0 -128
  752. package/src/widget/hooks/useWidgetProps.tsx +0 -33
  753. package/src/widget/index.css +0 -686
  754. package/src/widget/index.tsx +0 -28
  755. package/src/widget/providers/TrailsModalProvider.tsx +0 -238
  756. package/src/widget/providers/TrailsProvider.tsx +0 -150
  757. package/src/widget/providers/UserActivityProvider.tsx +0 -78
  758. package/src/widget/providers/WidgetProviderTree.tsx +0 -90
  759. package/src/widget/styles.ts +0 -26
  760. package/src/widget/types/analytics.ts +0 -22
  761. package/src/widget/types/commonProps.ts +0 -56
  762. package/src/widget/types/svg.d.ts +0 -8
  763. package/src/widget/types.ts +0 -51
  764. package/src/widget/utils/countryUtils.ts +0 -89
  765. package/src/widget/utils/createWagmiConfig.ts +0 -38
  766. package/src/widget/utils/forexRateStore.ts +0 -120
  767. package/src/widget/utils/fundMethodSwitchState.ts +0 -25
  768. package/src/widget/utils/historyFilters.ts +0 -157
  769. package/src/widget/utils/historyUtils.ts +0 -101
  770. package/src/widget/utils/localeStore.ts +0 -68
  771. package/src/widget/utils/meldProviderUtils.ts +0 -20
  772. package/src/widget/utils/statusLabel.ts +0 -3
  773. package/src/widget/utils/tokens.ts +0 -138
  774. package/src/widget/utils/transactionFailure.ts +0 -52
  775. package/src/widget/utils/viewManagerGuards.ts +0 -49
  776. package/src/widget/utils/windowUtils.ts +0 -138
  777. package/src/widget/widget.tsx +0 -3334
  778. /package/dist/{widget/hooks → hooks}/useAddressWalletIcon.d.ts +0 -0
  779. /package/dist/{widget/hooks → hooks}/useAmountUsd.d.ts +0 -0
  780. /package/dist/{widget/hooks → hooks}/useBalanceVisible.d.ts +0 -0
  781. /package/dist/{widget/hooks → hooks}/useChainFilter.d.ts +0 -0
  782. /package/dist/{widget/hooks → hooks}/useClickTracking.d.ts +0 -0
  783. /package/dist/{widget/hooks → hooks}/useConnector.d.ts +0 -0
  784. /package/dist/{widget/hooks → hooks}/useDebounce.d.ts +0 -0
  785. /package/dist/{widget/hooks → hooks}/useDepositMonitor.d.ts +0 -0
  786. /package/dist/{widget/hooks → hooks}/useDisplayCurrencyPreference.d.ts +0 -0
  787. /package/dist/{widget/hooks → hooks}/useExecutingIntentsCount.d.ts +0 -0
  788. /package/dist/{widget/hooks → hooks}/useFiatSelectedCurrency.d.ts +0 -0
  789. /package/dist/{widget/hooks → hooks}/useGetIntent.d.ts +0 -0
  790. /package/dist/{widget/hooks → hooks}/useIsMobile.d.ts +0 -0
  791. /package/dist/{widget/hooks → hooks}/useIsSequenceWallet.d.ts +0 -0
  792. /package/dist/{widget/hooks → hooks}/useLocalePreference.d.ts +0 -0
  793. /package/dist/{widget/hooks → hooks}/useMeldTransactionHistory.d.ts +0 -0
  794. /package/dist/{widget/hooks → hooks}/useMeldTransactionStatus.d.ts +0 -0
  795. /package/dist/{widget/hooks → hooks}/useOnRampCountryDefaults.d.ts +0 -0
  796. /package/dist/{widget/hooks → hooks}/usePayMessage.d.ts +0 -0
  797. /package/dist/{widget/hooks → hooks}/usePriceImpactWarning.d.ts +0 -0
  798. /package/dist/{widget/hooks → hooks}/useRecipients.d.ts +0 -0
  799. /package/dist/{widget/hooks → hooks}/useSelectedFeeOption.d.ts +0 -0
  800. /package/dist/{widget/hooks → hooks}/useSelectedRecipient.d.ts +0 -0
  801. /package/dist/{widget/hooks → hooks}/useSwapAmount.d.ts +0 -0
  802. /package/dist/{widget/hooks → hooks}/useTargetAmount.d.ts +0 -0
  803. /package/dist/{widget/hooks → hooks}/useTheme.d.ts +0 -0
  804. /package/dist/{widget/hooks → hooks}/useWalletConnectionContext.d.ts +0 -0
@@ -1,1744 +0,0 @@
1
- import { Loader2, ArrowDown } from "lucide-react"
2
- import type React from "react"
3
- import { useCallback, useEffect, useMemo, useRef, useState } from "react"
4
- import { isWithinCooldown, SECOND_MS } from "../../utils/time.js"
5
- import { isValidNumber } from "../../utils/validation.js"
6
- import { openPopup, setPopupUrl, closePopup } from "../utils/windowUtils.js"
7
- import type { BaseProps, OnrampConfirmCallback } from "../types/commonProps.js"
8
- import type { Token } from "../../tokens.js"
9
- import { useSendForm } from "../hooks/useSendForm.js"
10
- import { QuoteDetails } from "./QuoteDetails.js"
11
- import { HighPriceImpactBlock } from "./HighPriceImpactBlock.js"
12
- import { TradeType } from "../../prepareSend.js"
13
- import { getChainInfo } from "../../chains.js"
14
- import { ScreenHeader } from "./ScreenHeader.js"
15
- import { TokenSelector } from "./TokenSelector.js"
16
- import { useViewManager } from "../hooks/useViewManager.js"
17
- import { useSwapState } from "../hooks/useSwapState.js"
18
- import { logger } from "../../logger.js"
19
- import { useSelectedRecipient } from "../hooks/useSelectedRecipient.js"
20
- import { useOriginSelectedToken } from "../hooks/useOriginSelectedToken.js"
21
- import { useDestinationSelectedToken } from "../hooks/useDestinationSelectedToken.js"
22
- import { useFiatSelectedCurrency } from "../hooks/useFiatSelectedCurrency.js"
23
- import { useBalanceVisible } from "../hooks/useBalanceVisible.js"
24
- import { useDefaultOriginToken } from "../hooks/useDefaultOriginToken.js"
25
- import { useDefaultDestinationToken } from "../hooks/useDefaultDestinationToken.js"
26
- import { ChainList } from "./ChainList.js"
27
- import { PercentageMaxButtons } from "./PercentageMaxButtons.js"
28
- import { TokenSelectorButton } from "./TokenSelectorButton.js"
29
- import { FundingMethodSelectorButton } from "./FundingMethodSelectorButton.js"
30
- import { RecipientSelectorButton } from "./RecipientSelectorButton.js"
31
- import { FiatSelectorButton } from "./FiatSelectorButton.js"
32
- import { FiatSelector } from "./FiatSelector.js"
33
- import { useOnRampCountryDefaults } from "../hooks/useOnRampCountryDefaults.js"
34
- import { useFiatOnRampCurrencies } from "../hooks/useFiatOnRampCurrencies.js"
35
- import { useOnRampQuote } from "../hooks/useOnRampQuote.js"
36
- import { useOnRampProviderWidget } from "../hooks/useOnRampProviderWidget.js"
37
- import { RefundWarning } from "./RefundWarning.js"
38
- import { AddressWalletIcon } from "./AddressWalletIcon.js"
39
- import { AddressOrEnsName } from "./AddressOrEnsName.js"
40
- import { DynamicSizeInputField } from "./DynamicSizeInputField.js"
41
- import { FeeOptions } from "./FeeOptions.js"
42
- import { isFeeOptionDisabled } from "./FeeOption.js"
43
- import type { ProcessedFeeOption } from "../hooks/useSelectedFeeOption.js"
44
- import { isPassthroughEligible } from "../../utils/passthrough.js"
45
- import {
46
- formatRawAmount,
47
- formatUsdAmountDisplay,
48
- formatUsdAmountLocaleDisplay,
49
- } from "../../utils/format.js"
50
- import { useTokenWithFreshBalance } from "../hooks/useTokenWithFreshBalance.js"
51
- import { base } from "viem/chains"
52
- import { MeldProvidersList } from "../../meld/components/MeldProvidersList.js"
53
- import type { OnrampQuote } from "../hooks/useOnRampQuote.js"
54
- import { getFullErrorMessage, getPrettifiedErrorMessage } from "../../error.js"
55
- import { ErrorDisplay } from "./ErrorDisplay.js"
56
- import { useExchangeRate } from "../../query/fiat.hooks.js"
57
- import { OnRampProviderSelector } from "./OnRampProviderSelector.js"
58
- import { trackOnrampWidgetSession } from "../../analytics.js"
59
- import { USDC_BASE } from "../../constants.js"
60
- import LoadingSpinner from "./LoadingSpinner.js"
61
- import { useWidgetProps } from "../hooks/useWidgetProps.js"
62
-
63
- import { addressEqual } from "../../utils/address.js"
64
- interface ClassicSwapProps extends BaseProps {
65
- onWaitingForOnrampConfirm?: OnrampConfirmCallback
66
- title?: string
67
- exactInputOnly?: boolean
68
- }
69
-
70
- export const ClassicSwap: React.FC<ClassicSwapProps> = ({
71
- selectedToken: initialSelectedToken,
72
- onSend,
73
- onBack,
74
- onConfirm,
75
- onComplete,
76
- account,
77
- toRecipient,
78
- toAmount,
79
- toChainId,
80
- toToken,
81
- toCalldata,
82
- walletClient,
83
- onTransactionStateChange,
84
- onError,
85
- onWaitingForWalletConfirm,
86
- onWaitingForOnrampConfirm,
87
- paymasterUrls,
88
- setWalletConfirmRetryHandler,
89
- swapProvider,
90
- bridgeProvider,
91
- swapProviderFallback,
92
- bridgeProviderFallback,
93
- fundMethod,
94
- onAmountUpdate,
95
- checkoutOnHandlers,
96
- recentTokens,
97
- onTrackToken,
98
- title = "Swap",
99
- isSequenceWallet = false,
100
- exactInputOnly = false,
101
- }) => {
102
- const { fundOptions } = useWidgetProps()
103
- const { mode, navigate } = useViewManager()
104
- const { isBalanceVisible } = useBalanceVisible()
105
- const {
106
- selectedToken: originToken,
107
- setSelectedToken: setOriginToken,
108
- hasManualSelection: hasManualOriginSelection,
109
- setHasManualSelection: setHasManualOriginSelection,
110
- } = useOriginSelectedToken()
111
- const {
112
- selectedToken: destinationToken,
113
- setSelectedToken: setDestinationToken,
114
- hasManualSelection: hasManualDestinationSelection,
115
- setHasManualSelection: setHasManualDestinationSelection,
116
- isControlledByProps: isDestinationControlledByProps,
117
- } = useDestinationSelectedToken()
118
- const { selectedRecipient, setSelectedRecipient } = useSelectedRecipient()
119
- const {
120
- selectedCurrency: selectedFiatCurrency,
121
- setSelectedCurrency: setSelectedFiatCurrency,
122
- hasManualSelection: hasManualFiatSelection,
123
- setHasManualSelection: setHasManualFiatSelection,
124
- fiatAmount: sellFiatAmount,
125
- setFiatAmount: setSellFiatAmount,
126
- } = useFiatSelectedCurrency()
127
- const [isFlipped, setIsFlipped] = useState(false)
128
- const [showFiatSelector, setShowFiatSelector] = useState(false)
129
- const [selectedCountryCode, setSelectedCountryCode] = useState<string | null>(
130
- null,
131
- )
132
- const [showProviderSelector, setShowProviderSelector] = useState(false)
133
- const [selectedOnrampProvider, setSelectedOnrampProvider] =
134
- useState<OnrampQuote | null>(null)
135
-
136
- // Check if onramp is active
137
- const isMeldOnRampActive = fundMethod === "onramp-meld"
138
-
139
- // Get country defaults when onramp is active
140
- const {
141
- countryCode: detectedCountryCode,
142
- defaultCurrencyCode,
143
- isLoading: isLoadingCountryDefaults,
144
- } = useOnRampCountryDefaults({
145
- enabled: isMeldOnRampActive,
146
- })
147
-
148
- // Use selected country if available, otherwise use detected country
149
- const effectiveCountryCode = selectedCountryCode || detectedCountryCode
150
-
151
- // Fetch fiat currencies when onramp is active
152
- const { fiatCurrencies, isLoading: isLoadingFiatCurrencies } =
153
- useFiatOnRampCurrencies({
154
- countryCode: effectiveCountryCode || "US",
155
- enabled: isMeldOnRampActive && !!effectiveCountryCode,
156
- })
157
-
158
- // Auto-select default currency when onramp is active and currencies are loaded
159
- // Only auto-select if user hasn't manually selected a currency
160
- useEffect(() => {
161
- if (
162
- isMeldOnRampActive &&
163
- !selectedFiatCurrency &&
164
- fiatCurrencies.length > 0 &&
165
- !isLoadingCountryDefaults &&
166
- !isLoadingFiatCurrencies &&
167
- !hasManualFiatSelection
168
- ) {
169
- // Use detected currency code, or fallback to USD if not detected
170
- const currencyCodeToSelect = defaultCurrencyCode || "USD"
171
-
172
- const defaultCurrency = fiatCurrencies.find(
173
- (currency) => currency.currencyCode === currencyCodeToSelect,
174
- )
175
-
176
- if (defaultCurrency) {
177
- logger.console.log(
178
- "[ClassicSwap] Auto-selecting default currency:",
179
- defaultCurrency,
180
- defaultCurrencyCode ? "(detected)" : "(fallback to USD)",
181
- )
182
- setSelectedFiatCurrency(defaultCurrency)
183
- }
184
- }
185
- }, [
186
- isMeldOnRampActive,
187
- selectedFiatCurrency,
188
- defaultCurrencyCode,
189
- fiatCurrencies,
190
- isLoadingCountryDefaults,
191
- isLoadingFiatCurrencies,
192
- hasManualFiatSelection,
193
- setSelectedFiatCurrency,
194
- ])
195
-
196
- const lastAppliedConfiguredFiatRef = useRef<string | null>(null)
197
- useEffect(() => {
198
- if (!isMeldOnRampActive) {
199
- lastAppliedConfiguredFiatRef.current = null
200
- }
201
- }, [isMeldOnRampActive])
202
-
203
- useEffect(() => {
204
- if (!isMeldOnRampActive || isLoadingFiatCurrencies) return
205
- if (fiatCurrencies.length === 0) return
206
- const configuredFiatCurrency = fundOptions?.fiatCurrency?.trim() || ""
207
- const configuredFiatAmount = fundOptions?.fiatAmount?.trim() || ""
208
- const configKey = `${configuredFiatCurrency.toUpperCase()}|${configuredFiatAmount}`
209
- if (lastAppliedConfiguredFiatRef.current === configKey) return
210
- lastAppliedConfiguredFiatRef.current = configKey
211
-
212
- if (configuredFiatCurrency) {
213
- const matchedCurrency = fiatCurrencies.find(
214
- (currency) =>
215
- currency.currencyCode.toUpperCase() ===
216
- configuredFiatCurrency.toUpperCase(),
217
- )
218
- if (matchedCurrency) {
219
- setSelectedFiatCurrency(matchedCurrency)
220
- setHasManualFiatSelection(true)
221
- }
222
- }
223
-
224
- if (configuredFiatAmount) {
225
- setSellFiatAmount(configuredFiatAmount)
226
- }
227
- }, [
228
- isMeldOnRampActive,
229
- isLoadingFiatCurrencies,
230
- fiatCurrencies,
231
- fundOptions?.fiatCurrency,
232
- fundOptions?.fiatAmount,
233
- setSelectedFiatCurrency,
234
- setHasManualFiatSelection,
235
- setSellFiatAmount,
236
- ])
237
-
238
- const normalizedConfiguredFiatCurrency =
239
- fundOptions?.fiatCurrency?.trim().toUpperCase() || null
240
- const isConfiguredFiatCurrencyApplied =
241
- !!normalizedConfiguredFiatCurrency &&
242
- !!selectedFiatCurrency &&
243
- selectedFiatCurrency.currencyCode.toUpperCase() ===
244
- normalizedConfiguredFiatCurrency
245
- const isFiatCurrencyLocked =
246
- isMeldOnRampActive && isConfiguredFiatCurrencyApplied
247
- const isFiatAmountLocked = isMeldOnRampActive && !!fundOptions?.fiatAmount
248
-
249
- // Use a ref to track user actions to prevent race conditions with async state updates
250
- const userActionRef = useRef({
251
- hasManualDestinationSelection: false,
252
- lastOriginSelectionTime: 0,
253
- lastDestinationSelectionTime: 0,
254
- })
255
-
256
- // Use separated default token selection hooks
257
- const { defaultOriginToken, isLoading: isLoadingOriginDefaults } =
258
- useDefaultOriginToken()
259
-
260
- const { defaultDestinationToken, isLoading: isLoadingDestinationDefaults } =
261
- useDefaultDestinationToken(originToken)
262
-
263
- const [originChainId, setOriginChainId] = useState<number | null | undefined>(
264
- initialSelectedToken?.chainId || originToken?.chainId,
265
- )
266
- const {
267
- tradeType: globalTradeType,
268
- setTradeType,
269
- sellAmount,
270
- setSellAmount,
271
- buyAmount,
272
- setBuyAmount,
273
- enterFormMode,
274
- } = useSwapState()
275
-
276
- // Reset swap state only when switching between different form modes
277
- // biome-ignore lint/correctness/useExhaustiveDependencies: Only run on mount to register form mode
278
- useEffect(() => {
279
- enterFormMode("swap")
280
- }, [])
281
-
282
- const tradeType = globalTradeType || TradeType.EXACT_INPUT
283
- const [isCreatingWidgetSession, setIsCreatingWidgetSession] = useState(false)
284
- const [widgetError, setWidgetError] = useState<string | null>(null)
285
-
286
- // Initialize and update selected recipient from toRecipient prop (but don't auto-set to account address)
287
- // biome-ignore lint/correctness/useExhaustiveDependencies: selectedRecipient is intentionally excluded to avoid infinite loops
288
- useEffect(() => {
289
- logger.console.log("[trails-sdk] ClassicSwap toRecipient prop effect:", {
290
- toRecipient,
291
- selectedRecipient,
292
- accountAddress: account?.address,
293
- })
294
-
295
- if (toRecipient) {
296
- // Always sync with toRecipient prop when it changes
297
- logger.console.log(
298
- "[trails-sdk] ClassicSwap Setting selectedRecipient to toRecipient:",
299
- toRecipient,
300
- )
301
- setSelectedRecipient(toRecipient)
302
- }
303
- // Don't auto-set to account.address - let user select via RecipientSelectorButton
304
- }, [toRecipient, setSelectedRecipient])
305
-
306
- const effectiveRecipient =
307
- selectedRecipient || toRecipient || account?.address
308
-
309
- const effectiveFundMethod = isMeldOnRampActive ? "onramp-meld" : fundMethod
310
-
311
- // Get onramp quote when onramp is active
312
- const {
313
- quotes: onrampQuotes,
314
- selectedQuote: autoSelectedOnrampQuote,
315
- isLoading: isLoadingOnrampQuote,
316
- error: onrampQuoteError,
317
- onrampTrackingData,
318
- } = useOnRampQuote({
319
- amount: sellFiatAmount,
320
- sourceCurrencyCode: selectedFiatCurrency?.currencyCode,
321
- destinationCurrencyCode: "USDC_BASE",
322
- countryCode: effectiveCountryCode || undefined,
323
- walletAddress: account?.address || "",
324
- enabled:
325
- isMeldOnRampActive &&
326
- !!sellFiatAmount &&
327
- !!selectedFiatCurrency &&
328
- !!effectiveCountryCode &&
329
- !!effectiveRecipient,
330
- })
331
-
332
- const {
333
- amount,
334
- amountRaw,
335
- amountUsdDisplay,
336
- amountUsdLocaleDisplay,
337
- balanceFormatted,
338
- balanceRaw,
339
- tokenDecimals,
340
- handleSubmit,
341
- isSubmitting,
342
- isLoadingQuote,
343
- selectedDestinationChain,
344
- selectedDestToken,
345
- setSelectedDestinationChain,
346
- setSelectedDestToken,
347
- buttonText,
348
- toAmountDisplay,
349
- destinationTokenAddress,
350
- isValidCustomToken,
351
- prepareSendQuote,
352
- quoteError,
353
- processedFeeOptions,
354
- selectedFeeOption,
355
- setSelectedFeeOption,
356
- sendFn,
357
- } = useSendForm({
358
- account,
359
- toAmount: tradeType === TradeType.EXACT_OUTPUT ? buyAmount : toAmount,
360
- fromAmount: tradeType === TradeType.EXACT_INPUT ? sellAmount : undefined,
361
- toRecipient: effectiveRecipient,
362
- toChainId,
363
- toToken,
364
- toCalldata,
365
- walletClient,
366
- onTransactionStateChange,
367
- onError,
368
- onWaitingForWalletConfirm,
369
- onWaitingForOnrampConfirm,
370
- paymasterUrls,
371
- onSend,
372
- onConfirm,
373
- onComplete,
374
- selectedToken: originToken ?? undefined,
375
- setWalletConfirmRetryHandler,
376
- tradeType: tradeType,
377
- swapProvider,
378
- bridgeProvider,
379
- swapProviderFallback,
380
- bridgeProviderFallback,
381
- fundMethod: effectiveFundMethod,
382
- mode,
383
- checkoutOnHandlers,
384
- onrampTrackingData: isMeldOnRampActive ? onrampTrackingData : null,
385
- // Skip fee balance fetching for onramp/direct-transfer modes where fee options aren't shown
386
- skipFeeBalanceFetch:
387
- effectiveFundMethod === "onramp-meld" ||
388
- effectiveFundMethod === "direct-transfer" ||
389
- effectiveFundMethod === "onramp-mesh",
390
- })
391
-
392
- const selectedOnrampProviderQuote =
393
- selectedOnrampProvider || autoSelectedOnrampQuote
394
-
395
- // Get exchange rate for onramp fee conversion to USD
396
- const {
397
- exchangeRate: fiatToUsdExchangeRate,
398
- isLoading: isLoadingFiatToUsdExchangeRate,
399
- } = useExchangeRate({
400
- fromCurrency: "USD",
401
- toCurrency: selectedOnrampProviderQuote?.sourceCurrencyCode || "USD",
402
- disabled:
403
- !selectedOnrampProviderQuote ||
404
- selectedOnrampProviderQuote?.sourceCurrencyCode === "USD",
405
- })
406
-
407
- // Hook to create onramp widget session
408
- const {
409
- createWidgetSession,
410
- isLoading: isLoadingWidgetSession,
411
- error: widgetSessionError,
412
- } = useOnRampProviderWidget()
413
-
414
- // If we are on ramping lock the origin token and origin chain to USDC BASE
415
- // Also ensure tradeType is EXACT_INPUT (disable exact output mode)
416
- useEffect(() => {
417
- if (isMeldOnRampActive) {
418
- // Find USDC on Base from supported tokens (correct Base USDC address)
419
- const usdcBaseToken = USDC_BASE
420
- logger.console.log(
421
- "[ClassicSwap] Setting origin token to USDC on Base:",
422
- usdcBaseToken,
423
- )
424
- setOriginToken(usdcBaseToken)
425
- setOriginChainId(base.id)
426
-
427
- // Ensure tradeType is EXACT_INPUT when onramp is active
428
- setTradeType(TradeType.EXACT_INPUT)
429
- }
430
- }, [isMeldOnRampActive, setOriginToken, setTradeType])
431
-
432
- // Get destination token with fresh balance
433
- const { token: freshDestinationToken } = useTokenWithFreshBalance(
434
- destinationToken,
435
- account?.address,
436
- )
437
-
438
- // Get origin token with fresh balance for fee option checks
439
- const {
440
- token: freshOriginToken,
441
- isLoadingBalance: isLoadingFreshOriginBalance,
442
- } = useTokenWithFreshBalance(originToken, account?.address)
443
-
444
- const destinationBalanceDisplay = useMemo(() => {
445
- if (!freshDestinationToken) return "0.00"
446
- try {
447
- return formatRawAmount(
448
- freshDestinationToken.balance || "0",
449
- freshDestinationToken.decimals ?? 18,
450
- )
451
- } catch (err) {
452
- logger.console.error("[trails-sdk] balance format failed", err)
453
- return "0.00"
454
- }
455
- }, [freshDestinationToken])
456
-
457
- const handleSellFiatAmountChange = useCallback(
458
- (value: string) => {
459
- setWidgetError(null)
460
- setSellFiatAmount(value)
461
- },
462
- [setSellFiatAmount],
463
- )
464
-
465
- // Handle sell amount input changes
466
- const handleSellAmountChange = useCallback(
467
- (value: string) => {
468
- // Strip leading zeros unless it's a decimal (e.g., "0.5" is valid, "05" becomes "5")
469
- let processedValue = value
470
- if (value.length > 1 && value.startsWith("0") && value[1] !== ".") {
471
- processedValue = value.replace(/^0+/, "") || "0"
472
- }
473
- setTradeType(TradeType.EXACT_INPUT)
474
- setSellAmount(processedValue)
475
- },
476
- [setTradeType, setSellAmount],
477
- )
478
-
479
- // Handle sell input focus
480
- const handleSellInputFocus = useCallback(() => {
481
- // Copy displayed value for editing
482
- if (
483
- tradeType === TradeType.EXACT_OUTPUT &&
484
- prepareSendQuote?.originAmountDisplay &&
485
- !sellAmount
486
- ) {
487
- setSellAmount(prepareSendQuote.originAmountDisplay)
488
- }
489
- }, [
490
- tradeType,
491
- prepareSendQuote?.originAmountDisplay,
492
- sellAmount,
493
- setSellAmount,
494
- ])
495
-
496
- // Handle buy amount input changes
497
- const handleBuyAmountChange = useCallback(
498
- (value: string) => {
499
- // Disable exact output mode when onramp is active or exactInputOnly is enabled
500
- if (isMeldOnRampActive || exactInputOnly) {
501
- return
502
- }
503
-
504
- // Strip leading zeros unless it's a decimal (e.g., "0.5" is valid, "05" becomes "5")
505
- let processedValue = value
506
- if (value.length > 1 && value.startsWith("0") && value[1] !== ".") {
507
- processedValue = value.replace(/^0+/, "") || "0"
508
- }
509
- setTradeType(TradeType.EXACT_OUTPUT)
510
- setBuyAmount(processedValue)
511
- },
512
- [isMeldOnRampActive, exactInputOnly, setTradeType, setBuyAmount],
513
- )
514
-
515
- // Handle buy input focus
516
- const handleBuyInputFocus = useCallback(() => {
517
- // Disable exact output mode when onramp is active or exactInputOnly is enabled
518
- if (isMeldOnRampActive || exactInputOnly) {
519
- return
520
- }
521
-
522
- // Copy displayed value for editing
523
- if (tradeType === TradeType.EXACT_INPUT && toAmountDisplay && !buyAmount) {
524
- setBuyAmount(toAmountDisplay)
525
- }
526
- }, [
527
- tradeType,
528
- toAmountDisplay,
529
- buyAmount,
530
- isMeldOnRampActive,
531
- exactInputOnly,
532
- setBuyAmount,
533
- ])
534
-
535
- // Check if we received a quote from on ramp for USDC BASE, if so set the origin token amount to the quote.destinationAmount
536
- // This will trigger useSendForm to get the trails quote
537
- // Subtract 0.25 USDC from the amount to cover fees
538
- useEffect(() => {
539
- if (
540
- isMeldOnRampActive &&
541
- selectedOnrampProviderQuote &&
542
- originToken &&
543
- originToken.contractAddress
544
- ) {
545
- // Subtract 0.25 USDC from the destination amount to cover fees
546
- const destinationAmount = Number(
547
- selectedOnrampProviderQuote.destinationAmount,
548
- )
549
- const adjustedAmount = Math.max(0, destinationAmount - 0.25)
550
-
551
- logger.console.log("[trails-sdk] Adjusting onramp amount for fees:", {
552
- originalAmount: destinationAmount,
553
- adjustedAmount,
554
- feeSubtracted: 0.25,
555
- })
556
-
557
- setSellAmount(adjustedAmount.toString())
558
- setTradeType(TradeType.EXACT_INPUT)
559
- }
560
- }, [
561
- isMeldOnRampActive,
562
- selectedOnrampProviderQuote,
563
- originToken,
564
- setSellAmount,
565
- setTradeType,
566
- ])
567
-
568
- // Update amounts when quote is received
569
- // Always update the calculated field based on the current trade type
570
- useEffect(() => {
571
- if (!prepareSendQuote) return
572
-
573
- if (
574
- tradeType === TradeType.EXACT_OUTPUT &&
575
- prepareSendQuote.originAmountDisplay
576
- ) {
577
- // In EXACT_OUTPUT mode, update sellAmount from the quote
578
- setSellAmount(prepareSendQuote.originAmountDisplay)
579
- } else if (
580
- tradeType === TradeType.EXACT_INPUT &&
581
- prepareSendQuote.destinationAmountDisplay
582
- ) {
583
- // In EXACT_INPUT mode, update buyAmount from the quote
584
- setBuyAmount(prepareSendQuote.destinationAmountDisplay)
585
- }
586
- }, [prepareSendQuote, tradeType, setSellAmount, setBuyAmount])
587
-
588
- // Call onAmountUpdate when amountRaw changes
589
- useEffect(() => {
590
- if (onAmountUpdate) {
591
- onAmountUpdate(amountRaw)
592
- }
593
- }, [amountRaw, onAmountUpdate])
594
-
595
- // Reset the flag so auto-selection can work as a fallback if has manual origin token is cleared
596
- useEffect(() => {
597
- if (hasManualOriginSelection && !originToken && !isLoadingOriginDefaults) {
598
- logger.console.log(
599
- "[trails-sdk] Resetting hasManualOriginSelection - token was cleared",
600
- )
601
- setHasManualOriginSelection(false)
602
- }
603
- }, [
604
- hasManualOriginSelection,
605
- originToken,
606
- isLoadingOriginDefaults,
607
- setHasManualOriginSelection,
608
- ])
609
-
610
- // Auto-select origin token using separated hook
611
- useEffect(() => {
612
- if (
613
- !originToken &&
614
- !isLoadingOriginDefaults &&
615
- defaultOriginToken &&
616
- !hasManualOriginSelection
617
- ) {
618
- logger.console.log(
619
- "[trails-sdk] Auto-selecting origin token:",
620
- defaultOriginToken,
621
- )
622
- setOriginToken(defaultOriginToken)
623
- setOriginChainId(defaultOriginToken.chainId)
624
- }
625
- }, [
626
- originToken,
627
- isLoadingOriginDefaults,
628
- defaultOriginToken,
629
- setOriginToken,
630
- hasManualOriginSelection,
631
- ])
632
-
633
- // Auto-select destination token using separated hook
634
- // Note: In swap mode, we still auto-select a destination even if toToken is provided,
635
- // since the user needs a starting point to modify
636
- // IMPORTANT: Only auto-select if user hasn't made manual selections to prevent override
637
- useEffect(() => {
638
- // hasManualOriginSelection is now persisted in context across component mounts
639
- const hasRecentOriginSelection =
640
- hasManualOriginSelection ||
641
- isWithinCooldown(userActionRef.current.lastOriginSelectionTime, SECOND_MS)
642
-
643
- const hasRecentDestSelection =
644
- userActionRef.current.hasManualDestinationSelection ||
645
- hasManualDestinationSelection ||
646
- isWithinCooldown(
647
- userActionRef.current.lastDestinationSelectionTime,
648
- SECOND_MS,
649
- )
650
-
651
- // If destination is controlled via props, do not auto-select/override it.
652
- const isDestinationControlled = !!toToken && !!toChainId
653
-
654
- if (
655
- !isDestinationControlled &&
656
- !destinationToken &&
657
- !isLoadingDestinationDefaults &&
658
- defaultDestinationToken &&
659
- !hasRecentDestSelection &&
660
- !hasRecentOriginSelection // Don't auto-select destination if user recently selected origin
661
- ) {
662
- logger.console.log(
663
- "[trails-sdk] Auto-selecting destination token:",
664
- defaultDestinationToken,
665
- )
666
- setDestinationToken(defaultDestinationToken)
667
- setSelectedDestToken(defaultDestinationToken)
668
-
669
- // Also set the destination chain
670
- const chainInfo = getChainInfo(defaultDestinationToken.chainId)
671
- if (chainInfo) {
672
- setSelectedDestinationChain(chainInfo)
673
- }
674
- }
675
- }, [
676
- destinationToken,
677
- isLoadingDestinationDefaults,
678
- defaultDestinationToken,
679
- hasManualDestinationSelection,
680
- hasManualOriginSelection,
681
- setDestinationToken,
682
- setSelectedDestToken,
683
- setSelectedDestinationChain,
684
- toToken,
685
- toChainId,
686
- ])
687
-
688
- // Auto-focus the input field when component mounts
689
- useEffect(() => {
690
- if (inputRef.current) {
691
- inputRef.current.focus()
692
- }
693
- }, [])
694
-
695
- const inputRef = useRef<HTMLInputElement>(null)
696
-
697
- const [showSourceTokenSelector, setShowSourceTokenSelector] = useState(false)
698
- const [showDestinationTokenSelector, setShowDestinationTokenSelector] =
699
- useState(false)
700
- const [showSourceChainList, setShowSourceChainList] = useState(false)
701
- const [showDestinationChainList, setShowDestinationChainList] =
702
- useState(false)
703
-
704
- // Sync destination token from hook with useSendForm
705
- // This ensures the destination token auto-selection flows into useSendForm
706
- useEffect(() => {
707
- // If destination is controlled via props, don't sync context destination into useSendForm.
708
- if (toToken && toChainId) return
709
- if (destinationToken) {
710
- logger.console.log(
711
- "[trails-sdk] Syncing destination token to useSendForm:",
712
- destinationToken,
713
- )
714
- setSelectedDestToken(destinationToken)
715
- }
716
- }, [destinationToken, setSelectedDestToken, toToken, toChainId])
717
-
718
- // Sync resolved token from useSendForm back to global provider
719
- // This handles the case where toToken is not in supported tokens and useSendForm resolves it
720
- useEffect(() => {
721
- // Skip if not controlled by props or no resolved token
722
- if (!isDestinationControlledByProps || !selectedDestToken || !toToken) {
723
- return
724
- }
725
-
726
- // Check if the resolved token matches what we're looking for
727
- const chainIdMatches = selectedDestToken.chainId === Number(toChainId)
728
- const tokenMatches =
729
- selectedDestToken.contractAddress?.toLowerCase() ===
730
- toToken.toLowerCase() ||
731
- selectedDestToken.symbol?.toLowerCase() === toToken.toLowerCase()
732
-
733
- // Only sync if the token matches the toToken prop
734
- if (chainIdMatches && tokenMatches) {
735
- const globalMatches =
736
- destinationToken &&
737
- destinationToken.chainId === selectedDestToken.chainId &&
738
- destinationToken.contractAddress?.toLowerCase() ===
739
- selectedDestToken.contractAddress?.toLowerCase()
740
-
741
- if (!globalMatches) {
742
- logger.console.log(
743
- "[trails-sdk] ClassicSwap: Syncing resolved token from useSendForm to global provider:",
744
- selectedDestToken.symbol,
745
- )
746
- setDestinationToken(selectedDestToken)
747
- }
748
- }
749
- }, [
750
- isDestinationControlledByProps,
751
- selectedDestToken,
752
- destinationToken,
753
- setDestinationToken,
754
- toToken,
755
- toChainId,
756
- ])
757
-
758
- // Handle flip functionality
759
- const handleFlip = useCallback(() => {
760
- if (!selectedDestinationChain || !originToken || !selectedDestToken) return
761
-
762
- // Don't flip if recipient is not the sender/from address
763
- if (
764
- effectiveRecipient &&
765
- account?.address &&
766
- !addressEqual(effectiveRecipient, account.address)
767
- ) {
768
- return
769
- }
770
-
771
- setIsFlipped(!isFlipped)
772
-
773
- // Store current values
774
- const tempOriginToken = originToken
775
- const tempOriginChainId = originChainId
776
- const tempBuyAmount = buyAmount || toAmountDisplay || ""
777
- const tempSellAmount = sellAmount || amount || ""
778
-
779
- // Swap origin and destination using hooks
780
- setOriginToken(selectedDestToken)
781
- setDestinationToken(tempOriginToken)
782
- setOriginChainId(selectedDestToken?.chainId)
783
- setSelectedDestToken(tempOriginToken)
784
-
785
- // Update destination chain
786
- const newChain = getChainInfo(tempOriginChainId ?? undefined)
787
- if (newChain) {
788
- setSelectedDestinationChain(newChain)
789
- }
790
-
791
- // Flipping is an intentional user action, so maintain manual selection state
792
- // Both tokens are still manually selected, just swapped
793
- if (hasManualOriginSelection || hasManualDestinationSelection) {
794
- setHasManualOriginSelection(true)
795
- setHasManualDestinationSelection(true)
796
- }
797
-
798
- if (exactInputOnly) {
799
- // When exactInputOnly is enabled, always maintain EXACT_INPUT mode
800
- // Move the sell amount to the new origin (what was destination)
801
- setSellAmount(tempSellAmount)
802
- setBuyAmount("") // Clear buy amount to get fresh quote
803
- setTradeType(TradeType.EXACT_INPUT)
804
- } else {
805
- // Normal flip behavior - switch trade types
806
- if (tradeType === TradeType.EXACT_INPUT) {
807
- // Move the user-entered sell amount into the buy field and treat it as exact output
808
- setBuyAmount(tempSellAmount)
809
- setSellAmount("")
810
- setTradeType(TradeType.EXACT_OUTPUT)
811
- } else {
812
- // If we were in EXACT_OUTPUT, use the current buy amount as the new sell amount
813
- setSellAmount(tempBuyAmount)
814
- setBuyAmount("")
815
- setTradeType(TradeType.EXACT_INPUT)
816
- }
817
- }
818
- }, [
819
- originToken,
820
- selectedDestinationChain,
821
- selectedDestToken,
822
- originChainId,
823
- setOriginToken,
824
- setDestinationToken,
825
- setSelectedDestToken,
826
- setSelectedDestinationChain,
827
- isFlipped,
828
- hasManualOriginSelection,
829
- hasManualDestinationSelection,
830
- setHasManualOriginSelection,
831
- setHasManualDestinationSelection,
832
- exactInputOnly,
833
- tradeType,
834
- toAmountDisplay,
835
- sellAmount,
836
- buyAmount,
837
- amount,
838
- setSellAmount,
839
- setBuyAmount,
840
- setTradeType,
841
- effectiveRecipient,
842
- account?.address,
843
- ])
844
-
845
- // Handle source token selection from full-screen selector
846
- const handleSourceTokenSelectorSelect = useCallback(
847
- (token: Token) => {
848
- // Only flip if it's the exact same token (same contract address AND chain ID)
849
- if (
850
- token.contractAddress === destinationToken?.contractAddress &&
851
- token.chainId === destinationToken?.chainId
852
- ) {
853
- handleFlip()
854
- }
855
-
856
- // Only reset input fields if the token symbol is different
857
- const isDifferentToken =
858
- !originToken || originToken.symbol !== token.symbol
859
- if (isDifferentToken) {
860
- setSellAmount("")
861
- setBuyAmount("")
862
- setTradeType(TradeType.EXACT_INPUT)
863
- }
864
-
865
- setOriginToken(token)
866
- setOriginChainId(token.chainId)
867
- setShowSourceTokenSelector(false)
868
-
869
- // Mark as manual selection to prevent auto-selection override
870
- setHasManualOriginSelection(true)
871
- userActionRef.current.lastOriginSelectionTime = Date.now()
872
-
873
- onTrackToken?.(token)
874
- logger.console.log("[trails-sdk] selected origin token", token)
875
- },
876
- [
877
- setOriginToken,
878
- setHasManualOriginSelection,
879
- onTrackToken,
880
- originToken,
881
- handleFlip,
882
- destinationToken,
883
- setSellAmount,
884
- setBuyAmount,
885
- setTradeType,
886
- ],
887
- )
888
-
889
- // Handle destination token selection from full-screen selector
890
- const handleDestinationTokenSelectorSelect = useCallback(
891
- (token: Token) => {
892
- // Only flip if it's the exact same token (same contract address AND chain ID)
893
- if (
894
- token.contractAddress === originToken?.contractAddress &&
895
- token.chainId === originToken?.chainId
896
- ) {
897
- handleFlip()
898
- }
899
-
900
- setDestinationToken(token)
901
- setSelectedDestToken(token)
902
-
903
- // Update destination chain
904
- const chainInfo = getChainInfo(token.chainId)
905
- if (chainInfo) {
906
- setSelectedDestinationChain(chainInfo)
907
- }
908
-
909
- setShowDestinationTokenSelector(false)
910
-
911
- // Mark as manual selection to prevent auto-selection override
912
- setHasManualDestinationSelection(true)
913
- userActionRef.current.hasManualDestinationSelection = true
914
- userActionRef.current.lastDestinationSelectionTime = Date.now()
915
-
916
- onTrackToken?.(token)
917
- logger.console.log("[trails-sdk] selected destination token", token)
918
- },
919
- [
920
- setDestinationToken,
921
- setSelectedDestToken,
922
- setSelectedDestinationChain,
923
- setHasManualDestinationSelection,
924
- onTrackToken,
925
- originToken,
926
- handleFlip,
927
- ],
928
- )
929
-
930
- // Handle recent token selection
931
- const handleRecentTokenSelect = useCallback(
932
- (token: Token) => {
933
- // Only flip if it's the exact same token (same contract address AND chain ID)
934
- if (
935
- token.contractAddress === originToken?.contractAddress &&
936
- token.chainId === originToken?.chainId
937
- ) {
938
- handleFlip()
939
- }
940
-
941
- if (showSourceTokenSelector) {
942
- handleSourceTokenSelectorSelect(token)
943
- } else if (showDestinationTokenSelector) {
944
- handleDestinationTokenSelectorSelect(token)
945
- }
946
- },
947
- [
948
- showSourceTokenSelector,
949
- showDestinationTokenSelector,
950
- handleSourceTokenSelectorSelect,
951
- handleDestinationTokenSelectorSelect,
952
- originToken?.contractAddress,
953
- originToken?.chainId,
954
- handleFlip,
955
- ],
956
- )
957
-
958
- // Show provider selector screen
959
- if (showProviderSelector) {
960
- return (
961
- <MeldProvidersList
962
- onBack={() => setShowProviderSelector(false)}
963
- onSelectProvider={(provider) => {
964
- setSelectedOnrampProvider(provider as OnrampQuote)
965
- setShowProviderSelector(false)
966
- }}
967
- selectedProvider={selectedOnrampProviderQuote}
968
- providers={onrampQuotes}
969
- isLoading={isLoadingOnrampQuote}
970
- />
971
- )
972
- }
973
-
974
- // Show fiat selector screen
975
- if (showFiatSelector) {
976
- return (
977
- <div className="space-y-2">
978
- <ScreenHeader
979
- onBack={() => setShowFiatSelector(false)}
980
- headerContent="Select Currency"
981
- headerContentAlign="left"
982
- />
983
- <FiatSelector
984
- onCurrencySelect={(currency) => {
985
- setSelectedFiatCurrency(currency)
986
- setShowFiatSelector(false)
987
- setHasManualFiatSelection(true)
988
- }}
989
- onAutoSelect={(currency) => {
990
- // Auto-select doesn't close the selector, just sets the currency
991
- setSelectedFiatCurrency(currency)
992
- }}
993
- onSelectCountry={(countryCode) => {
994
- setSelectedCountryCode(countryCode)
995
- }}
996
- onError={onError}
997
- selectedCurrency={selectedFiatCurrency}
998
- />
999
- </div>
1000
- )
1001
- }
1002
-
1003
- // Show source chain list screen
1004
- if (showSourceChainList) {
1005
- return (
1006
- <ChainList
1007
- onBack={() => {
1008
- setShowSourceChainList(false)
1009
- setShowSourceTokenSelector(true)
1010
- }}
1011
- />
1012
- )
1013
- }
1014
-
1015
- // Show source token selector screen
1016
- if (showSourceTokenSelector) {
1017
- return (
1018
- <div className="space-y-2">
1019
- <ScreenHeader
1020
- onBack={() => setShowSourceTokenSelector(false)}
1021
- headerContent="Select From Token"
1022
- headerContentAlign="left"
1023
- />
1024
- <TokenSelector
1025
- onTokenSelect={handleSourceTokenSelectorSelect}
1026
- onError={onError}
1027
- showContinueButton={false}
1028
- compactMode={false}
1029
- allSupportedTokens={false}
1030
- fundMethod={fundMethod}
1031
- chainListScreen={true}
1032
- onNavigateToChainList={() => {
1033
- setShowSourceTokenSelector(false)
1034
- setShowSourceChainList(true)
1035
- }}
1036
- recentTokens={recentTokens}
1037
- onRecentTokenSelect={handleRecentTokenSelect}
1038
- />
1039
- </div>
1040
- )
1041
- }
1042
-
1043
- // Show destination chain list screen
1044
- if (showDestinationChainList) {
1045
- return (
1046
- <ChainList
1047
- onBack={() => {
1048
- setShowDestinationChainList(false)
1049
- setShowDestinationTokenSelector(true)
1050
- }}
1051
- />
1052
- )
1053
- }
1054
-
1055
- // Show destination token selector screen
1056
- if (showDestinationTokenSelector) {
1057
- return (
1058
- <div className="space-y-2">
1059
- <ScreenHeader
1060
- onBack={() => setShowDestinationTokenSelector(false)}
1061
- headerContent="Select To Token"
1062
- headerContentAlign="left"
1063
- />
1064
- <TokenSelector
1065
- onTokenSelect={handleDestinationTokenSelectorSelect}
1066
- onError={onError}
1067
- showContinueButton={false}
1068
- compactMode={false}
1069
- allSupportedTokens={true}
1070
- fundMethod={fundMethod}
1071
- chainListScreen={true}
1072
- onNavigateToChainList={() => {
1073
- setShowDestinationTokenSelector(false)
1074
- setShowDestinationChainList(true)
1075
- }}
1076
- recentTokens={recentTokens}
1077
- onRecentTokenSelect={handleRecentTokenSelect}
1078
- />
1079
- </div>
1080
- )
1081
- }
1082
-
1083
- return (
1084
- <div className="space-y-2">
1085
- <ScreenHeader
1086
- onBack={
1087
- mode === "fund"
1088
- ? () => navigate("fund-form")
1089
- : mode === "earn"
1090
- ? () => navigate("earn")
1091
- : mode === "pay"
1092
- ? () => navigate("send-form")
1093
- : mode === "withdraw"
1094
- ? () => navigate("withdraw")
1095
- : onBack
1096
- }
1097
- headerContent={title}
1098
- headerContentAlign="left"
1099
- showAccountActions={true}
1100
- />
1101
-
1102
- <form
1103
- onSubmit={async (e) => {
1104
- e.preventDefault()
1105
-
1106
- logger.console.log(
1107
- "[trails-sdk] Creating widget session",
1108
- isMeldOnRampActive,
1109
- )
1110
- // Handle onramp flow separately
1111
- if (
1112
- isMeldOnRampActive &&
1113
- selectedOnrampProviderQuote &&
1114
- selectedFiatCurrency
1115
- ) {
1116
- const {
1117
- popup,
1118
- blocked,
1119
- error: popupError,
1120
- } = openPopup("meld-widget", 450, 700)
1121
-
1122
- if (blocked) {
1123
- setWidgetError(
1124
- popupError ||
1125
- "Popup blocked. Please allow popups for this site.",
1126
- )
1127
- onError(popupError || "Popup blocked")
1128
- return
1129
- }
1130
-
1131
- try {
1132
- setIsCreatingWidgetSession(true)
1133
- setWidgetError(null)
1134
-
1135
- logger.console.log(
1136
- "[trails-sdk] prepareSendQuote",
1137
- prepareSendQuote,
1138
- )
1139
-
1140
- // Commit the intent immediately when user clicks continue
1141
- // Call sendFn to trigger the commit without deposit
1142
- if (sendFn) {
1143
- logger.console.log(
1144
- "[trails-sdk] Committing intent for onramp-meld flow",
1145
- )
1146
-
1147
- try {
1148
- // Call sendFn without depositTransactionHash to just commit
1149
- // The crossChain handler will commit but not execute/wait for deposit
1150
- await sendFn({
1151
- selectedFeeOption: selectedFeeOption ?? null,
1152
- })
1153
-
1154
- logger.console.log(
1155
- "[trails-sdk] Intent committed for onramp-meld",
1156
- )
1157
- } catch (error) {
1158
- logger.console.error(
1159
- "[trails-sdk] Failed to commit intent:",
1160
- error,
1161
- )
1162
- // Continue anyway
1163
- }
1164
- }
1165
-
1166
- // Create widget session
1167
- const widgetSessionResponse = await createWidgetSession({
1168
- depositAddress: prepareSendQuote?.originDepositAddress || "",
1169
- userAddress: account?.address || "",
1170
- countryCode: effectiveCountryCode || "",
1171
- sourceCurrencyCode: selectedFiatCurrency.currencyCode,
1172
- sourceAmount: sellFiatAmount,
1173
- destinationCurrencyCode: "USDC_BASE",
1174
- serviceProvider: selectedOnrampProviderQuote.serviceProvider,
1175
- paymentMethodType:
1176
- selectedOnrampProviderQuote.paymentMethodType,
1177
- lockFields: [
1178
- "cryptoCurrency",
1179
- "destinationCurrencyCode",
1180
- "sourceCurrencyCode",
1181
- "walletAddress",
1182
- ],
1183
- })
1184
-
1185
- logger.console.log(
1186
- "[ClassicSwap] Widget session response:",
1187
- widgetSessionResponse,
1188
- )
1189
- const { widgetUrl, id, externalSessionId } = widgetSessionResponse
1190
-
1191
- // Track widget session
1192
- trackOnrampWidgetSession({
1193
- sessionId: onrampTrackingData?.sessionId || externalSessionId,
1194
- provider:
1195
- selectedOnrampProviderQuote?.serviceProvider || "Meld",
1196
- widgetUrl,
1197
- depositAddress: prepareSendQuote?.originDepositAddress || "",
1198
- userAddress: account?.address?.toLowerCase() || "",
1199
- countryCode: effectiveCountryCode || "",
1200
- sourceCurrencyCode: selectedFiatCurrency?.currencyCode || "",
1201
- sourceAmount: sellFiatAmount,
1202
- destinationCurrencyCode: "USDC_BASE",
1203
- paymentMethodType:
1204
- selectedOnrampProviderQuote?.paymentMethodType || "",
1205
- })
1206
-
1207
- if (!setPopupUrl(popup, widgetUrl)) {
1208
- throw new Error("Payment window was closed. Please try again.")
1209
- }
1210
-
1211
- logger.console.log(
1212
- "[ClassicSwap] Opened onramp widget in popup",
1213
- { widgetUrl, meldTransactionId: id },
1214
- )
1215
-
1216
- if (onWaitingForOnrampConfirm && prepareSendQuote) {
1217
- // Pass both quote and widget creation parameters
1218
- logger.console.log(
1219
- "[ClassicSwap] Calling onWaitingForOnrampConfirm with externalSessionId:",
1220
- externalSessionId,
1221
- )
1222
- onWaitingForOnrampConfirm(
1223
- prepareSendQuote,
1224
- selectedOnrampProviderQuote,
1225
- {
1226
- depositAddress:
1227
- prepareSendQuote?.originDepositAddress || "",
1228
- userAddress: account?.address?.toLowerCase() || "",
1229
- countryCode: effectiveCountryCode || "",
1230
- sourceCurrencyCode: selectedFiatCurrency.currencyCode,
1231
- sourceAmount: sellFiatAmount,
1232
- destinationCurrencyCode: "USDC_BASE",
1233
- serviceProvider:
1234
- selectedOnrampProviderQuote.serviceProvider,
1235
- paymentMethodType:
1236
- selectedOnrampProviderQuote.paymentMethodType,
1237
- },
1238
- externalSessionId,
1239
- popup,
1240
- )
1241
- }
1242
-
1243
- await handleSubmit(e)
1244
- } catch (err) {
1245
- closePopup(popup)
1246
- logger.console.error(
1247
- "[ClassicSwap] Error creating widget session",
1248
- err,
1249
- )
1250
- const errorMessage =
1251
- err instanceof Error
1252
- ? err.message
1253
- : "Failed to create widget session"
1254
- setWidgetError(errorMessage)
1255
- onError(errorMessage)
1256
- } finally {
1257
- setIsCreatingWidgetSession(false)
1258
- }
1259
- return
1260
- }
1261
-
1262
- logger.console.log(
1263
- "[trails-sdk] Calling handleSubmit from ClassicSwap",
1264
- )
1265
- handleSubmit(e)
1266
- }}
1267
- className="space-y-1"
1268
- >
1269
- {/* Input Section - Amount + Token Selection */}
1270
- <div className="pt-4 pb-4 trails-bg-secondary trails-bg-secondary-hover trails-border-radius-container p-3 group transition-all duration-200 border border-transparent focus-within:bg-white! dark:focus-within:bg-gray-800! trails-focus-border-secondary min-h-[120px] flex flex-col">
1271
- {/* Sell Label */}
1272
- <div className="mb-4 flex justify-between items-center">
1273
- <div className="text-sm font-medium trails-text-secondary text-left m-0">
1274
- {mode === "fund" ? "Payment method" : "Sell"}
1275
- </div>
1276
- <FundingMethodSelectorButton />
1277
- </div>
1278
-
1279
- <div className="flex items-center space-x-2 flex-1">
1280
- {/* Amount Input */}
1281
- <div className="flex-1">
1282
- <div className="flex items-center space-x-2">
1283
- <DynamicSizeInputField
1284
- ref={inputRef}
1285
- value={isMeldOnRampActive ? sellFiatAmount : sellAmount}
1286
- disabled={isFiatAmountLocked}
1287
- onChange={(e) => {
1288
- if (isMeldOnRampActive) {
1289
- // Always update fiat amount in onramp mode - the UI shows fiat
1290
- handleSellFiatAmountChange(e.target.value)
1291
- } else {
1292
- handleSellAmountChange(e.target.value)
1293
- }
1294
- }}
1295
- onFocus={handleSellInputFocus}
1296
- isLoading={
1297
- isLoadingQuote && tradeType === TradeType.EXACT_OUTPUT
1298
- }
1299
- variant="default"
1300
- />
1301
- {isLoadingQuote && tradeType === TradeType.EXACT_OUTPUT && (
1302
- <LoadingSpinner />
1303
- )}
1304
- </div>
1305
- </div>
1306
-
1307
- {/* Token/Fiat Selection Button */}
1308
- <div className="relative">
1309
- {isMeldOnRampActive ? (
1310
- <FiatSelectorButton
1311
- currency={selectedFiatCurrency}
1312
- onSelect={() => setShowFiatSelector(true)}
1313
- unselectable={isFiatCurrencyLocked}
1314
- />
1315
- ) : (
1316
- <TokenSelectorButton
1317
- token={originToken}
1318
- chainId={originChainId}
1319
- onSelect={() => setShowSourceTokenSelector(true)}
1320
- />
1321
- )}
1322
- </div>
1323
- </div>
1324
-
1325
- {/* Bottom Info Row for sell */}
1326
- <div className="mt-4 flex justify-between items-center">
1327
- {isMeldOnRampActive &&
1328
- selectedOnrampProviderQuote &&
1329
- fiatToUsdExchangeRate &&
1330
- selectedOnrampProviderQuote &&
1331
- !isLoadingFiatToUsdExchangeRate ? (
1332
- (() => {
1333
- const usdAmount =
1334
- selectedOnrampProviderQuote.sourceCurrencyCode === "USD"
1335
- ? selectedOnrampProviderQuote.sourceAmount
1336
- : selectedOnrampProviderQuote.sourceAmount /
1337
- fiatToUsdExchangeRate
1338
-
1339
- const displayValue = formatUsdAmountDisplay(usdAmount || 0)
1340
- const localeValue = formatUsdAmountLocaleDisplay(usdAmount || 0)
1341
-
1342
- return (
1343
- <div
1344
- className="text-xs text-gray-500 dark:text-gray-400"
1345
- title={displayValue}
1346
- >
1347
- <span className="notranslate" translate="no">
1348
- ≈ {localeValue}
1349
- </span>
1350
- </div>
1351
- )
1352
- })()
1353
- ) : (
1354
- <div className="text-xs text-gray-500 dark:text-gray-400">
1355
- <span className="notranslate" translate="no">
1356
- ≈{" "}
1357
- {tradeType === TradeType.EXACT_INPUT
1358
- ? prepareSendQuote?.originAmountUsdLocaleDisplay ||
1359
- amountUsdLocaleDisplay ||
1360
- amountUsdDisplay ||
1361
- formatUsdAmountLocaleDisplay(0)
1362
- : isLoadingQuote
1363
- ? ""
1364
- : prepareSendQuote?.originAmountUsdLocaleDisplay ||
1365
- prepareSendQuote?.originAmountUsdDisplay ||
1366
- ""}
1367
- </span>
1368
- </div>
1369
- )}
1370
-
1371
- {/* Origin Token Balance and Percentage Buttons */}
1372
- {originToken &&
1373
- !isMeldOnRampActive &&
1374
- fundMethod !== "direct-transfer" &&
1375
- fundMethod !== "onramp-mesh" && (
1376
- <div className="flex items-center space-x-2">
1377
- <div className="flex items-center space-x-1">
1378
- <span
1379
- className="text-xs text-gray-500 dark:text-gray-400 notranslate"
1380
- translate="no"
1381
- >
1382
- Balance:
1383
- </span>
1384
- <button
1385
- type="button"
1386
- className="text-xs text-gray-500 dark:text-gray-400 cursor-pointer hover:text-gray-700 dark:hover:text-gray-200 transition-colors bg-transparent border-none p-0"
1387
- onClick={() => {
1388
- if (balanceFormatted) {
1389
- const balance = parseFloat(balanceFormatted)
1390
- if (isValidNumber(balance)) {
1391
- setTradeType(TradeType.EXACT_INPUT)
1392
- setSellAmount(balance.toFixed(6))
1393
- setBuyAmount("")
1394
- }
1395
- }
1396
- }}
1397
- onKeyDown={(e) => {
1398
- if (e.key === "Enter" || e.key === " ") {
1399
- e.preventDefault()
1400
- if (balanceFormatted) {
1401
- const balance = parseFloat(balanceFormatted)
1402
- if (isValidNumber(balance)) {
1403
- setTradeType(TradeType.EXACT_INPUT)
1404
- setSellAmount(balance.toFixed(6))
1405
- setBuyAmount("")
1406
- }
1407
- }
1408
- }
1409
- }}
1410
- title="Click to use full balance"
1411
- disabled={!balanceFormatted}
1412
- >
1413
- <span className="notranslate" translate="no">
1414
- {isBalanceVisible
1415
- ? freshOriginToken?.balanceLocaleDisplay ||
1416
- originToken?.balanceLocaleDisplay ||
1417
- freshOriginToken?.balanceDisplay ||
1418
- originToken?.balanceDisplay ||
1419
- balanceFormatted ||
1420
- "0.00"
1421
- : "••••••"}
1422
- </span>
1423
- </button>
1424
- </div>
1425
-
1426
- {/* Percentage Buttons */}
1427
- {balanceFormatted && (
1428
- <PercentageMaxButtons
1429
- userBalance={balanceFormatted}
1430
- userBalanceRaw={balanceRaw}
1431
- decimals={tokenDecimals}
1432
- isNativeToken={originToken.isNativeToken ?? false}
1433
- gasCostFormatted={prepareSendQuote?.gasCostFormatted}
1434
- chainId={originChainId || undefined}
1435
- onAmountSelect={(amount) => {
1436
- setTradeType(TradeType.EXACT_INPUT)
1437
- setSellAmount(amount)
1438
- setBuyAmount("")
1439
- }}
1440
- className="opacity-100"
1441
- />
1442
- )}
1443
- </div>
1444
- )}
1445
- </div>
1446
- </div>
1447
-
1448
- {/* Flip Button - Absolutely Positioned */}
1449
- <div className="relative">
1450
- <button
1451
- type="button"
1452
- onClick={handleFlip}
1453
- disabled={
1454
- !!(
1455
- effectiveRecipient &&
1456
- account?.address &&
1457
- !addressEqual(effectiveRecipient, account.address)
1458
- )
1459
- }
1460
- className="absolute left-1/2 top-1/2 transform -translate-x-1/2 -translate-y-1/2 p-1.5 trails-border-radius-button trails-bg-tertiary hover:trails-hover-bg transition-colors cursor-pointer border-2 border-white dark:border-gray-800 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:trails-bg-tertiary"
1461
- >
1462
- <ArrowDown
1463
- className="w-5 h-5 text-gray-900 dark:text-white"
1464
- strokeWidth={2.5}
1465
- />
1466
- </button>
1467
- </div>
1468
-
1469
- {/* Output Section - Amount + Token Selection */}
1470
- <div className="pt-4 pb-4 trails-bg-secondary trails-bg-secondary-hover trails-border-radius-container p-3 transition-all duration-200 border border-transparent focus-within:bg-white! dark:focus-within:bg-gray-800! trails-focus-border-secondary min-h-[120px] flex flex-col mb-4">
1471
- {/* Buy Label */}
1472
- <div className="mb-4 flex justify-between items-center mb-2">
1473
- <div className="text-sm font-medium trails-text-secondary text-left m-0">
1474
- {mode === "fund" ? "Recipient" : "Buy"}
1475
- </div>
1476
- {toRecipient ? (
1477
- /* Display only - recipient is fixed when toRecipient prop is provided */
1478
- <div className="flex items-center space-x-2 text-black dark:text-white">
1479
- <AddressWalletIcon
1480
- walletAddress={toRecipient as `0x${string}`}
1481
- />
1482
- <AddressOrEnsName
1483
- address={toRecipient}
1484
- startChars={4}
1485
- endChars={4}
1486
- className="text-sm font-medium"
1487
- />
1488
- </div>
1489
- ) : (
1490
- /* Interactive button - user can select recipient */
1491
- <RecipientSelectorButton selectedRecipient={selectedRecipient} />
1492
- )}
1493
- </div>
1494
-
1495
- <div className="flex items-center space-x-2 flex-1">
1496
- {/* Output Amount */}
1497
- <div className="flex-1">
1498
- <div className="flex items-center space-x-2">
1499
- <DynamicSizeInputField
1500
- value={
1501
- tradeType === TradeType.EXACT_OUTPUT
1502
- ? buyAmount
1503
- : buyAmount || toAmountDisplay || ""
1504
- }
1505
- onChange={
1506
- exactInputOnly
1507
- ? undefined
1508
- : (e) => handleBuyAmountChange(e.target.value)
1509
- }
1510
- onFocus={exactInputOnly ? undefined : handleBuyInputFocus}
1511
- isLoading={
1512
- isLoadingQuote && tradeType === TradeType.EXACT_INPUT
1513
- }
1514
- readOnly={
1515
- isMeldOnRampActive ||
1516
- exactInputOnly ||
1517
- (tradeType === TradeType.EXACT_INPUT && isLoadingQuote) ||
1518
- !!toAmount
1519
- }
1520
- disabled={exactInputOnly}
1521
- showPlaceholderStyle={!amount}
1522
- variant="default"
1523
- />
1524
- {isLoadingQuote && tradeType === TradeType.EXACT_INPUT && (
1525
- <LoadingSpinner />
1526
- )}
1527
- </div>
1528
- </div>
1529
-
1530
- {/* Destination Token Selection */}
1531
- <div className="relative">
1532
- <TokenSelectorButton
1533
- token={selectedDestToken}
1534
- chainId={selectedDestToken?.chainId}
1535
- onSelect={() => setShowDestinationTokenSelector(true)}
1536
- unselectable={!!toToken}
1537
- />
1538
- </div>
1539
- </div>
1540
-
1541
- {/* Bottom Info Row */}
1542
- <div className="mt-4 flex items-center justify-between">
1543
- {/* Destination Amount USD from Quote */}
1544
- <div className="text-xs text-gray-500 dark:text-gray-400">
1545
- {(prepareSendQuote?.destinationAmountUsdDisplay ||
1546
- (isLoadingQuote && tradeType === TradeType.EXACT_INPUT)) && (
1547
- <span className="notranslate" translate="no">
1548
- ≈{" "}
1549
- {isLoadingQuote && tradeType === TradeType.EXACT_INPUT
1550
- ? formatUsdAmountLocaleDisplay(0)
1551
- : prepareSendQuote?.destinationAmountUsdLocaleDisplay ||
1552
- prepareSendQuote?.destinationAmountUsdDisplay}
1553
- </span>
1554
- )}
1555
- </div>
1556
-
1557
- {/* Dest Token Balance - always on right */}
1558
- {destinationToken && (
1559
- <div className="text-xs text-gray-500 dark:text-gray-400">
1560
- <span className="notranslate" translate="no">
1561
- Balance:{" "}
1562
- {isBalanceVisible
1563
- ? freshDestinationToken?.balanceLocaleDisplay ||
1564
- destinationToken?.balanceLocaleDisplay ||
1565
- freshDestinationToken?.balanceDisplay ||
1566
- destinationToken?.balanceDisplay ||
1567
- destinationBalanceDisplay ||
1568
- "-"
1569
- : "••••••"}
1570
- </span>
1571
- </div>
1572
- )}
1573
- </div>
1574
- </div>
1575
- {/* Exchange/Contract Warning */}
1576
- <RefundWarning
1577
- fundMethod={fundMethod}
1578
- isSenderContractOnOrigin={false}
1579
- isSenderContractOnDestination={false}
1580
- isSequenceWallet={isSequenceWallet}
1581
- />
1582
-
1583
- {/* Quote Details - only show for non-onramp quotes */}
1584
- {prepareSendQuote && (
1585
- <div>
1586
- <QuoteDetails
1587
- quote={prepareSendQuote}
1588
- fiatToUsdExchangeRate={fiatToUsdExchangeRate}
1589
- onRampQuote={selectedOnrampProviderQuote}
1590
- showContent={true}
1591
- swapMode={true}
1592
- isRefetching={isLoadingQuote}
1593
- isPassthrough={isPassthroughEligible(
1594
- prepareSendQuote.passthroughEligible,
1595
- selectedFeeOption,
1596
- processedFeeOptions,
1597
- )}
1598
- />
1599
- </div>
1600
- )}
1601
-
1602
- <HighPriceImpactBlock quoteError={quoteError} />
1603
-
1604
- {/* Onramp Provider Selector */}
1605
- {isMeldOnRampActive &&
1606
- !isLoadingOnrampQuote &&
1607
- !isLoadingQuote &&
1608
- prepareSendQuote &&
1609
- onrampQuotes &&
1610
- onrampQuotes.length > 0 && (
1611
- <OnRampProviderSelector
1612
- providers={onrampQuotes}
1613
- selectedProvider={selectedOnrampProviderQuote}
1614
- trailsQuote={prepareSendQuote}
1615
- setSelectedProvider={(provider) => {
1616
- setSelectedOnrampProvider(provider as OnrampQuote)
1617
- }}
1618
- isRefetching={isLoadingOnrampQuote}
1619
- />
1620
- )}
1621
-
1622
- {/* Onramp Quote Error */}
1623
- {isMeldOnRampActive && onrampQuoteError && (
1624
- <div className="mt-4">
1625
- <ErrorDisplay
1626
- errorPrettified={getPrettifiedErrorMessage(
1627
- onrampQuoteError,
1628
- "Error loading quote",
1629
- )}
1630
- error={getFullErrorMessage(onrampQuoteError)}
1631
- severity="error"
1632
- />
1633
- </div>
1634
- )}
1635
-
1636
- {/* Fee Options */}
1637
- {!isMeldOnRampActive &&
1638
- fundMethod !== "direct-transfer" &&
1639
- fundMethod !== "onramp-mesh" && (
1640
- <FeeOptions
1641
- processedFeeOptions={processedFeeOptions || []}
1642
- selectedFeeOption={selectedFeeOption}
1643
- setSelectedFeeOption={(feeOption) =>
1644
- setSelectedFeeOption(feeOption)
1645
- }
1646
- chainId={originToken?.chainId}
1647
- isRefetching={isLoadingQuote}
1648
- originTokenInfo={{
1649
- originToken: freshOriginToken ?? originToken!,
1650
- originTokenBalance:
1651
- freshOriginToken?.balance ?? originToken?.balance ?? "0",
1652
- originTokenAmount: sellAmount,
1653
- isLoadingBalance: isLoadingFreshOriginBalance,
1654
- }}
1655
- />
1656
- )}
1657
-
1658
- <button
1659
- type="submit"
1660
- disabled={
1661
- isMeldOnRampActive
1662
- ? !sellAmount ||
1663
- isSubmitting ||
1664
- isCreatingWidgetSession ||
1665
- !selectedFiatCurrency ||
1666
- !selectedDestToken ||
1667
- !effectiveCountryCode ||
1668
- !effectiveRecipient ||
1669
- isLoadingOnrampQuote ||
1670
- isLoadingWidgetSession ||
1671
- !selectedOnrampProviderQuote ||
1672
- !!onrampQuoteError ||
1673
- !!widgetSessionError ||
1674
- isLoadingQuote ||
1675
- !prepareSendQuote
1676
- : !amount ||
1677
- isSubmitting ||
1678
- !destinationTokenAddress ||
1679
- !isValidCustomToken ||
1680
- isLoadingQuote ||
1681
- !prepareSendQuote ||
1682
- (!isMeldOnRampActive &&
1683
- fundMethod !== "direct-transfer" &&
1684
- prepareSendQuote?.noSufficientBalance) ||
1685
- (fundMethod !== "direct-transfer" &&
1686
- (selectedFeeOption
1687
- ? isFeeOptionDisabled(
1688
- selectedFeeOption as ProcessedFeeOption,
1689
- {
1690
- originToken: freshOriginToken ?? originToken!,
1691
- originTokenBalance:
1692
- freshOriginToken?.balance ??
1693
- originToken?.balance ??
1694
- "0",
1695
- originTokenAmount: sellAmount,
1696
- },
1697
- )
1698
- : false))
1699
- }
1700
- className="w-full font-semibold py-4 px-4 trails-border-radius-button transition-colors bg-blue-500 hover:bg-blue-600 disabled:bg-gray-300 text-white disabled:text-gray-500 disabled:cursor-not-allowed cursor-pointer relative"
1701
- >
1702
- {isSubmitting || isCreatingWidgetSession || isLoadingWidgetSession ? (
1703
- <div className="flex items-center justify-center">
1704
- <Loader2 className="w-5 h-5 animate-spin mr-2 trails-text-muted" />
1705
- <span>
1706
- {isCreatingWidgetSession || isLoadingWidgetSession
1707
- ? "Creating session..."
1708
- : buttonText}
1709
- </span>
1710
- </div>
1711
- ) : isMeldOnRampActive &&
1712
- !prepareSendQuote &&
1713
- !selectedOnrampProviderQuote &&
1714
- (onrampQuoteError || widgetSessionError || widgetError) ? (
1715
- "Error Loading Quote"
1716
- ) : fundMethod !== "direct-transfer" &&
1717
- prepareSendQuote?.noSufficientBalance ? (
1718
- "Insufficient Balance"
1719
- ) : isMeldOnRampActive &&
1720
- (isLoadingOnrampQuote || isLoadingQuote) &&
1721
- !prepareSendQuote &&
1722
- !autoSelectedOnrampQuote &&
1723
- !onrampQuotes ? (
1724
- <div className="flex items-center justify-center">
1725
- <LoadingSpinner className="mr-2" />
1726
- <span>Getting quote...</span>
1727
- </div>
1728
- ) : isMeldOnRampActive && prepareSendQuote ? (
1729
- "Continue"
1730
- ) : buttonText === "Getting quote..." ? (
1731
- <div className="flex items-center justify-center">
1732
- <LoadingSpinner className="mr-2" />
1733
- <span>{buttonText}</span>
1734
- </div>
1735
- ) : (
1736
- buttonText
1737
- )}
1738
- </button>
1739
- </form>
1740
- </div>
1741
- )
1742
- }
1743
-
1744
- export default ClassicSwap