@b3dotfun/sdk 0.1.66 → 0.1.68

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 (365) 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 +117 -0
  36. package/dist/cjs/anyspend/react/components/checkout/AnySpendCheckout.js +158 -0
  37. package/dist/cjs/anyspend/react/components/checkout/AnySpendCheckoutTrigger.d.ts +81 -0
  38. package/dist/cjs/anyspend/react/components/checkout/AnySpendCheckoutTrigger.js +61 -0
  39. package/dist/cjs/anyspend/react/components/checkout/CartItemRow.d.ts +8 -0
  40. package/dist/cjs/anyspend/react/components/checkout/CartItemRow.js +9 -0
  41. package/dist/cjs/anyspend/react/components/checkout/CartSummary.d.ts +30 -0
  42. package/dist/cjs/anyspend/react/components/checkout/CartSummary.js +20 -0
  43. package/dist/cjs/anyspend/react/components/checkout/CheckoutCartPanel.d.ts +32 -0
  44. package/dist/cjs/anyspend/react/components/checkout/CheckoutCartPanel.js +27 -0
  45. package/dist/cjs/anyspend/react/components/checkout/CheckoutFormField.d.ts +10 -0
  46. package/dist/cjs/anyspend/react/components/checkout/CheckoutFormField.js +31 -0
  47. package/dist/cjs/anyspend/react/components/checkout/CheckoutFormPanel.d.ts +39 -0
  48. package/dist/cjs/anyspend/react/components/checkout/CheckoutFormPanel.js +75 -0
  49. package/dist/cjs/anyspend/react/components/checkout/CheckoutLayout.d.ts +10 -0
  50. package/dist/cjs/anyspend/react/components/checkout/CheckoutLayout.js +13 -0
  51. package/dist/cjs/anyspend/react/components/checkout/CheckoutOrderStatus.d.ts +28 -0
  52. package/dist/cjs/anyspend/react/components/checkout/CheckoutOrderStatus.js +65 -0
  53. package/dist/cjs/anyspend/react/components/checkout/CheckoutPaymentPanel.d.ts +31 -0
  54. package/dist/cjs/anyspend/react/components/checkout/CheckoutPaymentPanel.js +64 -0
  55. package/dist/cjs/anyspend/react/components/checkout/CheckoutSuccess.d.ts +10 -0
  56. package/dist/cjs/anyspend/react/components/checkout/CheckoutSuccess.js +31 -0
  57. package/dist/cjs/anyspend/react/components/checkout/CoinbaseCheckoutPanel.d.ts +20 -0
  58. package/dist/cjs/anyspend/react/components/checkout/CoinbaseCheckoutPanel.js +170 -0
  59. package/dist/cjs/anyspend/react/components/checkout/CryptoPayPanel.d.ts +23 -0
  60. package/dist/cjs/anyspend/react/components/checkout/CryptoPayPanel.js +324 -0
  61. package/dist/cjs/anyspend/react/components/checkout/DiscountCodeInput.d.ts +12 -0
  62. package/dist/cjs/anyspend/react/components/checkout/DiscountCodeInput.js +62 -0
  63. package/dist/cjs/anyspend/react/components/checkout/FiatCheckoutPanel.d.ts +20 -0
  64. package/dist/cjs/anyspend/react/components/checkout/FiatCheckoutPanel.js +269 -0
  65. package/dist/cjs/anyspend/react/components/checkout/PoweredByBranding.d.ts +8 -0
  66. package/dist/cjs/anyspend/react/components/checkout/PoweredByBranding.js +9 -0
  67. package/dist/cjs/anyspend/react/components/checkout/ShippingSelector.d.ts +11 -0
  68. package/dist/cjs/anyspend/react/components/checkout/ShippingSelector.js +20 -0
  69. package/dist/cjs/anyspend/react/components/common/ConnectWalletPayment.js +19 -5
  70. package/dist/cjs/anyspend/react/components/common/CryptoPaySection.js +1 -1
  71. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethodDisplay.js +1 -1
  72. package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.js +1 -1
  73. package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.js +4 -4
  74. package/dist/cjs/anyspend/react/components/common/OrderStatus.d.ts +2 -1
  75. package/dist/cjs/anyspend/react/components/common/OrderStatus.js +93 -19
  76. package/dist/cjs/anyspend/react/components/common/PanelOnramp.js +4 -4
  77. package/dist/cjs/anyspend/react/components/common/PaySection.js +1 -1
  78. package/dist/cjs/anyspend/react/components/common/StepProgress.d.ts +5 -1
  79. package/dist/cjs/anyspend/react/components/common/StepProgress.js +6 -11
  80. package/dist/cjs/anyspend/react/components/common/TransferCryptoDetails.js +1 -1
  81. package/dist/cjs/anyspend/react/components/common/TransferResultScreen.js +5 -1
  82. package/dist/cjs/anyspend/react/components/context/AnySpendCustomizationContext.d.ts +16 -0
  83. package/dist/cjs/anyspend/react/components/context/AnySpendCustomizationContext.js +92 -0
  84. package/dist/cjs/anyspend/react/components/icons/AnimatedCheckmark.d.ts +23 -0
  85. package/dist/cjs/anyspend/react/components/icons/AnimatedCheckmark.js +71 -0
  86. package/dist/cjs/anyspend/react/components/index.d.ts +8 -1
  87. package/dist/cjs/anyspend/react/components/index.js +10 -1
  88. package/dist/cjs/anyspend/react/components/types/classes.d.ts +50 -0
  89. package/dist/cjs/anyspend/react/components/types/customization.d.ts +75 -0
  90. package/dist/cjs/anyspend/react/components/types/customization.js +2 -0
  91. package/dist/cjs/anyspend/react/hooks/useAnyspendCreateOnrampOrder.d.ts +8 -2
  92. package/dist/cjs/anyspend/react/hooks/useAnyspendCreateOrder.d.ts +8 -2
  93. package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.d.ts +15 -3
  94. package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.js +3 -2
  95. package/dist/cjs/anyspend/react/hooks/useCreateDepositFirstOrder.d.ts +9 -2
  96. package/dist/cjs/anyspend/react/hooks/useCreateDepositFirstOrder.js +1 -0
  97. package/dist/cjs/anyspend/services/anyspend.d.ts +1 -0
  98. package/dist/cjs/anyspend/services/anyspend.js +17 -2
  99. package/dist/cjs/anyspend/types/forms.d.ts +92 -0
  100. package/dist/cjs/anyspend/types/forms.js +8 -0
  101. package/dist/cjs/anyspend/utils/format.js +12 -3
  102. package/dist/cjs/app.shared.js +8 -0
  103. package/dist/cjs/global-account/react/components/B3DynamicModal.js +9 -3
  104. package/dist/cjs/global-account/react/components/WalletImage/WalletImage.d.ts +1 -1
  105. package/dist/cjs/global-account/react/components/ui/command.d.ts +7 -7
  106. package/dist/cjs/global-account/react/components/ui/dialog.d.ts +2 -0
  107. package/dist/cjs/global-account/react/components/ui/dialog.js +2 -2
  108. package/dist/cjs/global-account/react/components/ui/drawer.d.ts +3 -1
  109. package/dist/cjs/global-account/react/components/ui/drawer.js +1 -1
  110. package/dist/cjs/global-account/react/hooks/useAuth.d.ts +1 -1
  111. package/dist/cjs/global-account/react/hooks/useAuthentication.d.ts +1 -1
  112. package/dist/cjs/global-account/react/hooks/useFirstEOA.d.ts +4 -4
  113. package/dist/cjs/global-account/react/hooks/useUser.d.ts +1 -1
  114. package/dist/cjs/global-account/react/hooks/useUserQuery.d.ts +1 -1
  115. package/dist/cjs/global-account/react/stores/useModalStore.d.ts +53 -1
  116. package/dist/cjs/shared/constants/chains/b3Chain.d.ts +2 -2
  117. package/dist/cjs/shared/constants/chains/supported.d.ts +3 -3
  118. package/dist/cjs/shared/utils/number.d.ts +5 -0
  119. package/dist/cjs/shared/utils/number.js +13 -0
  120. package/dist/esm/anyspend/react/components/AnySpend.d.ts +9 -0
  121. package/dist/esm/anyspend/react/components/AnySpend.js +41 -12
  122. package/dist/esm/anyspend/react/components/AnySpendBondKit.d.ts +6 -1
  123. package/dist/esm/anyspend/react/components/AnySpendBondKit.js +2 -2
  124. package/dist/esm/anyspend/react/components/AnySpendBuySpin.d.ts +7 -1
  125. package/dist/esm/anyspend/react/components/AnySpendBuySpin.js +2 -2
  126. package/dist/esm/anyspend/react/components/AnySpendCollectorClubPurchase.d.ts +5 -1
  127. package/dist/esm/anyspend/react/components/AnySpendCollectorClubPurchase.js +2 -2
  128. package/dist/esm/anyspend/react/components/AnySpendCustom.d.ts +9 -0
  129. package/dist/esm/anyspend/react/components/AnySpendCustom.js +16 -14
  130. package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.d.ts +9 -0
  131. package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.js +42 -12
  132. package/dist/esm/anyspend/react/components/AnySpendDeposit.d.ts +10 -1
  133. package/dist/esm/anyspend/react/components/AnySpendDeposit.js +5 -4
  134. package/dist/esm/anyspend/react/components/AnySpendDepositUpside.d.ts +7 -1
  135. package/dist/esm/anyspend/react/components/AnySpendDepositUpside.js +2 -2
  136. package/dist/esm/anyspend/react/components/AnySpendNFT.d.ts +7 -1
  137. package/dist/esm/anyspend/react/components/AnySpendNFT.js +2 -2
  138. package/dist/esm/anyspend/react/components/AnySpendStakeB3.d.ts +7 -1
  139. package/dist/esm/anyspend/react/components/AnySpendStakeB3.js +2 -2
  140. package/dist/esm/anyspend/react/components/AnySpendStakeB3ExactIn.d.ts +7 -1
  141. package/dist/esm/anyspend/react/components/AnySpendStakeB3ExactIn.js +2 -2
  142. package/dist/esm/anyspend/react/components/AnySpendStakeUpside.d.ts +7 -1
  143. package/dist/esm/anyspend/react/components/AnySpendStakeUpside.js +2 -2
  144. package/dist/esm/anyspend/react/components/AnySpendStakeUpsideExactIn.d.ts +7 -1
  145. package/dist/esm/anyspend/react/components/AnySpendStakeUpsideExactIn.js +2 -2
  146. package/dist/esm/anyspend/react/components/AnySpendTournament.d.ts +11 -0
  147. package/dist/esm/anyspend/react/components/AnySpendTournament.js +2 -2
  148. package/dist/esm/anyspend/react/components/AnyspendDepositHype.d.ts +7 -1
  149. package/dist/esm/anyspend/react/components/AnyspendDepositHype.js +2 -2
  150. package/dist/esm/anyspend/react/components/AnyspendSignatureMint.d.ts +5 -1
  151. package/dist/esm/anyspend/react/components/AnyspendSignatureMint.js +2 -2
  152. package/dist/esm/anyspend/react/components/checkout/AddressForm.d.ts +9 -0
  153. package/dist/esm/anyspend/react/components/checkout/AddressForm.js +11 -0
  154. package/dist/esm/anyspend/react/components/checkout/AnySpendCheckout.d.ts +117 -0
  155. package/dist/esm/anyspend/react/components/checkout/AnySpendCheckout.js +155 -0
  156. package/dist/esm/anyspend/react/components/checkout/AnySpendCheckoutTrigger.d.ts +81 -0
  157. package/dist/esm/anyspend/react/components/checkout/AnySpendCheckoutTrigger.js +58 -0
  158. package/dist/esm/anyspend/react/components/checkout/CartItemRow.d.ts +8 -0
  159. package/dist/esm/anyspend/react/components/checkout/CartItemRow.js +6 -0
  160. package/dist/esm/anyspend/react/components/checkout/CartSummary.d.ts +30 -0
  161. package/dist/esm/anyspend/react/components/checkout/CartSummary.js +17 -0
  162. package/dist/esm/anyspend/react/components/checkout/CheckoutCartPanel.d.ts +32 -0
  163. package/dist/esm/anyspend/react/components/checkout/CheckoutCartPanel.js +24 -0
  164. package/dist/esm/anyspend/react/components/checkout/CheckoutFormField.d.ts +10 -0
  165. package/dist/esm/anyspend/react/components/checkout/CheckoutFormField.js +28 -0
  166. package/dist/esm/anyspend/react/components/checkout/CheckoutFormPanel.d.ts +39 -0
  167. package/dist/esm/anyspend/react/components/checkout/CheckoutFormPanel.js +72 -0
  168. package/dist/esm/anyspend/react/components/checkout/CheckoutLayout.d.ts +10 -0
  169. package/dist/esm/anyspend/react/components/checkout/CheckoutLayout.js +10 -0
  170. package/dist/esm/anyspend/react/components/checkout/CheckoutOrderStatus.d.ts +28 -0
  171. package/dist/esm/anyspend/react/components/checkout/CheckoutOrderStatus.js +62 -0
  172. package/dist/esm/anyspend/react/components/checkout/CheckoutPaymentPanel.d.ts +31 -0
  173. package/dist/esm/anyspend/react/components/checkout/CheckoutPaymentPanel.js +61 -0
  174. package/dist/esm/anyspend/react/components/checkout/CheckoutSuccess.d.ts +10 -0
  175. package/dist/esm/anyspend/react/components/checkout/CheckoutSuccess.js +28 -0
  176. package/dist/esm/anyspend/react/components/checkout/CoinbaseCheckoutPanel.d.ts +20 -0
  177. package/dist/esm/anyspend/react/components/checkout/CoinbaseCheckoutPanel.js +167 -0
  178. package/dist/esm/anyspend/react/components/checkout/CryptoPayPanel.d.ts +23 -0
  179. package/dist/esm/anyspend/react/components/checkout/CryptoPayPanel.js +321 -0
  180. package/dist/esm/anyspend/react/components/checkout/DiscountCodeInput.d.ts +12 -0
  181. package/dist/esm/anyspend/react/components/checkout/DiscountCodeInput.js +59 -0
  182. package/dist/esm/anyspend/react/components/checkout/FiatCheckoutPanel.d.ts +20 -0
  183. package/dist/esm/anyspend/react/components/checkout/FiatCheckoutPanel.js +266 -0
  184. package/dist/esm/anyspend/react/components/checkout/PoweredByBranding.d.ts +8 -0
  185. package/dist/esm/anyspend/react/components/checkout/PoweredByBranding.js +6 -0
  186. package/dist/esm/anyspend/react/components/checkout/ShippingSelector.d.ts +11 -0
  187. package/dist/esm/anyspend/react/components/checkout/ShippingSelector.js +17 -0
  188. package/dist/esm/anyspend/react/components/common/ConnectWalletPayment.js +19 -5
  189. package/dist/esm/anyspend/react/components/common/CryptoPaySection.js +1 -1
  190. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethodDisplay.js +1 -1
  191. package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.js +1 -1
  192. package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.js +4 -4
  193. package/dist/esm/anyspend/react/components/common/OrderStatus.d.ts +2 -1
  194. package/dist/esm/anyspend/react/components/common/OrderStatus.js +96 -22
  195. package/dist/esm/anyspend/react/components/common/PanelOnramp.js +4 -4
  196. package/dist/esm/anyspend/react/components/common/PaySection.js +1 -1
  197. package/dist/esm/anyspend/react/components/common/StepProgress.d.ts +5 -1
  198. package/dist/esm/anyspend/react/components/common/StepProgress.js +6 -11
  199. package/dist/esm/anyspend/react/components/common/TransferCryptoDetails.js +1 -1
  200. package/dist/esm/anyspend/react/components/common/TransferResultScreen.js +7 -3
  201. package/dist/esm/anyspend/react/components/context/AnySpendCustomizationContext.d.ts +16 -0
  202. package/dist/esm/anyspend/react/components/context/AnySpendCustomizationContext.js +88 -0
  203. package/dist/esm/anyspend/react/components/icons/AnimatedCheckmark.d.ts +23 -0
  204. package/dist/esm/anyspend/react/components/icons/AnimatedCheckmark.js +68 -0
  205. package/dist/esm/anyspend/react/components/index.d.ts +8 -1
  206. package/dist/esm/anyspend/react/components/index.js +5 -0
  207. package/dist/esm/anyspend/react/components/types/classes.d.ts +50 -0
  208. package/dist/esm/anyspend/react/components/types/customization.d.ts +75 -0
  209. package/dist/esm/anyspend/react/components/types/customization.js +1 -0
  210. package/dist/esm/anyspend/react/hooks/useAnyspendCreateOnrampOrder.d.ts +8 -2
  211. package/dist/esm/anyspend/react/hooks/useAnyspendCreateOrder.d.ts +8 -2
  212. package/dist/esm/anyspend/react/hooks/useAnyspendFlow.d.ts +15 -3
  213. package/dist/esm/anyspend/react/hooks/useAnyspendFlow.js +3 -2
  214. package/dist/esm/anyspend/react/hooks/useCreateDepositFirstOrder.d.ts +9 -2
  215. package/dist/esm/anyspend/react/hooks/useCreateDepositFirstOrder.js +1 -0
  216. package/dist/esm/anyspend/services/anyspend.d.ts +1 -0
  217. package/dist/esm/anyspend/services/anyspend.js +17 -2
  218. package/dist/esm/anyspend/types/forms.d.ts +92 -0
  219. package/dist/esm/anyspend/types/forms.js +7 -0
  220. package/dist/esm/anyspend/utils/format.js +12 -3
  221. package/dist/esm/app.shared.js +8 -0
  222. package/dist/esm/global-account/react/components/B3DynamicModal.js +9 -3
  223. package/dist/esm/global-account/react/components/WalletImage/WalletImage.d.ts +1 -1
  224. package/dist/esm/global-account/react/components/ui/command.d.ts +7 -7
  225. package/dist/esm/global-account/react/components/ui/dialog.d.ts +2 -0
  226. package/dist/esm/global-account/react/components/ui/dialog.js +2 -2
  227. package/dist/esm/global-account/react/components/ui/drawer.d.ts +3 -1
  228. package/dist/esm/global-account/react/components/ui/drawer.js +1 -1
  229. package/dist/esm/global-account/react/hooks/useAuth.d.ts +1 -1
  230. package/dist/esm/global-account/react/hooks/useAuthentication.d.ts +1 -1
  231. package/dist/esm/global-account/react/hooks/useFirstEOA.d.ts +4 -4
  232. package/dist/esm/global-account/react/hooks/useUser.d.ts +1 -1
  233. package/dist/esm/global-account/react/hooks/useUserQuery.d.ts +1 -1
  234. package/dist/esm/global-account/react/stores/useModalStore.d.ts +53 -1
  235. package/dist/esm/shared/constants/chains/b3Chain.d.ts +2 -2
  236. package/dist/esm/shared/constants/chains/supported.d.ts +3 -3
  237. package/dist/esm/shared/utils/number.d.ts +5 -0
  238. package/dist/esm/shared/utils/number.js +12 -0
  239. package/dist/styles/index.css +1 -1
  240. package/dist/types/anyspend/react/components/AnySpend.d.ts +9 -0
  241. package/dist/types/anyspend/react/components/AnySpendBondKit.d.ts +6 -1
  242. package/dist/types/anyspend/react/components/AnySpendBuySpin.d.ts +7 -1
  243. package/dist/types/anyspend/react/components/AnySpendCollectorClubPurchase.d.ts +5 -1
  244. package/dist/types/anyspend/react/components/AnySpendCustom.d.ts +9 -0
  245. package/dist/types/anyspend/react/components/AnySpendCustomExactIn.d.ts +9 -0
  246. package/dist/types/anyspend/react/components/AnySpendDeposit.d.ts +10 -1
  247. package/dist/types/anyspend/react/components/AnySpendDepositUpside.d.ts +7 -1
  248. package/dist/types/anyspend/react/components/AnySpendNFT.d.ts +7 -1
  249. package/dist/types/anyspend/react/components/AnySpendStakeB3.d.ts +7 -1
  250. package/dist/types/anyspend/react/components/AnySpendStakeB3ExactIn.d.ts +7 -1
  251. package/dist/types/anyspend/react/components/AnySpendStakeUpside.d.ts +7 -1
  252. package/dist/types/anyspend/react/components/AnySpendStakeUpsideExactIn.d.ts +7 -1
  253. package/dist/types/anyspend/react/components/AnySpendTournament.d.ts +11 -0
  254. package/dist/types/anyspend/react/components/AnyspendDepositHype.d.ts +7 -1
  255. package/dist/types/anyspend/react/components/AnyspendSignatureMint.d.ts +5 -1
  256. package/dist/types/anyspend/react/components/checkout/AddressForm.d.ts +9 -0
  257. package/dist/types/anyspend/react/components/checkout/AnySpendCheckout.d.ts +117 -0
  258. package/dist/types/anyspend/react/components/checkout/AnySpendCheckoutTrigger.d.ts +81 -0
  259. package/dist/types/anyspend/react/components/checkout/CartItemRow.d.ts +8 -0
  260. package/dist/types/anyspend/react/components/checkout/CartSummary.d.ts +30 -0
  261. package/dist/types/anyspend/react/components/checkout/CheckoutCartPanel.d.ts +32 -0
  262. package/dist/types/anyspend/react/components/checkout/CheckoutFormField.d.ts +10 -0
  263. package/dist/types/anyspend/react/components/checkout/CheckoutFormPanel.d.ts +39 -0
  264. package/dist/types/anyspend/react/components/checkout/CheckoutLayout.d.ts +10 -0
  265. package/dist/types/anyspend/react/components/checkout/CheckoutOrderStatus.d.ts +28 -0
  266. package/dist/types/anyspend/react/components/checkout/CheckoutPaymentPanel.d.ts +31 -0
  267. package/dist/types/anyspend/react/components/checkout/CheckoutSuccess.d.ts +10 -0
  268. package/dist/types/anyspend/react/components/checkout/CoinbaseCheckoutPanel.d.ts +20 -0
  269. package/dist/types/anyspend/react/components/checkout/CryptoPayPanel.d.ts +23 -0
  270. package/dist/types/anyspend/react/components/checkout/DiscountCodeInput.d.ts +12 -0
  271. package/dist/types/anyspend/react/components/checkout/FiatCheckoutPanel.d.ts +20 -0
  272. package/dist/types/anyspend/react/components/checkout/PoweredByBranding.d.ts +8 -0
  273. package/dist/types/anyspend/react/components/checkout/ShippingSelector.d.ts +11 -0
  274. package/dist/types/anyspend/react/components/common/OrderStatus.d.ts +2 -1
  275. package/dist/types/anyspend/react/components/common/StepProgress.d.ts +5 -1
  276. package/dist/types/anyspend/react/components/context/AnySpendCustomizationContext.d.ts +16 -0
  277. package/dist/types/anyspend/react/components/icons/AnimatedCheckmark.d.ts +23 -0
  278. package/dist/types/anyspend/react/components/index.d.ts +8 -1
  279. package/dist/types/anyspend/react/components/types/classes.d.ts +50 -0
  280. package/dist/types/anyspend/react/components/types/customization.d.ts +75 -0
  281. package/dist/types/anyspend/react/hooks/useAnyspendCreateOnrampOrder.d.ts +8 -2
  282. package/dist/types/anyspend/react/hooks/useAnyspendCreateOrder.d.ts +8 -2
  283. package/dist/types/anyspend/react/hooks/useAnyspendFlow.d.ts +15 -3
  284. package/dist/types/anyspend/react/hooks/useCreateDepositFirstOrder.d.ts +9 -2
  285. package/dist/types/anyspend/services/anyspend.d.ts +1 -0
  286. package/dist/types/anyspend/types/forms.d.ts +92 -0
  287. package/dist/types/global-account/react/components/WalletImage/WalletImage.d.ts +1 -1
  288. package/dist/types/global-account/react/components/ui/command.d.ts +7 -7
  289. package/dist/types/global-account/react/components/ui/dialog.d.ts +2 -0
  290. package/dist/types/global-account/react/components/ui/drawer.d.ts +3 -1
  291. package/dist/types/global-account/react/hooks/useAuth.d.ts +1 -1
  292. package/dist/types/global-account/react/hooks/useAuthentication.d.ts +1 -1
  293. package/dist/types/global-account/react/hooks/useFirstEOA.d.ts +4 -4
  294. package/dist/types/global-account/react/hooks/useUser.d.ts +1 -1
  295. package/dist/types/global-account/react/hooks/useUserQuery.d.ts +1 -1
  296. package/dist/types/global-account/react/stores/useModalStore.d.ts +53 -1
  297. package/dist/types/shared/constants/chains/b3Chain.d.ts +2 -2
  298. package/dist/types/shared/constants/chains/supported.d.ts +3 -3
  299. package/dist/types/shared/utils/number.d.ts +5 -0
  300. package/package.json +1 -1
  301. package/src/anyspend/react/components/AnySpend.tsx +84 -37
  302. package/src/anyspend/react/components/AnySpendBondKit.tsx +12 -1
  303. package/src/anyspend/react/components/AnySpendBuySpin.tsx +14 -0
  304. package/src/anyspend/react/components/AnySpendCollectorClubPurchase.tsx +10 -0
  305. package/src/anyspend/react/components/AnySpendCustom.tsx +38 -20
  306. package/src/anyspend/react/components/AnySpendCustomExactIn.tsx +82 -35
  307. package/src/anyspend/react/components/AnySpendDeposit.tsx +24 -2
  308. package/src/anyspend/react/components/AnySpendDepositUpside.tsx +14 -0
  309. package/src/anyspend/react/components/AnySpendNFT.tsx +14 -0
  310. package/src/anyspend/react/components/AnySpendStakeB3.tsx +14 -0
  311. package/src/anyspend/react/components/AnySpendStakeB3ExactIn.tsx +14 -0
  312. package/src/anyspend/react/components/AnySpendStakeUpside.tsx +14 -0
  313. package/src/anyspend/react/components/AnySpendStakeUpsideExactIn.tsx +14 -0
  314. package/src/anyspend/react/components/AnySpendTournament.tsx +19 -0
  315. package/src/anyspend/react/components/AnyspendDepositHype.tsx +14 -0
  316. package/src/anyspend/react/components/AnyspendSignatureMint.tsx +10 -0
  317. package/src/anyspend/react/components/checkout/AddressForm.tsx +98 -0
  318. package/src/anyspend/react/components/checkout/AnySpendCheckout.tsx +398 -0
  319. package/src/anyspend/react/components/checkout/AnySpendCheckoutTrigger.tsx +221 -0
  320. package/src/anyspend/react/components/checkout/CartItemRow.tsx +58 -0
  321. package/src/anyspend/react/components/checkout/CartSummary.tsx +158 -0
  322. package/src/anyspend/react/components/checkout/CheckoutCartPanel.tsx +98 -0
  323. package/src/anyspend/react/components/checkout/CheckoutFormField.tsx +129 -0
  324. package/src/anyspend/react/components/checkout/CheckoutFormPanel.tsx +241 -0
  325. package/src/anyspend/react/components/checkout/CheckoutLayout.tsx +52 -0
  326. package/src/anyspend/react/components/checkout/CheckoutOrderStatus.tsx +224 -0
  327. package/src/anyspend/react/components/checkout/CheckoutPaymentPanel.tsx +341 -0
  328. package/src/anyspend/react/components/checkout/CheckoutSuccess.tsx +110 -0
  329. package/src/anyspend/react/components/checkout/CoinbaseCheckoutPanel.tsx +279 -0
  330. package/src/anyspend/react/components/checkout/CryptoPayPanel.tsx +630 -0
  331. package/src/anyspend/react/components/checkout/DiscountCodeInput.tsx +127 -0
  332. package/src/anyspend/react/components/checkout/FiatCheckoutPanel.tsx +612 -0
  333. package/src/anyspend/react/components/checkout/PoweredByBranding.tsx +42 -0
  334. package/src/anyspend/react/components/checkout/ShippingSelector.tsx +73 -0
  335. package/src/anyspend/react/components/common/ConnectWalletPayment.tsx +29 -7
  336. package/src/anyspend/react/components/common/CryptoPaySection.tsx +1 -1
  337. package/src/anyspend/react/components/common/CryptoPaymentMethodDisplay.tsx +1 -1
  338. package/src/anyspend/react/components/common/CryptoReceiveSection.tsx +2 -2
  339. package/src/anyspend/react/components/common/OrderDetailsCollapsible.tsx +5 -5
  340. package/src/anyspend/react/components/common/OrderStatus.tsx +140 -34
  341. package/src/anyspend/react/components/common/PanelOnramp.tsx +9 -9
  342. package/src/anyspend/react/components/common/PaySection.tsx +1 -1
  343. package/src/anyspend/react/components/common/StepProgress.tsx +40 -52
  344. package/src/anyspend/react/components/common/TokenBalance.tsx +0 -12
  345. package/src/anyspend/react/components/common/TransferCryptoDetails.tsx +1 -9
  346. package/src/anyspend/react/components/common/TransferResultScreen.tsx +19 -11
  347. package/src/anyspend/react/components/context/AnySpendCustomizationContext.tsx +124 -0
  348. package/src/anyspend/react/components/icons/AnimatedCheckmark.tsx +119 -0
  349. package/src/anyspend/react/components/index.ts +33 -0
  350. package/src/anyspend/react/components/types/classes.ts +70 -0
  351. package/src/anyspend/react/components/types/customization.ts +99 -0
  352. package/src/anyspend/react/hooks/useAnyspendCreateOnrampOrder.ts +3 -2
  353. package/src/anyspend/react/hooks/useAnyspendCreateOrder.ts +3 -2
  354. package/src/anyspend/react/hooks/useAnyspendFlow.ts +5 -1
  355. package/src/anyspend/react/hooks/useCreateDepositFirstOrder.ts +5 -2
  356. package/src/anyspend/services/anyspend.ts +19 -2
  357. package/src/anyspend/types/forms.ts +97 -0
  358. package/src/anyspend/utils/format.ts +12 -3
  359. package/src/app.shared.ts +11 -0
  360. package/src/global-account/react/components/B3DynamicModal.tsx +13 -4
  361. package/src/global-account/react/components/ui/dialog.tsx +17 -8
  362. package/src/global-account/react/components/ui/drawer.tsx +2 -2
  363. package/src/global-account/react/stores/useModalStore.ts +52 -1
  364. package/src/shared/utils/number.ts +12 -0
  365. package/src/styles/index.css +48 -2
