@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
@@ -14,7 +14,7 @@ function generateEncodedDataForStaking(amount, beneficiary) {
14
14
  args: [beneficiary, BigInt(amount)],
15
15
  });
16
16
  }
17
- export function AnySpendStakeUpside({ loadOrder, mode = "modal", beneficiaryAddress, stakeAmount, stakingContractAddress, token, onSuccess, activeTab, }) {
17
+ export function AnySpendStakeUpside({ loadOrder, mode = "modal", beneficiaryAddress, stakeAmount, stakingContractAddress, token, onSuccess, activeTab, senderAddress, slots, content, theme, }) {
18
18
  const header = () => (_jsx(_Fragment, { children: _jsxs("div", { className: "from-b3-react-background to-as-on-surface-1 mt-[-60px] w-full rounded-t-lg bg-gradient-to-t", children: [_jsx("div", { className: "h-[60px] w-full" }), _jsx("div", { className: "mb-1 flex w-full flex-col items-center gap-2 p-5", children: _jsxs("span", { className: "font-sf-rounded text-2xl font-semibold", children: ["Swap & Stake ", stakeAmount ? formatTokenAmount(BigInt(stakeAmount), token.decimals) : "", " ", token.symbol] }) })] }) }));
19
19
  // Only generate encoded data if we have a valid beneficiary address
20
20
  // This is used for the AnySpendCustom swap & stake flow
@@ -24,5 +24,5 @@ export function AnySpendStakeUpside({ loadOrder, mode = "modal", beneficiaryAddr
24
24
  const encodedData = generateEncodedDataForStaking(stakeAmount, beneficiaryAddress);
25
25
  return (_jsx(AnySpendCustom, { loadOrder: loadOrder, mode: mode, recipientAddress: beneficiaryAddress, orderType: "custom", dstChainId: base.id, dstToken: token, dstAmount: stakeAmount, contractAddress: stakingContractAddress, encodedData: encodedData, metadata: {
26
26
  action: `stake ${token.symbol}`,
27
- }, header: header, onSuccess: onSuccess, showRecipient: true, activeTab: activeTab }));
27
+ }, header: header, onSuccess: onSuccess, showRecipient: true, activeTab: activeTab, senderAddress: senderAddress, slots: slots, content: content, theme: theme }));
28
28
  }
@@ -1,5 +1,6 @@
1
1
  import { components } from "../../../anyspend/types/api";
