@b3dotfun/sdk 0.1.2 → 0.1.5

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 (235) hide show
  1. package/dist/cjs/anyspend/react/components/AnySpend.d.ts +7 -1
  2. package/dist/cjs/anyspend/react/components/AnySpend.js +66 -15
  3. package/dist/cjs/anyspend/react/components/AnySpendCollectorClubPurchase.d.ts +6 -2
  4. package/dist/cjs/anyspend/react/components/AnySpendCollectorClubPurchase.js +4 -4
  5. package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.d.ts +6 -0
  6. package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.js +185 -50
  7. package/dist/cjs/anyspend/react/components/AnySpendDeposit.d.ts +6 -1
  8. package/dist/cjs/anyspend/react/components/AnySpendDeposit.js +19 -4
  9. package/dist/cjs/anyspend/react/components/AnySpendStakeUpsideExactIn.d.ts +2 -1
  10. package/dist/cjs/anyspend/react/components/AnySpendStakeUpsideExactIn.js +2 -2
  11. package/dist/cjs/anyspend/react/components/QRDeposit.d.ts +4 -1
  12. package/dist/cjs/anyspend/react/components/QRDeposit.js +12 -4
  13. package/dist/cjs/anyspend/react/components/common/CryptoPaySection.d.ts +3 -1
  14. package/dist/cjs/anyspend/react/components/common/CryptoPaySection.js +7 -5
  15. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.d.ts +3 -1
  16. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +4 -3
  17. package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
  18. package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.js +7 -6
  19. package/dist/cjs/anyspend/react/components/common/FeeDetailPanel.d.ts +3 -1
  20. package/dist/cjs/anyspend/react/components/common/FeeDetailPanel.js +15 -6
  21. package/dist/cjs/anyspend/react/components/common/FiatPaymentMethod.d.ts +3 -1
  22. package/dist/cjs/anyspend/react/components/common/FiatPaymentMethod.js +10 -6
  23. package/dist/cjs/anyspend/react/components/common/OrderDetails.d.ts +3 -0
  24. package/dist/cjs/anyspend/react/components/common/OrderDetails.js +11 -10
  25. package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +2 -0
  26. package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.js +9 -9
  27. package/dist/cjs/anyspend/react/components/common/OrderHistory.js +2 -1
  28. package/dist/cjs/anyspend/react/components/common/PanelOnramp.d.ts +3 -1
  29. package/dist/cjs/anyspend/react/components/common/PanelOnramp.js +2 -2
  30. package/dist/cjs/anyspend/react/components/common/PanelOnrampPayment.d.ts +2 -0
  31. package/dist/cjs/anyspend/react/components/common/PanelOnrampPayment.js +20 -7
  32. package/dist/cjs/anyspend/react/components/common/PointsDetailPanel.d.ts +3 -1
  33. package/dist/cjs/anyspend/react/components/common/PointsDetailPanel.js +3 -2
  34. package/dist/cjs/anyspend/react/components/common/RecipientSelection.d.ts +6 -1
  35. package/dist/cjs/anyspend/react/components/common/RecipientSelection.js +5 -2
  36. package/dist/cjs/anyspend/react/components/common/TabSection.d.ts +3 -1
  37. package/dist/cjs/anyspend/react/components/common/TabSection.js +16 -7
  38. package/dist/cjs/anyspend/react/components/common/TransferCryptoDetails.d.ts +2 -0
  39. package/dist/cjs/anyspend/react/components/common/TransferCryptoDetails.js +3 -2
  40. package/dist/cjs/anyspend/react/components/common/WarningText.d.ts +8 -7
  41. package/dist/cjs/anyspend/react/components/common/WarningText.js +5 -6
  42. package/dist/cjs/anyspend/react/components/index.d.ts +1 -0
  43. package/dist/cjs/anyspend/react/components/types/classes.d.ts +390 -0
  44. package/dist/cjs/anyspend/react/components/types/classes.js +6 -0
  45. package/dist/cjs/anyspend/react/hooks/index.d.ts +1 -0
  46. package/dist/cjs/anyspend/react/hooks/index.js +1 -0
  47. package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.d.ts +22 -2
  48. package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.js +119 -15
  49. package/dist/cjs/anyspend/react/hooks/useDirectTransfer.d.ts +17 -0
  50. package/dist/cjs/anyspend/react/hooks/useDirectTransfer.js +46 -0
  51. package/dist/cjs/anyspend/react/hooks/useRecipientAddressState.js +1 -1
  52. package/dist/cjs/anyspend/utils/format.js +12 -2
  53. package/dist/cjs/global-account/react/components/B3DynamicModal.js +1 -5
  54. package/dist/cjs/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +1 -3
  55. package/dist/cjs/global-account/react/components/B3Provider/B3ConfigProvider.js +1 -2
  56. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.d.ts +1 -4
  57. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.js +2 -2
  58. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.native.d.ts +1 -1
  59. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.native.js +1 -1
  60. package/dist/cjs/global-account/react/components/B3Provider/LocalSDKProvider.d.ts +1 -4
  61. package/dist/cjs/global-account/react/components/B3Provider/LocalSDKProvider.js +1 -3
  62. package/dist/cjs/global-account/react/components/B3Provider/RelayKitProviderWrapper.js +1 -3
  63. package/dist/cjs/global-account/react/components/ManageAccount/SettingsContent.js +17 -3
  64. package/dist/cjs/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +19 -152
  65. package/dist/cjs/global-account/react/components/index.d.ts +0 -1
  66. package/dist/cjs/global-account/react/components/index.js +3 -6
  67. package/dist/cjs/global-account/react/hooks/index.d.ts +0 -1
  68. package/dist/cjs/global-account/react/hooks/index.js +2 -4
  69. package/dist/cjs/global-account/react/hooks/useAuth.d.ts +2 -3
  70. package/dist/cjs/global-account/react/hooks/useAuth.js +14 -31
  71. package/dist/cjs/global-account/react/hooks/useTWAuth.d.ts +1 -1
  72. package/dist/cjs/global-account/react/hooks/useTWAuth.js +3 -3
  73. package/dist/cjs/global-account/react/stores/useModalStore.d.ts +8 -19
  74. package/dist/esm/anyspend/react/components/AnySpend.d.ts +7 -1
  75. package/dist/esm/anyspend/react/components/AnySpend.js +68 -17
  76. package/dist/esm/anyspend/react/components/AnySpendCollectorClubPurchase.d.ts +6 -2
  77. package/dist/esm/anyspend/react/components/AnySpendCollectorClubPurchase.js +4 -4
  78. package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.d.ts +6 -0
  79. package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.js +189 -54
  80. package/dist/esm/anyspend/react/components/AnySpendDeposit.d.ts +6 -1
  81. package/dist/esm/anyspend/react/components/AnySpendDeposit.js +19 -4
  82. package/dist/esm/anyspend/react/components/AnySpendStakeUpsideExactIn.d.ts +2 -1
  83. package/dist/esm/anyspend/react/components/AnySpendStakeUpsideExactIn.js +2 -2
  84. package/dist/esm/anyspend/react/components/QRDeposit.d.ts +4 -1
  85. package/dist/esm/anyspend/react/components/QRDeposit.js +12 -4
  86. package/dist/esm/anyspend/react/components/common/CryptoPaySection.d.ts +3 -1
  87. package/dist/esm/anyspend/react/components/common/CryptoPaySection.js +7 -5
  88. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.d.ts +3 -1
  89. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +4 -3
  90. package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
  91. package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.js +7 -6
  92. package/dist/esm/anyspend/react/components/common/FeeDetailPanel.d.ts +3 -1
  93. package/dist/esm/anyspend/react/components/common/FeeDetailPanel.js +15 -6
  94. package/dist/esm/anyspend/react/components/common/FiatPaymentMethod.d.ts +3 -1
  95. package/dist/esm/anyspend/react/components/common/FiatPaymentMethod.js +10 -6
  96. package/dist/esm/anyspend/react/components/common/OrderDetails.d.ts +3 -0
  97. package/dist/esm/anyspend/react/components/common/OrderDetails.js +11 -10
  98. package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +2 -0
  99. package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.js +9 -9
  100. package/dist/esm/anyspend/react/components/common/OrderHistory.js +2 -1
  101. package/dist/esm/anyspend/react/components/common/PanelOnramp.d.ts +3 -1
  102. package/dist/esm/anyspend/react/components/common/PanelOnramp.js +2 -2
  103. package/dist/esm/anyspend/react/components/common/PanelOnrampPayment.d.ts +2 -0
  104. package/dist/esm/anyspend/react/components/common/PanelOnrampPayment.js +20 -7
  105. package/dist/esm/anyspend/react/components/common/PointsDetailPanel.d.ts +3 -1
  106. package/dist/esm/anyspend/react/components/common/PointsDetailPanel.js +3 -2
  107. package/dist/esm/anyspend/react/components/common/RecipientSelection.d.ts +6 -1
  108. package/dist/esm/anyspend/react/components/common/RecipientSelection.js +5 -2
  109. package/dist/esm/anyspend/react/components/common/TabSection.d.ts +3 -1
  110. package/dist/esm/anyspend/react/components/common/TabSection.js +16 -7
  111. package/dist/esm/anyspend/react/components/common/TransferCryptoDetails.d.ts +2 -0
  112. package/dist/esm/anyspend/react/components/common/TransferCryptoDetails.js +3 -2
  113. package/dist/esm/anyspend/react/components/common/WarningText.d.ts +8 -7
  114. package/dist/esm/anyspend/react/components/common/WarningText.js +5 -6
  115. package/dist/esm/anyspend/react/components/index.d.ts +1 -0
  116. package/dist/esm/anyspend/react/components/types/classes.d.ts +390 -0
  117. package/dist/esm/anyspend/react/components/types/classes.js +5 -0
  118. package/dist/esm/anyspend/react/hooks/index.d.ts +1 -0
  119. package/dist/esm/anyspend/react/hooks/index.js +1 -0
  120. package/dist/esm/anyspend/react/hooks/useAnyspendFlow.d.ts +22 -2
  121. package/dist/esm/anyspend/react/hooks/useAnyspendFlow.js +119 -16
  122. package/dist/esm/anyspend/react/hooks/useDirectTransfer.d.ts +17 -0
  123. package/dist/esm/anyspend/react/hooks/useDirectTransfer.js +43 -0
  124. package/dist/esm/anyspend/react/hooks/useRecipientAddressState.js +1 -1
  125. package/dist/esm/anyspend/utils/format.js +12 -2
  126. package/dist/esm/global-account/react/components/B3DynamicModal.js +1 -5
  127. package/dist/esm/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +1 -3
  128. package/dist/esm/global-account/react/components/B3Provider/B3ConfigProvider.js +1 -2
  129. package/dist/esm/global-account/react/components/B3Provider/B3Provider.d.ts +1 -4
  130. package/dist/esm/global-account/react/components/B3Provider/B3Provider.js +2 -2
  131. package/dist/esm/global-account/react/components/B3Provider/B3Provider.native.d.ts +1 -1
  132. package/dist/esm/global-account/react/components/B3Provider/B3Provider.native.js +1 -1
  133. package/dist/esm/global-account/react/components/B3Provider/LocalSDKProvider.d.ts +1 -4
  134. package/dist/esm/global-account/react/components/B3Provider/LocalSDKProvider.js +1 -3
  135. package/dist/esm/global-account/react/components/B3Provider/RelayKitProviderWrapper.js +1 -3
  136. package/dist/esm/global-account/react/components/ManageAccount/SettingsContent.js +16 -2
  137. package/dist/esm/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +20 -153
  138. package/dist/esm/global-account/react/components/index.d.ts +0 -1
  139. package/dist/esm/global-account/react/components/index.js +0 -2
  140. package/dist/esm/global-account/react/hooks/index.d.ts +0 -1
  141. package/dist/esm/global-account/react/hooks/index.js +0 -1
  142. package/dist/esm/global-account/react/hooks/useAuth.d.ts +2 -3
  143. package/dist/esm/global-account/react/hooks/useAuth.js +14 -31
  144. package/dist/esm/global-account/react/hooks/useTWAuth.d.ts +1 -1
  145. package/dist/esm/global-account/react/hooks/useTWAuth.js +3 -3
  146. package/dist/esm/global-account/react/stores/useModalStore.d.ts +8 -19
  147. package/dist/styles/index.css +1 -1
  148. package/dist/types/anyspend/react/components/AnySpend.d.ts +7 -1
  149. package/dist/types/anyspend/react/components/AnySpendCollectorClubPurchase.d.ts +6 -2
  150. package/dist/types/anyspend/react/components/AnySpendCustomExactIn.d.ts +6 -0
  151. package/dist/types/anyspend/react/components/AnySpendDeposit.d.ts +6 -1
  152. package/dist/types/anyspend/react/components/AnySpendStakeUpsideExactIn.d.ts +2 -1
  153. package/dist/types/anyspend/react/components/QRDeposit.d.ts +4 -1
  154. package/dist/types/anyspend/react/components/common/CryptoPaySection.d.ts +3 -1
  155. package/dist/types/anyspend/react/components/common/CryptoPaymentMethod.d.ts +3 -1
  156. package/dist/types/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
  157. package/dist/types/anyspend/react/components/common/FeeDetailPanel.d.ts +3 -1
  158. package/dist/types/anyspend/react/components/common/FiatPaymentMethod.d.ts +3 -1
  159. package/dist/types/anyspend/react/components/common/OrderDetails.d.ts +3 -0
  160. package/dist/types/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +2 -0
  161. package/dist/types/anyspend/react/components/common/PanelOnramp.d.ts +3 -1
  162. package/dist/types/anyspend/react/components/common/PanelOnrampPayment.d.ts +2 -0
  163. package/dist/types/anyspend/react/components/common/PointsDetailPanel.d.ts +3 -1
  164. package/dist/types/anyspend/react/components/common/RecipientSelection.d.ts +6 -1
  165. package/dist/types/anyspend/react/components/common/TabSection.d.ts +3 -1
  166. package/dist/types/anyspend/react/components/common/TransferCryptoDetails.d.ts +2 -0
  167. package/dist/types/anyspend/react/components/common/WarningText.d.ts +8 -7
  168. package/dist/types/anyspend/react/components/index.d.ts +1 -0
  169. package/dist/types/anyspend/react/components/types/classes.d.ts +390 -0
  170. package/dist/types/anyspend/react/hooks/index.d.ts +1 -0
  171. package/dist/types/anyspend/react/hooks/useAnyspendFlow.d.ts +22 -2
  172. package/dist/types/anyspend/react/hooks/useDirectTransfer.d.ts +17 -0
  173. package/dist/types/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +1 -3
  174. package/dist/types/global-account/react/components/B3Provider/B3Provider.d.ts +1 -4
  175. package/dist/types/global-account/react/components/B3Provider/B3Provider.native.d.ts +1 -1
  176. package/dist/types/global-account/react/components/B3Provider/LocalSDKProvider.d.ts +1 -4
  177. package/dist/types/global-account/react/components/index.d.ts +0 -1
  178. package/dist/types/global-account/react/hooks/index.d.ts +0 -1
  179. package/dist/types/global-account/react/hooks/useAuth.d.ts +2 -3
  180. package/dist/types/global-account/react/hooks/useTWAuth.d.ts +1 -1
  181. package/dist/types/global-account/react/stores/useModalStore.d.ts +8 -19
  182. package/package.json +1 -1
  183. package/src/anyspend/react/components/AnySpend.tsx +164 -36
  184. package/src/anyspend/react/components/AnySpendCollectorClubPurchase.tsx +11 -6
  185. package/src/anyspend/react/components/AnySpendCustomExactIn.tsx +278 -69
  186. package/src/anyspend/react/components/AnySpendDeposit.tsx +176 -52
  187. package/src/anyspend/react/components/AnySpendStakeUpsideExactIn.tsx +3 -0
  188. package/src/anyspend/react/components/QRDeposit.tsx +91 -35
  189. package/src/anyspend/react/components/common/CryptoPaySection.tsx +31 -19
  190. package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +14 -4
  191. package/src/anyspend/react/components/common/CryptoReceiveSection.tsx +43 -23
  192. package/src/anyspend/react/components/common/FeeDetailPanel.tsx +53 -32
  193. package/src/anyspend/react/components/common/FiatPaymentMethod.tsx +26 -13
  194. package/src/anyspend/react/components/common/OrderDetails.tsx +20 -9
  195. package/src/anyspend/react/components/common/OrderDetailsCollapsible.tsx +12 -7
  196. package/src/anyspend/react/components/common/OrderHistory.tsx +2 -1
  197. package/src/anyspend/react/components/common/PanelOnramp.tsx +4 -1
  198. package/src/anyspend/react/components/common/PanelOnrampPayment.tsx +118 -40
  199. package/src/anyspend/react/components/common/PointsDetailPanel.tsx +28 -14
  200. package/src/anyspend/react/components/common/RecipientSelection.tsx +20 -5
  201. package/src/anyspend/react/components/common/TabSection.tsx +21 -12
  202. package/src/anyspend/react/components/common/TransferCryptoDetails.tsx +12 -4
  203. package/src/anyspend/react/components/common/WarningText.tsx +10 -10
  204. package/src/anyspend/react/components/index.ts +16 -0
  205. package/src/anyspend/react/components/types/classes.ts +476 -0
  206. package/src/anyspend/react/hooks/index.ts +1 -0
  207. package/src/anyspend/react/hooks/useAnyspendFlow.ts +141 -17
  208. package/src/anyspend/react/hooks/useDirectTransfer.ts +67 -0
  209. package/src/anyspend/react/hooks/useRecipientAddressState.ts +1 -1
  210. package/src/anyspend/utils/format.ts +13 -2
  211. package/src/global-account/react/components/B3DynamicModal.tsx +0 -5
  212. package/src/global-account/react/components/B3Provider/B3ConfigProvider.tsx +0 -4
  213. package/src/global-account/react/components/B3Provider/B3Provider.native.tsx +1 -1
  214. package/src/global-account/react/components/B3Provider/B3Provider.tsx +1 -11
  215. package/src/global-account/react/components/B3Provider/LocalSDKProvider.tsx +0 -6
  216. package/src/global-account/react/components/B3Provider/RelayKitProviderWrapper.tsx +1 -4
  217. package/src/global-account/react/components/ManageAccount/SettingsContent.tsx +33 -1
  218. package/src/global-account/react/components/SignInWithB3/SignInWithB3Flow.tsx +27 -184
  219. package/src/global-account/react/components/index.ts +0 -3
  220. package/src/global-account/react/hooks/index.ts +0 -1
  221. package/src/global-account/react/hooks/useAuth.ts +14 -31
  222. package/src/global-account/react/hooks/useTWAuth.tsx +3 -5
  223. package/src/global-account/react/stores/useModalStore.ts +7 -20
  224. package/dist/cjs/global-account/react/components/TurnkeyAuthModal.d.ts +0 -8
  225. package/dist/cjs/global-account/react/components/TurnkeyAuthModal.js +0 -86
  226. package/dist/cjs/global-account/react/hooks/useTurnkeyAuth.d.ts +0 -20
  227. package/dist/cjs/global-account/react/hooks/useTurnkeyAuth.js +0 -142
  228. package/dist/esm/global-account/react/components/TurnkeyAuthModal.d.ts +0 -8
  229. package/dist/esm/global-account/react/components/TurnkeyAuthModal.js +0 -83
  230. package/dist/esm/global-account/react/hooks/useTurnkeyAuth.d.ts +0 -20
  231. package/dist/esm/global-account/react/hooks/useTurnkeyAuth.js +0 -136
  232. package/dist/types/global-account/react/components/TurnkeyAuthModal.d.ts +0 -8
  233. package/dist/types/global-account/react/hooks/useTurnkeyAuth.d.ts +0 -20
  234. package/src/global-account/react/components/TurnkeyAuthModal.tsx +0 -243
  235. package/src/global-account/react/hooks/useTurnkeyAuth.ts +0 -171
