0xtrails 0.12.2 → 0.13.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 (243) hide show
  1. package/dist/abis/trailsHydrate.d.ts.map +1 -1
  2. package/dist/analytics.d.ts +41 -0
  3. package/dist/analytics.d.ts.map +1 -1
  4. package/dist/{ccip-62W6LwH2.js → ccip-Cg9-lJ6K.js} +16 -16
  5. package/dist/chainSwitch.d.ts.map +1 -1
  6. package/dist/chains.d.ts +9 -3
  7. package/dist/chains.d.ts.map +1 -1
  8. package/dist/error.d.ts +1 -0
  9. package/dist/error.d.ts.map +1 -1
  10. package/dist/{index-C0QTNYIA.js → index-DEojZg7b.js} +50431 -50424
  11. package/dist/index.d.ts +1 -3
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +377 -421
  14. package/dist/intentReceiptPoller.d.ts.map +1 -1
  15. package/dist/intents.d.ts +1 -3
  16. package/dist/intents.d.ts.map +1 -1
  17. package/dist/mutations.d.ts +1 -4
  18. package/dist/mutations.d.ts.map +1 -1
  19. package/dist/prepareSend.d.ts.map +1 -1
  20. package/dist/query/balance.hooks.d.ts.map +1 -1
  21. package/dist/query/chains.hooks.d.ts.map +1 -1
  22. package/dist/query/chains.queries.d.ts +4 -1
  23. package/dist/query/chains.queries.d.ts.map +1 -1
  24. package/dist/queryParams.d.ts.map +1 -1
  25. package/dist/recover.d.ts.map +1 -1
  26. package/dist/tokens.d.ts.map +1 -1
  27. package/dist/transactionIntent/deposits/depositOrchestrator.d.ts.map +1 -1
  28. package/dist/transactionIntent/deposits/gaslessDeposit.d.ts.map +1 -1
  29. package/dist/transactionIntent/deposits/standardDeposit.d.ts +1 -7
  30. package/dist/transactionIntent/deposits/standardDeposit.d.ts.map +1 -1
  31. package/dist/transactionIntent/handlers/intentHandler.d.ts.map +1 -1
  32. package/dist/transactionIntent/helpers/transactionStateHelpers.d.ts +10 -1
  33. package/dist/transactionIntent/helpers/transactionStateHelpers.d.ts.map +1 -1
  34. package/dist/transactionIntent/types.d.ts +3 -6
  35. package/dist/transactionIntent/types.d.ts.map +1 -1
  36. package/dist/transactionIntent/utils/resilientDepositTracker.d.ts +3 -3
  37. package/dist/transactionIntent/utils/resilientDepositTracker.d.ts.map +1 -1
  38. package/dist/transactions.d.ts +2 -0
  39. package/dist/transactions.d.ts.map +1 -1
  40. package/dist/umd/trails.min.js +200 -200
  41. package/dist/walletUtils.d.ts +4 -0
  42. package/dist/walletUtils.d.ts.map +1 -1
  43. package/dist/wallets.d.ts +2 -1
  44. package/dist/wallets.d.ts.map +1 -1
  45. package/dist/widget/components/AccountActionsDropdown.d.ts.map +1 -1
  46. package/dist/widget/components/AccountIntentTransactionHistoryButton.d.ts.map +1 -1
  47. package/dist/widget/components/AccountSettings.d.ts.map +1 -1
  48. package/dist/widget/components/ClassicSwap.d.ts.map +1 -1
  49. package/dist/widget/components/ConnectWallet.d.ts.map +1 -1
  50. package/dist/widget/components/ConnectedWallets.d.ts +5 -1
  51. package/dist/widget/components/ConnectedWallets.d.ts.map +1 -1
  52. package/dist/widget/components/DepositTracker.d.ts +1 -1
  53. package/dist/widget/components/DepositTracker.d.ts.map +1 -1
  54. package/dist/widget/components/DirectTransfer.d.ts +0 -8
  55. package/dist/widget/components/DirectTransfer.d.ts.map +1 -1
  56. package/dist/widget/components/Fund.d.ts +1 -1
  57. package/dist/widget/components/Fund.d.ts.map +1 -1
  58. package/dist/widget/components/FundMethods.d.ts.map +1 -1
  59. package/dist/widget/components/FundWalletSelection.d.ts +0 -8
  60. package/dist/widget/components/FundWalletSelection.d.ts.map +1 -1
  61. package/dist/widget/components/FundingMethodSelectorButton.d.ts +1 -1
  62. package/dist/widget/components/FundingMethodSelectorButton.d.ts.map +1 -1
  63. package/dist/widget/components/MeldStepsFlow.d.ts.map +1 -1
  64. package/dist/widget/components/OnrampErrorScreen.d.ts.map +1 -1
  65. package/dist/widget/components/OnrampPaymentMethods.d.ts.map +1 -1
  66. package/dist/widget/components/OnrampProviderConfirmation.d.ts +0 -6
  67. package/dist/widget/components/OnrampProviderConfirmation.d.ts.map +1 -1
  68. package/dist/widget/components/Pay.d.ts.map +1 -1
  69. package/dist/widget/components/QrCode.d.ts.map +1 -1
  70. package/dist/widget/components/QuoteDetails.d.ts.map +1 -1
  71. package/dist/widget/components/Receipt.d.ts.map +1 -1
  72. package/dist/widget/components/ReceiptRecoverableFunds.d.ts +25 -0
  73. package/dist/widget/components/ReceiptRecoverableFunds.d.ts.map +1 -0
  74. package/dist/widget/components/RecipientSelectorButton.d.ts +3 -1
  75. package/dist/widget/components/RecipientSelectorButton.d.ts.map +1 -1
  76. package/dist/widget/components/Recipients.d.ts.map +1 -1
  77. package/dist/widget/components/Swap.d.ts +2 -16
  78. package/dist/widget/components/Swap.d.ts.map +1 -1
  79. package/dist/widget/components/TokenSelector.d.ts.map +1 -1
  80. package/dist/widget/components/TransactionDetails.d.ts.map +1 -1
  81. package/dist/widget/components/TransactionHistoryItem.d.ts.map +1 -1
  82. package/dist/widget/components/TransferPendingVertical.d.ts.map +1 -1
  83. package/dist/widget/components/TruncatedTransactionHash.d.ts.map +1 -1
  84. package/dist/widget/components/WalletConfirmation.d.ts.map +1 -1
  85. package/dist/widget/components/WalletConnect.d.ts.map +1 -1
  86. package/dist/widget/components/WidgetProviders.d.ts.map +1 -1
  87. package/dist/widget/components/Withdraw.d.ts.map +1 -1
  88. package/dist/widget/css/compiled.css +1 -1
  89. package/dist/widget/hooks/useClickTracking.d.ts.map +1 -1
  90. package/dist/widget/hooks/useDebugScreens.d.ts +1 -10
  91. package/dist/widget/hooks/useDebugScreens.d.ts.map +1 -1
  92. package/dist/widget/hooks/useDepositMonitor.d.ts +2 -4
  93. package/dist/widget/hooks/useDepositMonitor.d.ts.map +1 -1
  94. package/dist/widget/hooks/useExternalFundingReceiptSync.d.ts +11 -0
  95. package/dist/widget/hooks/useExternalFundingReceiptSync.d.ts.map +1 -0
  96. package/dist/widget/hooks/useIntentReceiptBalances.d.ts +16 -0
  97. package/dist/widget/hooks/useIntentReceiptBalances.d.ts.map +1 -0
  98. package/dist/widget/hooks/useQuote.d.ts +0 -4
  99. package/dist/widget/hooks/useQuote.d.ts.map +1 -1
  100. package/dist/widget/hooks/useScreenTracking.d.ts +2 -0
  101. package/dist/widget/hooks/useScreenTracking.d.ts.map +1 -0
  102. package/dist/widget/hooks/useSelectedFundMethod.d.ts +0 -2
  103. package/dist/widget/hooks/useSelectedFundMethod.d.ts.map +1 -1
  104. package/dist/widget/hooks/useSendForm.d.ts +0 -4
  105. package/dist/widget/hooks/useSendForm.d.ts.map +1 -1
  106. package/dist/widget/hooks/useTokenList.d.ts.map +1 -1
  107. package/dist/widget/hooks/useTrailsSendTransaction.d.ts.map +1 -1
  108. package/dist/widget/hooks/useViewManager.d.ts +89 -0
  109. package/dist/widget/hooks/useViewManager.d.ts.map +1 -0
  110. package/dist/widget/hooks/useWalletConnectUri.d.ts.map +1 -1
  111. package/dist/widget/hooks/useWalletConnectionContext.d.ts +1 -1
  112. package/dist/widget/hooks/useWalletConnectionContext.d.ts.map +1 -1
  113. package/dist/widget/index.d.ts +1 -1
  114. package/dist/widget/index.d.ts.map +1 -1
  115. package/dist/widget/index.js +7 -6
  116. package/dist/widget/providers/TrailsProvider.d.ts.map +1 -1
  117. package/dist/widget/types/commonProps.d.ts +1 -6
  118. package/dist/widget/types/commonProps.d.ts.map +1 -1
  119. package/dist/widget/utils/forexRateStore.d.ts.map +1 -1
  120. package/dist/widget/utils/fundMethodSwitchState.d.ts +10 -0
  121. package/dist/widget/utils/fundMethodSwitchState.d.ts.map +1 -0
  122. package/dist/widget/utils/localeStore.d.ts.map +1 -1
  123. package/dist/widget/utils/viewManagerGuards.d.ts +5 -0
  124. package/dist/widget/utils/viewManagerGuards.d.ts.map +1 -0
  125. package/dist/widget/widget.d.ts +23 -2
  126. package/dist/widget/widget.d.ts.map +1 -1
  127. package/package.json +2 -2
  128. package/src/abis/trailsHydrate.ts +2 -1
  129. package/src/analytics.ts +60 -0
  130. package/src/chainSwitch.ts +11 -8
  131. package/src/chains.ts +82 -37
  132. package/src/constants.ts +2 -2
  133. package/src/error.ts +8 -0
  134. package/src/index.ts +1 -12
  135. package/src/intentReceiptPoller.ts +27 -0
  136. package/src/intents.ts +36 -87
  137. package/src/mutations.ts +11 -102
  138. package/src/onramp-client/index.ts +3 -3
  139. package/src/prepareSend.ts +6 -2
  140. package/src/query/balance.hooks.ts +31 -10
  141. package/src/query/chains.hooks.ts +7 -1
  142. package/src/query/chains.queries.ts +8 -5
  143. package/src/queryParams.ts +8 -6
  144. package/src/recover.ts +9 -9
  145. package/src/tokens.ts +4 -2
  146. package/src/transactionIntent/deposits/depositOrchestrator.ts +0 -2
  147. package/src/transactionIntent/deposits/gaslessDeposit.ts +8 -0
  148. package/src/transactionIntent/deposits/standardDeposit.ts +25 -35
  149. package/src/transactionIntent/handlers/intentHandler.ts +234 -138
  150. package/src/transactionIntent/helpers/transactionStateHelpers.ts +108 -1
  151. package/src/transactionIntent/types.ts +14 -8
  152. package/src/transactionIntent/utils/resilientDepositTracker.ts +72 -183
  153. package/src/transactions.ts +16 -0
  154. package/src/walletUtils.ts +188 -1
  155. package/src/wallets.ts +50 -15
  156. package/src/widget/compiled.css +1 -1
  157. package/src/widget/components/AccountActionsDropdown.tsx +4 -6
  158. package/src/widget/components/AccountIntentTransactionHistoryButton.tsx +4 -6
  159. package/src/widget/components/AccountSettings.tsx +36 -22
  160. package/src/widget/components/ClassicSwap.tsx +67 -9
  161. package/src/widget/components/ConnectWallet.tsx +5 -7
  162. package/src/widget/components/ConnectedWallets.tsx +143 -82
  163. package/src/widget/components/DepositTracker.tsx +4 -5
  164. package/src/widget/components/DirectTransfer.tsx +85 -84
  165. package/src/widget/components/Earn.tsx +3 -3
  166. package/src/widget/components/Fund.tsx +90 -17
  167. package/src/widget/components/FundMethods.tsx +77 -43
  168. package/src/widget/components/FundWalletSelection.tsx +13 -397
  169. package/src/widget/components/FundingMethodSelectorButton.tsx +11 -10
  170. package/src/widget/components/MeldStepsFlow.tsx +64 -30
  171. package/src/widget/components/OnrampErrorScreen.tsx +2 -18
  172. package/src/widget/components/OnrampPaymentMethods.tsx +4 -6
  173. package/src/widget/components/OnrampProviderConfirmation.tsx +91 -110
  174. package/src/widget/components/OriginTransferInformation.tsx +2 -2
  175. package/src/widget/components/Pay.tsx +27 -7
  176. package/src/widget/components/PaymentMethods.tsx +10 -10
  177. package/src/widget/components/PoolDeposit.tsx +2 -2
  178. package/src/widget/components/QrCode.tsx +13 -11
  179. package/src/widget/components/QuoteDetails.tsx +16 -6
  180. package/src/widget/components/Receipt.tsx +66 -6
  181. package/src/widget/components/ReceiptRecoverableFunds.tsx +135 -0
  182. package/src/widget/components/RecipientSelectorButton.tsx +6 -17
  183. package/src/widget/components/Recipients.tsx +38 -29
  184. package/src/widget/components/Swap.tsx +2 -25
  185. package/src/widget/components/TokenList.tsx +2 -2
  186. package/src/widget/components/TokenSelector.tsx +11 -11
  187. package/src/widget/components/TokenSelectorButton.tsx +3 -3
  188. package/src/widget/components/TrailsHookModal.tsx +1 -1
  189. package/src/widget/components/TransactionDetails.tsx +43 -37
  190. package/src/widget/components/TransactionHistoryItem.tsx +1 -42
  191. package/src/widget/components/TransferPendingVertical.tsx +11 -4
  192. package/src/widget/components/TruncatedTransactionHash.tsx +5 -0
  193. package/src/widget/components/WalletConfirmation.tsx +5 -8
  194. package/src/widget/components/WalletConnect.tsx +6 -2
  195. package/src/widget/components/WidgetProviders.tsx +34 -43
  196. package/src/widget/components/Withdraw.tsx +25 -11
  197. package/src/widget/hooks/useClickTracking.ts +5 -0
  198. package/src/widget/hooks/useDebugScreens.ts +40 -86
  199. package/src/widget/hooks/useDepositMonitor.ts +14 -149
  200. package/src/widget/hooks/useExternalFundingReceiptSync.ts +79 -0
  201. package/src/widget/hooks/useIntentReceiptBalances.ts +141 -0
  202. package/src/widget/hooks/useQuote.ts +7 -16
  203. package/src/widget/hooks/useScreenTracking.ts +14 -0
  204. package/src/widget/hooks/useSelectedFundMethod.tsx +0 -5
  205. package/src/widget/hooks/useSendForm.ts +5 -14
  206. package/src/widget/hooks/useTokenList.ts +3 -16
  207. package/src/widget/hooks/useTrailsSendTransaction.ts +1 -5
  208. package/src/widget/hooks/useViewManager.tsx +505 -0
  209. package/src/widget/hooks/useWalletConnectUri.tsx +77 -18
  210. package/src/widget/hooks/useWalletConnectionContext.tsx +1 -1
  211. package/src/widget/index.tsx +1 -0
  212. package/src/widget/providers/TrailsProvider.tsx +0 -41
  213. package/src/widget/styles.ts +1 -1
  214. package/src/widget/types/commonProps.ts +0 -8
  215. package/src/widget/utils/forexRateStore.ts +0 -2
  216. package/src/widget/utils/fundMethodSwitchState.ts +25 -0
  217. package/src/widget/utils/localeStore.ts +0 -1
  218. package/src/widget/utils/viewManagerGuards.ts +49 -0
  219. package/src/widget/widget.tsx +405 -316
  220. package/dist/intentStorage.d.ts +0 -24
  221. package/dist/intentStorage.d.ts.map +0 -1
  222. package/dist/mode.d.ts +0 -2
  223. package/dist/mode.d.ts.map +0 -1
  224. package/dist/widget/hooks/useBack.d.ts +0 -22
  225. package/dist/widget/hooks/useBack.d.ts.map +0 -1
  226. package/dist/widget/hooks/useCurrentScreen.d.ts +0 -13
  227. package/dist/widget/hooks/useCurrentScreen.d.ts.map +0 -1
  228. package/dist/widget/hooks/useInitialRedirect.d.ts +0 -7
  229. package/dist/widget/hooks/useInitialRedirect.d.ts.map +0 -1
  230. package/dist/widget/hooks/useMode.d.ts +0 -20
  231. package/dist/widget/hooks/useMode.d.ts.map +0 -1
  232. package/dist/widget/hooks/usePreviousScreen.d.ts +0 -12
  233. package/dist/widget/hooks/usePreviousScreen.d.ts.map +0 -1
  234. package/dist/widget/workers/intentExecutionWorker.d.ts +0 -73
  235. package/dist/widget/workers/intentExecutionWorker.d.ts.map +0 -1
  236. package/src/intentStorage.ts +0 -106
  237. package/src/mode.ts +0 -1
  238. package/src/widget/hooks/useBack.tsx +0 -210
  239. package/src/widget/hooks/useCurrentScreen.tsx +0 -73
  240. package/src/widget/hooks/useInitialRedirect.tsx +0 -70
  241. package/src/widget/hooks/useMode.tsx +0 -51
  242. package/src/widget/hooks/usePreviousScreen.ts +0 -36
  243. package/src/widget/workers/intentExecutionWorker.ts +0 -502