@@ -0,0 +1,167 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useAnyspendCreateOnrampOrder, useGeoOnrampOptions } from "../../../../anyspend/react/index.js";
4
+ import { anyspendService } from "../../../../anyspend/services/anyspend.js";
5
+ import { formatTokenAmount } from "../../../../shared/utils/number.js";
6
+ import { ShinyButton, TextShimmer, useTokenData } from "../../../../global-account/react/index.js";
7
+ import { Loader2 } from "lucide-react";
8
+ import { AnimatePresence, motion } from "motion/react";
9
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
10
+ /** Map chain IDs to Coinbase blockchain identifiers */
11
+ const CHAIN_ID_TO_COINBASE_BLOCKCHAIN = {
12
+ 1: "ethereum",
13
+ 8453: "base",
14
+ 42161: "arbitrum",
15
+ 10: "optimism",
16
+ 137: "polygon",
17
+ 43114: "avalanche",
18
+ 56: "bsc",
19
+ };
20
+ export function CoinbaseCheckoutPanel({ recipientAddress, destinationTokenAddress, destinationTokenChainId, totalAmount, themeColor, onSuccess, onOrderCreated, onError, callbackMetadata, }) {
21
+ // Stable refs for callback props to avoid re-triggering effects
22
+ const onSuccessRef = useRef(onSuccess);
23
+ onSuccessRef.current = onSuccess;
24
+ const onOrderCreatedRef = useRef(onOrderCreated);
25
+ onOrderCreatedRef.current = onOrderCreated;
26
+ const onErrorRef = useRef(onError);
27
+ onErrorRef.current = onError;
28
+ const { data: tokenData } = useTokenData(destinationTokenChainId, destinationTokenAddress);
29
+ const formattedAmount = useMemo(() => {
30
+ const decimals = tokenData?.decimals || 18;
31
+ return formatTokenAmount(BigInt(totalAmount), decimals);
32
+ }, [totalAmount, tokenData]);
33
+ const { geoData, coinbaseAvailablePaymentMethods, isLoading } = useGeoOnrampOptions(formattedAmount);
34
+ // Order + redirect state
35
+ const [orderId, setOrderId] = useState(null);
36
+ const [isRedirecting, setIsRedirecting] = useState(false);
37
+ const [error, setError] = useState(null);
38
+ const orderCreatedRef = useRef(false);
39
+ const { createOrder, isCreatingOrder } = useAnyspendCreateOnrampOrder({
40
+ onSuccess: data => {
41
+ const id = data.data?.id;
42
+ if (id) {
43
+ setOrderId(id);
44
+ }
45
+ else {
46
+ setError("Failed to create Coinbase order. Please try again.");
47
+ }
48
+ },
49
+ onError: (err) => {
50
+ setError(err.message || "Failed to create payment order.");
51
+ onErrorRef.current?.(err);
52
+ },
53
+ });
54
+ // Once we have orderId, generate Coinbase onramp URL and redirect
55
+ useEffect(() => {
56
+ if (!orderId || isRedirecting)
57
+ return;
58
+ const blockchain = CHAIN_ID_TO_COINBASE_BLOCKCHAIN[destinationTokenChainId];
59
+ if (!blockchain) {
60
+ setError(`Coinbase Pay is not supported for this chain.`);
61
+ return;
62
+ }
63
+ const paymentMethodId = coinbaseAvailablePaymentMethods[0]?.id || "CARD";
64
+ setIsRedirecting(true);
65
+ anyspendService
66
+ .getCoinbaseOnrampUrl({
67
+ presetFiatAmount: formattedAmount,
68
+ fiatCurrency: "USD",
69
+ defaultAsset: tokenData?.symbol || "USDC",
70
+ defaultPaymentMethod: paymentMethodId,
71
+ destinationAddress: recipientAddress,
72
+ blockchains: [blockchain],
73
+ country: geoData?.country || "US",
74
+ orderId,
75
+ redirectUrl: window.location.href,
76
+ useSessionToken: false,
77
+ })
78
+ .then(response => {
79
+ if (response.data?.url) {
80
+ // Persist orderId directly before redirect — useEffect won't run in time
81
+ if (orderId) {
82
+ sessionStorage.setItem("anyspend_checkout_orderId", orderId);
83
+ onOrderCreatedRef.current?.(orderId);
84
+ }
85
+ onSuccessRef.current?.({ orderId });
86
+ window.location.href = response.data.url;
87
+ }
88
+ else {
89
+ setError("Failed to generate Coinbase Pay URL.");
90
+ setIsRedirecting(false);
91
+ }
92
+ })
93
+ .catch(err => {
94
+ setError(err.message || "Failed to generate Coinbase Pay URL.");
95
+ setIsRedirecting(false);
96
+ onErrorRef.current?.(err instanceof Error ? err : new Error(err.message));
97
+ });
98
+ }, [
99
+ orderId,
100
+ isRedirecting,
101
+ destinationTokenChainId,
102
+ coinbaseAvailablePaymentMethods,
103
+ formattedAmount,
104
+ tokenData,
105
+ recipientAddress,
106
+ geoData,
107
+ ]);
108
+ const handleContinue = useCallback(() => {
109
+ if (isCreatingOrder || orderCreatedRef.current)
110
+ return;
111
+ setError(null);
112
+ orderCreatedRef.current = true;
113
+ const dstToken = {
114
+ address: destinationTokenAddress,
115
+ chainId: destinationTokenChainId,
116
+ decimals: tokenData?.decimals || 18,
117
+ symbol: tokenData?.symbol || "",
118
+ name: tokenData?.name || "",
119
+ metadata: { logoURI: tokenData?.logoURI || "" },
120
+ };
121
+ const paymentMethodId = coinbaseAvailablePaymentMethods[0]?.id || "CARD";
122
+ createOrder({
123
+ recipientAddress,
124
+ orderType: "swap",
125
+ dstChain: destinationTokenChainId,
126
+ dstToken,
127
+ srcFiatAmount: formattedAmount,
128
+ onramp: {
129
+ vendor: "coinbase",
130
+ paymentMethod: paymentMethodId,
131
+ country: geoData?.country || "US",
132
+ redirectUrl: window.location.href,
133
+ },
134
+ expectedDstAmount: totalAmount,
135
+ callbackMetadata,
136
+ });
137
+ }, [
138
+ isCreatingOrder,
139
+ destinationTokenAddress,
140
+ destinationTokenChainId,
141
+ tokenData,
142
+ coinbaseAvailablePaymentMethods,
143
+ recipientAddress,
144
+ formattedAmount,
145
+ geoData,
146
+ totalAmount,
147
+ callbackMetadata,
148
+ createOrder,
149
+ ]);
150
+ if (isLoading) {
151
+ return (_jsxs(motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, transition: { duration: 0.2, ease: "easeOut" }, className: "anyspend-coinbase-loading flex items-center justify-center py-6", children: [_jsx(Loader2, { className: "h-5 w-5 animate-spin text-gray-400" }), _jsx(TextShimmer, { duration: 1.5, className: "ml-2 text-sm", children: "Checking availability..." })] }));
152
+ }
153
+ if (coinbaseAvailablePaymentMethods.length === 0) {
154
+ return (_jsx(motion.div, { initial: { opacity: 0, y: 8 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.25, ease: "easeOut" }, className: "anyspend-coinbase-unavailable py-4 text-center", children: _jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: "Coinbase Pay is not available in your region for this amount." }) }));
155
+ }
156
+ const isProcessing = isCreatingOrder || isRedirecting;
157
+ return (_jsxs(motion.div, { initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3, ease: "easeOut" }, className: "anyspend-coinbase-panel flex flex-col gap-3", children: [_jsx("p", { className: "anyspend-coinbase-description text-sm text-gray-600 dark:text-gray-400", children: "Pay with your Coinbase account using debit card, bank account, or crypto balance." }), _jsx(AnimatePresence, { initial: false, children: error && (_jsx(motion.div, { initial: { opacity: 0, height: 0 }, animate: { opacity: 1, height: "auto" }, exit: { opacity: 0, height: 0 }, transition: { duration: 0.2, ease: "easeOut" }, style: { overflow: "hidden" }, className: "rounded-lg border border-red-200 bg-red-50 px-3 py-2 dark:border-red-800 dark:bg-red-900/20", children: _jsx("p", { className: "text-sm text-red-600 dark:text-red-400", children: error }) }, "coinbase-error")) }), _jsx(ShinyButton, { accentColor: themeColor || "#0052FF", onClick: () => {
158
+ if (error) {
159
+ // Reset state for retry
160
+ setError(null);
161
+ setOrderId(null);
162
+ setIsRedirecting(false);
163
+ orderCreatedRef.current = false;
164
+ }
165
+ handleContinue();
166
+ }, disabled: isProcessing, className: "anyspend-coinbase-btn w-full", textClassName: "text-white", children: isProcessing ? (_jsxs("span", { className: "flex items-center justify-center gap-2", children: [_jsx(Loader2, { className: "h-4 w-4 animate-spin" }), isRedirecting ? "Redirecting to Coinbase..." : "Creating order..."] })) : error ? ("Try again") : ("Continue with Coinbase") })] }));
167
+ }
@@ -0,0 +1,23 @@
1
+ import type { AnySpendCheckoutClasses } from "./AnySpendCheckout";
2
+ interface CryptoPayPanelProps {
3
+ recipientAddress: string;
4
+ destinationTokenAddress: string;
5
+ destinationTokenChainId: number;
6
+ totalAmount: string;
7
+ buttonText?: string;
8
+ themeColor?: string;
9
+ /** @deprecated Use onOrderCreated instead. Kept for backward compatibility. */
10
+ onSuccess?: (result: {
11
+ txHash?: string;
12
+ orderId?: string;
13
+ }) => void;
14
+ /** Called when an order is created and payment committed — triggers lifecycle tracking in parent */
15
+ onOrderCreated?: (orderId: string) => void;
16
+ onError?: (error: Error) => void;
17
+ callbackMetadata?: Record<string, unknown>;
18
+ classes?: AnySpendCheckoutClasses;
19
+ /** Optional sender address for pre-fetching balances. Falls back to connected wallet. */
20
+ senderAddress?: string;
21
+ }
22
+ export declare function CryptoPayPanel({ recipientAddress, destinationTokenAddress, destinationTokenChainId, totalAmount, buttonText, themeColor, onSuccess, onOrderCreated, onError, callbackMetadata, classes, senderAddress, }: CryptoPayPanelProps): import("react/jsx-runtime").JSX.Element;
23
+ export {};
@@ -0,0 +1,321 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useAnyspendQuote } from "../../../../anyspend/react/hooks/useAnyspendQuote.js";
4
+ import { useAnyspendCreateOrder } from "../../../../anyspend/react/hooks/useAnyspendCreateOrder.js";
5
+ import { useAnyspendOrderAndTransactions } from "../../../../anyspend/react/hooks/useAnyspendOrderAndTransactions.js";
6
+ import { useCreateDepositFirstOrder } from "../../../../anyspend/react/hooks/useCreateDepositFirstOrder.js";
7
+ import { useOnOrderSuccess } from "../../../../anyspend/react/hooks/useOnOrderSuccess.js";
8
+ import { ALL_CHAINS, RELAY_SOLANA_MAINNET_CHAIN_ID, getAvailableChainIds } from "../../../../anyspend/index.js";
9
+ import { getPaymentUrl } from "../../../../anyspend/utils/chain.js";
10
+ import { isNativeToken } from "../../../../anyspend/utils/token.js";
11
+ import { useAccountWallet, useB3Config, useIsMobile, useModalStore, useSimTokenBalance, useTokenData, useUnifiedChainSwitchAndExecute, } from "../../../../global-account/react/index.js";
12
+ import { ShinyButton, TextShimmer } from "../../../../global-account/react/index.js";
13
+ import { thirdwebB3Chain } from "../../../../shared/constants/chains/b3Chain.js";
14
+ import { formatTokenAmount } from "../../../../shared/utils/number.js";
15
+ import { cn } from "../../../../shared/utils/cn.js";
16
+ import { Check, ChevronDown, ChevronsUpDown, Copy, Loader2, QrCode } from "lucide-react";
17
+ import { QRCodeSVG } from "qrcode.react";
18
+ import { encodeFunctionData, erc20Abi } from "viem";
19
+ import { AnimatePresence, motion } from "motion/react";
20
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
21
+ import { TokenSelector } from "@relayprotocol/relay-kit-ui";
22
+ import { ChainTokenIcon } from "../common/ChainTokenIcon.js";
23
+ export function CryptoPayPanel({ recipientAddress, destinationTokenAddress, destinationTokenChainId, totalAmount, buttonText = "Pay", themeColor, onSuccess, onOrderCreated, onError, callbackMetadata, classes, senderAddress, }) {
24
+ // Stable refs for callback props to avoid re-triggering effects
25
+ const onErrorRef = useRef(onError);
26
+ onErrorRef.current = onError;
27
+ const onOrderCreatedRef = useRef(onOrderCreated);
28
+ onOrderCreatedRef.current = onOrderCreated;
29
+ /* ------------------------------------------------------------------ */
30
+ /* Shared state: token selection, quote, balance */
31
+ /* ------------------------------------------------------------------ */
32
+ const [selectedSrcChainId, setSelectedSrcChainId] = useState(destinationTokenChainId);
33
+ const [selectedSrcToken, setSelectedSrcToken] = useState(null);
34
+ const [copied, setCopied] = useState(false);
35
+ const { address: walletAddress } = useAccountWallet();
36
+ const effectiveAddress = senderAddress || walletAddress;
37
+ const { partnerId } = useB3Config();
38
+ const setB3ModalOpen = useModalStore(state => state.setB3ModalOpen);
39
+ const setB3ModalContentType = useModalStore(state => state.setB3ModalContentType);
40
+ const { data: dstTokenData } = useTokenData(destinationTokenChainId, destinationTokenAddress);
41
+ // Default to destination token data once available
42
+ useEffect(() => {
43
+ if (!selectedSrcToken && dstTokenData) {
44
+ setSelectedSrcToken({
45
+ address: destinationTokenAddress,
46
+ chainId: destinationTokenChainId,
47
+ decimals: dstTokenData.decimals || 18,
48
+ symbol: dstTokenData.symbol || "",
49
+ name: dstTokenData.name || "",
50
+ metadata: { logoURI: dstTokenData.logoURI || "" },
51
+ });
52
+ }
53
+ }, [selectedSrcToken, dstTokenData, destinationTokenAddress, destinationTokenChainId]);
54
+ const isSameToken = selectedSrcToken &&
55
+ selectedSrcToken.address.toLowerCase() === destinationTokenAddress.toLowerCase() &&
56
+ selectedSrcToken.chainId === destinationTokenChainId;
57
+ const { anyspendQuote, isLoadingAnyspendQuote } = useAnyspendQuote({
58
+ type: "swap",
59
+ srcChain: selectedSrcChainId,
60
+ dstChain: destinationTokenChainId,
61
+ srcTokenAddress: selectedSrcToken?.address || "",
62
+ dstTokenAddress: destinationTokenAddress,
63
+ tradeType: "EXACT_OUTPUT",
64
+ amount: totalAmount,
65
+ });
66
+ const tokenAddress = selectedSrcToken
67
+ ? isNativeToken(selectedSrcToken.address)
68
+ ? "native"
69
+ : selectedSrcToken.address
70
+ : undefined;
71
+ const { data: balanceData } = useSimTokenBalance(effectiveAddress, tokenAddress, selectedSrcChainId);
72
+ const balance = useMemo(() => {
73
+ const b = balanceData?.balances?.[0];
74
+ if (!b?.amount)
75
+ return { raw: BigInt(0), formatted: "0", decimals: 18 };
76
+ return { raw: BigInt(b.amount), formatted: formatTokenAmount(BigInt(b.amount), b.decimals), decimals: b.decimals };
77
+ }, [balanceData]);
78
+ const srcAmount = useMemo(() => {
79
+ if (isSameToken)
80
+ return totalAmount;
81
+ return anyspendQuote?.data?.currencyIn?.amount || "0";
82
+ }, [isSameToken, totalAmount, anyspendQuote]);
83
+ const srcAmountFormatted = useMemo(() => {
84
+ if (!selectedSrcToken)
85
+ return "0";
86
+ return formatTokenAmount(BigInt(srcAmount || "0"), selectedSrcToken.decimals || 18);
87
+ }, [srcAmount, selectedSrcToken]);
88
+ const hasEnoughBalance = balance.raw >= BigInt(srcAmount || "0");
89
+ /* ------------------------------------------------------------------ */
90
+ /* Destination token object (shared by both flows) */
91
+ /* ------------------------------------------------------------------ */
92
+ const dstToken = useMemo(() => ({
93
+ address: destinationTokenAddress,
94
+ chainId: destinationTokenChainId,
95
+ decimals: dstTokenData?.decimals || 18,
96
+ symbol: dstTokenData?.symbol || "",
97
+ name: dstTokenData?.name || "",
98
+ metadata: { logoURI: dstTokenData?.logoURI || "" },
99
+ }), [destinationTokenAddress, destinationTokenChainId, dstTokenData]);
100
+ /* ------------------------------------------------------------------ */
101
+ /* QR / deposit-first order (always created for QR display) */
102
+ /* ------------------------------------------------------------------ */
103
+ const [qrOrderId, setQrOrderId] = useState();
104
+ const [globalAddress, setGlobalAddress] = useState();
105
+ const qrOrderCreatedRef = useRef(false);
106
+ const { createOrder: createDepositOrder, isCreatingOrder: isCreatingQrOrder } = useCreateDepositFirstOrder({
107
+ onSuccess: data => {
108
+ setQrOrderId(data.data?.id);
109
+ setGlobalAddress(data.data?.globalAddress);
110
+ },
111
+ onError: (error) => {
112
+ qrOrderCreatedRef.current = false;
113
+ onErrorRef.current?.(error);
114
+ },
115
+ });
116
+ // Create deposit-first order on mount and when token changes
117
+ useEffect(() => {
118
+ if (qrOrderCreatedRef.current)
119
+ return;
120
+ if (!selectedSrcToken)
121
+ return;
122
+ qrOrderCreatedRef.current = true;
123
+ createDepositOrder({
124
+ recipientAddress,
125
+ srcChain: selectedSrcChainId,
126
+ dstChain: destinationTokenChainId,
127
+ srcToken: selectedSrcToken,
128
+ dstToken,
129
+ callbackMetadata,
130
+ creatorAddress: effectiveAddress,
131
+ });
132
+ }, [
133
+ selectedSrcToken,
134
+ selectedSrcChainId,
135
+ recipientAddress,
136
+ destinationTokenChainId,
137
+ dstToken,
138
+ callbackMetadata,
139
+ createDepositOrder,
140
+ effectiveAddress,
141
+ ]);
142
+ const { orderAndTransactions: qrOat } = useAnyspendOrderAndTransactions(qrOrderId);
143
+ useOnOrderSuccess({
144
+ orderData: qrOat,
145
+ orderId: qrOrderId,
146
+ onSuccess: (txHash) => onSuccess?.({ orderId: qrOrderId, txHash }),
147
+ });
148
+ // Notify parent when a deposit is detected on the QR/deposit-first order
149
+ const qrDepositNotifiedRef = useRef(false);
150
+ useEffect(() => {
151
+ if (qrOrderId &&
152
+ !qrDepositNotifiedRef.current &&
153
+ qrOat?.data?.depositTxs?.length &&
154
+ qrOat.data.depositTxs.length > 0) {
155
+ qrDepositNotifiedRef.current = true;
156
+ onOrderCreatedRef.current?.(qrOrderId);
157
+ }
158
+ }, [qrOrderId, qrOat?.data?.depositTxs?.length]);
159
+ // QR code value
160
+ const qrAmount = srcAmount && srcAmount !== "0" ? BigInt(srcAmount) : undefined;
161
+ const qrValue = globalAddress && selectedSrcToken
162
+ ? getPaymentUrl(globalAddress, qrAmount, isNativeToken(selectedSrcToken.address) ? "ETH" : selectedSrcToken.address, selectedSrcChainId, selectedSrcToken.decimals)
163
+ : "";
164
+ /* ------------------------------------------------------------------ */
165
+ /* Wallet / swap order (created on button click) */
166
+ /* ------------------------------------------------------------------ */
167
+ const [walletOrderId, setWalletOrderId] = useState();
168
+ const [isSendingDeposit, setIsSendingDeposit] = useState(false);
169
+ const [depositRejected, setDepositRejected] = useState(false);
170
+ const depositSentRef = useRef(false);
171
+ const { switchChainAndExecute } = useUnifiedChainSwitchAndExecute();
172
+ const { createOrder: createSwapOrder, isCreatingOrder: isCreatingSwapOrder } = useAnyspendCreateOrder({
173
+ onSuccess: data => {
174
+ const id = data.data?.id;
175
+ if (id)
176
+ setWalletOrderId(id);
177
+ },
178
+ onError: (error) => {
179
+ setIsSendingDeposit(false);
180
+ onErrorRef.current?.(error);
181
+ },
182
+ });
183
+ const { orderAndTransactions: walletOat } = useAnyspendOrderAndTransactions(walletOrderId);
184
+ // Auto-send deposit tx once swap order is ready
185
+ useEffect(() => {
186
+ if (!walletOat?.data?.order || depositSentRef.current || depositRejected)
187
+ return;
188
+ const order = walletOat.data.order;
189
+ if (order.status !== "scanning_deposit_transaction")
190
+ return;
191
+ if (walletOat.data.depositTxs?.length)
192
+ return;
193
+ depositSentRef.current = true;
194
+ const sendDeposit = async () => {
195
+ try {
196
+ setIsSendingDeposit(true);
197
+ const amount = BigInt(order.srcAmount);
198
+ if (isNativeToken(order.srcTokenAddress)) {
199
+ await switchChainAndExecute(order.srcChain, {
200
+ to: order.globalAddress,
201
+ value: amount,
202
+ });
203
+ }
204
+ else {
205
+ const data = encodeFunctionData({
206
+ abi: erc20Abi,
207
+ functionName: "transfer",
208
+ args: [order.globalAddress, amount],
209
+ });
210
+ await switchChainAndExecute(order.srcChain, {
211
+ to: order.srcTokenAddress,
212
+ data,
213
+ value: BigInt(0),
214
+ });
215
+ }
216
+ // Deposit sent — notify parent to transition to order lifecycle tracking
217
+ if (walletOrderId) {
218
+ onOrderCreatedRef.current?.(walletOrderId);
219
+ }
220
+ }
221
+ catch (error) {
222
+ depositSentRef.current = false;
223
+ const isUserRejection = error?.code === 4001 || error?.message?.includes("rejected") || error?.message?.includes("denied");
224
+ if (isUserRejection) {
225
+ setDepositRejected(true);
226
+ }
227
+ onErrorRef.current?.(error instanceof Error ? error : new Error(error?.message || "Transaction rejected"));
228
+ }
229
+ finally {
230
+ setIsSendingDeposit(false);
231
+ }
232
+ };
233
+ sendDeposit();
234
+ }, [walletOat, switchChainAndExecute, walletOrderId, depositRejected]);
235
+ useOnOrderSuccess({
236
+ orderData: walletOat,
237
+ orderId: walletOrderId,
238
+ onSuccess: (txHash) => onSuccess?.({ orderId: walletOrderId, txHash }),
239
+ });
240
+ const isWaitingForExecution = !!walletOrderId && walletOat?.data?.order.status !== "executed";
241
+ const handleWalletPay = useCallback(() => {
242
+ if (!selectedSrcToken || !walletAddress)
243
+ return;
244
+ depositSentRef.current = false;
245
+ createSwapOrder({
246
+ recipientAddress,
247
+ orderType: "swap",
248
+ srcChain: selectedSrcChainId,
249
+ dstChain: destinationTokenChainId,
250
+ srcToken: selectedSrcToken,
251
+ dstToken,
252
+ srcAmount,
253
+ expectedDstAmount: totalAmount,
254
+ callbackMetadata,
255
+ creatorAddress: effectiveAddress,
256
+ });
257
+ }, [
258
+ selectedSrcToken,
259
+ walletAddress,
260
+ effectiveAddress,
261
+ recipientAddress,
262
+ selectedSrcChainId,
263
+ destinationTokenChainId,
264
+ dstToken,
265
+ srcAmount,
266
+ totalAmount,
267
+ callbackMetadata,
268
+ createSwapOrder,
269
+ ]);
270
+ /* ------------------------------------------------------------------ */
271
+ /* Handlers */
272
+ /* ------------------------------------------------------------------ */
273
+ const handleSelectToken = (token) => {
274
+ setSelectedSrcToken(token);
275
+ setSelectedSrcChainId(token.chainId);
276
+ // Reset both order flows
277
+ setQrOrderId(undefined);
278
+ setGlobalAddress(undefined);
279
+ qrOrderCreatedRef.current = false;
280
+ qrDepositNotifiedRef.current = false;
281
+ setWalletOrderId(undefined);
282
+ depositSentRef.current = false;
283
+ };
284
+ const handleCopyAddress = async () => {
285
+ if (globalAddress) {
286
+ await navigator.clipboard.writeText(globalAddress);
287
+ setCopied(true);
288
+ setTimeout(() => setCopied(false), 2000);
289
+ }
290
+ };
291
+ const handleConnectWallet = () => {
292
+ setB3ModalContentType({ type: "signInWithB3", showBackButton: false, chain: thirdwebB3Chain, partnerId });
293
+ setB3ModalOpen(true);
294
+ };
295
+ const isLoading = isLoadingAnyspendQuote;
296
+ const isPending = isCreatingSwapOrder || isSendingDeposit || isWaitingForExecution;
297
+ const canPay = walletAddress && selectedSrcToken && hasEnoughBalance && !isLoading && !isPending;
298
+ const chainName = ALL_CHAINS[selectedSrcChainId]?.name || "the specified chain";
299
+ const chainLogoUrl = ALL_CHAINS[selectedSrcChainId]?.logoUrl;
300
+ // Collapse QR on mobile when a wallet connector is available
301
+ const isMobile = useIsMobile();
302
+ const hasWalletConnector = typeof window !== "undefined" && !!window.ethereum;
303
+ const [qrExpanded, setQrExpanded] = useState(!isMobile || !hasWalletConnector);
304
+ /* ------------------------------------------------------------------ */
305
+ /* Render */
306
+ /* ------------------------------------------------------------------ */
307
+ return (_jsxs("div", { className: cn("anyspend-crypto-pay-panel flex flex-col gap-4", classes?.cryptoPanel), children: [_jsxs("div", { className: "anyspend-token-selector", children: [_jsx("label", { className: "mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-300", children: "Pay with" }), _jsx(TokenSelector, { address: effectiveAddress, chainIdsFilter: getAvailableChainIds("from"), context: "from", fromChainWalletVMSupported: true, isValidAddress: true, lockedChainIds: getAvailableChainIds("from"), multiWalletSupportEnabled: true, onAnalyticEvent: undefined, popularChainIds: [1, 8453, RELAY_SOLANA_MAINNET_CHAIN_ID], setToken: token => {
308
+ handleSelectToken({
309
+ address: token.address,
310
+ chainId: token.chainId,
311
+ decimals: token.decimals,
312
+ metadata: { logoURI: token.logoURI },
313
+ name: token.name,
314
+ symbol: token.symbol,
315
+ });
316
+ }, supportedWalletVMs: ["evm", "svm"], token: undefined, trigger: _jsxs("button", { className: cn("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-neutral-700 dark:bg-neutral-800 dark:hover:border-neutral-600", classes?.tokenSelector), children: [selectedSrcToken ? (_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(ChainTokenIcon, { chainUrl: ALL_CHAINS[selectedSrcToken.chainId]?.logoUrl || "", tokenUrl: selectedSrcToken.metadata?.logoURI, className: "h-8 w-8" }), _jsxs("div", { className: "text-left", children: [_jsx("p", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: selectedSrcToken.symbol }), _jsxs("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: ["Balance: ", balance.formatted] })] })] })) : (_jsx("span", { className: "text-sm text-gray-400", children: "Select token" })), _jsx(ChevronsUpDown, { className: "h-4 w-4 text-gray-400" })] }) })] }), _jsx(motion.div, { initial: { opacity: 0, y: 6 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.25, ease: "easeOut" }, className: cn("rounded-xl border border-gray-200 bg-gray-50 px-4 py-3 dark:border-neutral-700 dark:bg-neutral-800/50", classes?.quoteDisplay), children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-sm text-gray-500 dark:text-gray-400", children: "You pay" }), _jsx(AnimatePresence, { mode: "wait", children: isLoadingAnyspendQuote ? (_jsx(motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.15 }, children: _jsx(TextShimmer, { duration: 1, className: "text-sm", children: "Fetching quote..." }) }, "quote-loading")) : (_jsxs(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")) })] }) }), _jsx(AnimatePresence, { children: walletAddress && selectedSrcToken && !hasEnoughBalance && !isLoading && (_jsxs(motion.p, { initial: { opacity: 0, height: 0 }, animate: { opacity: 1, height: "auto" }, exit: { opacity: 0, height: 0 }, transition: { duration: 0.2, ease: "easeOut" }, className: "text-center text-sm text-red-500", children: ["Insufficient ", selectedSrcToken.symbol, " balance"] }, "balance-warning")) }), !walletAddress ? (_jsx(ShinyButton, { accentColor: themeColor || "hsl(var(--as-brand))", onClick: handleConnectWallet, className: cn("w-full", classes?.payButton), textClassName: "text-white", children: "Connect Wallet to Pay" })) : (_jsx(ShinyButton, { accentColor: themeColor || "hsl(var(--as-brand))", onClick: handleWalletPay, disabled: !canPay, className: cn("w-full", classes?.payButton), textClassName: cn(!canPay ? "text-as-secondary" : "text-white"), children: isPending ? (_jsxs("span", { className: "flex items-center justify-center gap-2", children: [_jsx(Loader2, { className: "h-4 w-4 animate-spin" }), isCreatingSwapOrder
317
+ ? "Creating order..."
318
+ : isSendingDeposit
319
+ ? "Confirm in wallet..."
320
+ : "Confirming transaction..."] })) : (buttonText) })), isMobile && hasWalletConnector ? (_jsxs("button", { type: "button", onClick: () => setQrExpanded(prev => !prev), className: "flex w-full items-center gap-3 py-1", children: [_jsx("div", { className: "h-px flex-1 bg-gray-200 dark:bg-neutral-700" }), _jsxs("span", { className: "flex items-center gap-1 text-xs font-medium text-gray-400 dark:text-gray-500", children: [qrExpanded ? ("or send directly") : (_jsxs(_Fragment, { children: [_jsx(QrCode, { className: "h-3 w-3" }), " or send with QR code"] })), _jsx(ChevronDown, { className: cn("h-3 w-3 transition-transform", qrExpanded && "rotate-180") })] }), _jsx("div", { className: "h-px flex-1 bg-gray-200 dark:bg-neutral-700" })] })) : (_jsxs("div", { className: "flex items-center gap-3 py-1", children: [_jsx("div", { className: "h-px flex-1 bg-gray-200 dark:bg-neutral-700" }), _jsx("span", { className: "text-xs font-medium text-gray-400 dark:text-gray-500", children: "or send directly" }), _jsx("div", { className: "h-px flex-1 bg-gray-200 dark:bg-neutral-700" })] })), _jsx(AnimatePresence, { initial: false, children: qrExpanded && (_jsx(motion.div, { initial: { height: 0, opacity: 0 }, animate: { height: "auto", opacity: 1 }, exit: { height: 0, opacity: 0 }, transition: { duration: 0.25, ease: "easeInOut" }, className: "overflow-hidden", children: isCreatingQrOrder && !globalAddress ? (_jsxs("div", { className: "flex items-center justify-center py-8", children: [_jsx(Loader2, { className: "h-5 w-5 animate-spin text-gray-400" }), _jsx("span", { className: "ml-2 text-sm text-gray-500 dark:text-gray-400", children: "Creating deposit address..." })] })) : globalAddress ? (_jsxs("div", { className: "flex items-center gap-4", children: [_jsx("div", { className: "shrink-0 rounded-xl bg-white p-2.5 shadow-sm ring-1 ring-gray-100 dark:bg-white dark:ring-gray-200", children: _jsx(QRCodeSVG, { value: qrValue, size: 132, level: "M", marginSize: 0 }) }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-2.5", children: [_jsxs("p", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: ["Send", " ", _jsxs("span", { className: "font-semibold text-gray-900 dark:text-gray-100", children: [srcAmountFormatted, " ", selectedSrcToken?.symbol] }), " ", "on", " ", _jsxs("span", { className: "font-semibold text-gray-900 dark:text-gray-100", children: [chainLogoUrl && (_jsx("img", { src: chainLogoUrl, alt: "", className: "mb-px mr-0.5 inline h-3.5 w-3.5 rounded-full align-text-bottom" })), chainName] }), " ", "to:"] }), _jsxs("button", { onClick: handleCopyAddress, className: "group flex items-start gap-1.5 rounded-lg border border-gray-200 bg-gray-50 px-3 py-2 text-left transition-colors hover:border-gray-300 hover:bg-gray-100 dark:border-neutral-700 dark:bg-neutral-800/60 dark:hover:border-neutral-600 dark:hover:bg-neutral-800", children: [_jsx("span", { className: "min-w-0 break-all font-mono text-xs leading-relaxed text-gray-800 dark:text-gray-200", children: globalAddress }), _jsx("span", { className: "mt-0.5 shrink-0 text-gray-400 transition-colors group-hover:text-gray-600 dark:group-hover:text-gray-300", children: copied ? _jsx(Check, { className: "h-3.5 w-3.5 text-green-500" }) : _jsx(Copy, { className: "h-3.5 w-3.5" }) })] }), _jsxs("p", { className: "text-xs leading-snug text-orange-500/80 dark:text-orange-400/80", children: ["Only send ", selectedSrcToken?.symbol, " on", " ", chainLogoUrl && (_jsx("img", { src: chainLogoUrl, alt: "", className: "mr-0.5 inline h-3 w-3 rounded-full align-text-bottom" })), chainName, ". Sending other tokens or using a different network may result in loss of funds."] })] })] })) : null }, "qr-section")) })] }));
321
+ }
@@ -0,0 +1,12 @@
1
+ import type { DiscountResult } from "../../../types/forms";
2
+ interface DiscountCodeInputProps {
3
+ onApply: (code: string) => Promise<DiscountResult>;
4
+ appliedDiscount: DiscountResult | null;
5
+ onRemove: () => void;
6
+ loading?: boolean;
7
+ tokenSymbol?: string;
8
+ tokenDecimals?: number;
9
+ className?: string;
10
+ }
11
+ export declare function DiscountCodeInput({ onApply, appliedDiscount, onRemove, loading, tokenSymbol, tokenDecimals, className, }: DiscountCodeInputProps): import("react/jsx-runtime").JSX.Element;
12
+ export {};
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cn } from "../../../../shared/utils/cn.js";
4
+ import { formatTokenAmount, safeBigInt } from "../../../../shared/utils/number.js";
5
+ import { X, Loader2, Check } from "lucide-react";
6
+ import { useState, useCallback } from "react";
7
+ function formatAmount(amount, decimals, symbol) {
8
+ const bi = safeBigInt(amount);
9
+ if (bi === BigInt(0))
10
+ return "Free";
11
+ return `${formatTokenAmount(bi, decimals)} ${symbol}`;
12
+ }
13
+ export function DiscountCodeInput({ onApply, appliedDiscount, onRemove, loading = false, tokenSymbol = "", tokenDecimals = 6, className, }) {
14
+ const [code, setCode] = useState("");
15
+ const [error, setError] = useState(null);
16
+ const [isValidating, setIsValidating] = useState(false);
17
+ const handleApply = useCallback(async () => {
18
+ if (!code.trim())
19
+ return;
20
+ setError(null);
21
+ setIsValidating(true);
22
+ try {
23
+ const result = await onApply(code.trim());
24
+ if (!result.valid) {
25
+ setError(result.error || "Invalid discount code");
26
+ }
27
+ else {
28
+ setCode("");
29
+ }
30
+ }
31
+ catch {
32
+ setError("Failed to validate discount code");
33
+ }
34
+ finally {
35
+ setIsValidating(false);
36
+ }
37
+ }, [code, onApply]);
38
+ const handleRemove = () => {
39
+ onRemove();
40
+ setError(null);
41
+ };
42
+ // Show applied discount state
43
+ if (appliedDiscount?.valid) {
44
+ return (_jsxs("div", { className: cn("anyspend-discount anyspend-discount-applied space-y-2", className), children: [_jsx("div", { className: "anyspend-discount-title text-sm font-semibold text-gray-900 dark:text-gray-100", children: "Discount" }), _jsxs("div", { className: "anyspend-discount-badge flex items-center justify-between rounded-lg border border-green-200 bg-green-50 px-3 py-2 dark:border-green-800 dark:bg-green-900/20", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Check, { className: "h-4 w-4 text-green-600 dark:text-green-400" }), _jsx("span", { className: "anyspend-discount-value text-sm font-medium text-green-700 dark:text-green-300", children: appliedDiscount.discount_type === "percentage"
45
+ ? `${appliedDiscount.discount_value}% off`
46
+ : appliedDiscount.discount_amount
47
+ ? `-${formatAmount(appliedDiscount.discount_amount, tokenDecimals, tokenSymbol)}`
48
+ : "Discount applied" })] }), _jsx("button", { type: "button", onClick: handleRemove, className: "anyspend-discount-remove rounded p-1 text-gray-400 hover:bg-gray-200 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300", children: _jsx(X, { className: "h-3.5 w-3.5" }) })] })] }));
49
+ }
50
+ return (_jsxs("div", { className: cn("anyspend-discount space-y-2", className), children: [_jsx("div", { className: "anyspend-discount-title text-sm font-semibold text-gray-900 dark:text-gray-100", children: "Discount Code" }), _jsxs("div", { className: "anyspend-discount-input-row flex gap-2", children: [_jsx("input", { type: "text", value: code, onChange: e => {
51
+ setCode(e.target.value.toUpperCase());
52
+ setError(null);
53
+ }, onKeyDown: e => {
54
+ if (e.key === "Enter") {
55
+ e.preventDefault();
56
+ handleApply();
57
+ }
58
+ }, placeholder: "Enter code", disabled: loading || isValidating, className: cn("anyspend-discount-input flex-1 rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 outline-none transition-colors placeholder:text-gray-400 focus:border-blue-500 focus:ring-1 focus:ring-blue-500 dark:border-neutral-600 dark:bg-neutral-800 dark:text-gray-100 dark:placeholder:text-gray-500", error && "border-red-400") }), _jsx("button", { type: "button", onClick: handleApply, disabled: !code.trim() || loading || isValidating, className: "anyspend-discount-apply rounded-lg bg-gray-900 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-gray-800 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-neutral-100 dark:text-neutral-900 dark:hover:bg-neutral-200", children: isValidating ? _jsx(Loader2, { className: "h-4 w-4 animate-spin" }) : "Apply" })] }), error && _jsx("p", { className: "anyspend-discount-error text-xs text-red-500", children: error })] }));
59
+ }
@@ -0,0 +1,20 @@
1
+ import type { AnySpendCheckoutClasses } from "./AnySpendCheckout";
2
+ interface FiatCheckoutPanelProps {
3
+ recipientAddress: string;
4
+ destinationTokenAddress: string;
5
+ destinationTokenChainId: number;
6
+ totalAmount: string;
7
+ themeColor?: string;
8
+ /** @deprecated Use onOrderCreated instead. Kept for backward compatibility. */
9
+ onSuccess?: (result: {
10
+ txHash?: string;
11
+ orderId?: string;
12
+ }) => void;
13
+ /** Called when payment is confirmed — triggers lifecycle tracking in parent */
14
+ onOrderCreated?: (orderId: string) => void;
15
+ onError?: (error: Error) => void;
16
+ callbackMetadata?: Record<string, unknown>;
17
+ classes?: AnySpendCheckoutClasses;
18
+ }
19
+ export declare function FiatCheckoutPanel({ recipientAddress, destinationTokenAddress, destinationTokenChainId, totalAmount, themeColor, onSuccess, onOrderCreated, onError, callbackMetadata, classes, }: FiatCheckoutPanelProps): import("react/jsx-runtime").JSX.Element;
20
+ export {};