@@ -0,0 +1,390 @@
1
+ /**
2
+ * Classes prop types for AnySpend components customization.
3
+ * Use these to override default styling of specific elements.
4
+ */
5
+ /** Classes for AnySpendDeposit component */
6
+ export interface AnySpendDepositClasses {
7
+ root?: string;
8
+ chainSelection?: string;
9
+ form?: string;
10
+ formContent?: string;
11
+ closeButton?: string;
12
+ balanceContainer?: string;
13
+ balanceLabel?: string;
14
+ balanceValue?: string;
15
+ optionsContainer?: string;
16
+ chainsSkeleton?: string;
17
+ skeletonItem?: string;
18
+ chainsContainer?: string;
19
+ chainButton?: string;
20
+ chainContent?: string;
21
+ chainInfo?: string;
22
+ chainName?: string;
23
+ chainIcon?: string;
24
+ chainBalance?: string;
25
+ chainChevron?: string;
26
+ generalOptions?: string;
27
+ optionButton?: string;
28
+ cryptoButton?: string;
29
+ qrButton?: string;
30
+ fiatButton?: string;
31
+ optionContent?: string;
32
+ optionInfo?: string;
33
+ optionTitle?: string;
34
+ optionDescription?: string;
35
+ optionIcon?: string;
36
+ optionChevron?: string;
37
+ divider?: string;
38
+ dividerLine?: string;
39
+ dividerText?: string;
40
+ backButton?: string;
41
+ backIcon?: string;
42
+ backText?: string;
43
+ header?: string;
44
+ title?: string;
45
+ }
46
+ /** Classes for AnySpend component */
47
+ export interface AnySpendClasses {
48
+ root?: string;
49
+ container?: string;
50
+ header?: string;
51
+ headerLogo?: string;
52
+ headerTitle?: string;
53
+ tabSection?: string;
54
+ tabList?: string;
55
+ tabTrigger?: string;
56
+ tabTriggerActive?: string;
57
+ mainContent?: string;
58
+ inputSection?: string;
59
+ swapDirectionButton?: string;
60
+ mainButton?: string;
61
+ mainButtonDisabled?: string;
62
+ mainButtonError?: string;
63
+ historyButton?: string;
64
+ bottomNavigation?: string;
65
+ gasIndicator?: string;
66
+ }
67
+ /** Classes for AnySpendCustomExactIn component */
68
+ export interface AnySpendCustomExactInClasses {
69
+ root?: string;
70
+ container?: string;
71
+ header?: string;
72
+ headerTitle?: string;
73
+ headerDescription?: string;
74
+ contentArea?: string;
75
+ inputSection?: string;
76
+ swapDirectionButton?: string;
77
+ mainButton?: string;
78
+ mainButtonDisabled?: string;
79
+ mainButtonError?: string;
80
+ footer?: string;
81
+ gasIndicator?: string;
82
+ }
83
+ /** Classes for CryptoPaySection component */
84
+ export interface CryptoPaySectionClasses {
85
+ root?: string;
86
+ container?: string;
87
+ label?: string;
88
+ inputContainer?: string;
89
+ input?: string;
90
+ tokenSelector?: string;
91
+ tokenIcon?: string;
92
+ tokenSymbol?: string;
93
+ chainBadge?: string;
94
+ balanceRow?: string;
95
+ balanceLabel?: string;
96
+ balanceValue?: string;
97
+ maxButton?: string;
98
+ paymentMethodButton?: string;
99
+ feeRow?: string;
100
+ }
101
+ /** Classes for CryptoReceiveSection component */
102
+ export interface CryptoReceiveSectionClasses {
103
+ root?: string;
104
+ container?: string;
105
+ label?: string;
106
+ inputContainer?: string;
107
+ input?: string;
108
+ tokenSelector?: string;
109
+ tokenIcon?: string;
110
+ tokenSymbol?: string;
111
+ chainBadge?: string;
112
+ recipientRow?: string;
113
+ recipientLabel?: string;
114
+ recipientValue?: string;
115
+ recipientButton?: string;
116
+ pointsRow?: string;
117
+ feeRow?: string;
118
+ }
119
+ /** Classes for PanelOnramp component */
120
+ export interface PanelOnrampClasses {
121
+ root?: string;
122
+ container?: string;
123
+ amountInput?: string;
124
+ presetButtons?: string;
125
+ presetButton?: string;
126
+ paymentMethodRow?: string;
127
+ recipientRow?: string;
128
+ destinationRow?: string;
129
+ feeRow?: string;
130
+ pointsRow?: string;
131
+ }
132
+ /** Classes for OrderDetails component */
133
+ export interface OrderDetailsClasses {
134
+ root?: string;
135
+ container?: string;
136
+ header?: string;
137
+ statusBadge?: string;
138
+ statusPending?: string;
139
+ statusSuccess?: string;
140
+ statusFailed?: string;
141
+ amountSection?: string;
142
+ detailsSection?: string;
143
+ detailRow?: string;
144
+ detailLabel?: string;
145
+ detailValue?: string;
146
+ transactionLink?: string;
147
+ actionButton?: string;
148
+ backButton?: string;
149
+ returnButton?: string;
150
+ }
151
+ /** Classes for RecipientSelection component */
152
+ export interface RecipientSelectionClasses {
153
+ root?: string;
154
+ container?: string;
155
+ header?: string;
156
+ searchInput?: string;
157
+ recipientList?: string;
158
+ recipientItem?: string;
159
+ recipientItemActive?: string;
160
+ recipientAvatar?: string;
161
+ recipientName?: string;
162
+ recipientAddress?: string;
163
+ confirmButton?: string;
164
+ backButton?: string;
165
+ }
166
+ /** Classes for CryptoPaymentMethod component */
167
+ export interface CryptoPaymentMethodClasses {
168
+ root?: string;
169
+ container?: string;
170
+ header?: string;
171
+ optionsList?: string;
172
+ optionItem?: string;
173
+ optionItemActive?: string;
174
+ optionIcon?: string;
175
+ optionLabel?: string;
176
+ optionDescription?: string;
177
+ backButton?: string;
178
+ }
179
+ /** Classes for FiatPaymentMethod component */
180
+ export interface FiatPaymentMethodClasses {
181
+ root?: string;
182
+ container?: string;
183
+ header?: string;
184
+ optionsList?: string;
185
+ optionItem?: string;
186
+ optionItemActive?: string;
187
+ optionIcon?: string;
188
+ optionLabel?: string;
189
+ optionDescription?: string;
190
+ backButton?: string;
191
+ }
192
+ /** Classes for WarningText component */
193
+ export interface WarningTextClasses {
194
+ root?: string;
195
+ }
196
+ /** Classes for ChainWarningText component */
197
+ export interface ChainWarningTextClasses {
198
+ root?: string;
199
+ }
200
+ /** Classes for TabSection component */
201
+ export interface TabSectionClasses {
202
+ root?: string;
203
+ container?: string;
204
+ tabIndicator?: string;
205
+ tabButton?: string;
206
+ tabButtonActive?: string;
207
+ }
208
+ /** Classes for FeeDetailPanel component */
209
+ export interface FeeDetailPanelClasses {
210
+ root?: string;
211
+ container?: string;
212
+ title?: string;
213
+ tierCard?: string;
214
+ tierCardTitle?: string;
215
+ tierRow?: string;
216
+ tierRowActive?: string;
217
+ tierLabel?: string;
218
+ tierValue?: string;
219
+ expandButton?: string;
220
+ summaryCard?: string;
221
+ summaryRow?: string;
222
+ summaryLabel?: string;
223
+ summaryValue?: string;
224
+ summaryDivider?: string;
225
+ totalRow?: string;
226
+ totalLabel?: string;
227
+ totalValue?: string;
228
+ backButton?: string;
229
+ }
230
+ /** Classes for PointsDetailPanel component */
231
+ export interface PointsDetailPanelClasses {
232
+ root?: string;
233
+ container?: string;
234
+ title?: string;
235
+ description?: string;
236
+ highlightText?: string;
237
+ link?: string;
238
+ infoCard?: string;
239
+ infoCardTitle?: string;
240
+ infoList?: string;
241
+ infoListItem?: string;
242
+ backButton?: string;
243
+ }
244
+ /** Classes for PanelOnrampPayment component */
245
+ export interface PanelOnrampPaymentClasses {
246
+ root?: string;
247
+ container?: string;
248
+ summaryTitle?: string;
249
+ summaryCard?: string;
250
+ summaryRow?: string;
251
+ summaryLabel?: string;
252
+ summaryValue?: string;
253
+ summaryDivider?: string;
254
+ amountRow?: string;
255
+ amountValue?: string;
256
+ feeText?: string;
257
+ loadingContainer?: string;
258
+ loadingSpinner?: string;
259
+ loadingText?: string;
260
+ paymentMethodTitle?: string;
261
+ paymentMethodIcons?: string;
262
+ paymentOption?: string;
263
+ paymentOptionIcon?: string;
264
+ paymentOptionContent?: string;
265
+ paymentOptionTitle?: string;
266
+ paymentOptionDescription?: string;
267
+ paymentOptionFee?: string;
268
+ paymentOptionChevron?: string;
269
+ backButton?: string;
270
+ }
271
+ /** Classes for OrderDetailsCollapsible component */
272
+ export interface OrderDetailsCollapsibleClasses {
273
+ root?: string;
274
+ container?: string;
275
+ expandedContent?: string;
276
+ recipientSection?: string;
277
+ recipientLabel?: string;
278
+ recipientInfo?: string;
279
+ recipientName?: string;
280
+ recipientAddress?: string;
281
+ recipientCopyIcon?: string;
282
+ divider?: string;
283
+ expectedSection?: string;
284
+ expectedLabel?: string;
285
+ expectedValue?: string;
286
+ expectedAmount?: string;
287
+ chainInfo?: string;
288
+ chainText?: string;
289
+ chainLogo?: string;
290
+ pointsSection?: string;
291
+ pointsLabel?: string;
292
+ pointsValue?: string;
293
+ idSection?: string;
294
+ idLabel?: string;
295
+ idValue?: string;
296
+ collapsedContainer?: string;
297
+ collapsedButton?: string;
298
+ collapsedChevron?: string;
299
+ }
300
+ /** Classes for TransferCryptoDetails component */
301
+ export interface TransferCryptoDetailsClasses {
302
+ root?: string;
303
+ container?: string;
304
+ header?: string;
305
+ backButton?: string;
306
+ title?: string;
307
+ timer?: string;
308
+ timerSvg?: string;
309
+ timerBackground?: string;
310
+ timerProgress?: string;
311
+ timerText?: string;
312
+ cardsContainer?: string;
313
+ amountCard?: string;
314
+ amountLabel?: string;
315
+ amountContainer?: string;
316
+ amountText?: string;
317
+ amountCopyIcon?: string;
318
+ chainCard?: string;
319
+ chainLabel?: string;
320
+ chainContainer?: string;
321
+ chainLogo?: string;
322
+ chainName?: string;
323
+ qrDepositCard?: string;
324
+ qrSection?: string;
325
+ qrWrapper?: string;
326
+ qrContainer?: string;
327
+ qrCode?: string;
328
+ walletHint?: string;
329
+ walletText?: string;
330
+ walletIcon?: string;
331
+ addressSection?: string;
332
+ addressLabel?: string;
333
+ addressCopyContainer?: string;
334
+ addressText?: string;
335
+ addressCopyIcon?: string;
336
+ actionsContainer?: string;
337
+ copyButton?: string;
338
+ }
339
+ /** Classes for QRDeposit component */
340
+ export interface QRDepositClasses {
341
+ root?: string;
342
+ container?: string;
343
+ content?: string;
344
+ header?: string;
345
+ backButton?: string;
346
+ title?: string;
347
+ closeButton?: string;
348
+ tokenSelectorContainer?: string;
349
+ tokenSelectorLabel?: string;
350
+ tokenSelectorTrigger?: string;
351
+ qrContent?: string;
352
+ qrCodeContainer?: string;
353
+ qrCode?: string;
354
+ qrScanHint?: string;
355
+ addressContainer?: string;
356
+ addressLabel?: string;
357
+ addressRow?: string;
358
+ address?: string;
359
+ addressCopyIcon?: string;
360
+ watchingIndicator?: string;
361
+ copyButton?: string;
362
+ loadingContainer?: string;
363
+ loadingContent?: string;
364
+ loadingSpinner?: string;
365
+ loadingText?: string;
366
+ orderDetailsContainer?: string;
367
+ orderDetailsContent?: string;
368
+ }
369
+ /** Combined classes for all AnySpend-related components */
370
+ export interface AnySpendAllClasses {
371
+ deposit?: AnySpendDepositClasses;
372
+ anySpend?: AnySpendClasses;
373
+ customExactIn?: AnySpendCustomExactInClasses;
374
+ cryptoPaySection?: CryptoPaySectionClasses;
375
+ cryptoReceiveSection?: CryptoReceiveSectionClasses;
376
+ panelOnramp?: PanelOnrampClasses;
377
+ orderDetails?: OrderDetailsClasses;
378
+ recipientSelection?: RecipientSelectionClasses;
379
+ cryptoPaymentMethod?: CryptoPaymentMethodClasses;
380
+ fiatPaymentMethod?: FiatPaymentMethodClasses;
381
+ qrDeposit?: QRDepositClasses;
382
+ warningText?: WarningTextClasses;
383
+ chainWarningText?: ChainWarningTextClasses;
384
+ tabSection?: TabSectionClasses;
385
+ feeDetailPanel?: FeeDetailPanelClasses;
386
+ pointsDetailPanel?: PointsDetailPanelClasses;
387
+ panelOnrampPayment?: PanelOnrampPaymentClasses;
388
+ orderDetailsCollapsible?: OrderDetailsCollapsibleClasses;
389
+ transferCryptoDetails?: TransferCryptoDetailsClasses;
390
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Classes prop types for AnySpend components customization.
3
+ * Use these to override default styling of specific elements.
4
+ */
5
+ export {};
@@ -1,4 +1,5 @@
1
1
  export * from "./useAnyspendCreateOnrampOrder";
2
+ export * from "./useDirectTransfer";
2
3
  export * from "./useAnyspendCreateOrder";
3
4
  export * from "./useCreateDepositFirstOrder";
4
5
  export * from "./useAnyspendOrderAndTransactions";
@@ -1,4 +1,5 @@
1
1
  export * from "./useAnyspendCreateOnrampOrder.js";
2
+ export * from "./useDirectTransfer.js";
2
3
  export * from "./useAnyspendCreateOrder.js";
3
4
  export * from "./useCreateDepositFirstOrder.js";
4
5
  export * from "./useAnyspendOrderAndTransactions.js";
@@ -9,8 +9,22 @@ export declare enum PanelView {
9
9
  ORDER_DETAILS = 4,
10
10
  LOADING = 5,
11
11
  POINTS_DETAIL = 6,
12
- FEE_DETAIL = 7
12
+ FEE_DETAIL = 7,
13
+ DIRECT_TRANSFER_SUCCESS = 8
13
14
  }
15
+ export type CustomExactInConfig = {
16
+ functionAbi: string;
17
+ functionName: string;
18
+ functionArgs: string[];
19
+ to: string;
20
+ spenderAddress?: string;
21
+ action?: string;
22
+ };
23
+ /**
24
+ * Generates encoded function data for custom contract calls.
25
+ * Handles amount placeholder replacement and BigInt conversion.
26
+ */
27
+ export declare function generateEncodedData(config: CustomExactInConfig | undefined, amountInWei: string): string | undefined;
14
28
  interface UseAnyspendFlowProps {
15
29
  paymentType?: "crypto" | "fiat";
16
30
  recipientAddress?: string;
@@ -25,8 +39,9 @@ interface UseAnyspendFlowProps {
25
39
  slippage?: number;
26
40
  disableUrlParamManagement?: boolean;
27
41
  orderType?: "hype_duel" | "custom_exact_in" | "swap";
42
+ customExactInConfig?: CustomExactInConfig;
28
43
  }
29
- export declare function useAnyspendFlow({ paymentType, recipientAddress, loadOrder, onOrderSuccess, onTransactionSuccess, sourceTokenAddress, sourceTokenChainId, destinationTokenAddress, destinationTokenChainId, slippage, disableUrlParamManagement, orderType, }: UseAnyspendFlowProps): {
44
+ export declare function useAnyspendFlow({ paymentType, recipientAddress, loadOrder, onOrderSuccess, onTransactionSuccess, sourceTokenAddress, sourceTokenChainId, destinationTokenAddress, destinationTokenChainId, slippage, disableUrlParamManagement, orderType, customExactInConfig, }: UseAnyspendFlowProps): {
30
45
  activePanel: PanelView;
31
46
  setActivePanel: import("react").Dispatch<import("react").SetStateAction<PanelView>>;
32
47
  orderId: string | undefined;
@@ -91,8 +106,11 @@ export declare function useAnyspendFlow({ paymentType, recipientAddress, loadOrd
91
106
  setSrcAmount: import("react").Dispatch<import("react").SetStateAction<string>>;
92
107
  dstAmount: string;
93
108
  setDstAmount: import("react").Dispatch<import("react").SetStateAction<string>>;
109
+ dstAmountInput: string;
110
+ setDstAmountInput: import("react").Dispatch<import("react").SetStateAction<string>>;
94
111
  isSrcInputDirty: boolean;
95
112
  setIsSrcInputDirty: import("react").Dispatch<import("react").SetStateAction<boolean>>;
113
+ tradeType: string;
96
114
  cryptoPaymentMethod: CryptoPaymentMethodType;
97
115
  setCryptoPaymentMethod: (method: CryptoPaymentMethodType) => void;
98
116
  selectedCryptoPaymentMethod: CryptoPaymentMethodType;
@@ -176,8 +194,10 @@ export declare function useAnyspendFlow({ paymentType, recipientAddress, loadOrd
176
194
  statusCode: number;
177
195
  } | undefined;
178
196
  isLoadingAnyspendQuote: boolean;
197
+ isQuoteLoading: boolean;
179
198
  getAnyspendQuoteError: Error | null;
180
199
  activeInputAmountInWei: string;
200
+ activeOutputAmountInWei: string;
181
201
  geoData: import("../../../anyspend/react").GeoData | undefined;
182
202
  coinbaseAvailablePaymentMethods: {
183
203
  id?: string;
@@ -1,10 +1,11 @@
1
1
  import { B3_TOKEN, getDefaultToken, USDC_BASE } from "../../../anyspend/index.js";
2
2
  import { useAnyspendCreateOnrampOrder, useAnyspendCreateOrder, useAnyspendOrderAndTransactions, useAnyspendQuote, useGeoOnrampOptions, } from "../../../anyspend/react/index.js";
3
3
  import { anyspendService } from "../../../anyspend/services/anyspend.js";
4
+ import { normalizeAddress } from "../../../anyspend/utils/index.js";
4
5
  import { toast, useAccountWallet, useProfile, useRouter, useSearchParamsSSR, useTokenBalance, } from "../../../global-account/react/index.js";
5
6
  import { formatTokenAmount, formatUnits } from "../../../shared/utils/number.js";
6
7
  import { useEffect, useMemo, useState } from "react";
7
- import { parseUnits } from "viem";
8
+ import { encodeFunctionData, parseUnits } from "viem";
8
9
  import { base, mainnet } from "viem/chains";
9
10
  import { CryptoPaymentMethodType } from "../components/common/CryptoPaymentMethod.js";
10
11
  import { FiatPaymentMethod } from "../components/common/FiatPaymentMethod.js";
@@ -22,9 +23,52 @@ export var PanelView;
22
23
  PanelView[PanelView["LOADING"] = 5] = "LOADING";
23
24
  PanelView[PanelView["POINTS_DETAIL"] = 6] = "POINTS_DETAIL";
24
25
  PanelView[PanelView["FEE_DETAIL"] = 7] = "FEE_DETAIL";
26
+ PanelView[PanelView["DIRECT_TRANSFER_SUCCESS"] = 8] = "DIRECT_TRANSFER_SUCCESS";
25
27
  })(PanelView || (PanelView = {}));
28
+ /**
29
+ * Generates encoded function data for custom contract calls.
30
+ * Handles amount placeholder replacement and BigInt conversion.
31
+ */
32
+ export function generateEncodedData(config, amountInWei) {
33
+ if (!config || !config.functionAbi || !config.functionName || !config.functionArgs) {
34
+ console.warn("customExactInConfig missing required fields for encoding:", {
35
+ hasConfig: !!config,
36
+ hasFunctionAbi: !!config?.functionAbi,
37
+ hasFunctionName: !!config?.functionName,
38
+ hasFunctionArgs: !!config?.functionArgs,
39
+ });
40
+ return undefined;
41
+ }
42
+ try {
43
+ const abi = JSON.parse(config.functionAbi);
44
+ const processedArgs = config.functionArgs.map(arg => {
45
+ // Replace amount placeholders ({{dstAmount}}, {{amount_out}}, etc.)
46
+ if (arg === "{{dstAmount}}" || arg === "{{amount_out}}") {
47
+ return BigInt(amountInWei);
48
+ }
49
+ // Convert numeric strings to BigInt for uint256 args
50
+ if (/^\d+$/.test(arg)) {
51
+ return BigInt(arg);
52
+ }
53
+ return arg;
54
+ });
55
+ return encodeFunctionData({
56
+ abi,
57
+ functionName: config.functionName,
58
+ args: processedArgs,
59
+ });
60
+ }
61
+ catch (e) {
62
+ console.error("Failed to encode function data:", e, {
63
+ functionAbi: config.functionAbi,
64
+ functionName: config.functionName,
65
+ functionArgs: config.functionArgs,
66
+ });
67
+ return undefined;
68
+ }
69
+ }
26
70
  // This hook serves for order hype_duel and custom_exact_in
27
- export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, loadOrder, onOrderSuccess, onTransactionSuccess, sourceTokenAddress, sourceTokenChainId, destinationTokenAddress, destinationTokenChainId, slippage = 0, disableUrlParamManagement = false, orderType = "hype_duel", }) {
71
+ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, loadOrder, onOrderSuccess, onTransactionSuccess, sourceTokenAddress, sourceTokenChainId, destinationTokenAddress, destinationTokenChainId, slippage = 0, disableUrlParamManagement = false, orderType = "hype_duel", customExactInConfig, }) {
28
72
  const searchParams = useSearchParamsSSR();
29
73
  const router = useRouter();
30
74
  // Panel and order state
@@ -39,6 +83,8 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
39
83
  const [selectedDstToken, setSelectedDstToken] = useState(defaultDstToken);
40
84
  const [srcAmount, setSrcAmount] = useState(paymentType === "fiat" ? "5" : "0");
41
85
  const [dstAmount, setDstAmount] = useState("");
86
+ const [dstAmountInput, setDstAmountInput] = useState(""); // User input for destination amount (EXACT_OUTPUT mode)
87
+ const [debouncedDstAmountInput, setDebouncedDstAmountInput] = useState(""); // Debounced version for quote requests
42
88
  const [isSrcInputDirty, setIsSrcInputDirty] = useState(true);
43
89
  // Derive destination chain ID from token or prop (cannot change)
44
90
  const selectedDstChainId = destinationTokenChainId || selectedDstToken.chainId;
@@ -116,6 +162,16 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
116
162
  };
117
163
  fetchDestinationToken();
118
164
  }, [destinationTokenAddress, destinationTokenChainId]);
165
+ // Check if destination token is ready (matches the expected address from props)
166
+ // This is important for EXACT_OUTPUT mode where we need correct decimals
167
+ const isDestinationTokenReady = !destinationTokenAddress || selectedDstToken.address.toLowerCase() === destinationTokenAddress.toLowerCase();
168
+ // Debounce destination amount input for quote requests (500ms delay)
169
+ useEffect(() => {
170
+ const timer = setTimeout(() => {
171
+ setDebouncedDstAmountInput(dstAmountInput);
172
+ }, 500);
173
+ return () => clearTimeout(timer);
174
+ }, [dstAmountInput]);
119
175
  // Helper function for onramp vendor mapping
120
176
  const getOnrampVendor = (paymentMethod) => {
121
177
  switch (paymentMethod) {
@@ -129,8 +185,16 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
129
185
  };
130
186
  // Get quote
131
187
  // For fiat payments, always use USDC decimals (6) regardless of selectedSrcToken
132
- const effectiveDecimals = paymentType === "fiat" ? USDC_BASE.decimals : selectedSrcToken.decimals;
133
- const activeInputAmountInWei = parseUnits(srcAmount.replace(/,/g, ""), effectiveDecimals).toString();
188
+ const effectiveSrcDecimals = paymentType === "fiat" ? USDC_BASE.decimals : selectedSrcToken.decimals;
189
+ const activeInputAmountInWei = parseUnits(srcAmount.replace(/,/g, ""), effectiveSrcDecimals).toString();
190
+ // Calculate output amount in wei for EXACT_OUTPUT mode
191
+ // Only calculate when destination token is ready (has correct decimals)
192
+ // Use debounced value to reduce quote API calls
193
+ const activeOutputAmountInWei = isDestinationTokenReady
194
+ ? parseUnits(debouncedDstAmountInput.replace(/,/g, "") || "0", selectedDstToken.decimals).toString()
195
+ : "0";
196
+ // Determine trade type based on which input was last edited
197
+ const tradeType = isSrcInputDirty ? "EXACT_INPUT" : "EXACT_OUTPUT";
134
198
  // Build quote request based on order type
135
199
  const quoteRequest = (() => {
136
200
  const baseParams = {
@@ -145,8 +209,8 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
145
209
  return {
146
210
  ...baseParams,
147
211
  type: "swap",
148
- tradeType: "EXACT_INPUT",
149
- amount: activeInputAmountInWei,
212
+ tradeType: tradeType,
213
+ amount: tradeType === "EXACT_INPUT" ? activeInputAmountInWei : activeOutputAmountInWei,
150
214
  };
151
215
  }
152
216
  else if (orderType === "hype_duel") {
@@ -157,6 +221,22 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
157
221
  };
158
222
  }
159
223
  else {
224
+ // custom_exact_in - for EXACT_OUTPUT, use custom type to get the quote
225
+ if (tradeType === "EXACT_OUTPUT") {
226
+ const encodedData = generateEncodedData(customExactInConfig, activeOutputAmountInWei);
227
+ return {
228
+ ...baseParams,
229
+ type: "custom",
230
+ payload: {
231
+ amount: activeOutputAmountInWei,
232
+ data: encodedData || "",
233
+ to: customExactInConfig ? normalizeAddress(customExactInConfig.to) : "",
234
+ spenderAddress: customExactInConfig?.spenderAddress
235
+ ? normalizeAddress(customExactInConfig.spenderAddress)
236
+ : undefined,
237
+ },
238
+ };
239
+ }
160
240
  return {
161
241
  ...baseParams,
162
242
  type: "custom_exact_in",
@@ -165,22 +245,40 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
165
245
  }
166
246
  })();
167
247
  const { anyspendQuote, isLoadingAnyspendQuote, getAnyspendQuoteError } = useAnyspendQuote(quoteRequest);
248
+ // Combined loading state: includes debounce waiting period and actual quote fetching
249
+ // For EXACT_OUTPUT mode, also check if we're waiting for debounce
250
+ const isDebouncingDstAmount = tradeType === "EXACT_OUTPUT" && dstAmountInput !== debouncedDstAmountInput;
251
+ const isQuoteLoading = isLoadingAnyspendQuote || isDebouncingDstAmount;
168
252
  // Get geo options for fiat
169
253
  const { geoData, coinbaseAvailablePaymentMethods, stripeWeb2Support } = useGeoOnrampOptions(paymentType === "fiat" ? formatUnits(activeInputAmountInWei, USDC_BASE.decimals) : "0");
170
- // Update destination amount when quote changes
254
+ // Update amounts when quote changes based on trade type
171
255
  useEffect(() => {
172
- if (anyspendQuote?.data?.currencyOut?.amount && anyspendQuote.data.currencyOut.currency?.decimals) {
173
- const amount = anyspendQuote.data.currencyOut.amount;
174
- const decimals = anyspendQuote.data.currencyOut.currency.decimals;
175
- // Apply slippage (0-100) - reduce amount by slippage percentageFixed slippage value
176
- const amountWithSlippage = (BigInt(amount) * BigInt(100 - slippage)) / BigInt(100);
177
- const formattedAmount = formatTokenAmount(amountWithSlippage, decimals, 6, false);
178
- setDstAmount(formattedAmount);
256
+ if (isSrcInputDirty) {
257
+ // EXACT_INPUT mode: update destination amount from quote
258
+ if (anyspendQuote?.data?.currencyOut?.amount && anyspendQuote.data.currencyOut.currency?.decimals) {
259
+ const amount = anyspendQuote.data.currencyOut.amount;
260
+ const decimals = anyspendQuote.data.currencyOut.currency.decimals;
261
+ // Apply slippage (0-100) - reduce amount by slippage percentage
262
+ const amountWithSlippage = (BigInt(amount) * BigInt(100 - slippage)) / BigInt(100);
263
+ const formattedAmount = formatTokenAmount(amountWithSlippage, decimals, 6, false);
264
+ setDstAmount(formattedAmount);
265
+ }
266
+ else {
267
+ setDstAmount("");
268
+ }
179
269
  }
180
270
  else {
181
- setDstAmount("");
271
+ // EXACT_OUTPUT mode: update source amount from quote
272
+ if (anyspendQuote?.data?.currencyIn?.amount && anyspendQuote.data.currencyIn.currency?.decimals) {
273
+ const amount = anyspendQuote.data.currencyIn.amount;
274
+ const decimals = anyspendQuote.data.currencyIn.currency.decimals;
275
+ const formattedAmount = formatTokenAmount(BigInt(amount), decimals, 6, false);
276
+ setSrcAmount(formattedAmount);
277
+ }
278
+ // Also set the display destination amount from the user input
279
+ setDstAmount(dstAmountInput);
182
280
  }
183
- }, [anyspendQuote, slippage]);
281
+ }, [anyspendQuote, slippage, isSrcInputDirty, dstAmountInput]);
184
282
  // Update useEffect for URL parameter to not override loadOrder
185
283
  useEffect(() => {
186
284
  if (loadOrder || disableUrlParamManagement)
@@ -265,8 +363,11 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
265
363
  setSrcAmount,
266
364
  dstAmount,
267
365
  setDstAmount,
366
+ dstAmountInput,
367
+ setDstAmountInput,
268
368
  isSrcInputDirty,
269
369
  setIsSrcInputDirty,
370
+ tradeType,
270
371
  // Payment methods
271
372
  cryptoPaymentMethod,
272
373
  setCryptoPaymentMethod,
@@ -287,8 +388,10 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
287
388
  // Quote data
288
389
  anyspendQuote,
289
390
  isLoadingAnyspendQuote,
391
+ isQuoteLoading, // Combined loading state (includes debounce + quote fetching)
290
392
  getAnyspendQuoteError,
291
393
  activeInputAmountInWei,
394
+ activeOutputAmountInWei, // User's destination amount input in wei (for EXACT_OUTPUT mode)
292
395
  // Geo/onramp data
293
396
  geoData,
294
397
  coinbaseAvailablePaymentMethods,