@@ -2,8 +2,6 @@ import type { ReactNode } from "react"
2
2
  import type { TrailsWidgetProps } from "../widget.js"
3
3
  import { WidgetPropsProvider } from "../hooks/useWidgetProps.js"
4
4
  import { ToastProvider } from "./Toast.js"
5
- import { CurrentScreenProvider } from "../hooks/useCurrentScreen.js"
6
- import { BackProvider } from "../hooks/useBack.js"
7
5
  import { WalletConnectionProvider } from "../hooks/useWalletConnectionContext.js"
8
6
  import { OriginSelectedTokenProvider } from "../hooks/useOriginSelectedToken.js"
9
7
  import { DestinationSelectedTokenProvider } from "../hooks/useDestinationSelectedToken.js"
@@ -19,9 +17,8 @@ import { DisplayCurrencyPreferenceProvider } from "../hooks/useDisplayCurrencyPr
19
17
  import { SelectedFundMethodProvider } from "../hooks/useSelectedFundMethod.js"
20
18
  import { EarnPoolProvider } from "../hooks/useEarnPool.js"
21
19
  import { SwapStateProvider } from "../hooks/useSwapState.js"
22
- import { PreviousScreenProvider } from "../hooks/usePreviousScreen.js"
23
- import { ModeProvider } from "../hooks/useMode.js"
24
20
  import { DEFAULT_MODE } from "../../constants.js"
