@b3dotfun/sdk 0.1.66-alpha.4 → 0.1.67-alpha.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 (329) hide show
  1. package/dist/cjs/anyspend/react/components/AnySpend.d.ts +9 -0
  2. package/dist/cjs/anyspend/react/components/AnySpend.js +40 -11
  3. package/dist/cjs/anyspend/react/components/AnySpendBondKit.d.ts +6 -1
  4. package/dist/cjs/anyspend/react/components/AnySpendBondKit.js +2 -2
  5. package/dist/cjs/anyspend/react/components/AnySpendBuySpin.d.ts +7 -1
  6. package/dist/cjs/anyspend/react/components/AnySpendBuySpin.js +2 -2
  7. package/dist/cjs/anyspend/react/components/AnySpendCollectorClubPurchase.d.ts +5 -1
  8. package/dist/cjs/anyspend/react/components/AnySpendCollectorClubPurchase.js +2 -2
  9. package/dist/cjs/anyspend/react/components/AnySpendCustom.d.ts +9 -0
  10. package/dist/cjs/anyspend/react/components/AnySpendCustom.js +16 -14
  11. package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.d.ts +9 -0
  12. package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.js +40 -10
  13. package/dist/cjs/anyspend/react/components/AnySpendDeposit.d.ts +10 -1
  14. package/dist/cjs/anyspend/react/components/AnySpendDeposit.js +5 -4
  15. package/dist/cjs/anyspend/react/components/AnySpendDepositUpside.d.ts +7 -1
  16. package/dist/cjs/anyspend/react/components/AnySpendDepositUpside.js +2 -2
  17. package/dist/cjs/anyspend/react/components/AnySpendNFT.d.ts +7 -1
  18. package/dist/cjs/anyspend/react/components/AnySpendNFT.js +2 -2
  19. package/dist/cjs/anyspend/react/components/AnySpendStakeB3.d.ts +7 -1
  20. package/dist/cjs/anyspend/react/components/AnySpendStakeB3.js +2 -2
  21. package/dist/cjs/anyspend/react/components/AnySpendStakeB3ExactIn.d.ts +7 -1
  22. package/dist/cjs/anyspend/react/components/AnySpendStakeB3ExactIn.js +2 -2
  23. package/dist/cjs/anyspend/react/components/AnySpendStakeUpside.d.ts +7 -1
  24. package/dist/cjs/anyspend/react/components/AnySpendStakeUpside.js +2 -2
  25. package/dist/cjs/anyspend/react/components/AnySpendStakeUpsideExactIn.d.ts +7 -1
  26. package/dist/cjs/anyspend/react/components/AnySpendStakeUpsideExactIn.js +2 -2
  27. package/dist/cjs/anyspend/react/components/AnySpendTournament.d.ts +11 -0
  28. package/dist/cjs/anyspend/react/components/AnySpendTournament.js +2 -2
  29. package/dist/cjs/anyspend/react/components/AnyspendDepositHype.d.ts +7 -1
  30. package/dist/cjs/anyspend/react/components/AnyspendDepositHype.js +2 -2
  31. package/dist/cjs/anyspend/react/components/AnyspendSignatureMint.d.ts +5 -1
  32. package/dist/cjs/anyspend/react/components/AnyspendSignatureMint.js +2 -2
  33. package/dist/cjs/anyspend/react/components/checkout/AddressForm.d.ts +9 -0
  34. package/dist/cjs/anyspend/react/components/checkout/AddressForm.js +14 -0
  35. package/dist/cjs/anyspend/react/components/checkout/AnySpendCheckout.d.ts +69 -2
  36. package/dist/cjs/anyspend/react/components/checkout/AnySpendCheckout.js +134 -6
  37. package/dist/cjs/anyspend/react/components/checkout/AnySpendCheckoutTrigger.d.ts +36 -2
  38. package/dist/cjs/anyspend/react/components/checkout/AnySpendCheckoutTrigger.js +21 -5
  39. package/dist/cjs/anyspend/react/components/checkout/CartItemRow.js +1 -1
  40. package/dist/cjs/anyspend/react/components/checkout/CartSummary.d.ts +23 -1
  41. package/dist/cjs/anyspend/react/components/checkout/CartSummary.js +13 -2
  42. package/dist/cjs/anyspend/react/components/checkout/CheckoutCartPanel.d.ts +22 -2
  43. package/dist/cjs/anyspend/react/components/checkout/CheckoutCartPanel.js +12 -4
  44. package/dist/cjs/anyspend/react/components/checkout/CheckoutFormField.d.ts +10 -0
  45. package/dist/cjs/anyspend/react/components/checkout/CheckoutFormField.js +31 -0
  46. package/dist/cjs/anyspend/react/components/checkout/CheckoutFormPanel.d.ts +39 -0
  47. package/dist/cjs/anyspend/react/components/checkout/CheckoutFormPanel.js +75 -0
  48. package/dist/cjs/anyspend/react/components/checkout/CheckoutLayout.js +4 -16
  49. package/dist/cjs/anyspend/react/components/checkout/CheckoutOrderStatus.d.ts +28 -0
  50. package/dist/cjs/anyspend/react/components/checkout/CheckoutOrderStatus.js +65 -0
  51. package/dist/cjs/anyspend/react/components/checkout/CheckoutPaymentPanel.d.ts +12 -1
  52. package/dist/cjs/anyspend/react/components/checkout/CheckoutPaymentPanel.js +35 -16
  53. package/dist/cjs/anyspend/react/components/checkout/CheckoutSuccess.js +21 -1
  54. package/dist/cjs/anyspend/react/components/checkout/CoinbaseCheckoutPanel.d.ts +4 -1
  55. package/dist/cjs/anyspend/react/components/checkout/CoinbaseCheckoutPanel.js +147 -4
  56. package/dist/cjs/anyspend/react/components/checkout/CryptoPayPanel.d.ts +23 -0
  57. package/dist/cjs/anyspend/react/components/checkout/CryptoPayPanel.js +324 -0
  58. package/dist/cjs/anyspend/react/components/checkout/DiscountCodeInput.d.ts +12 -0
  59. package/dist/cjs/anyspend/react/components/checkout/DiscountCodeInput.js +62 -0
  60. package/dist/cjs/anyspend/react/components/checkout/FiatCheckoutPanel.d.ts +4 -1
  61. package/dist/cjs/anyspend/react/components/checkout/FiatCheckoutPanel.js +74 -22
  62. package/dist/cjs/anyspend/react/components/checkout/PoweredByBranding.js +1 -1
  63. package/dist/cjs/anyspend/react/components/checkout/ShippingSelector.d.ts +11 -0
  64. package/dist/cjs/anyspend/react/components/checkout/ShippingSelector.js +20 -0
  65. package/dist/cjs/anyspend/react/components/common/ConnectWalletPayment.js +19 -5
  66. package/dist/cjs/anyspend/react/components/common/CryptoPaySection.js +1 -1
  67. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethodDisplay.js +1 -1
  68. package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.js +1 -1
  69. package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.js +4 -4
  70. package/dist/cjs/anyspend/react/components/common/OrderStatus.d.ts +2 -1
  71. package/dist/cjs/anyspend/react/components/common/OrderStatus.js +93 -19
  72. package/dist/cjs/anyspend/react/components/common/PanelOnramp.js +4 -4
  73. package/dist/cjs/anyspend/react/components/common/PaySection.js +1 -1
  74. package/dist/cjs/anyspend/react/components/common/StepProgress.d.ts +5 -1
  75. package/dist/cjs/anyspend/react/components/common/StepProgress.js +6 -11
  76. package/dist/cjs/anyspend/react/components/common/TransferCryptoDetails.js +1 -1
  77. package/dist/cjs/anyspend/react/components/common/TransferResultScreen.js +5 -1
  78. package/dist/cjs/anyspend/react/components/context/AnySpendCustomizationContext.d.ts +16 -0
  79. package/dist/cjs/anyspend/react/components/context/AnySpendCustomizationContext.js +92 -0
  80. package/dist/cjs/anyspend/react/components/icons/AnimatedCheckmark.d.ts +23 -0
  81. package/dist/cjs/anyspend/react/components/icons/AnimatedCheckmark.js +71 -0
  82. package/dist/cjs/anyspend/react/components/index.d.ts +4 -1
  83. package/dist/cjs/anyspend/react/components/index.js +5 -1
  84. package/dist/cjs/anyspend/react/components/types/classes.d.ts +18 -0
  85. package/dist/cjs/anyspend/react/components/types/customization.d.ts +75 -0
  86. package/dist/cjs/anyspend/react/components/types/customization.js +2 -0
  87. package/dist/cjs/anyspend/react/hooks/useAnyspendCreateOnrampOrder.d.ts +8 -2
  88. package/dist/cjs/anyspend/react/hooks/useAnyspendCreateOrder.d.ts +8 -2
  89. package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.d.ts +15 -3
  90. package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.js +3 -2
  91. package/dist/cjs/anyspend/react/hooks/useCreateDepositFirstOrder.d.ts +8 -2
  92. package/dist/cjs/anyspend/services/anyspend.d.ts +1 -0
  93. package/dist/cjs/anyspend/services/anyspend.js +17 -2
  94. package/dist/cjs/anyspend/types/forms.d.ts +92 -0
  95. package/dist/cjs/anyspend/types/forms.js +8 -0
  96. package/dist/cjs/anyspend/utils/format.js +12 -3
  97. package/dist/cjs/global-account/react/components/B3DynamicModal.js +4 -2
  98. package/dist/cjs/global-account/react/components/ui/dialog.d.ts +2 -0
  99. package/dist/cjs/global-account/react/components/ui/dialog.js +2 -2
  100. package/dist/cjs/global-account/react/components/ui/drawer.d.ts +3 -1
  101. package/dist/cjs/global-account/react/components/ui/drawer.js +1 -1
  102. package/dist/cjs/shared/utils/number.d.ts +5 -0
  103. package/dist/cjs/shared/utils/number.js +13 -0
  104. package/dist/esm/anyspend/react/components/AnySpend.d.ts +9 -0
  105. package/dist/esm/anyspend/react/components/AnySpend.js +41 -12
  106. package/dist/esm/anyspend/react/components/AnySpendBondKit.d.ts +6 -1
  107. package/dist/esm/anyspend/react/components/AnySpendBondKit.js +2 -2
  108. package/dist/esm/anyspend/react/components/AnySpendBuySpin.d.ts +7 -1
  109. package/dist/esm/anyspend/react/components/AnySpendBuySpin.js +2 -2
  110. package/dist/esm/anyspend/react/components/AnySpendCollectorClubPurchase.d.ts +5 -1
  111. package/dist/esm/anyspend/react/components/AnySpendCollectorClubPurchase.js +2 -2
  112. package/dist/esm/anyspend/react/components/AnySpendCustom.d.ts +9 -0
  113. package/dist/esm/anyspend/react/components/AnySpendCustom.js +16 -14
  114. package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.d.ts +9 -0
  115. package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.js +42 -12
  116. package/dist/esm/anyspend/react/components/AnySpendDeposit.d.ts +10 -1
  117. package/dist/esm/anyspend/react/components/AnySpendDeposit.js +5 -4
  118. package/dist/esm/anyspend/react/components/AnySpendDepositUpside.d.ts +7 -1
  119. package/dist/esm/anyspend/react/components/AnySpendDepositUpside.js +2 -2
  120. package/dist/esm/anyspend/react/components/AnySpendNFT.d.ts +7 -1
  121. package/dist/esm/anyspend/react/components/AnySpendNFT.js +2 -2
  122. package/dist/esm/anyspend/react/components/AnySpendStakeB3.d.ts +7 -1
  123. package/dist/esm/anyspend/react/components/AnySpendStakeB3.js +2 -2
  124. package/dist/esm/anyspend/react/components/AnySpendStakeB3ExactIn.d.ts +7 -1
  125. package/dist/esm/anyspend/react/components/AnySpendStakeB3ExactIn.js +2 -2
  126. package/dist/esm/anyspend/react/components/AnySpendStakeUpside.d.ts +7 -1
  127. package/dist/esm/anyspend/react/components/AnySpendStakeUpside.js +2 -2
  128. package/dist/esm/anyspend/react/components/AnySpendStakeUpsideExactIn.d.ts +7 -1
  129. package/dist/esm/anyspend/react/components/AnySpendStakeUpsideExactIn.js +2 -2
  130. package/dist/esm/anyspend/react/components/AnySpendTournament.d.ts +11 -0
  131. package/dist/esm/anyspend/react/components/AnySpendTournament.js +2 -2
  132. package/dist/esm/anyspend/react/components/AnyspendDepositHype.d.ts +7 -1
  133. package/dist/esm/anyspend/react/components/AnyspendDepositHype.js +2 -2
  134. package/dist/esm/anyspend/react/components/AnyspendSignatureMint.d.ts +5 -1
  135. package/dist/esm/anyspend/react/components/AnyspendSignatureMint.js +2 -2
  136. package/dist/esm/anyspend/react/components/checkout/AddressForm.d.ts +9 -0
  137. package/dist/esm/anyspend/react/components/checkout/AddressForm.js +11 -0
  138. package/dist/esm/anyspend/react/components/checkout/AnySpendCheckout.d.ts +69 -2
  139. package/dist/esm/anyspend/react/components/checkout/AnySpendCheckout.js +136 -8
  140. package/dist/esm/anyspend/react/components/checkout/AnySpendCheckoutTrigger.d.ts +36 -2
  141. package/dist/esm/anyspend/react/components/checkout/AnySpendCheckoutTrigger.js +22 -6
  142. package/dist/esm/anyspend/react/components/checkout/CartItemRow.js +1 -1
  143. package/dist/esm/anyspend/react/components/checkout/CartSummary.d.ts +23 -1
  144. package/dist/esm/anyspend/react/components/checkout/CartSummary.js +13 -2
  145. package/dist/esm/anyspend/react/components/checkout/CheckoutCartPanel.d.ts +22 -2
  146. package/dist/esm/anyspend/react/components/checkout/CheckoutCartPanel.js +13 -5
  147. package/dist/esm/anyspend/react/components/checkout/CheckoutFormField.d.ts +10 -0
  148. package/dist/esm/anyspend/react/components/checkout/CheckoutFormField.js +28 -0
  149. package/dist/esm/anyspend/react/components/checkout/CheckoutFormPanel.d.ts +39 -0
  150. package/dist/esm/anyspend/react/components/checkout/CheckoutFormPanel.js +72 -0
  151. package/dist/esm/anyspend/react/components/checkout/CheckoutLayout.js +4 -16
  152. package/dist/esm/anyspend/react/components/checkout/CheckoutOrderStatus.d.ts +28 -0
  153. package/dist/esm/anyspend/react/components/checkout/CheckoutOrderStatus.js +62 -0
  154. package/dist/esm/anyspend/react/components/checkout/CheckoutPaymentPanel.d.ts +12 -1
  155. package/dist/esm/anyspend/react/components/checkout/CheckoutPaymentPanel.js +37 -18
  156. package/dist/esm/anyspend/react/components/checkout/CheckoutSuccess.js +23 -3
  157. package/dist/esm/anyspend/react/components/checkout/CoinbaseCheckoutPanel.d.ts +4 -1
  158. package/dist/esm/anyspend/react/components/checkout/CoinbaseCheckoutPanel.js +151 -8
  159. package/dist/esm/anyspend/react/components/checkout/CryptoPayPanel.d.ts +23 -0
  160. package/dist/esm/anyspend/react/components/checkout/CryptoPayPanel.js +321 -0
  161. package/dist/esm/anyspend/react/components/checkout/DiscountCodeInput.d.ts +12 -0
  162. package/dist/esm/anyspend/react/components/checkout/DiscountCodeInput.js +59 -0
  163. package/dist/esm/anyspend/react/components/checkout/FiatCheckoutPanel.d.ts +4 -1
  164. package/dist/esm/anyspend/react/components/checkout/FiatCheckoutPanel.js +78 -26
  165. package/dist/esm/anyspend/react/components/checkout/PoweredByBranding.js +1 -1
  166. package/dist/esm/anyspend/react/components/checkout/ShippingSelector.d.ts +11 -0
  167. package/dist/esm/anyspend/react/components/checkout/ShippingSelector.js +17 -0
  168. package/dist/esm/anyspend/react/components/common/ConnectWalletPayment.js +19 -5
  169. package/dist/esm/anyspend/react/components/common/CryptoPaySection.js +1 -1
  170. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethodDisplay.js +1 -1
  171. package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.js +1 -1
  172. package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.js +4 -4
  173. package/dist/esm/anyspend/react/components/common/OrderStatus.d.ts +2 -1
  174. package/dist/esm/anyspend/react/components/common/OrderStatus.js +96 -22
  175. package/dist/esm/anyspend/react/components/common/PanelOnramp.js +4 -4
  176. package/dist/esm/anyspend/react/components/common/PaySection.js +1 -1
  177. package/dist/esm/anyspend/react/components/common/StepProgress.d.ts +5 -1
  178. package/dist/esm/anyspend/react/components/common/StepProgress.js +6 -11
  179. package/dist/esm/anyspend/react/components/common/TransferCryptoDetails.js +1 -1
  180. package/dist/esm/anyspend/react/components/common/TransferResultScreen.js +7 -3
  181. package/dist/esm/anyspend/react/components/context/AnySpendCustomizationContext.d.ts +16 -0
  182. package/dist/esm/anyspend/react/components/context/AnySpendCustomizationContext.js +88 -0
  183. package/dist/esm/anyspend/react/components/icons/AnimatedCheckmark.d.ts +23 -0
  184. package/dist/esm/anyspend/react/components/icons/AnimatedCheckmark.js +68 -0
  185. package/dist/esm/anyspend/react/components/index.d.ts +4 -1
  186. package/dist/esm/anyspend/react/components/index.js +2 -0
  187. package/dist/esm/anyspend/react/components/types/classes.d.ts +18 -0
  188. package/dist/esm/anyspend/react/components/types/customization.d.ts +75 -0
  189. package/dist/esm/anyspend/react/components/types/customization.js +1 -0
  190. package/dist/esm/anyspend/react/hooks/useAnyspendCreateOnrampOrder.d.ts +8 -2
  191. package/dist/esm/anyspend/react/hooks/useAnyspendCreateOrder.d.ts +8 -2
  192. package/dist/esm/anyspend/react/hooks/useAnyspendFlow.d.ts +15 -3
  193. package/dist/esm/anyspend/react/hooks/useAnyspendFlow.js +3 -2
  194. package/dist/esm/anyspend/react/hooks/useCreateDepositFirstOrder.d.ts +8 -2
  195. package/dist/esm/anyspend/services/anyspend.d.ts +1 -0
  196. package/dist/esm/anyspend/services/anyspend.js +17 -2
  197. package/dist/esm/anyspend/types/forms.d.ts +92 -0
  198. package/dist/esm/anyspend/types/forms.js +7 -0
  199. package/dist/esm/anyspend/utils/format.js +12 -3
  200. package/dist/esm/global-account/react/components/B3DynamicModal.js +4 -2
  201. package/dist/esm/global-account/react/components/ui/dialog.d.ts +2 -0
  202. package/dist/esm/global-account/react/components/ui/dialog.js +2 -2
  203. package/dist/esm/global-account/react/components/ui/drawer.d.ts +3 -1
  204. package/dist/esm/global-account/react/components/ui/drawer.js +1 -1
  205. package/dist/esm/shared/utils/number.d.ts +5 -0
  206. package/dist/esm/shared/utils/number.js +12 -0
  207. package/dist/styles/index.css +1 -1
  208. package/dist/types/anyspend/react/components/AnySpend.d.ts +9 -0
  209. package/dist/types/anyspend/react/components/AnySpendBondKit.d.ts +6 -1
  210. package/dist/types/anyspend/react/components/AnySpendBuySpin.d.ts +7 -1
  211. package/dist/types/anyspend/react/components/AnySpendCollectorClubPurchase.d.ts +5 -1
  212. package/dist/types/anyspend/react/components/AnySpendCustom.d.ts +9 -0
  213. package/dist/types/anyspend/react/components/AnySpendCustomExactIn.d.ts +9 -0
  214. package/dist/types/anyspend/react/components/AnySpendDeposit.d.ts +10 -1
  215. package/dist/types/anyspend/react/components/AnySpendDepositUpside.d.ts +7 -1
  216. package/dist/types/anyspend/react/components/AnySpendNFT.d.ts +7 -1
  217. package/dist/types/anyspend/react/components/AnySpendStakeB3.d.ts +7 -1
  218. package/dist/types/anyspend/react/components/AnySpendStakeB3ExactIn.d.ts +7 -1
  219. package/dist/types/anyspend/react/components/AnySpendStakeUpside.d.ts +7 -1
  220. package/dist/types/anyspend/react/components/AnySpendStakeUpsideExactIn.d.ts +7 -1
  221. package/dist/types/anyspend/react/components/AnySpendTournament.d.ts +11 -0
  222. package/dist/types/anyspend/react/components/AnyspendDepositHype.d.ts +7 -1
  223. package/dist/types/anyspend/react/components/AnyspendSignatureMint.d.ts +5 -1
  224. package/dist/types/anyspend/react/components/checkout/AddressForm.d.ts +9 -0
  225. package/dist/types/anyspend/react/components/checkout/AnySpendCheckout.d.ts +69 -2
  226. package/dist/types/anyspend/react/components/checkout/AnySpendCheckoutTrigger.d.ts +36 -2
  227. package/dist/types/anyspend/react/components/checkout/CartSummary.d.ts +23 -1
  228. package/dist/types/anyspend/react/components/checkout/CheckoutCartPanel.d.ts +22 -2
  229. package/dist/types/anyspend/react/components/checkout/CheckoutFormField.d.ts +10 -0
  230. package/dist/types/anyspend/react/components/checkout/CheckoutFormPanel.d.ts +39 -0
  231. package/dist/types/anyspend/react/components/checkout/CheckoutOrderStatus.d.ts +28 -0
  232. package/dist/types/anyspend/react/components/checkout/CheckoutPaymentPanel.d.ts +12 -1
  233. package/dist/types/anyspend/react/components/checkout/CoinbaseCheckoutPanel.d.ts +4 -1
  234. package/dist/types/anyspend/react/components/checkout/CryptoPayPanel.d.ts +23 -0
  235. package/dist/types/anyspend/react/components/checkout/DiscountCodeInput.d.ts +12 -0
  236. package/dist/types/anyspend/react/components/checkout/FiatCheckoutPanel.d.ts +4 -1
  237. package/dist/types/anyspend/react/components/checkout/ShippingSelector.d.ts +11 -0
  238. package/dist/types/anyspend/react/components/common/OrderStatus.d.ts +2 -1
  239. package/dist/types/anyspend/react/components/common/StepProgress.d.ts +5 -1
  240. package/dist/types/anyspend/react/components/context/AnySpendCustomizationContext.d.ts +16 -0
  241. package/dist/types/anyspend/react/components/icons/AnimatedCheckmark.d.ts +23 -0
  242. package/dist/types/anyspend/react/components/index.d.ts +4 -1
  243. package/dist/types/anyspend/react/components/types/classes.d.ts +18 -0
  244. package/dist/types/anyspend/react/components/types/customization.d.ts +75 -0
  245. package/dist/types/anyspend/react/hooks/useAnyspendCreateOnrampOrder.d.ts +8 -2
  246. package/dist/types/anyspend/react/hooks/useAnyspendCreateOrder.d.ts +8 -2
  247. package/dist/types/anyspend/react/hooks/useAnyspendFlow.d.ts +15 -3
  248. package/dist/types/anyspend/react/hooks/useCreateDepositFirstOrder.d.ts +8 -2
  249. package/dist/types/anyspend/services/anyspend.d.ts +1 -0
  250. package/dist/types/anyspend/types/forms.d.ts +92 -0
  251. package/dist/types/global-account/react/components/ui/dialog.d.ts +2 -0
  252. package/dist/types/global-account/react/components/ui/drawer.d.ts +3 -1
  253. package/dist/types/shared/utils/number.d.ts +5 -0
  254. package/package.json +1 -1
  255. package/src/anyspend/react/components/AnySpend.tsx +84 -37
  256. package/src/anyspend/react/components/AnySpendBondKit.tsx +12 -1
  257. package/src/anyspend/react/components/AnySpendBuySpin.tsx +14 -0
  258. package/src/anyspend/react/components/AnySpendCollectorClubPurchase.tsx +10 -0
  259. package/src/anyspend/react/components/AnySpendCustom.tsx +38 -20
  260. package/src/anyspend/react/components/AnySpendCustomExactIn.tsx +82 -35
  261. package/src/anyspend/react/components/AnySpendDeposit.tsx +24 -2
  262. package/src/anyspend/react/components/AnySpendDepositUpside.tsx +14 -0
  263. package/src/anyspend/react/components/AnySpendNFT.tsx +14 -0
  264. package/src/anyspend/react/components/AnySpendStakeB3.tsx +14 -0
  265. package/src/anyspend/react/components/AnySpendStakeB3ExactIn.tsx +14 -0
  266. package/src/anyspend/react/components/AnySpendStakeUpside.tsx +14 -0
  267. package/src/anyspend/react/components/AnySpendStakeUpsideExactIn.tsx +14 -0
  268. package/src/anyspend/react/components/AnySpendTournament.tsx +19 -0
  269. package/src/anyspend/react/components/AnyspendDepositHype.tsx +14 -0
  270. package/src/anyspend/react/components/AnyspendSignatureMint.tsx +10 -0
  271. package/src/anyspend/react/components/checkout/AddressForm.tsx +98 -0
  272. package/src/anyspend/react/components/checkout/AnySpendCheckout.tsx +307 -36
  273. package/src/anyspend/react/components/checkout/AnySpendCheckoutTrigger.tsx +108 -53
  274. package/src/anyspend/react/components/checkout/CartItemRow.tsx +15 -0
  275. package/src/anyspend/react/components/checkout/CartSummary.tsx +142 -7
  276. package/src/anyspend/react/components/checkout/CheckoutCartPanel.tsx +45 -7
  277. package/src/anyspend/react/components/checkout/CheckoutFormField.tsx +129 -0
  278. package/src/anyspend/react/components/checkout/CheckoutFormPanel.tsx +241 -0
  279. package/src/anyspend/react/components/checkout/CheckoutLayout.tsx +8 -28
  280. package/src/anyspend/react/components/checkout/CheckoutOrderStatus.tsx +224 -0
  281. package/src/anyspend/react/components/checkout/CheckoutPaymentPanel.tsx +83 -64
  282. package/src/anyspend/react/components/checkout/CheckoutSuccess.tsx +35 -16
  283. package/src/anyspend/react/components/checkout/CoinbaseCheckoutPanel.tsx +201 -13
  284. package/src/anyspend/react/components/checkout/CryptoPayPanel.tsx +630 -0
  285. package/src/anyspend/react/components/checkout/DiscountCodeInput.tsx +127 -0
  286. package/src/anyspend/react/components/checkout/FiatCheckoutPanel.tsx +130 -41
  287. package/src/anyspend/react/components/checkout/PoweredByBranding.tsx +12 -2
  288. package/src/anyspend/react/components/checkout/ShippingSelector.tsx +73 -0
  289. package/src/anyspend/react/components/common/ConnectWalletPayment.tsx +29 -7
  290. package/src/anyspend/react/components/common/CryptoPaySection.tsx +1 -1
  291. package/src/anyspend/react/components/common/CryptoPaymentMethodDisplay.tsx +1 -1
  292. package/src/anyspend/react/components/common/CryptoReceiveSection.tsx +2 -2
  293. package/src/anyspend/react/components/common/OrderDetailsCollapsible.tsx +5 -5
  294. package/src/anyspend/react/components/common/OrderStatus.tsx +140 -34
  295. package/src/anyspend/react/components/common/PanelOnramp.tsx +9 -9
  296. package/src/anyspend/react/components/common/PaySection.tsx +1 -1
  297. package/src/anyspend/react/components/common/StepProgress.tsx +40 -52
  298. package/src/anyspend/react/components/common/TokenBalance.tsx +0 -12
  299. package/src/anyspend/react/components/common/TransferCryptoDetails.tsx +1 -9
  300. package/src/anyspend/react/components/common/TransferResultScreen.tsx +19 -11
  301. package/src/anyspend/react/components/context/AnySpendCustomizationContext.tsx +124 -0
  302. package/src/anyspend/react/components/icons/AnimatedCheckmark.tsx +119 -0
  303. package/src/anyspend/react/components/index.ts +27 -1
  304. package/src/anyspend/react/components/types/classes.ts +22 -0
  305. package/src/anyspend/react/components/types/customization.ts +99 -0
  306. package/src/anyspend/react/hooks/useAnyspendCreateOnrampOrder.ts +3 -2
  307. package/src/anyspend/react/hooks/useAnyspendCreateOrder.ts +3 -2
  308. package/src/anyspend/react/hooks/useAnyspendFlow.ts +5 -1
  309. package/src/anyspend/react/hooks/useCreateDepositFirstOrder.ts +3 -2
  310. package/src/anyspend/services/anyspend.ts +19 -2
  311. package/src/anyspend/types/forms.ts +97 -0
  312. package/src/anyspend/utils/format.ts +12 -3
  313. package/src/global-account/react/components/B3DynamicModal.tsx +8 -4
  314. package/src/global-account/react/components/ui/dialog.tsx +17 -8
  315. package/src/global-account/react/components/ui/drawer.tsx +2 -2
  316. package/src/shared/utils/number.ts +12 -0
  317. package/src/styles/index.css +48 -2
  318. package/dist/cjs/anyspend/react/components/checkout/CryptoCheckoutPanel.d.ts +0 -33
  319. package/dist/cjs/anyspend/react/components/checkout/CryptoCheckoutPanel.js +0 -317
  320. package/dist/cjs/anyspend/react/components/checkout/QRCheckoutPanel.d.ts +0 -17
  321. package/dist/cjs/anyspend/react/components/checkout/QRCheckoutPanel.js +0 -157
  322. package/dist/esm/anyspend/react/components/checkout/CryptoCheckoutPanel.d.ts +0 -33
  323. package/dist/esm/anyspend/react/components/checkout/CryptoCheckoutPanel.js +0 -313
  324. package/dist/esm/anyspend/react/components/checkout/QRCheckoutPanel.d.ts +0 -17
  325. package/dist/esm/anyspend/react/components/checkout/QRCheckoutPanel.js +0 -154
  326. package/dist/types/anyspend/react/components/checkout/CryptoCheckoutPanel.d.ts +0 -33
  327. package/dist/types/anyspend/react/components/checkout/QRCheckoutPanel.d.ts +0 -17
  328. package/src/anyspend/react/components/checkout/CryptoCheckoutPanel.tsx +0 -643
  329. package/src/anyspend/react/components/checkout/QRCheckoutPanel.tsx +0 -329