2
- export declare function AnySpendStakeUpsideExactIn({ loadOrder, mode, recipientAddress, sourceTokenAddress, sourceTokenChainId, destinationTokenAmount, stakingContractAddress, token, onSuccess, }: {
2
+ import type { AnySpendContent, AnySpendSlots, AnySpendTheme } from "./types/customization";
3
+ export declare function AnySpendStakeUpsideExactIn({ loadOrder, mode, recipientAddress, sourceTokenAddress, sourceTokenChainId, destinationTokenAmount, stakingContractAddress, token, onSuccess, senderAddress, slots, content, theme, }: {
3
4
  loadOrder?: string;
4
5
  mode?: "modal" | "page";
5
6
  recipientAddress: string;
@@ -9,4 +10,9 @@ export declare function AnySpendStakeUpsideExactIn({ loadOrder, mode, recipientA
9
10
  token: components["schemas"]["Token"];
10
11
  destinationTokenAmount?: string;
11
12
  onSuccess?: (amount: string) => void;
13
+ /** Optional sender (payer) address — pre-fills token balances when the user address is known ahead of time */
14
+ senderAddress?: string;
15
+ slots?: AnySpendSlots;
16
+ content?: AnySpendContent;
17
+ theme?: AnySpendTheme;
12
18
  }): import("react/jsx-runtime").JSX.Element | null;
@@ -14,7 +14,7 @@ const STAKE_FOR_FUNCTION_ABI = JSON.stringify([
14
14
  outputs: [],
15
15
  },
16
16
  ]);
17
- export function AnySpendStakeUpsideExactIn({ loadOrder, mode = "modal", recipientAddress, sourceTokenAddress, sourceTokenChainId, destinationTokenAmount, stakingContractAddress, token, onSuccess, }) {
17
+ export function AnySpendStakeUpsideExactIn({ loadOrder, mode = "modal", recipientAddress, sourceTokenAddress, sourceTokenChainId, destinationTokenAmount, stakingContractAddress, token, onSuccess, senderAddress, slots, content, theme, }) {
18
18
  if (!recipientAddress)
19
19
  return null;
20
20
  const header = () => (_jsx(_Fragment, { children: _jsx("div", { className: "from-b3-react-background to-as-on-surface-1 w-full rounded-t-lg bg-gradient-to-t", children: _jsx("div", { className: "mb-1 flex w-full flex-col items-center gap-2", children: _jsxs("span", { className: "font-sf-rounded text-2xl font-semibold", children: ["Swap & Stake ", token.symbol, " (Exact In)"] }) }) }) }));
@@ -26,5 +26,5 @@ export function AnySpendStakeUpsideExactIn({ loadOrder, mode = "modal", recipien
26
26
  spenderAddress: stakingContractAddress,
27
27
  action: `stake ${token.symbol}`,
28
28
  };
29
- return (_jsx(AnySpendCustomExactIn, { loadOrder: loadOrder, mode: mode, recipientAddress: recipientAddress, sourceTokenAddress: sourceTokenAddress, sourceTokenChainId: sourceTokenChainId, destinationToken: token, destinationChainId: base.id, destinationTokenAmount: destinationTokenAmount, customExactInConfig: customExactInConfig, header: header, onSuccess: onSuccess }));
29
+ return (_jsx(AnySpendCustomExactIn, { loadOrder: loadOrder, mode: mode, recipientAddress: recipientAddress, sourceTokenAddress: sourceTokenAddress, sourceTokenChainId: sourceTokenChainId, destinationToken: token, destinationChainId: base.id, destinationTokenAmount: destinationTokenAmount, customExactInConfig: customExactInConfig, header: header, onSuccess: onSuccess, senderAddress: senderAddress, slots: slots, content: content, theme: theme }));
30
30
  }
@@ -1,4 +1,5 @@
1
1
  import { components } from "../../../anyspend/types/api";
2
+ import type { AnySpendContent, AnySpendSlots, AnySpendTheme } from "./types/customization";
2
3
  type AnySpendTournamentProps = {
3
4
  mode?: "modal" | "page";
4
5
  action: "join";
@@ -10,6 +11,11 @@ type AnySpendTournamentProps = {
10
11
  tournamentEntryToken: components["schemas"]["Token"];
11
12
  tournamentEntryFee: string;
12
13
  onSuccess?: () => void;
14
+ /** Optional sender (payer) address — pre-fills token balances when the user address is known ahead of time */
15
+ senderAddress?: string;
16
+ slots?: AnySpendSlots;
17
+ content?: AnySpendContent;
18
+ theme?: AnySpendTheme;
13
19
  } | {
14
20
  mode?: "modal" | "page";
15
21
  action: "fund";
@@ -20,6 +26,11 @@ type AnySpendTournamentProps = {
20
26
  tournamentFundToken: components["schemas"]["Token"];
21
27
  tournamentFundAmount: string;
22
28
  onSuccess?: () => void;
29
+ /** Optional sender (payer) address — pre-fills token balances when the user address is known ahead of time */
30
+ senderAddress?: string;
31
+ slots?: AnySpendSlots;
32
+ content?: AnySpendContent;
33
+ theme?: AnySpendTheme;
23
34
  };
24
35
  export declare function AnySpendTournament(props: AnySpendTournamentProps): import("react/jsx-runtime").JSX.Element;
25
36
  export {};
@@ -4,7 +4,7 @@ import { formatDisplayNumber, formatTokenAmount } from "../../../shared/utils/nu
4
4
  import { AnimatePresence } from "motion/react";
5
5
  import { AnySpendCustom } from "./AnySpendCustom.js";
6
6
  export function AnySpendTournament(props) {
7
- const { mode = "modal", action, loadOrder, tournamentChainId, tournamentContractAddress, tournamentMetadata, onSuccess, } = props;
7
+ const { mode = "modal", action, loadOrder, tournamentChainId, tournamentContractAddress, tournamentMetadata, onSuccess, senderAddress, slots, content, theme, } = props;
8
8
  const dstToken = action === "join" ? props.tournamentEntryToken : props.tournamentFundToken;
9
9
  const dstAmount = action === "join" ? props.tournamentEntryFee : props.tournamentFundAmount;
10
10
  const header = ({ anyspendPrice, isLoadingAnyspendPrice, }) => (_jsxs(_Fragment, { children: [_jsx("div", { className: "z-10 mt-[-100px] flex h-[270px] w-full items-end justify-center", children: _jsx("img", { src: "https://cdn.b3.fun/tournament-play.svg", alt: "Tournament Play", className: "h-[200px] w-[360px] object-cover object-center" }) }), _jsxs("div", { className: "from-b3-react-background to-as-on-surface-1 mt-[-100px] w-full rounded-t-lg bg-gradient-to-t", children: [_jsx("div", { className: "h-[100px] w-full" }), _jsxs("div", { className: "flex w-full flex-col items-center gap-1 p-6 pt-0", children: [_jsxs("span", { className: "font-sf-rounded text-center text-lg font-semibold", children: [action === "join" ? "Pay entry fee to join " : "Pay to fund ", " ", tournamentMetadata.name] }), _jsx("div", { className: "mt-2 flex w-fit items-center gap-1", children: anyspendPrice ? (_jsx(AnimatePresence, { mode: "wait", children: _jsxs("div", { className: cn("text-as-primary group flex items-center text-2xl font-semibold transition-all", {
@@ -13,5 +13,5 @@ export function AnySpendTournament(props) {
13
13
  return (_jsx(AnySpendCustom, { loadOrder: loadOrder, mode: mode, recipientAddress: action === "join" ? props.joinFor : undefined, orderType: action === "join" ? "join_tournament" : "fund_tournament", dstChainId: tournamentChainId, dstToken: dstToken, dstAmount: dstAmount, contractAddress: tournamentContractAddress, encodedData: "0x", metadata: {
14
14
  type: action === "join" ? "join_tournament" : "fund_tournament",
15
15
  tournament: tournamentMetadata,
16
- }, header: header, onSuccess: onSuccess, showRecipient: action === "join" }));
16
+ }, header: header, onSuccess: onSuccess, showRecipient: action === "join", senderAddress: senderAddress, slots: slots, content: content, theme: theme }));
17
17
  }
@@ -1,4 +1,5 @@
1
1
  import { components } from "../../../anyspend/types/api";
2
+ import type { AnySpendContent, AnySpendSlots, AnySpendTheme } from "./types/customization";
2
3
  export declare const HYPE_TOKEN_DETAILS: {
3
4
  SYMBOL: string;
4
5
  LOGO_URI: string;
@@ -26,5 +27,10 @@ export interface AnySpendDepositHypeProps {
26
27
  returnToHomeUrl?: string;
27
28
  /** Custom label for recipient display (e.g., "OBSN Telegram Bot") */
28
29
  customRecipientLabel?: string;
30
+ /** Optional sender (payer) address — pre-fills token balances when the user address is known ahead of time */
31
+ senderAddress?: string;
32
+ slots?: AnySpendSlots;
33
+ content?: AnySpendContent;
34
+ theme?: AnySpendTheme;
29
35
  }
30
- export declare function AnySpendDepositHype({ loadOrder, mode, recipientAddress, paymentType, sourceTokenAddress, sourceTokenChainId, onSuccess, onOpenCustomModal, mainFooter, onTokenSelect, customUsdInputValues, preferEoa, }: AnySpendDepositHypeProps): import("react/jsx-runtime").JSX.Element | null;
36
+ export declare function AnySpendDepositHype({ loadOrder, mode, recipientAddress, paymentType, sourceTokenAddress, sourceTokenChainId, onSuccess, onOpenCustomModal, mainFooter, onTokenSelect, customUsdInputValues, preferEoa, senderAddress, slots, content, theme, }: AnySpendDepositHypeProps): import("react/jsx-runtime").JSX.Element | null;
@@ -6,7 +6,7 @@ export const HYPE_TOKEN_DETAILS = {
6
6
  SYMBOL: "HYPE",
7
7
  LOGO_URI: "https://cdn.hypeduel.com/hypes-coin.svg",
8
8
  };
9
- export function AnySpendDepositHype({ loadOrder, mode = "modal", recipientAddress, paymentType = "crypto", sourceTokenAddress, sourceTokenChainId, onSuccess, onOpenCustomModal, mainFooter, onTokenSelect, customUsdInputValues, preferEoa, }) {
9
+ export function AnySpendDepositHype({ loadOrder, mode = "modal", recipientAddress, paymentType = "crypto", sourceTokenAddress, sourceTokenChainId, onSuccess, onOpenCustomModal, mainFooter, onTokenSelect, customUsdInputValues, preferEoa, senderAddress, slots, content, theme, }) {
10
10
  if (!recipientAddress)
11
11
  return null;
12
12
  const header = () => (_jsx("div", { className: "mb-4 flex flex-col items-center gap-3 text-center", children: _jsx("div", { children: _jsx("h1", { className: "text-as-primary text-xl font-bold", children: paymentType === "crypto" ? "Deposit Crypto" : "Fund with Fiat" }) }) }));
@@ -19,5 +19,5 @@ export function AnySpendDepositHype({ loadOrder, mode = "modal", recipientAddres
19
19
  logoURI: HYPE_TOKEN_DETAILS.LOGO_URI,
20
20
  },
21
21
  };
22
- return (_jsx(AnySpendCustomExactIn, { loadOrder: loadOrder, mode: mode, recipientAddress: recipientAddress, paymentType: paymentType, sourceTokenAddress: sourceTokenAddress, sourceTokenChainId: sourceTokenChainId, destinationToken: hypeToken, destinationChainId: base.id, orderType: "hype_duel", minDestinationAmount: 10, header: header, onSuccess: onSuccess, onOpenCustomModal: onOpenCustomModal, mainFooter: mainFooter, onTokenSelect: onTokenSelect, customUsdInputValues: customUsdInputValues, preferEoa: preferEoa }));
22
+ return (_jsx(AnySpendCustomExactIn, { loadOrder: loadOrder, mode: mode, recipientAddress: recipientAddress, paymentType: paymentType, sourceTokenAddress: sourceTokenAddress, sourceTokenChainId: sourceTokenChainId, destinationToken: hypeToken, destinationChainId: base.id, orderType: "hype_duel", minDestinationAmount: 10, header: header, onSuccess: onSuccess, onOpenCustomModal: onOpenCustomModal, mainFooter: mainFooter, onTokenSelect: onTokenSelect, customUsdInputValues: customUsdInputValues, preferEoa: preferEoa, senderAddress: senderAddress, slots: slots, content: content, theme: theme }));
23
23
  }
@@ -1,8 +1,12 @@
1
1
  import { GenerateSigMintResponse } from "../../types/signatureMint";
2
- export declare function AnyspendSignatureMint({ loadOrder, mode, signatureData, imageUrl, onSuccess, }: {
2
+ import type { AnySpendContent, AnySpendSlots, AnySpendTheme } from "./types/customization";
3
+ export declare function AnyspendSignatureMint({ loadOrder, mode, signatureData, imageUrl, onSuccess, slots, content, theme, }: {
3
4
  loadOrder?: string;
4
5
  mode?: "modal" | "page";
5
6
  signatureData: GenerateSigMintResponse;
6
7
  imageUrl?: string;
7
8
  onSuccess?: (txHash?: string) => void;
9
+ slots?: AnySpendSlots;
10
+ content?: AnySpendContent;
11
+ theme?: AnySpendTheme;
8
12
  }): import("react/jsx-runtime").JSX.Element;
@@ -35,7 +35,7 @@ function generateEncodedDataForSignatureMint(signatureData) {
35
35
  });
36
36
  return encodedData;
37
37
  }
38
- export function AnyspendSignatureMint({ loadOrder, mode = "modal", signatureData, imageUrl, onSuccess, }) {
38
+ export function AnyspendSignatureMint({ loadOrder, mode = "modal", signatureData, imageUrl, onSuccess, slots, content, theme, }) {
39
39
  // Get token data
40
40
  const { data: tokenData, isError: isTokenError, isLoading, } = useTokenData(signatureData.collection.chainId, signatureData.collection.signatureRequestBody?.currency);
41
41
  // Convert token data to AnySpend Token type
@@ -68,5 +68,5 @@ export function AnyspendSignatureMint({ loadOrder, mode = "modal", signatureData
68
68
  const price = parseEther(signatureData.payload.price?.toString() || "0");
69
69
  return (_jsx(AnySpendCustom, { loadOrder: loadOrder, mode: mode, recipientAddress: signatureData.payload.to, orderType: "custom", dstChainId: signatureData.collection.chainId, dstToken: dstToken, dstAmount: price.toString(), contractAddress: signatureData.collection.address || "", encodedData: encodedData, metadata: {
70
70
  action: "Signature Mint",
71
- }, header: header, onSuccess: onSuccess, showRecipient: true }));
71
+ }, header: header, onSuccess: onSuccess, showRecipient: true, slots: slots, content: content, theme: theme }));
72
72
  }
@@ -0,0 +1,9 @@
1
+ import type { AddressData } from "../../../types/forms";
2
+ interface AddressFormProps {
3
+ value: AddressData;
4
+ onChange: (address: AddressData) => void;
5
+ required?: boolean;
6
+ className?: string;
7
+ }
8
+ export declare function AddressForm({ value, onChange, required, className }: AddressFormProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cn } from "../../../../shared/utils/cn.js";
4
+ const inputBaseClass = "w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder:text-gray-400 outline-none transition-colors 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 dark:focus:border-blue-400";
5
+ const labelClass = "mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300";
6
+ export function AddressForm({ value, onChange, required, className }) {
7
+ const update = (field, val) => {
8
+ onChange({ ...value, [field]: val });
9
+ };
10
+ return (_jsxs("div", { className: cn("anyspend-address-form space-y-3", className), children: [_jsxs("div", { className: "anyspend-address-street", children: [_jsxs("label", { className: cn("anyspend-form-label", labelClass), children: ["Street Address", required && _jsx("span", { className: "ml-0.5 text-red-500", children: "*" })] }), _jsx("input", { type: "text", value: value.street || "", onChange: e => update("street", e.target.value), placeholder: "123 Main Street", required: required, className: cn("anyspend-form-input", inputBaseClass) })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { className: "anyspend-address-city", children: [_jsxs("label", { className: cn("anyspend-form-label", labelClass), children: ["City", required && _jsx("span", { className: "ml-0.5 text-red-500", children: "*" })] }), _jsx("input", { type: "text", value: value.city || "", onChange: e => update("city", e.target.value), placeholder: "City", required: required, className: cn("anyspend-form-input", inputBaseClass) })] }), _jsxs("div", { className: "anyspend-address-state", children: [_jsxs("label", { className: cn("anyspend-form-label", labelClass), children: ["State / Province", required && _jsx("span", { className: "ml-0.5 text-red-500", children: "*" })] }), _jsx("input", { type: "text", value: value.state || "", onChange: e => update("state", e.target.value), placeholder: "State", required: required, className: cn("anyspend-form-input", inputBaseClass) })] })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { className: "anyspend-address-zip", children: [_jsxs("label", { className: cn("anyspend-form-label", labelClass), children: ["Zip / Postal Code", required && _jsx("span", { className: "ml-0.5 text-red-500", children: "*" })] }), _jsx("input", { type: "text", value: value.zip || "", onChange: e => update("zip", e.target.value), placeholder: "12345", required: required, className: cn("anyspend-form-input", inputBaseClass) })] }), _jsxs("div", { className: "anyspend-address-country", children: [_jsxs("label", { className: cn("anyspend-form-label", labelClass), children: ["Country", required && _jsx("span", { className: "ml-0.5 text-red-500", children: "*" })] }), _jsx("input", { type: "text", value: value.country || "", onChange: e => update("country", e.target.value), placeholder: "Country", required: required, className: cn("anyspend-form-input", inputBaseClass) })] })] })] }));
11
+ }
@@ -1,5 +1,10 @@
1
+ import { type ReactNode } from "react";
2
+ import { type PaymentMethod } from "./CheckoutPaymentPanel";
1
3
  export type { AnySpendCheckoutClasses } from "../types/classes";
2
4
  import type { AnySpendCheckoutClasses } from "../types/classes";
5
+ import type { AnySpendContent, AnySpendSlots, AnySpendTheme } from "../types/customization";
6
+ import type { CheckoutFormSchema, CheckoutFormComponentProps, ShippingOption, DiscountResult, AddressData } from "../../../types/forms";
7
+ export type { CheckoutFormSchema, CheckoutFormComponentProps, ShippingOption, DiscountResult, AddressData };
3
8
  export interface CheckoutItem {
4
9
  id?: string;
5
10
  name: string;
@@ -8,6 +13,16 @@ export interface CheckoutItem {
8
13
  /** Amount in wei (smallest unit of destination token) */
9
14
  amount: string;
10
15
  quantity: number;
16
+ /** Custom metadata displayed as label: value pairs (e.g., { "Size": "Large", "Color": "Blue" }) */
17
+ metadata?: Record<string, string>;
18
+ }
19
+ export interface CheckoutSummaryLine {
20
+ /** Display label (e.g., "Platform Fee", "Service Charge") */
21
+ label: string;
22
+ /** Amount in token's smallest unit (wei). Negative values shown as deductions. */
23
+ amount: string;
24
+ /** Optional description or note */
25
+ description?: string;
11
26
  }
12
27
  export interface AnySpendCheckoutProps {
13
28
  /** Display mode */
@@ -45,6 +60,58 @@ export interface AnySpendCheckoutProps {
45
60
  returnLabel?: string;
46
61
  /** Custom class names */
47
62
  classes?: AnySpendCheckoutClasses;
63
+ /** Custom footer for the order summary. Pass `null` to hide, or a ReactNode to replace the default. */
64
+ footer?: ReactNode | null;
65
+ /** Which payment method to expand initially. Defaults to none (all collapsed). */
66
+ defaultPaymentMethod?: PaymentMethod;
67
+ /** Optional sender (payer) address — pre-fills token balances in the crypto panel */
68
+ senderAddress?: string;
69
+ /** Render function overrides for replaceable UI elements */
70
+ slots?: AnySpendSlots;
71
+ /** String or ReactNode overrides for text/messages */
72
+ content?: AnySpendContent;
73
+ /** Structured color/theme configuration */
74
+ theme?: AnySpendTheme;
75
+ /** Show the points row in the order status summary. Defaults to false. */
76
+ showPoints?: boolean;
77
+ /** Show the order ID row in the order status summary. Defaults to false. */
78
+ showOrderId?: boolean;
79
+ /** Shipping cost. String = amount in wei. Object = amount + custom label. */
80
+ shipping?: string | {
81
+ amount: string;
82
+ label?: string;
83
+ };
84
+ /** Tax amount. String = amount in wei. Object = amount + custom label + optional rate display. */
85
+ tax?: string | {
86
+ amount: string;
87
+ label?: string;
88
+ rate?: string;
89
+ };
90
+ /** Discount amount (displayed as negative). String = amount in wei. Object = amount + label + optional code. */
91
+ discount?: string | {
92
+ amount: string;
93
+ label?: string;
94
+ code?: string;
95
+ };
96
+ /** Additional summary line items (fees, tips, etc.) */
97
+ summaryLines?: CheckoutSummaryLine[];
98
+ /** JSON form schema defining fields to collect from the customer */
99
+ formSchema?: CheckoutFormSchema | null;
100
+ /** Custom React component to render as the checkout form */
101
+ formComponent?: React.ComponentType<CheckoutFormComponentProps>;
102
+ /** Called when form data changes */
103
+ onFormSubmit?: (data: Record<string, unknown>) => void;
104
+ /** Shipping options to display */
105
+ shippingOptions?: ShippingOption[] | null;
106
+ /** Whether to collect a shipping address */
107
+ collectShippingAddress?: boolean;
108
+ /** Called when shipping option changes */
109
+ onShippingChange?: (option: ShippingOption) => void;
110
+ /** Enable discount code input */
111
+ enableDiscountCode?: boolean;
112
+ /** Called when discount is applied */
113
+ onDiscountApplied?: (result: DiscountResult) => void;
114
+ /** Async function to validate a discount code. Returns DiscountResult. */
115
+ validateDiscount?: (code: string) => Promise<DiscountResult>;
48
116
  }
49
- export declare function AnySpendCheckout({ mode, recipientAddress, destinationTokenAddress, destinationTokenChainId, items, totalAmount: totalAmountOverride, organizationName, organizationLogo, themeColor, buttonText, checkoutSessionId: _checkoutSessionId, // TODO: pass to payment panels for server-side session tracking
50
- onSuccess, onError, returnUrl, returnLabel, classes, }: AnySpendCheckoutProps): import("react/jsx-runtime").JSX.Element;
117
+ export declare function AnySpendCheckout({ mode, recipientAddress, destinationTokenAddress, destinationTokenChainId, items, totalAmount: totalAmountOverride, organizationName, organizationLogo, themeColor, buttonText, checkoutSessionId, onSuccess, onError, returnUrl, returnLabel, classes, footer, defaultPaymentMethod, senderAddress, slots, content, theme, showPoints, showOrderId, shipping: shippingProp, tax, discount: discountProp, summaryLines, formSchema, formComponent, onFormSubmit, shippingOptions, collectShippingAddress, onShippingChange: onShippingChangeProp, enableDiscountCode, onDiscountApplied: onDiscountAppliedProp, validateDiscount, }: AnySpendCheckoutProps): import("react/jsx-runtime").JSX.Element;
@@ -1,27 +1,155 @@
1
1
  "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useTokenData } from "../../../../global-account/react/index.js";
4
- import { useMemo } from "react";
4
+ import { USDC_BASE } from "../../../../anyspend/constants/index.js";
5
+ import { formatUnits, safeBigInt } from "../../../../shared/utils/number.js";
6
+ import { useCallback, useMemo, useState } from "react";
7
+ import { useAnyspendQuote } from "../../hooks/useAnyspendQuote.js";
5
8
  import { AnySpendFingerprintWrapper, getFingerprintConfig } from "../AnySpendFingerprintWrapper.js";
6
9
  import { CheckoutCartPanel } from "./CheckoutCartPanel.js";
10
+ import { CheckoutFormPanel } from "./CheckoutFormPanel.js";
7
11
  import { CheckoutLayout } from "./CheckoutLayout.js";
8
12
  import { CheckoutPaymentPanel } from "./CheckoutPaymentPanel.js";
9
- export function AnySpendCheckout({ mode = "page", recipientAddress, destinationTokenAddress, destinationTokenChainId, items, totalAmount: totalAmountOverride, organizationName, organizationLogo, themeColor, buttonText = "Pay", checkoutSessionId: _checkoutSessionId, // TODO: pass to payment panels for server-side session tracking
10
- onSuccess, onError, returnUrl, returnLabel, classes, }) {
11
- // Compute total from items
13
+ import { AnySpendCustomizationProvider } from "../context/AnySpendCustomizationContext.js";
14
+ const emptyAddress = { street: "", city: "", state: "", zip: "", country: "" };
15
+ export function AnySpendCheckout({ mode = "page", recipientAddress, destinationTokenAddress, destinationTokenChainId, items, totalAmount: totalAmountOverride, organizationName, organizationLogo, themeColor, buttonText = "Pay", checkoutSessionId, onSuccess, onError, returnUrl, returnLabel, classes, footer, defaultPaymentMethod, senderAddress, slots, content, theme, showPoints, showOrderId, shipping: shippingProp, tax, discount: discountProp, summaryLines,
16
+ // New form props
17
+ formSchema, formComponent, onFormSubmit,
18
+ // New shipping props
19
+ shippingOptions, collectShippingAddress, onShippingChange: onShippingChangeProp,
20
+ // New discount props
21
+ enableDiscountCode, onDiscountApplied: onDiscountAppliedProp, validateDiscount, }) {
22
+ // ===== Form state =====
23
+ const [formData, setFormData] = useState({});
24
+ const [selectedShipping, setSelectedShipping] = useState(null);
25
+ const [appliedDiscount, setAppliedDiscount] = useState(null);
26
+ const [shippingAddress, setShippingAddress] = useState(emptyAddress);
27
+ const handleFormDataChange = useCallback((data) => {
28
+ setFormData(data);
29
+ onFormSubmit?.(data);
30
+ }, [onFormSubmit]);
31
+ const handleShippingChange = useCallback((option) => {
32
+ setSelectedShipping(option);
33
+ onShippingChangeProp?.(option);
34
+ }, [onShippingChangeProp]);
35
+ const handleDiscountApplied = useCallback((result) => {
36
+ setAppliedDiscount(result);
37
+ onDiscountAppliedProp?.(result);
38
+ }, [onDiscountAppliedProp]);
39
+ const handleDiscountRemoved = useCallback(() => {
40
+ setAppliedDiscount(null);
41
+ }, []);
42
+ // Merge static shipping prop with dynamic shipping selection
43
+ const effectiveShipping = useMemo(() => {
44
+ if (selectedShipping) {
45
+ return { amount: selectedShipping.amount, label: selectedShipping.name };
46
+ }
47
+ if (shippingProp) {
48
+ return typeof shippingProp === "string" ? { amount: shippingProp } : shippingProp;
49
+ }
50
+ return undefined;
51
+ }, [selectedShipping, shippingProp]);
52
+ // Merge static discount prop with dynamic discount
53
+ const effectiveDiscount = useMemo(() => {
54
+ if (appliedDiscount?.valid && appliedDiscount.discount_amount) {
55
+ return {
56
+ amount: appliedDiscount.discount_amount,
57
+ label: appliedDiscount.discount_type === "percentage" ? `${appliedDiscount.discount_value}% off` : "Discount",
58
+ };
59
+ }
60
+ if (discountProp) {
61
+ return typeof discountProp === "string" ? { amount: discountProp } : discountProp;
62
+ }
63
+ return undefined;
64
+ }, [appliedDiscount, discountProp]);
65
+ // Compute total from items + adjustments (including dynamic shipping/discount)
12
66
  const computedTotal = useMemo(() => {
13
67
  if (totalAmountOverride)
14
68
  return totalAmountOverride;
15
69
  let total = BigInt(0);
16
70
  for (const item of items) {
17
- total += BigInt(item.amount) * BigInt(item.quantity);
71
+ total += safeBigInt(item.amount) * BigInt(item.quantity);
72
+ }
73
+ if (effectiveShipping?.amount)
74
+ total += safeBigInt(effectiveShipping.amount);
75
+ const taxAmt = typeof tax === "string" ? tax : tax?.amount;
76
+ if (taxAmt)
77
+ total += safeBigInt(taxAmt);
78
+ if (effectiveDiscount?.amount)
79
+ total -= safeBigInt(effectiveDiscount.amount);
80
+ if (summaryLines) {
81
+ for (const line of summaryLines)
82
+ total += safeBigInt(line.amount);
18
83
  }
84
+ if (total < BigInt(0))
85
+ total = BigInt(0);
19
86
  return total.toString();
20
- }, [items, totalAmountOverride]);
87
+ }, [items, totalAmountOverride, effectiveShipping, tax, effectiveDiscount, summaryLines]);
21
88
  // Get destination token metadata
22
89
  const { data: tokenData } = useTokenData(destinationTokenChainId, destinationTokenAddress);
23
90
  const tokenSymbol = tokenData?.symbol || "";
24
91
  const tokenDecimals = tokenData?.decimals || 18;
92
+ // Resolve USD equivalent for non-stablecoin tokens (shown in cart summary)
93
+ const isStablecoin = useMemo(() => {
94
+ return [
95
+ "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC Base
96
+ "0xdAC17F958D2ee523a2206206994597C13D831ec7", // USDT Ethereum
97
+ ].some(addr => addr.toLowerCase() === destinationTokenAddress.toLowerCase());
98
+ }, [destinationTokenAddress]);
99
+ const { anyspendQuote } = useAnyspendQuote({
100
+ type: "swap",
101
+ srcChain: 8453,
102
+ dstChain: destinationTokenChainId,
103
+ srcTokenAddress: USDC_BASE.address,
104
+ dstTokenAddress: destinationTokenAddress,
105
+ tradeType: "EXACT_OUTPUT",
106
+ amount: computedTotal,
107
+ });
108
+ const usdEquivalent = useMemo(() => {
109
+ if (isStablecoin)
110
+ return null; // stablecoins already show USD-equivalent amounts
111
+ if (!anyspendQuote?.data?.currencyIn?.amount)
112
+ return null;
113
+ const raw = formatUnits(anyspendQuote.data.currencyIn.amount, USDC_BASE.decimals);
114
+ return `$${parseFloat(raw).toFixed(2)}`;
115
+ }, [isStablecoin, anyspendQuote]);
25
116
  const fingerprint = getFingerprintConfig();
26
- return (_jsx(AnySpendFingerprintWrapper, { fingerprint: fingerprint, children: _jsx(CheckoutLayout, { mode: mode, paymentPanel: _jsx(CheckoutPaymentPanel, { recipientAddress: recipientAddress, destinationTokenAddress: destinationTokenAddress, destinationTokenChainId: destinationTokenChainId, totalAmount: computedTotal, buttonText: buttonText, themeColor: themeColor, returnUrl: returnUrl, returnLabel: returnLabel, onSuccess: onSuccess, onError: onError, classes: classes }), cartPanel: _jsx(CheckoutCartPanel, { items: items, totalAmount: computedTotal, tokenSymbol: tokenSymbol, tokenDecimals: tokenDecimals, organizationName: organizationName, organizationLogo: organizationLogo, classes: classes }), classes: classes }) }));
117
+ // Build callbackMetadata to include form data with the order
118
+ const checkoutFormMetadata = useMemo(() => {
119
+ const meta = {};
120
+ if (Object.keys(formData).length > 0)
121
+ meta.formData = formData;
122
+ if (selectedShipping)
123
+ meta.shippingOptionId = selectedShipping.id;
124
+ if (selectedShipping)
125
+ meta.shippingAmount = selectedShipping.amount;
126
+ if (shippingAddress.street)
127
+ meta.shippingAddress = shippingAddress;
128
+ if (appliedDiscount?.valid) {
129
+ meta.discountCode = appliedDiscount.discount_value;
130
+ meta.discountAmount = appliedDiscount.discount_amount;
131
+ }
132
+ // Extract common fields for customer enrichment
133
+ if (formData.email)
134
+ meta.customerEmail = formData.email;
135
+ if (formData.name)
136
+ meta.customerName = formData.name;
137
+ if (checkoutSessionId)
138
+ meta.checkoutSessionId = checkoutSessionId;
139
+ return Object.keys(meta).length > 0 ? meta : undefined;
140
+ }, [formData, selectedShipping, shippingAddress, appliedDiscount, checkoutSessionId]);
141
+ // Check if required form fields are filled
142
+ const isFormValid = useMemo(() => {
143
+ if (!formSchema)
144
+ return true;
145
+ return formSchema.fields.filter(f => f.required).every(f => formData[f.id] != null && formData[f.id] !== "");
146
+ }, [formSchema, formData]);
147
+ // Check if we have a form panel to show
148
+ const hasFormContent = (formSchema && formSchema.fields.length > 0) ||
149
+ formComponent ||
150
+ slots?.checkoutForm ||
151
+ (shippingOptions && shippingOptions.length > 0) ||
152
+ collectShippingAddress ||
153
+ enableDiscountCode;
154
+ return (_jsx(AnySpendFingerprintWrapper, { fingerprint: fingerprint, children: _jsx(AnySpendCustomizationProvider, { slots: slots, content: content, theme: theme, children: _jsx(CheckoutLayout, { mode: mode, paymentPanel: _jsxs(_Fragment, { children: [hasFormContent && (_jsxs("div", { className: "mb-6", children: [_jsx(CheckoutFormPanel, { formSchema: formSchema, formComponent: formComponent, shippingOptions: shippingOptions, collectShippingAddress: collectShippingAddress, enableDiscountCode: enableDiscountCode, validateDiscount: validateDiscount, tokenSymbol: tokenSymbol, tokenDecimals: tokenDecimals, classes: classes, formData: formData, onFormDataChange: handleFormDataChange, selectedShipping: selectedShipping, onShippingChange: handleShippingChange, appliedDiscount: appliedDiscount, onDiscountApplied: handleDiscountApplied, onDiscountRemoved: handleDiscountRemoved, shippingAddress: shippingAddress, onShippingAddressChange: setShippingAddress, checkoutFormSlot: slots?.checkoutForm }), _jsx("div", { className: "mt-6 border-t border-gray-200 dark:border-neutral-700" })] })), _jsx(CheckoutPaymentPanel, { recipientAddress: recipientAddress, destinationTokenAddress: destinationTokenAddress, destinationTokenChainId: destinationTokenChainId, totalAmount: computedTotal, buttonText: buttonText, themeColor: themeColor, returnUrl: returnUrl, returnLabel: returnLabel, onSuccess: onSuccess, onError: onError, classes: classes, defaultPaymentMethod: defaultPaymentMethod, senderAddress: senderAddress, showPoints: showPoints, showOrderId: showOrderId, callbackMetadata: checkoutFormMetadata, isFormValid: isFormValid })] }), cartPanel: _jsx(CheckoutCartPanel, { items: items, totalAmount: computedTotal, tokenSymbol: tokenSymbol, tokenDecimals: tokenDecimals, organizationName: organizationName, organizationLogo: organizationLogo, classes: classes, footer: footer, shipping: effectiveShipping, tax: typeof tax === "string" ? { amount: tax } : tax, discount: effectiveDiscount, summaryLines: summaryLines, usdEquivalent: usdEquivalent }), classes: classes }) }) }));
27
155
  }
@@ -1,5 +1,8 @@
1
+ import { type ReactNode } from "react";
1
2
  import type { AnySpendCheckoutClasses } from "../types/classes";
2
- import type { CheckoutItem } from "./AnySpendCheckout";
3
+ import type { AnySpendContent, AnySpendSlots, AnySpendTheme } from "../types/customization";
4
+ import type { CheckoutItem, CheckoutSummaryLine } from "./AnySpendCheckout";
5
+ import { type PaymentMethod } from "./CheckoutPaymentPanel";
3
6
  export interface AnySpendCheckoutTriggerProps {
4
7
  /** Payment recipient address (hex) */
5
8
  recipientAddress: string;
@@ -43,5 +46,36 @@ export interface AnySpendCheckoutTriggerProps {
43
46
  classes?: AnySpendCheckoutClasses;
44
47
  /** Display mode — set automatically when used inside B3DynamicModal */
45
48
  mode?: "modal" | "page";
49
+ /** Custom footer for the order summary. Pass `null` to hide, or a ReactNode to replace the default. */
50
+ footer?: ReactNode | null;
51
+ /** Which payment method to expand initially. Defaults to none (all collapsed). */
52
+ defaultPaymentMethod?: PaymentMethod;
53
+ /** Optional sender (payer) address — pre-fills token balances in the crypto panel */
54
+ senderAddress?: string;
55
+ /** Render function overrides for replaceable UI elements */
56
+ slots?: AnySpendSlots;
57
+ /** String or ReactNode overrides for text/messages */
58
+ content?: AnySpendContent;
59
+ /** Structured color/theme configuration */
60
+ theme?: AnySpendTheme;
61
+ /** Shipping cost. String = amount in wei. Object = amount + custom label. */
62
+ shipping?: string | {
63
+ amount: string;
64
+ label?: string;
65
+ };
66
+ /** Tax amount. String = amount in wei. Object = amount + custom label + optional rate display. */
67
+ tax?: string | {
68
+ amount: string;
69
+ label?: string;
70
+ rate?: string;
71
+ };
72
+ /** Discount amount (displayed as negative). String = amount in wei. Object = amount + label + optional code. */
73
+ discount?: string | {
74
+ amount: string;
75
+ label?: string;
76
+ code?: string;
77
+ };
78
+ /** Additional summary line items (fees, tips, etc.) */
79
+ summaryLines?: CheckoutSummaryLine[];
46
80
  }
47
- export declare function AnySpendCheckoutTrigger({ recipientAddress, destinationTokenAddress, destinationTokenChainId, items, totalAmount: totalAmountOverride, organizationName, organizationLogo, themeColor, buttonText, workflowId, orgId, callbackMetadata, onSuccess, onError, returnUrl, returnLabel, classes, }: AnySpendCheckoutTriggerProps): import("react/jsx-runtime").JSX.Element;
81
+ export declare function AnySpendCheckoutTrigger({ recipientAddress, destinationTokenAddress, destinationTokenChainId, items, totalAmount: totalAmountOverride, organizationName, organizationLogo, themeColor, buttonText, workflowId, orgId, callbackMetadata, onSuccess, onError, returnUrl, returnLabel, classes, footer, defaultPaymentMethod, senderAddress, slots, content, theme, shipping, tax, discount, summaryLines, }: AnySpendCheckoutTriggerProps): import("react/jsx-runtime").JSX.Element;
@@ -1,14 +1,15 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useTokenData } from "../../../../global-account/react/index.js";
4
- import { formatTokenAmount } from "../../../../shared/utils/number.js";
4
+ import { formatTokenAmount, safeBigInt } from "../../../../shared/utils/number.js";
5
5
  import { cn } from "../../../../shared/utils/cn.js";
6
6
  import { useMemo } from "react";
7
7
  import { AnySpendFingerprintWrapper, getFingerprintConfig } from "../AnySpendFingerprintWrapper.js";
8
+ import { AnySpendCustomizationProvider } from "../context/AnySpendCustomizationContext.js";
8
9
  import { CheckoutCartPanel } from "./CheckoutCartPanel.js";
9
10
  import { CheckoutPaymentPanel } from "./CheckoutPaymentPanel.js";
10
11
  import { PoweredByBranding } from "./PoweredByBranding.js";
11
- export function AnySpendCheckoutTrigger({ recipientAddress, destinationTokenAddress, destinationTokenChainId, items, totalAmount: totalAmountOverride, organizationName, organizationLogo, themeColor, buttonText = "Pay", workflowId, orgId, callbackMetadata, onSuccess, onError, returnUrl, returnLabel, classes, }) {
12
+ export function AnySpendCheckoutTrigger({ recipientAddress, destinationTokenAddress, destinationTokenChainId, items, totalAmount: totalAmountOverride, organizationName, organizationLogo, themeColor, buttonText = "Pay", workflowId, orgId, callbackMetadata, onSuccess, onError, returnUrl, returnLabel, classes, footer, defaultPaymentMethod, senderAddress, slots, content, theme, shipping, tax, discount, summaryLines, }) {
12
13
  // Merge workflowId + orgId into callbackMetadata
13
14
  const mergedMetadata = useMemo(() => {
14
15
  if (!workflowId && !orgId && !callbackMetadata)
@@ -19,7 +20,7 @@ export function AnySpendCheckoutTrigger({ recipientAddress, destinationTokenAddr
19
20
  ...callbackMetadata,
20
21
  };
21
22
  }, [workflowId, orgId, callbackMetadata]);
22
- // Compute total from items or use override
23
+ // Compute total from items + adjustments or use override
23
24
  const computedTotal = useMemo(() => {
24
25
  if (totalAmountOverride)
25
26
  return totalAmountOverride;
@@ -27,10 +28,25 @@ export function AnySpendCheckoutTrigger({ recipientAddress, destinationTokenAddr
27
28
  return "0";
28
29
  let total = BigInt(0);
29
30
  for (const item of items) {
30
- total += BigInt(item.amount) * BigInt(item.quantity);
31
+ total += safeBigInt(item.amount) * BigInt(item.quantity);
31
32
  }
33
+ const shippingAmt = typeof shipping === "string" ? shipping : shipping?.amount;
34
+ if (shippingAmt)
35
+ total += safeBigInt(shippingAmt);
36
+ const taxAmt = typeof tax === "string" ? tax : tax?.amount;
37
+ if (taxAmt)
38
+ total += safeBigInt(taxAmt);
39
+ const discountAmt = typeof discount === "string" ? discount : discount?.amount;
40
+ if (discountAmt)
41
+ total -= safeBigInt(discountAmt);
42
+ if (summaryLines) {
43
+ for (const line of summaryLines)
44
+ total += safeBigInt(line.amount);
45
+ }
46
+ if (total < BigInt(0))
47
+ total = BigInt(0);
32
48
  return total.toString();
33
- }, [items, totalAmountOverride]);
49
+ }, [items, totalAmountOverride, shipping, tax, discount, summaryLines]);
34
50
  // Get destination token metadata
35
51
  const { data: tokenData } = useTokenData(destinationTokenChainId, destinationTokenAddress);
36
52
  const tokenSymbol = tokenData?.symbol || "";
@@ -38,5 +54,5 @@ export function AnySpendCheckoutTrigger({ recipientAddress, destinationTokenAddr
38
54
  const formattedTotal = useMemo(() => formatTokenAmount(BigInt(computedTotal || "0"), tokenDecimals), [computedTotal, tokenDecimals]);
39
55
  const hasItems = items && items.length > 0;
40
56
  const fingerprint = getFingerprintConfig();
41
- return (_jsx(AnySpendFingerprintWrapper, { fingerprint: fingerprint, children: _jsxs("div", { className: "anyspend-checkout-trigger flex flex-col", children: [hasItems && (_jsx("div", { className: "border-b border-gray-200 p-5 dark:border-gray-700", children: _jsx(CheckoutCartPanel, { items: items, totalAmount: computedTotal, tokenSymbol: tokenSymbol, tokenDecimals: tokenDecimals, organizationName: organizationName, organizationLogo: organizationLogo, classes: classes }) })), !hasItems && (_jsx("div", { className: "border-b border-gray-200 p-5 dark:border-gray-700", children: _jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { className: cn("flex items-center justify-between", classes?.cartSummary), children: [_jsx("span", { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: "Total" }), _jsxs("span", { className: cn("text-base font-semibold text-gray-900 dark:text-gray-100", classes?.cartTotal), children: [formattedTotal, " ", tokenSymbol] })] }), _jsx(PoweredByBranding, { organizationName: organizationName, organizationLogo: organizationLogo, classes: classes })] }) })), _jsx("div", { className: "p-5", children: _jsx(CheckoutPaymentPanel, { recipientAddress: recipientAddress, destinationTokenAddress: destinationTokenAddress, destinationTokenChainId: destinationTokenChainId, totalAmount: computedTotal, buttonText: buttonText, themeColor: themeColor, returnUrl: returnUrl, returnLabel: returnLabel, onSuccess: onSuccess, onError: onError, callbackMetadata: mergedMetadata, classes: classes }) })] }) }));
57
+ return (_jsx(AnySpendFingerprintWrapper, { fingerprint: fingerprint, children: _jsx(AnySpendCustomizationProvider, { slots: slots, content: content, theme: theme, children: _jsxs("div", { className: "anyspend-checkout-trigger flex flex-col", children: [hasItems && (_jsx("div", { className: "border-b border-gray-200 p-5 dark:border-neutral-700", children: _jsx(CheckoutCartPanel, { items: items, totalAmount: computedTotal, tokenSymbol: tokenSymbol, tokenDecimals: tokenDecimals, organizationName: organizationName, organizationLogo: organizationLogo, classes: classes, footer: footer, shipping: typeof shipping === "string" ? { amount: shipping } : shipping, tax: typeof tax === "string" ? { amount: tax } : tax, discount: typeof discount === "string" ? { amount: discount } : discount, summaryLines: summaryLines }) })), !hasItems && (_jsx("div", { className: "border-b border-gray-200 p-5 dark:border-neutral-700", children: _jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { className: cn("flex items-center justify-between", classes?.cartSummary), children: [_jsx("span", { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: "Total" }), _jsxs("span", { className: cn("text-base font-semibold text-gray-900 dark:text-gray-100", classes?.cartTotal), children: [formattedTotal, " ", tokenSymbol] })] }), footer === undefined ? (_jsx(PoweredByBranding, { organizationName: organizationName, organizationLogo: organizationLogo, classes: classes })) : (footer)] }) })), _jsx("div", { className: "px-2 py-3", children: _jsx(CheckoutPaymentPanel, { recipientAddress: recipientAddress, destinationTokenAddress: destinationTokenAddress, destinationTokenChainId: destinationTokenChainId, totalAmount: computedTotal, buttonText: buttonText, themeColor: themeColor, returnUrl: returnUrl, returnLabel: returnLabel, onSuccess: onSuccess, onError: onError, callbackMetadata: mergedMetadata, classes: classes, defaultPaymentMethod: defaultPaymentMethod, senderAddress: senderAddress }) })] }) }) }));
42
58
  }
@@ -2,5 +2,5 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { cn } from "../../../../shared/utils/cn.js";
4
4
  export function CartItemRow({ item, formattedPrice, classes }) {
5
- return (_jsxs("div", { className: cn("flex items-start gap-3 py-3", classes?.cartItemRow), children: [item.imageUrl && (_jsx("div", { className: cn("h-14 w-14 shrink-0 overflow-hidden rounded-lg bg-gray-100", classes?.cartItemImage), children: _jsx("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) })), _jsxs("div", { className: "flex min-w-0 flex-1 items-start justify-between", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: cn("text-sm font-medium text-gray-900 dark:text-gray-100", classes?.cartItemName), children: item.name }), item.description && (_jsx("p", { className: cn("mt-0.5 line-clamp-2 text-xs text-gray-500 dark:text-gray-400", classes?.cartItemDescription), children: item.description })), item.quantity > 1 && _jsxs("p", { className: "mt-0.5 text-xs text-gray-400 dark:text-gray-500", children: ["Qty: ", item.quantity] })] }), _jsx("p", { className: cn("ml-3 text-sm font-medium text-gray-900 dark:text-gray-100", classes?.cartItemPrice), children: formattedPrice })] })] }));
5
+ return (_jsxs("div", { className: cn("flex items-start gap-3 py-3", classes?.cartItemRow), children: [item.imageUrl && (_jsx("div", { className: cn("h-14 w-14 shrink-0 overflow-hidden rounded-lg bg-gray-100", classes?.cartItemImage), children: _jsx("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) })), _jsxs("div", { className: "flex min-w-0 flex-1 items-start justify-between", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: cn("text-sm font-medium text-gray-900 dark:text-gray-100", classes?.cartItemName), children: item.name }), item.description && (_jsx("p", { className: cn("mt-0.5 line-clamp-2 text-xs text-gray-500 dark:text-gray-400", classes?.cartItemDescription), children: item.description })), item.quantity > 1 && _jsxs("p", { className: "mt-0.5 text-xs text-gray-400 dark:text-gray-500", children: ["Qty: ", item.quantity] }), item.metadata && Object.keys(item.metadata).length > 0 && (_jsx("div", { className: cn("mt-1 flex flex-wrap gap-x-3 gap-y-0.5", classes?.cartItemMetadata), children: Object.entries(item.metadata).map(([key, value]) => (_jsxs("span", { className: cn("text-xs text-gray-400 dark:text-gray-500", classes?.cartItemMetadataLabel), children: [key, ":", " ", _jsx("span", { className: cn("text-gray-600 dark:text-gray-300", classes?.cartItemMetadataValue), children: value })] }, key))) }))] }), _jsx("p", { className: cn("ml-3 text-sm font-medium text-gray-900 dark:text-gray-100", classes?.cartItemPrice), children: formattedPrice })] })] }));
6
6
  }
@@ -1,8 +1,30 @@
1
1
  import type { AnySpendCheckoutClasses } from "./AnySpendCheckout";
2
+ import type { CheckoutSummaryLine } from "./AnySpendCheckout";
2
3
  interface CartSummaryProps {
4
+ /** Formatted total (final amount after all adjustments) */
3
5
  total: string;
4
6
  tokenSymbol?: string;
5
7
  classes?: AnySpendCheckoutClasses;
8
+ /** Formatted subtotal (sum of items only — shown when adjustments exist) */
9
+ subtotal?: string;
10
+ tokenDecimals?: number;
11
+ shipping?: {
12
+ amount: string;
13
+ label?: string;
14
+ };
15
+ tax?: {
16
+ amount: string;
17
+ label?: string;
18
+ rate?: string;
19
+ };
20
+ discount?: {
21
+ amount: string;
22
+ label?: string;
23
+ code?: string;
24
+ };
25
+ summaryLines?: CheckoutSummaryLine[];
26
+ /** Formatted USD equivalent (e.g. "$5.56") — shown for non-stablecoin tokens */
27
+ usdEquivalent?: string | null;
6
28
  }
7
- export declare function CartSummary({ total, tokenSymbol, classes }: CartSummaryProps): import("react/jsx-runtime").JSX.Element;
29
+ export declare function CartSummary({ total, tokenSymbol, classes, subtotal, tokenDecimals, shipping, tax, discount, summaryLines, usdEquivalent, }: CartSummaryProps): import("react/jsx-runtime").JSX.Element;
8
30
  export {};