21
+ import { ViewManagerProvider } from "../hooks/useViewManager.js"
25
22
 
26
23
  // Default props for hook modal (minimal required config)
27
24
  const DEFAULT_HOOK_MODAL_PROPS: TrailsWidgetProps = {
@@ -45,47 +42,41 @@ export function WidgetProviders({
45
42
  }: WidgetProvidersProps) {
46
43
  return (
47
44
  <WidgetPropsProvider props={props}>
48
- <ModeProvider configuredMode={props?.mode ?? DEFAULT_MODE}>
45
+ <ViewManagerProvider configuredMode={props?.mode ?? DEFAULT_MODE}>
49
46
  <ToastProvider>
50
- <CurrentScreenProvider initialScreen="home">
51
- <PreviousScreenProvider>
52
- <BackProvider>
53
- <WalletConnectionProvider>
54
- <OriginSelectedTokenProvider>
55
- <DestinationSelectedTokenProvider>
56
- <FiatSelectedCurrencyProvider>
57
- <SelectedFeeOptionProvider>
58
- <SelectedRecipientProvider>
59
- <SwapAmountProvider>
60
- <SwapStateProvider>
61
- <ChainFilterProvider>
62
- <BalanceVisibleProvider>
63
- <ThemePreferenceProvider>
64
- <LocalePreferenceProvider>
65
- <DisplayCurrencyPreferenceProvider>
66
- <SelectedFundMethodProvider>
67
- <EarnPoolProvider>
68
- {children}
69
- </EarnPoolProvider>
70
- </SelectedFundMethodProvider>
71
- </DisplayCurrencyPreferenceProvider>
72
- </LocalePreferenceProvider>
73
- </ThemePreferenceProvider>
74
- </BalanceVisibleProvider>
75
- </ChainFilterProvider>
76
- </SwapStateProvider>
77
- </SwapAmountProvider>
78
- </SelectedRecipientProvider>
79
- </SelectedFeeOptionProvider>
80
- </FiatSelectedCurrencyProvider>
81
- </DestinationSelectedTokenProvider>
82
- </OriginSelectedTokenProvider>
83
- </WalletConnectionProvider>
84
- </BackProvider>
85
- </PreviousScreenProvider>
86
- </CurrentScreenProvider>
47
+ <WalletConnectionProvider>
48
+ <OriginSelectedTokenProvider>
49
+ <DestinationSelectedTokenProvider>
50
+ <FiatSelectedCurrencyProvider>
51
+ <SelectedFeeOptionProvider>
52
+ <SelectedRecipientProvider>
53
+ <SwapAmountProvider>
54
+ <SwapStateProvider>
55
+ <ChainFilterProvider>
56
+ <BalanceVisibleProvider>
57
+ <ThemePreferenceProvider>
58
+ <LocalePreferenceProvider>
59
+ <DisplayCurrencyPreferenceProvider>
60
+ <SelectedFundMethodProvider>
61
+ <EarnPoolProvider>
62
+ {children}
63
+ </EarnPoolProvider>
64
+ </SelectedFundMethodProvider>
65
+ </DisplayCurrencyPreferenceProvider>
66
+ </LocalePreferenceProvider>
67
+ </ThemePreferenceProvider>
68
+ </BalanceVisibleProvider>
69
+ </ChainFilterProvider>
70
+ </SwapStateProvider>
71
+ </SwapAmountProvider>
72
+ </SelectedRecipientProvider>
73
+ </SelectedFeeOptionProvider>
74
+ </FiatSelectedCurrencyProvider>
75
+ </DestinationSelectedTokenProvider>
76
+ </OriginSelectedTokenProvider>
77
+ </WalletConnectionProvider>
87
78
  </ToastProvider>
88
- </ModeProvider>
79
+ </ViewManagerProvider>
89
80
  </WidgetPropsProvider>
90
81
  )
91
82
  }
@@ -1,3 +1,4 @@
1
+ import { ArrowLeftRight } from "lucide-react"
1
2
  import type React from "react"
2
3
  import { useCallback, useEffect, useRef, useState } from "react"
3
4
  import { getChainInfo } from "../../chains.js"
@@ -10,12 +11,11 @@ import {
10
11
  formatUsdAmountLocaleDisplay,
11
12
  } from "../../utils/format.js"
12
13
  import { useSupportedTokens, type Token } from "../../tokens.js"
13
- import { useBack } from "../hooks/useBack.js"
14
+ import { useViewManager, useScreenGuard } from "../hooks/useViewManager.js"
14
15
  import { useBalanceVisible } from "../hooks/useBalanceVisible.js"
15
16
  import { useDefaultDestinationToken } from "../hooks/useDefaultDestinationToken.js"
16
17
  import { useDefaultOriginToken } from "../hooks/useDefaultOriginToken.js"
17
18
  import { useDestinationSelectedToken } from "../hooks/useDestinationSelectedToken.js"
18
- import { useMode } from "../hooks/useMode.js"
19
19
  import { useOriginSelectedToken } from "../hooks/useOriginSelectedToken.js"
20
20
  import type { ProcessedFeeOption } from "../hooks/useSelectedFeeOption.js"
21
21
  import { useSelectedRecipient } from "../hooks/useSelectedRecipient.js"
@@ -77,9 +77,8 @@ const Withdraw: React.FC<WithdrawProps> = ({
77
77
  fromChainId: fromChainIdProp,
78
78
  defaultInputMode,
79
79
  }) => {
80
- const { mode } = useMode()
80
+ const { mode, navigate } = useViewManager()
81
81
  const isGenericLayout = !fromToken
82
- const { setCurrentScreenWithBack } = useBack()
83
82
  const { isBalanceVisible } = useBalanceVisible()
84
83
  const {
85
84
  selectedToken: originToken,
@@ -136,11 +135,11 @@ const Withdraw: React.FC<WithdrawProps> = ({
136
135
  enterFormMode("withdraw")
137
136
  }, [])
138
137
 
139
- useEffect(() => {
140
- if ((toRecipient == null || toRecipient === "") && !selectedRecipient) {
141
- setCurrentScreenWithBack("recipients", "withdraw")
142
- }
143
- }, [toRecipient, selectedRecipient, setCurrentScreenWithBack])
138
+ useScreenGuard(
139
+ (toRecipient == null || toRecipient === "") && !selectedRecipient,
140
+ "recipients",
141
+ { backTarget: "withdraw" },
142
+ )
144
143
 
145
144
  // Initialize and update selected recipient from toRecipient prop
146
145
  useEffect(() => {
@@ -672,6 +671,17 @@ const Withdraw: React.FC<WithdrawProps> = ({
672
671
  headerContent="Withdraw"
673
672
  headerContentAlign="left"
674
673
  showAccountActions={true}
674
+ customActions={
675
+ <button
676
+ type="button"
677
+ onClick={() => navigate("swap", { backTarget: "withdraw" })}
678
+ className="flex h-8 px-3 justify-center items-center gap-1.5 rounded-full bg-gray-50 dark:bg-gray-700 cursor-pointer transition-colors text-gray-900 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-600"
679
+ title="Swap"
680
+ >
681
+ <ArrowLeftRight className="h-4 w-4" />
682
+ <span className="text-sm font-medium">Swap</span>
683
+ </button>
684
+ }
675
685
  />
676
686
 
677
687
  <form
@@ -767,7 +777,9 @@ const Withdraw: React.FC<WithdrawProps> = ({
767
777
  <div className="mt-3 flex justify-center">
768
778
  <div className="flex items-center space-x-1 text-sm">
769
779
  <span className="text-gray-500 dark:text-gray-400">To:</span>
770
- <RecipientSelectorButton />
780
+ <RecipientSelectorButton
781
+ selectedRecipient={selectedRecipient}
782
+ />
771
783
  </div>
772
784
  </div>
773
785
  )}
@@ -928,7 +940,9 @@ const Withdraw: React.FC<WithdrawProps> = ({
928
940
  </span>
929
941
  {isGenericLayout && (
930
942
  <div className="mt-1">
931
- <RecipientSelectorButton />
943
+ <RecipientSelectorButton
944
+ selectedRecipient={selectedRecipient}
945
+ />
932
946
  </div>
933
947
  )}
934
948
  </div>
@@ -1,6 +1,7 @@
1
1
  import { useCallback, useRef } from "react"
2
2
  import { trackWidgetClick } from "../../analytics.js"
3
3
  import { logger } from "../../logger.js"
4
+ import { useViewManager } from "./useViewManager.js"
4
5
 
5
6
  export interface ClickTrackingOptions {
6
7
  component?: string
@@ -12,6 +13,9 @@ export interface ClickTrackingOptions {
12
13
  }
13
14
 
14
15
  export function useClickTracking() {
16
+ const { screen } = useViewManager()
17
+ const screenRef = useRef(screen)
18
+ screenRef.current = screen
15
19
  const lastClickRef = useRef<{ [key: string]: number }>({})
16
20
 
17
21
  const trackClick = useCallback((options: ClickTrackingOptions = {}) => {
@@ -46,6 +50,7 @@ export function useClickTracking() {
46
50
 
47
51
  // Track the click event - ensure all values are strings
48
52
  trackWidgetClick({
53
+ screen: screenRef.current,
49
54
  component: component?.toString() || "unknown",
50
55
  action: action?.toString() || "click",
51
56
  label: label?.toString(),
@@ -4,41 +4,9 @@ import { getNormalizedQuoteObject } from "../../prepareSend.js"
4
4
  import type { PrepareSendQuote } from "../../prepareSend.js"
5
5
  import type { TransactionState } from "../../transactions.js"
6
6
  import { useTrails } from "../providers/TrailsProvider.js"
7
- import { useMode } from "./useMode.js"
8
-
9
- type Screen =
10
- | "connect"
11
- | "tokens"
12
- | "select-origin-token"
13
- | "select-origin-amount"
14
- | "send-form"
15
- | "fund-form"
16
- | "fund-methods"
17
- | "payment-methods"
18
- | "onramp-payment-methods"
19
- | "recipients"
20
- | "earn"
21
- | "earn-pools"
22
- | "swap"
23
- | "wallet-confirmation"
24
- | "qr-code-wallet-select"
25
- | "direct-transfer-screen"
26
- | "pending"
27
- | "receipt"
28
- | "onramp-meld"
29
- | "meld-onramp"
30
- | "onramp-mesh"
31
- | "wallet-connect"
32
- | "wallet-list"
33
- | "wallet-connection-pending"
34
- | "account-history"
35
- | "account-settings"
36
- | "user-preferences"
37
- | "chain-list"
38
- | "qrcode-options"
7
+ import { useViewManager } from "./useViewManager.js"
39
8
 
40
9
  interface UseDebugScreensProps {
41
- setCurrentScreen: (screen: Screen) => void
42
10
  setSelectedToken: (token: any) => void
43
11
  setTransactionStates: (states: TransactionState[]) => void
44
12
  setPrepareSendQuote: (quote: PrepareSendQuote | null) => void
@@ -46,20 +14,10 @@ interface UseDebugScreensProps {
46
14
  setSelectedWalletId: (id: string | null) => void
47
15
  setShowWalletConnectionRetry: (show: boolean) => void
48
16
  setError: (error: string | null) => void
49
- setIsConnecting: (connecting: boolean) => void
50
- setOnrampProps: (
51
- props: {
52
- toTokenSymbol?: string
53
- toTokenAmount?: string
54
- toChainId?: number
55
- toRecipientAddress?: string
56
- } | null,
57
- ) => void
58
17
  isConnected: boolean
59
18
  }
60
19
 
61
20
  export const useDebugScreens = ({
62
- setCurrentScreen,
63
21
  setSelectedToken,
64
22
  setTransactionStates,
65
23
  setPrepareSendQuote,
@@ -70,7 +28,7 @@ export const useDebugScreens = ({
70
28
  isConnected,
71
29
  }: UseDebugScreensProps) => {
72
30
  const trailsConfig = useTrails()
73
- const { setMode: setCurrentMode } = useMode()
31
+ const { navigate, overrideMode: setCurrentMode } = useViewManager()
74
32
  const handleDebugScreenSelect = useCallback(
75
33
  async (screen: string) => {
76
34
  // Reset necessary state based on the target screen
@@ -112,42 +70,42 @@ export const useDebugScreens = ({
112
70
  case "connect":
113
71
  setSelectedToken(null)
114
72
  setTransactionStates([])
115
- setCurrentScreen("connect")
73
+ navigate("connect")
116
74
  break
117
75
  case "tokens":
118
76
  if (isConnected) {
119
77
  setSelectedToken(null)
120
78
  setTransactionStates([])
121
- setCurrentScreen("tokens")
79
+ navigate("tokens")
122
80
  }
123
81
  break
124
82
  case "select-origin-token":
125
- setCurrentScreen("select-origin-token")
83
+ navigate("select-origin-token")
126
84
  break
127
85
  case "select-origin-amount":
128
- setCurrentScreen("select-origin-amount")
86
+ navigate("select-origin-amount")
129
87
  break
130
88
  case "chain-list":
131
89
  setSelectedToken(null)
132
90
  setTransactionStates([])
133
- setCurrentScreen("chain-list")
91
+ navigate("chain-list")
134
92
  break
135
93
  case "send-form":
136
94
  // Set dummy USDC token for debug mode and set mode to pay
137
95
  setCurrentMode("pay")
138
96
  setSelectedToken(dummySelectedToken)
139
97
  setTransactionStates([])
140
- setCurrentScreen("send-form")
98
+ navigate("send-form")
141
99
  break
142
100
  case "fund-form":
143
101
  // Set dummy USDC token for debug mode and set mode to fund
144
102
  setCurrentMode("fund")
145
103
  setSelectedToken(dummySelectedToken)
146
104
  setTransactionStates([])
147
- setCurrentScreen("fund-form")
105
+ navigate("fund-form")
148
106
  break
149
107
  case "recipients":
150
- setCurrentScreen("recipients")
108
+ navigate("recipients")
151
109
  break
152
110
  case "wallet-confirmation":
153
111
  // Set dummy USDC token for debug mode
@@ -155,11 +113,11 @@ export const useDebugScreens = ({
155
113
  setPrepareSendQuote(dummyQuote)
156
114
  setTransactionStates([])
157
115
  setShowWalletConfirmRetry(false)
158
- setCurrentScreen("wallet-confirmation")
116
+ navigate("wallet-confirmation")
159
117
  break
160
118
  case "qr-code-wallet-select":
161
119
  setPrepareSendQuote(dummyQuote)
162
- setCurrentScreen("qr-code-wallet-select")
120
+ navigate("qr-code-wallet-select")
163
121
  break
164
122
  case "wallet-confirmation-retry":
165
123
  // Set dummy USDC token for debug mode
@@ -167,7 +125,7 @@ export const useDebugScreens = ({
167
125
  setPrepareSendQuote(dummyQuote)
168
126
  setTransactionStates([])
169
127
  setShowWalletConfirmRetry(true)
170
- setCurrentScreen("wallet-confirmation")
128
+ navigate("wallet-confirmation")
171
129
  break
172
130
  case "pending-1-item-0-confirmed":
173
131
  // Set dummy transaction states for debug mode - showing all steps
@@ -183,7 +141,7 @@ export const useDebugScreens = ({
183
141
  },
184
142
  ])
185
143
  setPrepareSendQuote(dummyQuote)
186
- setCurrentScreen("pending")
144
+ navigate("pending")
187
145
  break
188
146
  case "pending-1-item-1-confirmed":
189
147
  // Set dummy transaction states for debug mode - showing all steps
@@ -199,7 +157,7 @@ export const useDebugScreens = ({
199
157
  },
200
158
  ])
201
159
  setPrepareSendQuote(dummyQuote)
202
- setCurrentScreen("pending")
160
+ navigate("pending")
203
161
  break
204
162
  case "pending-2-item-0-confirmed":
205
163
  // Set dummy transaction states for debug mode - showing all steps
@@ -224,7 +182,7 @@ export const useDebugScreens = ({
224
182
  },
225
183
  ])
226
184
  setPrepareSendQuote(dummyQuote)
227
- setCurrentScreen("pending")
185
+ navigate("pending")
228
186
  break
229
187
  case "pending-2-item-1-confirmed":
230
188
  // Set dummy transaction states for debug mode - showing all steps
@@ -249,7 +207,7 @@ export const useDebugScreens = ({
249
207
  },
250
208
  ])
251
209
  setPrepareSendQuote(dummyQuote)
252
- setCurrentScreen("pending")
210
+ navigate("pending")
253
211
  break
254
212
  case "pending-2-item-2-confirmed":
255
213
  // Set dummy transaction states for debug mode - showing all steps
@@ -274,7 +232,7 @@ export const useDebugScreens = ({
274
232
  },
275
233
  ])
276
234
  setPrepareSendQuote(dummyQuote)
277
- setCurrentScreen("pending")
235
+ navigate("pending")
278
236
  break
279
237
  case "pending-3-item-0-confirmed":
280
238
  // Set dummy transaction states for debug mode - showing all steps
@@ -308,7 +266,7 @@ export const useDebugScreens = ({
308
266
  },
309
267
  ])
310
268
  setPrepareSendQuote(dummyQuote)
311
- setCurrentScreen("pending")
269
+ navigate("pending")
312
270
  break
313
271
  case "pending-3-item-1-confirmed":
314
272
  // Set dummy transaction states for debug mode - showing all steps
@@ -342,7 +300,7 @@ export const useDebugScreens = ({
342
300
  },
343
301
  ])
344
302
  setPrepareSendQuote(dummyQuote)
345
- setCurrentScreen("pending")
303
+ navigate("pending")
346
304
  break
347
305
  case "pending-3-item-2-confirmed":
348
306
  // Set dummy transaction states for debug mode - showing all steps
@@ -376,7 +334,7 @@ export const useDebugScreens = ({
376
334
  },
377
335
  ])
378
336
  setPrepareSendQuote(dummyQuote)
379
- setCurrentScreen("pending")
337
+ navigate("pending")
380
338
  break
381
339
  case "pending-3-item-3-confirmed":
382
340
  // Set dummy transaction states for debug mode - showing all steps
@@ -410,7 +368,7 @@ export const useDebugScreens = ({
410
368
  },
411
369
  ])
412
370
  setPrepareSendQuote(dummyQuote)
413
- setCurrentScreen("pending")
371
+ navigate("pending")
414
372
  break
415
373
  case "pending-3-item-2-confirmed-with-error":
416
374
  // Set dummy transaction states for debug mode - second item has CallFailed event
@@ -453,7 +411,7 @@ export const useDebugScreens = ({
453
411
  },
454
412
  ])
455
413
  setPrepareSendQuote(dummyQuote)
456
- setCurrentScreen("pending")
414
+ navigate("pending")
457
415
  break
458
416
  case "receipt":
459
417
  // Set dummy transaction states data for debug mode
@@ -487,7 +445,7 @@ export const useDebugScreens = ({
487
445
  },
488
446
  ])
489
447
 
490
- setCurrentScreen("receipt")
448
+ navigate("receipt")
491
449
  break
492
450
  case "receipt-failed":
493
451
  // Set dummy transaction states data for debug mode
@@ -519,7 +477,7 @@ export const useDebugScreens = ({
519
477
  },
520
478
  ])
521
479
 
522
- setCurrentScreen("receipt")
480
+ navigate("receipt")
523
481
  break
524
482
  case "receipt-refunded":
525
483
  // Set dummy transaction states data for debug mode
@@ -571,62 +529,58 @@ export const useDebugScreens = ({
571
529
  },
572
530
  ])
573
531
 
574
- setCurrentScreen("receipt")
532
+ navigate("receipt")
575
533
  break
576
534
  case "onramp":
577
- setCurrentScreen("onramp-meld")
578
- break
579
- case "meld-onramp":
580
- // Direct access to MeldForm within MeldStepsFlow
581
- setCurrentScreen("meld-onramp")
535
+ navigate("onramp-meld")
582
536
  break
583
537
  case "wallet-connect":
584
- setCurrentScreen("wallet-connect")
538
+ navigate("wallet-connect")
585
539
  break
586
540
  case "wallet-list":
587
- setCurrentScreen("wallet-list")
541
+ navigate("wallet-list")
588
542
  break
589
543
  case "wallet-connection-pending":
590
544
  setSelectedWalletId("metamask")
591
- setCurrentScreen("wallet-connection-pending")
545
+ navigate("wallet-connection-pending")
592
546
  break
593
547
  case "wallet-connection-pending-retry":
594
548
  setSelectedWalletId("metamask")
595
549
  setShowWalletConnectionRetry(true)
596
- setCurrentScreen("wallet-connection-pending")
550
+ navigate("wallet-connection-pending")
597
551
  break
598
552
  case "fund-methods":
599
- setCurrentScreen("fund-methods")
553
+ navigate("fund-methods")
600
554
  break
601
555
  case "payment-methods":
602
- setCurrentScreen("payment-methods")
556
+ navigate("payment-methods")
603
557
  break
604
558
  case "earn":
605
559
  setCurrentMode("earn")
606
- setCurrentScreen("earn")
560
+ navigate("earn")
607
561
  break
608
562
  case "earn-pools":
609
- setCurrentScreen("earn-pools")
563
+ navigate("earn-pools")
610
564
  break
611
565
  case "swap":
612
566
  setCurrentMode("swap")
613
567
  setSelectedToken(null)
614
568
  setTransactionStates([])
615
- setCurrentScreen("swap")
569
+ navigate("swap")
616
570
  break
617
571
  case "account-history":
618
- setCurrentScreen("account-history")
572
+ navigate("account-history")
619
573
  break
620
574
  case "account-settings":
621
- setCurrentScreen("account-settings")
575
+ navigate("account-settings")
622
576
  break
623
577
  case "user-preferences":
624
- setCurrentScreen("user-preferences")
578
+ navigate("user-preferences")
625
579
  break
626
580
  }
627
581
  },
628
582
  [
629
- setCurrentScreen,
583
+ navigate,
630
584
  setSelectedToken,
631
585
  setTransactionStates,
632
586
  setPrepareSendQuote,