@@ -27,6 +27,7 @@ export const getStatusDisplay = (
27
27
  return {
28
28
  text: depositText,
29
29
  status: "processing",
30
+ description: "Waiting for your deposit to be confirmed on-chain",
30
31
  };
31
32
  }
32
33
  case "waiting_stripe_payment":
@@ -44,7 +45,7 @@ export const getStatusDisplay = (
44
45
  };
45
46
 
46
47
  case "sending_token_from_vault":
47
- return { text: "Sending Token", status: "processing" };
48
+ return { text: "Sending Token", status: "processing", description: "Preparing your tokens for delivery" };
48
49
 
49
50
  case "relay":
50
51
  case "executing":
@@ -76,9 +77,17 @@ export const getStatusDisplay = (
76
77
  }
77
78
 
78
79
  case "refunding":
79
- return { text: "Order Refunding", status: "processing" };
80
+ return {
81
+ text: "Refunding Order",
82
+ status: "processing",
83
+ description: "Your funds are being returned to your wallet",
84
+ };
80
85
  case "refunded":
81
- return { text: "Order Refunded", status: "failure" };
86
+ return {
87
+ text: "Order Refunded",
88
+ status: "failure",
89
+ description: "Your funds have been returned to your wallet.",
90
+ };
82
91
 
83
92
  case "failure":
84
93
  return {
@@ -84,6 +84,9 @@ export function B3DynamicModal() {
84
84
  "anySpendBondKit",
85
85
  ];
86
86
 
87
+ // AnySpend modal types should not show the "Global Account" branding footer
88
+ const isAnySpendType = contentType?.type?.toLowerCase().startsWith("anyspend") ?? false;
89
+
87
90
  // Check if current content type is in freestyle types
88
91
  const isFreestyleType = freestyleTypes.includes(contentType?.type as string);
89
92
  // Determine if modal should be closable - defaults to true unless explicitly set to false
@@ -194,8 +197,8 @@ export function B3DynamicModal() {
194
197
  <ModalContent
195
198
  className={cn(
196
199
  contentClass,
197
- "rounded-2xl bg-white shadow-xl dark:bg-gray-900",
198
- "border border-gray-200 dark:border-gray-800",
200
+ "rounded-2xl bg-white shadow-xl dark:bg-neutral-900",
201
+ "border border-gray-200 dark:border-neutral-800",
199
202
  (contentType?.type === "manageAccount" ||
200
203
  contentType?.type === "deposit" ||
201
204
  contentType?.type === "send" ||
@@ -205,6 +208,7 @@ export function B3DynamicModal() {
205
208
  "mx-auto w-full max-w-md sm:max-w-lg",
206
209
  )}
207
210
  hideCloseButton={hideCloseButton}
211
+ hideGABranding={isAnySpendType}
208
212
  onEscapeKeyDown={!isClosable ? e => e.preventDefault() : undefined}
209
213
  onPointerDownOutside={!isClosable ? e => e.preventDefault() : undefined}
210
214
  onInteractOutside={!isClosable ? e => e.preventDefault() : undefined}
@@ -251,7 +255,7 @@ export function B3DynamicModal() {
251
255
  animate={{ height: "auto" }}
252
256
  exit={{ height: 0 }}
253
257
  transition={{ duration: 0.3, ease: "easeInOut" }}
254
- className="toast-section relative z-10 overflow-hidden bg-white dark:border-gray-800 dark:bg-gray-900"
258
+ className="toast-section relative z-10 overflow-hidden bg-white dark:border-neutral-800 dark:bg-neutral-900"
255
259
  >
256
260
  <motion.div
257
261
  initial={{ opacity: 0, y: -10 }}
@@ -269,7 +273,7 @@ export function B3DynamicModal() {
269
273
  </ModalContent>
270
274
 
271
275
  {/* Animate inner container margin to cover branding when toasts appear */}
272
- {isOpen && (
276
+ {isOpen && !isAnySpendType && (
273
277
  <style>{`
274
278
  .modal-inner-content {
275
279
  transition: margin-bottom 0.3s ease-in-out;
@@ -38,11 +38,13 @@ type DialogContentElement = React.ElementRef<typeof DialogPrimitive.Content>;
38
38
  type DialogContentProps = React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {
39
39
  hideCloseButton?: boolean;
40
40
  closeBtnClassName?: string;
41
+ /** Hide the "Global Account" branding footer below the modal */
42
+ hideGABranding?: boolean;
41
43
  };
42
44
 
43
45
  const DialogContent: React.ForwardRefExoticComponent<DialogContentProps & React.RefAttributes<DialogContentElement>> =
44
46
  React.forwardRef<DialogContentElement, DialogContentProps>(
45
- ({ className, children, hideCloseButton = true, closeBtnClassName, ...props }, ref) => {
47
+ ({ className, children, hideCloseButton = true, closeBtnClassName, hideGABranding, ...props }, ref) => {
46
48
  const container = typeof window !== "undefined" ? document.getElementById("b3-root") : null;
47
49
  return (
48
50
  <DialogPortal container={container}>
@@ -60,7 +62,12 @@ const DialogContent: React.ForwardRefExoticComponent<DialogContentProps & React.
60
62
  )}
61
63
  {...props}
62
64
  >
63
- <div className="modal-inner-content mb-[23px] flex flex-1 flex-col overflow-hidden rounded-xl border border-[#D1D1D6] bg-white shadow-[0_20px_24px_-4px_rgba(10,13,18,0.08),0_8px_8px_-4px_rgba(10,13,18,0.03),0_3px_3px_-1.5px_rgba(10,13,18,0.04)] dark:border-gray-700 dark:bg-gray-900">
65
+ <div
66
+ className={cn(
67
+ "modal-inner-content flex flex-1 flex-col overflow-hidden rounded-xl border border-[#D1D1D6] bg-white shadow-[0_20px_24px_-4px_rgba(10,13,18,0.08),0_8px_8px_-4px_rgba(10,13,18,0.03),0_3px_3px_-1.5px_rgba(10,13,18,0.04)] dark:border-neutral-700 dark:bg-neutral-900",
68
+ !hideGABranding && "mb-[23px]",
69
+ )}
70
+ >
64
71
  {children}
65
72
  {!hideCloseButton && (
66
73
  <DialogPrimitive.Close
@@ -75,12 +82,14 @@ const DialogContent: React.ForwardRefExoticComponent<DialogContentProps & React.
75
82
  )}
76
83
  </div>
77
84
  {/* Global Account Footer - Absolutely positioned on outer grey layer */}
78
- <div className="b3-modal-ga-branding absolute bottom-[10px] left-0 right-0 flex items-center justify-center gap-1.5 pt-[10px]">
79
- <img src="https://cdn.b3.fun/b3_logo.svg" alt="B3" className="h-4 w-4" />
80
- <span className="font-neue-montreal-semibold text-xs uppercase leading-none tracking-[0.72px] text-[#0B57C2]">
81
- Global Account
82
- </span>
83
- </div>
85
+ {!hideGABranding && (
86
+ <div className="b3-modal-ga-branding absolute bottom-[10px] left-0 right-0 flex items-center justify-center gap-1.5 pt-[10px]">
87
+ <img src="https://cdn.b3.fun/b3_logo.svg" alt="B3" className="h-4 w-4" />
88
+ <span className="font-neue-montreal-semibold text-xs uppercase leading-none tracking-[0.72px] text-[#0B57C2]">
89
+ Global Account
90
+ </span>
91
+ </div>
92
+ )}
84
93
  </DialogPrimitive.Content>
85
94
  </DialogPortal>
86
95
  );
@@ -30,8 +30,8 @@ DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName;
30
30
 
31
31
  const DrawerContent = React.forwardRef<
32
32
  React.ElementRef<typeof DrawerPrimitive.Content>,
33
- React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>
34
- >(({ className, children, ...props }, ref) => {
33
+ React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content> & { hideGABranding?: boolean }
34
+ >(({ className, children, hideGABranding: _hideGABranding, ...props }, ref) => {
35
35
  const container = typeof window !== "undefined" ? document.getElementById("b3-root") : null;
36
36
  return (
37
37
  <DrawerPortal container={container}>
@@ -121,6 +121,18 @@ export const formatDisplayNumber = (
121
121
  return formatter.format(v);
122
122
  };
123
123
 
124
+ /**
125
+ * Safely convert a string to BigInt, returning 0n for invalid values.
126
+ * Use this for consumer-provided amount strings that may not be valid wei values.
127
+ */
128
+ export function safeBigInt(value: string): bigint {
129
+ try {
130
+ return BigInt(value);
131
+ } catch {
132
+ return BigInt(0);
133
+ }
134
+ }
135
+
124
136
  export function formatUnits(value: string, decimals = 18) {
125
137
  const factor = BigInt(10) ** BigInt(decimals);
126
138
  const wholePart = BigInt(value) / factor;
@@ -126,7 +126,7 @@
126
126
  --as-on-disabled: 0 0% 44%;
127
127
  --as-shadow-lg: 220 29% 5%;
128
128
  --as-quaternary: 240 6% 65%;
129
- --as-tertiarry: 235 6% 34%;
129
+ --as-tertiary: 235 6% 50%;
130
130
  --as-success-secondary: 89 85% 89%;
131
131
  --as-content-icon-success: 95 85% 35%;
132
132
  --as-content-disabled: 220 6% 47%;
@@ -219,7 +219,7 @@ html[data-theme="dark"] .b3-root,
219
219
  --as-on-surface-disabled: 0 0% 78%;
220
220
  --as-on-disabled: 0 0% 44%;
221
221
  --as-quaternary: 240 6% 65%;
222
- --as-tertiarry: 240 6% 65%;
222
+ --as-tertiary: 240 6% 65%;
223
223
  --as-success-secondary: 95 85% 35%;
224
224
  --as-content-icon-success: 89 85% 89%;
225
225
  --as-content-disabled: 220 6% 47%;
@@ -703,3 +703,49 @@ Dark version
703
703
  .tw-header {
704
704
  display: none !important; /* Hide the TW "BSMNT" header */
705
705
  }
706
+
707
+ /* AnySpend Checkout: modal trigger overrides */
708
+ .anyspend-checkout-trigger .anyspend-payment-methods {
709
+ border: none;
710
+ border-radius: 0;
711
+ }
712
+ .anyspend-checkout-trigger .anyspend-payment-title {
713
+ font-size: 0;
714
+ padding-left: 0.75rem;
715
+ }
716
+ .anyspend-checkout-trigger .anyspend-payment-title::before {
717
+ content: "Payment options";
718
+ font-size: 1.125rem;
719
+ }
720
+ .anyspend-checkout-trigger .anyspend-payment-panel {
721
+ gap: 0;
722
+ }
723
+ .anyspend-checkout-trigger .anyspend-payment-method-btn {
724
+ padding-left: 0.5rem;
725
+ padding-right: 0.5rem;
726
+ }
727
+ .anyspend-checkout-trigger .anyspend-payment-method-panel {
728
+ padding-left: 0.5rem;
729
+ padding-right: 0.5rem;
730
+ }
731
+
732
+ /* AnySpend Checkout: 2-column grid layout */
733
+ .anyspend-checkout-grid {
734
+ display: grid;
735
+ gap: 2rem;
736
+ grid-template-columns: 1fr;
737
+ }
738
+ @media (min-width: 768px) {
739
+ .anyspend-checkout-grid {
740
+ grid-template-columns: 1fr var(--anyspend-cart-width, 380px);
741
+ }
742
+ .anyspend-checkout-grid > .anyspend-payment-col {
743
+ order: 1;
744
+ }
745
+ .anyspend-checkout-grid > .anyspend-cart-col {
746
+ order: 2;
747
+ position: sticky;
748
+ top: 32px;
749
+ align-self: start;
750
+ }
751
+ }
@@ -1,33 +0,0 @@
1
- import { components } from "../../../../anyspend/types/api";
2
- import type { AnySpendCheckoutClasses } from "./AnySpendCheckout";
3
- interface CryptoCheckoutPanelProps {
4
- recipientAddress: string;
5
- destinationTokenAddress: string;
6
- destinationTokenChainId: number;
7
- totalAmount: string;
8
- buttonText?: string;
9
- themeColor?: string;
10
- onSuccess?: (result: {
11
- txHash?: string;
12
- orderId?: string;
13
- }) => void;
14
- onError?: (error: Error) => void;
15
- callbackMetadata?: Record<string, unknown>;
16
- classes?: AnySpendCheckoutClasses;
17
- }
18
- export declare function CryptoCheckoutPanel({ recipientAddress, destinationTokenAddress, destinationTokenChainId, totalAmount, buttonText, themeColor, onSuccess, onError, callbackMetadata, classes, }: CryptoCheckoutPanelProps): import("react/jsx-runtime").JSX.Element;
19
- export interface TokenSelectorModalProps {
20
- open: boolean;
21
- onClose: () => void;
22
- tokenList: components["schemas"]["Token"][] | undefined;
23
- isLoadingTokens: boolean;
24
- tokenSearchQuery: string;
25
- onSearchChange: (query: string) => void;
26
- onSelectToken: (token: components["schemas"]["Token"]) => void;
27
- selectedToken: components["schemas"]["Token"] | null;
28
- walletAddress?: string;
29
- chainId: number;
30
- onChainChange: (chainId: number) => void;
31
- }
32
- export declare function TokenSelectorModal({ open, onClose, tokenList, isLoadingTokens, tokenSearchQuery, onSearchChange, onSelectToken, selectedToken, walletAddress, chainId, onChainChange, }: TokenSelectorModalProps): import("react/jsx-runtime").JSX.Element;
33
- export {};
@@ -1,317 +0,0 @@
1
- "use strict";
2
- "use client";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.CryptoCheckoutPanel = CryptoCheckoutPanel;
5
- exports.TokenSelectorModal = TokenSelectorModal;
6
- const jsx_runtime_1 = require("react/jsx-runtime");
7
- const useAnyspendQuote_1 = require("../../../../anyspend/react/hooks/useAnyspendQuote");
8
- const useAnyspendCreateOrder_1 = require("../../../../anyspend/react/hooks/useAnyspendCreateOrder");
9
- const useAnyspendOrderAndTransactions_1 = require("../../../../anyspend/react/hooks/useAnyspendOrderAndTransactions");
10
- const useAnyspendTokens_1 = require("../../../../anyspend/react/hooks/useAnyspendTokens");
11
- const useOnOrderSuccess_1 = require("../../../../anyspend/react/hooks/useOnOrderSuccess");
12
- const anyspend_1 = require("../../../../anyspend");
13
- const chain_1 = require("../../../../anyspend/utils/chain");
14
- const react_1 = require("../../../../global-account/react");
15
- const b3Chain_1 = require("../../../../shared/constants/chains/b3Chain");
16
- const number_1 = require("../../../../shared/utils/number");
17
- const token_1 = require("../../../../anyspend/utils/token");
18
- const cn_1 = require("../../../../shared/utils/cn");
19
- const react_2 = require("../../../../global-account/react");
20
- const react_3 = require("../../../../global-account/react");
21
- const dialog_1 = require("../../../../global-account/react/components/ui/dialog");
22
- const drawer_1 = require("../../../../global-account/react/components/ui/drawer");
23
- const lucide_react_1 = require("lucide-react");
24
- const viem_1 = require("viem");
25
- const react_4 = require("motion/react");
26
- const react_5 = require("react");
27
- const ChainTokenIcon_1 = require("../common/ChainTokenIcon");
28
- function CryptoCheckoutPanel({ recipientAddress, destinationTokenAddress, destinationTokenChainId, totalAmount, buttonText = "Pay", themeColor, onSuccess, onError, callbackMetadata, classes, }) {
29
- const [selectedSrcChainId, setSelectedSrcChainId] = (0, react_5.useState)(destinationTokenChainId);
30
- const [selectedSrcToken, setSelectedSrcToken] = (0, react_5.useState)(null);
31
- const [showTokenSelector, setShowTokenSelector] = (0, react_5.useState)(false);
32
- const [tokenSearchQuery, setTokenSearchQuery] = (0, react_5.useState)("");
33
- // Get wallet & modal
34
- const { address: walletAddress } = (0, react_1.useAccountWallet)();
35
- const { partnerId } = (0, react_1.useB3Config)();
36
- const setB3ModalOpen = (0, react_1.useModalStore)(state => state.setB3ModalOpen);
37
- const setB3ModalContentType = (0, react_1.useModalStore)(state => state.setB3ModalContentType);
38
- // Get destination token data
39
- const { data: dstTokenData } = (0, react_1.useTokenData)(destinationTokenChainId, destinationTokenAddress);
40
- // Get token list for source chain
41
- const { data: tokenList, isLoading: isLoadingTokens } = (0, useAnyspendTokens_1.useAnyspendTokenList)(selectedSrcChainId, tokenSearchQuery);
42
- // Set default source token to destination token (same-chain, no swap needed)
43
- (0, react_5.useEffect)(() => {
44
- if (!selectedSrcToken && tokenList && tokenList.length > 0) {
45
- // Try to find the destination token in the list
46
- const dstToken = tokenList.find((t) => t.address.toLowerCase() === destinationTokenAddress.toLowerCase() && t.chainId === destinationTokenChainId);
47
- if (dstToken) {
48
- setSelectedSrcToken(dstToken);
49
- }
50
- else {
51
- // Default to first token
52
- setSelectedSrcToken(tokenList[0]);
53
- }
54
- }
55
- }, [tokenList, selectedSrcToken, destinationTokenAddress, destinationTokenChainId]);
56
- // Compute source amount from destination amount using quote
57
- const isSameToken = selectedSrcToken &&
58
- selectedSrcToken.address.toLowerCase() === destinationTokenAddress.toLowerCase() &&
59
- selectedSrcToken.chainId === destinationTokenChainId;
60
- const { anyspendQuote, isLoadingAnyspendQuote } = (0, useAnyspendQuote_1.useAnyspendQuote)({
61
- type: "swap",
62
- srcChain: selectedSrcChainId,
63
- dstChain: destinationTokenChainId,
64
- srcTokenAddress: selectedSrcToken?.address || "",
65
- dstTokenAddress: destinationTokenAddress,
66
- tradeType: "EXACT_OUTPUT",
67
- amount: totalAmount,
68
- });
69
- // Get balance
70
- const tokenAddress = selectedSrcToken
71
- ? (0, token_1.isNativeToken)(selectedSrcToken.address)
72
- ? "native"
73
- : selectedSrcToken.address
74
- : undefined;
75
- const { data: balanceData } = (0, react_1.useSimTokenBalance)(walletAddress, tokenAddress, selectedSrcChainId);
76
- const balance = (0, react_5.useMemo)(() => {
77
- const b = balanceData?.balances?.[0];
78
- if (!b?.amount)
79
- return { raw: BigInt(0), formatted: "0", decimals: 18 };
80
- return {
81
- raw: BigInt(b.amount),
82
- formatted: (0, number_1.formatTokenAmount)(BigInt(b.amount), b.decimals),
83
- decimals: b.decimals,
84
- };
85
- }, [balanceData]);
86
- // Determine the amount to pay in source token
87
- const srcAmount = (0, react_5.useMemo)(() => {
88
- if (isSameToken)
89
- return totalAmount;
90
- return anyspendQuote?.data?.currencyIn?.amount || "0";
91
- }, [isSameToken, totalAmount, anyspendQuote]);
92
- const srcAmountFormatted = (0, react_5.useMemo)(() => {
93
- if (!selectedSrcToken)
94
- return "0";
95
- const decimals = selectedSrcToken.decimals || 18;
96
- return (0, number_1.formatTokenAmount)(BigInt(srcAmount || "0"), decimals);
97
- }, [srcAmount, selectedSrcToken]);
98
- // Check if user has enough balance
99
- const hasEnoughBalance = balance.raw >= BigInt(srcAmount || "0");
100
- // Order tracking state
101
- const [orderId, setOrderId] = (0, react_5.useState)();
102
- const [isSendingDeposit, setIsSendingDeposit] = (0, react_5.useState)(false);
103
- const depositSentRef = (0, react_5.useRef)(false);
104
- // Wallet transaction execution
105
- const { switchChainAndExecute } = (0, react_1.useUnifiedChainSwitchAndExecute)();
106
- // Create order
107
- const { createOrder, isCreatingOrder } = (0, useAnyspendCreateOrder_1.useAnyspendCreateOrder)({
108
- onSuccess: (data) => {
109
- const id = data?.data?.id;
110
- if (id) {
111
- setOrderId(id);
112
- }
113
- },
114
- onError: (error) => {
115
- setIsSendingDeposit(false);
116
- onError?.(error);
117
- },
118
- });
119
- // Poll order status until executed
120
- const { orderAndTransactions: oat } = (0, useAnyspendOrderAndTransactions_1.useAnyspendOrderAndTransactions)(orderId);
121
- // Send deposit transaction once order is created and ready
122
- (0, react_5.useEffect)(() => {
123
- if (!oat?.data?.order || depositSentRef.current)
124
- return;
125
- const order = oat.data.order;
126
- if (order.status !== "scanning_deposit_transaction")
127
- return;
128
- if (oat.data.depositTxs?.length)
129
- return; // Already deposited
130
- depositSentRef.current = true;
131
- const sendDeposit = async () => {
132
- try {
133
- setIsSendingDeposit(true);
134
- const amount = BigInt(order.srcAmount);
135
- if ((0, token_1.isNativeToken)(order.srcTokenAddress)) {
136
- await switchChainAndExecute(order.srcChain, {
137
- to: order.globalAddress,
138
- value: amount,
139
- });
140
- }
141
- else {
142
- const data = (0, viem_1.encodeFunctionData)({
143
- abi: viem_1.erc20Abi,
144
- functionName: "transfer",
145
- args: [order.globalAddress, amount],
146
- });
147
- await switchChainAndExecute(order.srcChain, {
148
- to: order.srcTokenAddress,
149
- data,
150
- value: BigInt(0),
151
- });
152
- }
153
- }
154
- catch (error) {
155
- depositSentRef.current = false;
156
- onError?.(error instanceof Error ? error : new Error(error?.message || "Transaction rejected"));
157
- }
158
- finally {
159
- setIsSendingDeposit(false);
160
- }
161
- };
162
- sendDeposit();
163
- }, [oat, switchChainAndExecute, onError]);
164
- // Only call onSuccess when order is actually executed with a real txHash
165
- (0, useOnOrderSuccess_1.useOnOrderSuccess)({
166
- orderData: oat,
167
- orderId,
168
- onSuccess: (txHash) => {
169
- onSuccess?.({ orderId, txHash });
170
- },
171
- });
172
- const isWaitingForExecution = !!orderId && oat?.data?.order.status !== "executed";
173
- const handlePay = (0, react_5.useCallback)(async () => {
174
- if (!selectedSrcToken || !walletAddress)
175
- return;
176
- depositSentRef.current = false;
177
- const dstToken = {
178
- address: destinationTokenAddress,
179
- chainId: destinationTokenChainId,
180
- decimals: dstTokenData?.decimals || 18,
181
- symbol: dstTokenData?.symbol || "",
182
- name: dstTokenData?.name || "",
183
- metadata: {
184
- logoURI: dstTokenData?.logoURI || "",
185
- },
186
- };
187
- createOrder({
188
- recipientAddress,
189
- orderType: "swap",
190
- srcChain: selectedSrcChainId,
191
- dstChain: destinationTokenChainId,
192
- srcToken: selectedSrcToken,
193
- dstToken,
194
- srcAmount,
195
- expectedDstAmount: totalAmount,
196
- callbackMetadata,
197
- });
198
- }, [
199
- selectedSrcToken,
200
- walletAddress,
201
- recipientAddress,
202
- selectedSrcChainId,
203
- destinationTokenChainId,
204
- destinationTokenAddress,
205
- dstTokenData,
206
- srcAmount,
207
- totalAmount,
208
- callbackMetadata,
209
- createOrder,
210
- ]);
211
- const handleSelectToken = (token) => {
212
- setSelectedSrcToken(token);
213
- setSelectedSrcChainId(token.chainId);
214
- setShowTokenSelector(false);
215
- setTokenSearchQuery("");
216
- };
217
- const isLoading = isLoadingAnyspendQuote || isLoadingTokens;
218
- const isPending = isCreatingOrder || isSendingDeposit || isWaitingForExecution;
219
- const canPay = walletAddress && selectedSrcToken && hasEnoughBalance && !isLoading && !isPending;
220
- return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("anyspend-crypto-panel flex flex-col gap-4", classes?.cryptoPanel), children: [(0, jsx_runtime_1.jsxs)("div", { className: "anyspend-token-selector", children: [(0, jsx_runtime_1.jsx)("label", { className: "anyspend-token-label mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-300", children: "Pay with" }), (0, jsx_runtime_1.jsxs)("button", { onClick: () => setShowTokenSelector(true), className: (0, cn_1.cn)("anyspend-token-btn flex w-full items-center justify-between rounded-xl border border-gray-200 bg-white px-4 py-3 transition-colors hover:border-gray-300 dark:border-gray-700 dark:bg-gray-800 dark:hover:border-gray-600", classes?.tokenSelector), children: [selectedSrcToken ? ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)(ChainTokenIcon_1.ChainTokenIcon, { chainUrl: anyspend_1.ALL_CHAINS[selectedSrcToken.chainId]?.logoUrl || "", tokenUrl: selectedSrcToken.metadata?.logoURI, className: "h-8 w-8" }), (0, jsx_runtime_1.jsxs)("div", { className: "text-left", children: [(0, jsx_runtime_1.jsx)("p", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: selectedSrcToken.symbol }), (0, jsx_runtime_1.jsxs)("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: ["Balance: ", balance.formatted] })] })] })) : ((0, jsx_runtime_1.jsx)("span", { className: "text-sm text-gray-400", children: "Select token" })), (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { className: "h-4 w-4 text-gray-400" })] })] }), (0, jsx_runtime_1.jsx)(TokenSelectorModal, { open: showTokenSelector, onClose: () => {
221
- setShowTokenSelector(false);
222
- setTokenSearchQuery("");
223
- }, tokenList: tokenList, isLoadingTokens: isLoadingTokens, tokenSearchQuery: tokenSearchQuery, onSearchChange: setTokenSearchQuery, onSelectToken: handleSelectToken, selectedToken: selectedSrcToken, walletAddress: walletAddress, chainId: selectedSrcChainId, onChainChange: chainId => {
224
- setSelectedSrcChainId(chainId);
225
- setSelectedSrcToken(null);
226
- setTokenSearchQuery("");
227
- } }), (0, jsx_runtime_1.jsx)(react_4.motion.div, { initial: { opacity: 0, y: 6 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.25, ease: "easeOut" }, className: (0, cn_1.cn)("anyspend-quote-display rounded-xl border border-gray-200 bg-gray-50 px-4 py-3 dark:border-gray-700 dark:bg-gray-800/50", classes?.quoteDisplay), children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-sm text-gray-500 dark:text-gray-400", children: "You pay" }), (0, jsx_runtime_1.jsx)(react_4.AnimatePresence, { mode: "wait", children: isLoadingAnyspendQuote ? ((0, jsx_runtime_1.jsx)(react_4.motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.15 }, children: (0, jsx_runtime_1.jsx)(react_2.TextShimmer, { duration: 1, className: "text-sm", children: "Fetching quote..." }) }, "quote-loading")) : ((0, jsx_runtime_1.jsxs)(react_4.motion.span, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.15 }, className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: [srcAmountFormatted, " ", selectedSrcToken?.symbol || ""] }, "quote-amount")) })] }) }), (0, jsx_runtime_1.jsx)(react_4.AnimatePresence, { children: walletAddress && selectedSrcToken && !hasEnoughBalance && !isLoading && ((0, jsx_runtime_1.jsxs)(react_4.motion.p, { initial: { opacity: 0, height: 0 }, animate: { opacity: 1, height: "auto" }, exit: { opacity: 0, height: 0 }, transition: { duration: 0.2, ease: "easeOut" }, className: "anyspend-balance-warning text-center text-sm text-red-500", children: ["Insufficient ", selectedSrcToken.symbol, " balance"] }, "balance-warning")) }), !walletAddress ? ((0, jsx_runtime_1.jsx)("button", { onClick: () => {
228
- setB3ModalContentType({ type: "signInWithB3", showBackButton: false, chain: b3Chain_1.thirdwebB3Chain, partnerId });
229
- setB3ModalOpen(true);
230
- }, className: (0, cn_1.cn)("anyspend-crypto-pay-btn w-full rounded-xl px-4 py-3.5 text-sm font-semibold text-white transition-all", "bg-blue-600 hover:bg-blue-700 active:scale-[0.98]", classes?.payButton), style: themeColor ? { backgroundColor: themeColor } : undefined, children: "Connect Wallet to Pay" })) : ((0, jsx_runtime_1.jsx)("button", { onClick: handlePay, disabled: !canPay, className: (0, cn_1.cn)("anyspend-crypto-pay-btn w-full rounded-xl px-4 py-3.5 text-sm font-semibold text-white transition-all", canPay ? "bg-blue-600 hover:bg-blue-700 active:scale-[0.98]" : "cursor-not-allowed bg-blue-600 opacity-50", classes?.payButton), style: !canPay ? undefined : themeColor ? { backgroundColor: themeColor } : undefined, children: isPending ? ((0, jsx_runtime_1.jsxs)("span", { className: "flex items-center justify-center gap-2", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "h-4 w-4 animate-spin" }), isCreatingOrder
231
- ? "Creating order..."
232
- : isSendingDeposit
233
- ? "Confirm in wallet..."
234
- : "Confirming transaction..."] })) : (buttonText) }))] }));
235
- }
236
- const SOURCE_CHAINS = Object.values(chain_1.EVM_MAINNET).map(c => ({ id: c.id, name: c.name, logoUrl: c.logoUrl }));
237
- function TokenSelectorModal({ open, onClose, tokenList, isLoadingTokens, tokenSearchQuery, onSearchChange, onSelectToken, selectedToken, walletAddress, chainId, onChainChange, }) {
238
- const isMobile = (0, react_3.useIsMobile)();
239
- const searchInputRef = (0, react_5.useRef)(null);
240
- // Fetch all balances for the wallet on this chain
241
- const { data: balanceData } = (0, react_1.useSimBalance)(walletAddress, [chainId]);
242
- // Build a lookup map: lowercase token address -> balance info
243
- const balanceMap = (0, react_5.useMemo)(() => {
244
- const map = new Map();
245
- if (!balanceData?.balances)
246
- return map;
247
- for (const b of balanceData.balances) {
248
- if (b.amount && BigInt(b.amount) > BigInt(0)) {
249
- map.set(b.address.toLowerCase(), {
250
- raw: BigInt(b.amount),
251
- formatted: (0, number_1.formatTokenAmount)(BigInt(b.amount), b.decimals),
252
- decimals: b.decimals,
253
- });
254
- }
255
- }
256
- return map;
257
- }, [balanceData]);
258
- // Sort tokens: tokens with balance first (sorted by balance desc), then the rest
259
- const sortedTokenList = (0, react_5.useMemo)(() => {
260
- if (!tokenList)
261
- return undefined;
262
- const withBalance = [];
263
- const withoutBalance = [];
264
- for (const token of tokenList) {
265
- const bal = balanceMap.get(token.address.toLowerCase());
266
- if (bal) {
267
- withBalance.push(token);
268
- }
269
- else {
270
- withoutBalance.push(token);
271
- }
272
- }
273
- withBalance.sort((a, b) => {
274
- const balA = balanceMap.get(a.address.toLowerCase())?.raw || BigInt(0);
275
- const balB = balanceMap.get(b.address.toLowerCase())?.raw || BigInt(0);
276
- if (balB > balA)
277
- return 1;
278
- if (balB < balA)
279
- return -1;
280
- return 0;
281
- });
282
- return [...withBalance, ...withoutBalance];
283
- }, [tokenList, balanceMap]);
284
- // Keep showing the previous list while new chain tokens are loading
285
- const prevListRef = (0, react_5.useRef)(undefined);
286
- if (sortedTokenList && sortedTokenList.length > 0) {
287
- prevListRef.current = sortedTokenList;
288
- }
289
- const displayList = sortedTokenList && sortedTokenList.length > 0
290
- ? sortedTokenList
291
- : isLoadingTokens
292
- ? prevListRef.current
293
- : sortedTokenList;
294
- // Focus search input when modal opens
295
- (0, react_5.useEffect)(() => {
296
- if (open) {
297
- const timer = setTimeout(() => searchInputRef.current?.focus(), 100);
298
- return () => clearTimeout(timer);
299
- }
300
- }, [open]);
301
- const ModalComponent = isMobile ? drawer_1.Drawer : dialog_1.Dialog;
302
- const ModalContent = isMobile ? drawer_1.DrawerContent : dialog_1.DialogContent;
303
- const ModalTitle = isMobile ? drawer_1.DrawerTitle : dialog_1.DialogTitle;
304
- const ModalDescription = isMobile ? drawer_1.DrawerDescription : dialog_1.DialogDescription;
305
- return ((0, jsx_runtime_1.jsxs)(ModalComponent, { open: open, onOpenChange: (v) => {
306
- if (!v)
307
- onClose();
308
- }, children: [(0, jsx_runtime_1.jsx)("style", { dangerouslySetInnerHTML: {
309
- __html: `.anyspend-token-modal .b3-modal-ga-branding { display: none; } .anyspend-token-modal .modal-inner-content { margin-bottom: 0; }`,
310
- } }), (0, jsx_runtime_1.jsxs)(ModalContent, { className: "anyspend-token-modal flex max-h-[80dvh] flex-col overflow-hidden rounded-2xl bg-white p-0 shadow-xl sm:max-h-[70dvh] dark:bg-gray-900", children: [(0, jsx_runtime_1.jsx)(ModalTitle, { className: "sr-only", children: "Select token" }), (0, jsx_runtime_1.jsx)(ModalDescription, { className: "sr-only", children: "Choose a token to pay with" }), (0, jsx_runtime_1.jsxs)("div", { className: "flex min-h-0 flex-1 flex-col", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-between px-5 py-4", children: (0, jsx_runtime_1.jsx)("h3", { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: "Select token" }) }), (0, jsx_runtime_1.jsx)("div", { className: "anyspend-chain-selector flex items-center gap-2 px-5 pb-3", children: SOURCE_CHAINS.map(chain => ((0, jsx_runtime_1.jsxs)("button", { onClick: () => onChainChange(chain.id), title: chain.name, className: "relative shrink-0 rounded-full transition-opacity", style: { opacity: chain.id === chainId ? 1 : 0.4 }, children: [(0, jsx_runtime_1.jsx)("img", { src: chain.logoUrl, alt: chain.name, className: "h-7 w-7 rounded-full" }), chain.id === chainId && ((0, jsx_runtime_1.jsx)("div", { className: "absolute inset-0 rounded-full", style: { boxShadow: "0 0 0 2px #3b82f6" } }))] }, chain.id))) }), (0, jsx_runtime_1.jsxs)("div", { className: "anyspend-token-search flex items-center gap-2 border-b border-gray-100 px-5 py-2.5 dark:border-gray-800", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Search, { className: "h-4 w-4 shrink-0 text-gray-400" }), (0, jsx_runtime_1.jsx)("input", { ref: searchInputRef, type: "text", value: tokenSearchQuery, onChange: e => onSearchChange(e.target.value), placeholder: "Search tokens...", className: "anyspend-token-search-input w-full bg-transparent text-sm outline-none placeholder:text-gray-400 dark:text-gray-100" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "anyspend-token-list relative flex-1 overflow-y-auto", style: { minHeight: 300 }, children: [displayList?.map((token) => {
311
- const isSelected = selectedToken &&
312
- selectedToken.address.toLowerCase() === token.address.toLowerCase() &&
313
- selectedToken.chainId === token.chainId;
314
- const tokenBalance = balanceMap.get(token.address.toLowerCase());
315
- return ((0, jsx_runtime_1.jsxs)("button", { onClick: () => onSelectToken(token), className: (0, cn_1.cn)("anyspend-token-option flex w-full items-center gap-3 px-5 py-3 text-left transition-colors hover:bg-gray-50 dark:hover:bg-gray-800", isSelected && "bg-blue-50 dark:bg-blue-900/20"), children: [(0, jsx_runtime_1.jsx)(ChainTokenIcon_1.ChainTokenIcon, { chainUrl: anyspend_1.ALL_CHAINS[token.chainId]?.logoUrl || "", tokenUrl: token.metadata?.logoURI, className: "h-8 w-8" }), (0, jsx_runtime_1.jsxs)("div", { className: "min-w-0 flex-1", children: [(0, jsx_runtime_1.jsx)("p", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: token.symbol }), (0, jsx_runtime_1.jsx)("p", { className: "truncate text-xs text-gray-500 dark:text-gray-400", children: token.name })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [tokenBalance && ((0, jsx_runtime_1.jsx)("span", { className: "text-xs font-medium text-gray-600 dark:text-gray-300", children: tokenBalance.formatted })), isSelected && (0, jsx_runtime_1.jsx)("div", { className: "h-2 w-2 rounded-full bg-blue-600" })] })] }, `${token.chainId}-${token.address}`));
316
- }), !isLoadingTokens && displayList && displayList.length === 0 && ((0, jsx_runtime_1.jsx)("div", { className: "px-5 py-8 text-center text-sm text-gray-400", children: "No tokens found" }))] })] })] })] }));
317
- }
@@ -1,17 +0,0 @@
1
- import type { AnySpendCheckoutClasses } from "./AnySpendCheckout";
2
- interface QRCheckoutPanelProps {
3
- recipientAddress: string;
4
- destinationTokenAddress: string;
5
- destinationTokenChainId: number;
6
- totalAmount: string;
7
- themeColor?: string;
8
- onSuccess?: (result: {
9
- txHash?: string;
10
- orderId?: string;
11
- }) => void;
12
- onError?: (error: Error) => void;
13
- callbackMetadata?: Record<string, unknown>;
14
- classes?: AnySpendCheckoutClasses;
15
- }
16
- export declare function QRCheckoutPanel({ recipientAddress, destinationTokenAddress, destinationTokenChainId, totalAmount, themeColor, onSuccess, onError, callbackMetadata, classes, }: QRCheckoutPanelProps): import("react/jsx-runtime").JSX.Element;
17
- export {};