@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,158 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.AnySpendCheckout = AnySpendCheckout;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const react_1 = require("../../../../global-account/react");
7
+ const constants_1 = require("../../../../anyspend/constants");
8
+ const number_1 = require("../../../../shared/utils/number");
9
+ const react_2 = require("react");
10
+ const useAnyspendQuote_1 = require("../../hooks/useAnyspendQuote");
11
+ const AnySpendFingerprintWrapper_1 = require("../AnySpendFingerprintWrapper");
12
+ const CheckoutCartPanel_1 = require("./CheckoutCartPanel");
13
+ const CheckoutFormPanel_1 = require("./CheckoutFormPanel");
14
+ const CheckoutLayout_1 = require("./CheckoutLayout");
15
+ const CheckoutPaymentPanel_1 = require("./CheckoutPaymentPanel");
16
+ const AnySpendCustomizationContext_1 = require("../context/AnySpendCustomizationContext");
17
+ const emptyAddress = { street: "", city: "", state: "", zip: "", country: "" };
18
+ 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,
19
+ // New form props
20
+ formSchema, formComponent, onFormSubmit,
21
+ // New shipping props
22
+ shippingOptions, collectShippingAddress, onShippingChange: onShippingChangeProp,
23
+ // New discount props
24
+ enableDiscountCode, onDiscountApplied: onDiscountAppliedProp, validateDiscount, }) {
25
+ // ===== Form state =====
26
+ const [formData, setFormData] = (0, react_2.useState)({});
27
+ const [selectedShipping, setSelectedShipping] = (0, react_2.useState)(null);
28
+ const [appliedDiscount, setAppliedDiscount] = (0, react_2.useState)(null);
29
+ const [shippingAddress, setShippingAddress] = (0, react_2.useState)(emptyAddress);
30
+ const handleFormDataChange = (0, react_2.useCallback)((data) => {
31
+ setFormData(data);
32
+ onFormSubmit?.(data);
33
+ }, [onFormSubmit]);
34
+ const handleShippingChange = (0, react_2.useCallback)((option) => {
35
+ setSelectedShipping(option);
36
+ onShippingChangeProp?.(option);
37
+ }, [onShippingChangeProp]);
38
+ const handleDiscountApplied = (0, react_2.useCallback)((result) => {
39
+ setAppliedDiscount(result);
40
+ onDiscountAppliedProp?.(result);
41
+ }, [onDiscountAppliedProp]);
42
+ const handleDiscountRemoved = (0, react_2.useCallback)(() => {
43
+ setAppliedDiscount(null);
44
+ }, []);
45
+ // Merge static shipping prop with dynamic shipping selection
46
+ const effectiveShipping = (0, react_2.useMemo)(() => {
47
+ if (selectedShipping) {
48
+ return { amount: selectedShipping.amount, label: selectedShipping.name };
49
+ }
50
+ if (shippingProp) {
51
+ return typeof shippingProp === "string" ? { amount: shippingProp } : shippingProp;
52
+ }
53
+ return undefined;
54
+ }, [selectedShipping, shippingProp]);
55
+ // Merge static discount prop with dynamic discount
56
+ const effectiveDiscount = (0, react_2.useMemo)(() => {
57
+ if (appliedDiscount?.valid && appliedDiscount.discount_amount) {
58
+ return {
59
+ amount: appliedDiscount.discount_amount,
60
+ label: appliedDiscount.discount_type === "percentage" ? `${appliedDiscount.discount_value}% off` : "Discount",
61
+ };
62
+ }
63
+ if (discountProp) {
64
+ return typeof discountProp === "string" ? { amount: discountProp } : discountProp;
65
+ }
66
+ return undefined;
67
+ }, [appliedDiscount, discountProp]);
68
+ // Compute total from items + adjustments (including dynamic shipping/discount)
69
+ const computedTotal = (0, react_2.useMemo)(() => {
70
+ if (totalAmountOverride)
71
+ return totalAmountOverride;
72
+ let total = BigInt(0);
73
+ for (const item of items) {
74
+ total += (0, number_1.safeBigInt)(item.amount) * BigInt(item.quantity);
75
+ }
76
+ if (effectiveShipping?.amount)
77
+ total += (0, number_1.safeBigInt)(effectiveShipping.amount);
78
+ const taxAmt = typeof tax === "string" ? tax : tax?.amount;
79
+ if (taxAmt)
80
+ total += (0, number_1.safeBigInt)(taxAmt);
81
+ if (effectiveDiscount?.amount)
82
+ total -= (0, number_1.safeBigInt)(effectiveDiscount.amount);
83
+ if (summaryLines) {
84
+ for (const line of summaryLines)
85
+ total += (0, number_1.safeBigInt)(line.amount);
86
+ }
87
+ if (total < BigInt(0))
88
+ total = BigInt(0);
89
+ return total.toString();
90
+ }, [items, totalAmountOverride, effectiveShipping, tax, effectiveDiscount, summaryLines]);
91
+ // Get destination token metadata
92
+ const { data: tokenData } = (0, react_1.useTokenData)(destinationTokenChainId, destinationTokenAddress);
93
+ const tokenSymbol = tokenData?.symbol || "";
94
+ const tokenDecimals = tokenData?.decimals || 18;
95
+ // Resolve USD equivalent for non-stablecoin tokens (shown in cart summary)
96
+ const isStablecoin = (0, react_2.useMemo)(() => {
97
+ return [
98
+ "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC Base
99
+ "0xdAC17F958D2ee523a2206206994597C13D831ec7", // USDT Ethereum
100
+ ].some(addr => addr.toLowerCase() === destinationTokenAddress.toLowerCase());
101
+ }, [destinationTokenAddress]);
102
+ const { anyspendQuote } = (0, useAnyspendQuote_1.useAnyspendQuote)({
103
+ type: "swap",
104
+ srcChain: 8453,
105
+ dstChain: destinationTokenChainId,
106
+ srcTokenAddress: constants_1.USDC_BASE.address,
107
+ dstTokenAddress: destinationTokenAddress,
108
+ tradeType: "EXACT_OUTPUT",
109
+ amount: computedTotal,
110
+ });
111
+ const usdEquivalent = (0, react_2.useMemo)(() => {
112
+ if (isStablecoin)
113
+ return null; // stablecoins already show USD-equivalent amounts
114
+ if (!anyspendQuote?.data?.currencyIn?.amount)
115
+ return null;
116
+ const raw = (0, number_1.formatUnits)(anyspendQuote.data.currencyIn.amount, constants_1.USDC_BASE.decimals);
117
+ return `$${parseFloat(raw).toFixed(2)}`;
118
+ }, [isStablecoin, anyspendQuote]);
119
+ const fingerprint = (0, AnySpendFingerprintWrapper_1.getFingerprintConfig)();
120
+ // Build callbackMetadata to include form data with the order
121
+ const checkoutFormMetadata = (0, react_2.useMemo)(() => {
122
+ const meta = {};
123
+ if (Object.keys(formData).length > 0)
124
+ meta.formData = formData;
125
+ if (selectedShipping)
126
+ meta.shippingOptionId = selectedShipping.id;
127
+ if (selectedShipping)
128
+ meta.shippingAmount = selectedShipping.amount;
129
+ if (shippingAddress.street)
130
+ meta.shippingAddress = shippingAddress;
131
+ if (appliedDiscount?.valid) {
132
+ meta.discountCode = appliedDiscount.discount_value;
133
+ meta.discountAmount = appliedDiscount.discount_amount;
134
+ }
135
+ // Extract common fields for customer enrichment
136
+ if (formData.email)
137
+ meta.customerEmail = formData.email;
138
+ if (formData.name)
139
+ meta.customerName = formData.name;
140
+ if (checkoutSessionId)
141
+ meta.checkoutSessionId = checkoutSessionId;
142
+ return Object.keys(meta).length > 0 ? meta : undefined;
143
+ }, [formData, selectedShipping, shippingAddress, appliedDiscount, checkoutSessionId]);
144
+ // Check if required form fields are filled
145
+ const isFormValid = (0, react_2.useMemo)(() => {
146
+ if (!formSchema)
147
+ return true;
148
+ return formSchema.fields.filter(f => f.required).every(f => formData[f.id] != null && formData[f.id] !== "");
149
+ }, [formSchema, formData]);
150
+ // Check if we have a form panel to show
151
+ const hasFormContent = (formSchema && formSchema.fields.length > 0) ||
152
+ formComponent ||
153
+ slots?.checkoutForm ||
154
+ (shippingOptions && shippingOptions.length > 0) ||
155
+ collectShippingAddress ||
156
+ enableDiscountCode;
157
+ return ((0, jsx_runtime_1.jsx)(AnySpendFingerprintWrapper_1.AnySpendFingerprintWrapper, { fingerprint: fingerprint, children: (0, jsx_runtime_1.jsx)(AnySpendCustomizationContext_1.AnySpendCustomizationProvider, { slots: slots, content: content, theme: theme, children: (0, jsx_runtime_1.jsx)(CheckoutLayout_1.CheckoutLayout, { mode: mode, paymentPanel: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [hasFormContent && ((0, jsx_runtime_1.jsxs)("div", { className: "mb-6", children: [(0, jsx_runtime_1.jsx)(CheckoutFormPanel_1.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 }), (0, jsx_runtime_1.jsx)("div", { className: "mt-6 border-t border-gray-200 dark:border-neutral-700" })] })), (0, jsx_runtime_1.jsx)(CheckoutPaymentPanel_1.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: (0, jsx_runtime_1.jsx)(CheckoutCartPanel_1.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 }) }) }));
158
+ }
@@ -0,0 +1,81 @@
1
+ import { type ReactNode } from "react";
2
+ import type { AnySpendCheckoutClasses } from "../types/classes";
3
+ import type { AnySpendContent, AnySpendSlots, AnySpendTheme } from "../types/customization";
4
+ import type { CheckoutItem, CheckoutSummaryLine } from "./AnySpendCheckout";
5
+ import { type PaymentMethod } from "./CheckoutPaymentPanel";
6
+ export interface AnySpendCheckoutTriggerProps {
7
+ /** Payment recipient address (hex) */
8
+ recipientAddress: string;
9
+ /** Destination token address */
10
+ destinationTokenAddress: string;
11
+ /** Destination chain ID */
12
+ destinationTokenChainId: number;
13
+ /** Line items to display in the cart (optional — if omitted, only the payment panel is shown) */
14
+ items?: CheckoutItem[];
15
+ /** Total amount in wei — required when items are not provided */
16
+ totalAmount?: string;
17
+ /** Organization name */
18
+ organizationName?: string;
19
+ /** Organization logo URL */
20
+ organizationLogo?: string;
21
+ /** Theme color (hex) */
22
+ themeColor?: string;
23
+ /** Custom button text */
24
+ buttonText?: string;
25
+ /** Workflow ID to trigger on payment */
26
+ workflowId?: string;
27
+ /** Organization ID that owns the workflow */
28
+ orgId?: string;
29
+ /** Optional callback metadata merged into the order */
30
+ callbackMetadata?: {
31
+ /** Passed as trigger result inputs — accessible via {{root.result.inputs.*}} */
32
+ inputs?: Record<string, unknown>;
33
+ } & Record<string, unknown>;
34
+ /** Called on successful payment */
35
+ onSuccess?: (result: {
36
+ txHash?: string;
37
+ orderId?: string;
38
+ }) => void;
39
+ /** Called on payment error */
40
+ onError?: (error: Error) => void;
41
+ /** URL to redirect to after payment */
42
+ returnUrl?: string;
43
+ /** Label for the return button */
44
+ returnLabel?: string;
45
+ /** Custom class names */
46
+ classes?: AnySpendCheckoutClasses;
47
+ /** Display mode — set automatically when used inside B3DynamicModal */
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[];
80
+ }
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;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.AnySpendCheckoutTrigger = AnySpendCheckoutTrigger;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const react_1 = require("../../../../global-account/react");
7
+ const number_1 = require("../../../../shared/utils/number");
8
+ const cn_1 = require("../../../../shared/utils/cn");
9
+ const react_2 = require("react");
10
+ const AnySpendFingerprintWrapper_1 = require("../AnySpendFingerprintWrapper");
11
+ const AnySpendCustomizationContext_1 = require("../context/AnySpendCustomizationContext");
12
+ const CheckoutCartPanel_1 = require("./CheckoutCartPanel");
13
+ const CheckoutPaymentPanel_1 = require("./CheckoutPaymentPanel");
14
+ const PoweredByBranding_1 = require("./PoweredByBranding");
15
+ 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, }) {
16
+ // Merge workflowId + orgId into callbackMetadata
17
+ const mergedMetadata = (0, react_2.useMemo)(() => {
18
+ if (!workflowId && !orgId && !callbackMetadata)
19
+ return undefined;
20
+ return {
21
+ ...(workflowId ? { workflowId } : {}),
22
+ ...(orgId ? { orgId } : {}),
23
+ ...callbackMetadata,
24
+ };
25
+ }, [workflowId, orgId, callbackMetadata]);
26
+ // Compute total from items + adjustments or use override
27
+ const computedTotal = (0, react_2.useMemo)(() => {
28
+ if (totalAmountOverride)
29
+ return totalAmountOverride;
30
+ if (!items || items.length === 0)
31
+ return "0";
32
+ let total = BigInt(0);
33
+ for (const item of items) {
34
+ total += (0, number_1.safeBigInt)(item.amount) * BigInt(item.quantity);
35
+ }
36
+ const shippingAmt = typeof shipping === "string" ? shipping : shipping?.amount;
37
+ if (shippingAmt)
38
+ total += (0, number_1.safeBigInt)(shippingAmt);
39
+ const taxAmt = typeof tax === "string" ? tax : tax?.amount;
40
+ if (taxAmt)
41
+ total += (0, number_1.safeBigInt)(taxAmt);
42
+ const discountAmt = typeof discount === "string" ? discount : discount?.amount;
43
+ if (discountAmt)
44
+ total -= (0, number_1.safeBigInt)(discountAmt);
45
+ if (summaryLines) {
46
+ for (const line of summaryLines)
47
+ total += (0, number_1.safeBigInt)(line.amount);
48
+ }
49
+ if (total < BigInt(0))
50
+ total = BigInt(0);
51
+ return total.toString();
52
+ }, [items, totalAmountOverride, shipping, tax, discount, summaryLines]);
53
+ // Get destination token metadata
54
+ const { data: tokenData } = (0, react_1.useTokenData)(destinationTokenChainId, destinationTokenAddress);
55
+ const tokenSymbol = tokenData?.symbol || "";
56
+ const tokenDecimals = tokenData?.decimals || 18;
57
+ const formattedTotal = (0, react_2.useMemo)(() => (0, number_1.formatTokenAmount)(BigInt(computedTotal || "0"), tokenDecimals), [computedTotal, tokenDecimals]);
58
+ const hasItems = items && items.length > 0;
59
+ const fingerprint = (0, AnySpendFingerprintWrapper_1.getFingerprintConfig)();
60
+ return ((0, jsx_runtime_1.jsx)(AnySpendFingerprintWrapper_1.AnySpendFingerprintWrapper, { fingerprint: fingerprint, children: (0, jsx_runtime_1.jsx)(AnySpendCustomizationContext_1.AnySpendCustomizationProvider, { slots: slots, content: content, theme: theme, children: (0, jsx_runtime_1.jsxs)("div", { className: "anyspend-checkout-trigger flex flex-col", children: [hasItems && ((0, jsx_runtime_1.jsx)("div", { className: "border-b border-gray-200 p-5 dark:border-neutral-700", children: (0, jsx_runtime_1.jsx)(CheckoutCartPanel_1.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 && ((0, jsx_runtime_1.jsx)("div", { className: "border-b border-gray-200 p-5 dark:border-neutral-700", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("flex items-center justify-between", classes?.cartSummary), children: [(0, jsx_runtime_1.jsx)("span", { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: "Total" }), (0, jsx_runtime_1.jsxs)("span", { className: (0, cn_1.cn)("text-base font-semibold text-gray-900 dark:text-gray-100", classes?.cartTotal), children: [formattedTotal, " ", tokenSymbol] })] }), footer === undefined ? ((0, jsx_runtime_1.jsx)(PoweredByBranding_1.PoweredByBranding, { organizationName: organizationName, organizationLogo: organizationLogo, classes: classes })) : (footer)] }) })), (0, jsx_runtime_1.jsx)("div", { className: "px-2 py-3", children: (0, jsx_runtime_1.jsx)(CheckoutPaymentPanel_1.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 }) })] }) }) }));
61
+ }
@@ -0,0 +1,8 @@
1
+ import type { CheckoutItem, AnySpendCheckoutClasses } from "./AnySpendCheckout";
2
+ interface CartItemRowProps {
3
+ item: CheckoutItem;
4
+ formattedPrice: string;
5
+ classes?: AnySpendCheckoutClasses;
6
+ }
7
+ export declare function CartItemRow({ item, formattedPrice, classes }: CartItemRowProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.CartItemRow = CartItemRow;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const cn_1 = require("../../../../shared/utils/cn");
7
+ function CartItemRow({ item, formattedPrice, classes }) {
8
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("flex items-start gap-3 py-3", classes?.cartItemRow), children: [item.imageUrl && ((0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)("h-14 w-14 shrink-0 overflow-hidden rounded-lg bg-gray-100", classes?.cartItemImage), children: (0, jsx_runtime_1.jsx)("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) })), (0, jsx_runtime_1.jsxs)("div", { className: "flex min-w-0 flex-1 items-start justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "min-w-0 flex-1", children: [(0, jsx_runtime_1.jsx)("p", { className: (0, cn_1.cn)("text-sm font-medium text-gray-900 dark:text-gray-100", classes?.cartItemName), children: item.name }), item.description && ((0, jsx_runtime_1.jsx)("p", { className: (0, cn_1.cn)("mt-0.5 line-clamp-2 text-xs text-gray-500 dark:text-gray-400", classes?.cartItemDescription), children: item.description })), item.quantity > 1 && (0, jsx_runtime_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 && ((0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)("mt-1 flex flex-wrap gap-x-3 gap-y-0.5", classes?.cartItemMetadata), children: Object.entries(item.metadata).map(([key, value]) => ((0, jsx_runtime_1.jsxs)("span", { className: (0, cn_1.cn)("text-xs text-gray-400 dark:text-gray-500", classes?.cartItemMetadataLabel), children: [key, ":", " ", (0, jsx_runtime_1.jsx)("span", { className: (0, cn_1.cn)("text-gray-600 dark:text-gray-300", classes?.cartItemMetadataValue), children: value })] }, key))) }))] }), (0, jsx_runtime_1.jsx)("p", { className: (0, cn_1.cn)("ml-3 text-sm font-medium text-gray-900 dark:text-gray-100", classes?.cartItemPrice), children: formattedPrice })] })] }));
9
+ }
@@ -0,0 +1,30 @@
1
+ import type { AnySpendCheckoutClasses } from "./AnySpendCheckout";
2
+ import type { CheckoutSummaryLine } from "./AnySpendCheckout";
3
+ interface CartSummaryProps {
4
+ /** Formatted total (final amount after all adjustments) */
5
+ total: string;
6
+ tokenSymbol?: string;
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;
28
+ }
29
+ export declare function CartSummary({ total, tokenSymbol, classes, subtotal, tokenDecimals, shipping, tax, discount, summaryLines, usdEquivalent, }: CartSummaryProps): import("react/jsx-runtime").JSX.Element;
30
+ export {};
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.CartSummary = CartSummary;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const cn_1 = require("../../../../shared/utils/cn");
7
+ const number_1 = require("../../../../shared/utils/number");
8
+ const react_1 = require("react");
9
+ function CartSummary({ total, tokenSymbol, classes, subtotal, tokenDecimals = 18, shipping, tax, discount, summaryLines, usdEquivalent, }) {
10
+ const hasAdjustments = !!shipping?.amount || !!tax?.amount || !!discount?.amount || (summaryLines && summaryLines.length > 0);
11
+ const formattedShipping = (0, react_1.useMemo)(() => (shipping?.amount ? (0, number_1.formatTokenAmount)((0, number_1.safeBigInt)(shipping.amount), tokenDecimals) : null), [shipping?.amount, tokenDecimals]);
12
+ const formattedTax = (0, react_1.useMemo)(() => (tax?.amount ? (0, number_1.formatTokenAmount)((0, number_1.safeBigInt)(tax.amount), tokenDecimals) : null), [tax?.amount, tokenDecimals]);
13
+ const formattedDiscount = (0, react_1.useMemo)(() => (discount?.amount ? (0, number_1.formatTokenAmount)((0, number_1.safeBigInt)(discount.amount), tokenDecimals) : null), [discount?.amount, tokenDecimals]);
14
+ const formattedSummaryLines = (0, react_1.useMemo)(() => summaryLines?.map(line => ({
15
+ ...line,
16
+ formattedAmount: (0, number_1.formatTokenAmount)((0, number_1.safeBigInt)(line.amount), tokenDecimals),
17
+ isNegative: (0, number_1.safeBigInt)(line.amount) < BigInt(0),
18
+ })), [summaryLines, tokenDecimals]);
19
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("border-t border-gray-200 pt-3 dark:border-neutral-700", classes?.cartSummary), children: [hasAdjustments && subtotal && ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("flex items-center justify-between py-1", classes?.cartSubtotal), children: [(0, jsx_runtime_1.jsx)("span", { className: "text-sm text-gray-500 dark:text-gray-400", children: "Subtotal" }), (0, jsx_runtime_1.jsxs)("span", { className: "text-sm text-gray-500 dark:text-gray-400", children: [subtotal, " ", tokenSymbol] })] })), formattedShipping && ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("flex items-center justify-between py-1", classes?.cartSummaryLine), children: [(0, jsx_runtime_1.jsx)("span", { className: (0, cn_1.cn)("text-sm text-gray-500 dark:text-gray-400", classes?.cartSummaryLineLabel), children: shipping?.label || "Shipping" }), (0, jsx_runtime_1.jsxs)("span", { className: (0, cn_1.cn)("text-sm text-gray-500 dark:text-gray-400", classes?.cartSummaryLineAmount), children: [formattedShipping, " ", tokenSymbol] })] })), formattedTax && ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("flex items-center justify-between py-1", classes?.cartSummaryLine), children: [(0, jsx_runtime_1.jsxs)("span", { className: (0, cn_1.cn)("text-sm text-gray-500 dark:text-gray-400", classes?.cartSummaryLineLabel), children: [tax?.label || "Tax", tax?.rate && (0, jsx_runtime_1.jsxs)("span", { className: "ml-1 text-xs text-gray-400 dark:text-gray-500", children: ["(", tax.rate, ")"] })] }), (0, jsx_runtime_1.jsxs)("span", { className: (0, cn_1.cn)("text-sm text-gray-500 dark:text-gray-400", classes?.cartSummaryLineAmount), children: [formattedTax, " ", tokenSymbol] })] })), formattedDiscount && ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("flex items-center justify-between py-1", classes?.cartDiscount), children: [(0, jsx_runtime_1.jsxs)("span", { className: "text-sm text-gray-500 dark:text-gray-400", children: [discount?.label || "Discount", discount?.code && ((0, jsx_runtime_1.jsx)("span", { className: "ml-1 rounded bg-green-50 px-1.5 py-0.5 text-xs font-medium text-green-600 dark:bg-green-900/20 dark:text-green-400", children: discount.code }))] }), (0, jsx_runtime_1.jsxs)("span", { className: "text-sm font-medium text-green-600 dark:text-green-400", children: ["-", formattedDiscount, " ", tokenSymbol] })] })), formattedSummaryLines?.map(line => ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("flex items-center justify-between py-1", classes?.cartSummaryLine), children: [(0, jsx_runtime_1.jsxs)("span", { className: (0, cn_1.cn)("text-sm text-gray-500 dark:text-gray-400", classes?.cartSummaryLineLabel), children: [line.label, line.description && ((0, jsx_runtime_1.jsxs)("span", { className: "ml-1 text-xs text-gray-400 dark:text-gray-500", children: ["(", line.description, ")"] }))] }), (0, jsx_runtime_1.jsxs)("span", { className: (0, cn_1.cn)("text-sm", line.isNegative ? "font-medium text-green-600 dark:text-green-400" : "text-gray-500 dark:text-gray-400", classes?.cartSummaryLineAmount), children: [line.formattedAmount, " ", tokenSymbol] })] }, line.label))), (0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("flex flex-col", hasAdjustments && "mt-1 border-t border-gray-100 pt-2 dark:border-neutral-800"), children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: "Total" }), (0, jsx_runtime_1.jsxs)("span", { className: (0, cn_1.cn)("text-base font-semibold text-gray-900 dark:text-gray-100", classes?.cartTotal), children: [total, " ", tokenSymbol] })] }), usdEquivalent && ((0, jsx_runtime_1.jsx)("div", { className: "flex justify-end", children: (0, jsx_runtime_1.jsxs)("span", { className: "text-xs text-gray-400 dark:text-gray-500", children: ["~", usdEquivalent, " USD"] }) }))] })] }));
20
+ }
@@ -0,0 +1,32 @@
1
+ import { type ReactNode } from "react";
2
+ import type { CheckoutItem, CheckoutSummaryLine, AnySpendCheckoutClasses } from "./AnySpendCheckout";
3
+ interface CheckoutCartPanelProps {
4
+ items: CheckoutItem[];
5
+ totalAmount: string;
6
+ tokenSymbol?: string;
7
+ tokenDecimals?: number;
8
+ organizationName?: string;
9
+ organizationLogo?: string;
10
+ classes?: AnySpendCheckoutClasses;
11
+ /** Custom footer. Pass `null` to hide, or a ReactNode to replace the default PoweredByBranding. */
12
+ footer?: ReactNode | null;
13
+ shipping?: {
14
+ amount: string;
15
+ label?: string;
16
+ };
17
+ tax?: {
18
+ amount: string;
19
+ label?: string;
20
+ rate?: string;
21
+ };
22
+ discount?: {
23
+ amount: string;
24
+ label?: string;
25
+ code?: string;
26
+ };
27
+ summaryLines?: CheckoutSummaryLine[];
28
+ /** Formatted USD equivalent (e.g. "$5.56") — shown for non-stablecoin tokens */
29
+ usdEquivalent?: string | null;
30
+ }
31
+ export declare function CheckoutCartPanel({ items, totalAmount, tokenSymbol, tokenDecimals, organizationName, organizationLogo, classes, footer, shipping, tax, discount, summaryLines, usdEquivalent, }: CheckoutCartPanelProps): import("react/jsx-runtime").JSX.Element;
32
+ export {};
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.CheckoutCartPanel = CheckoutCartPanel;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const cn_1 = require("../../../../shared/utils/cn");
7
+ const number_1 = require("../../../../shared/utils/number");
8
+ const react_1 = require("react");
9
+ const CartItemRow_1 = require("./CartItemRow");
10
+ const CartSummary_1 = require("./CartSummary");
11
+ const PoweredByBranding_1 = require("./PoweredByBranding");
12
+ function CheckoutCartPanel({ items, totalAmount, tokenSymbol = "", tokenDecimals = 18, organizationName, organizationLogo, classes, footer, shipping, tax, discount, summaryLines, usdEquivalent, }) {
13
+ const formattedTotal = (0, react_1.useMemo)(() => (0, number_1.formatTokenAmount)((0, number_1.safeBigInt)(totalAmount), tokenDecimals), [totalAmount, tokenDecimals]);
14
+ // Compute subtotal from items only (before adjustments)
15
+ const formattedSubtotal = (0, react_1.useMemo)(() => {
16
+ let subtotal = BigInt(0);
17
+ for (const item of items) {
18
+ subtotal += (0, number_1.safeBigInt)(item.amount) * BigInt(item.quantity);
19
+ }
20
+ return (0, number_1.formatTokenAmount)(subtotal, tokenDecimals);
21
+ }, [items, tokenDecimals]);
22
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("anyspend-cart-panel flex flex-col", classes?.cartPanel), children: [(0, jsx_runtime_1.jsx)("h2", { className: (0, cn_1.cn)("anyspend-cart-title mb-4 text-lg font-semibold text-gray-900 dark:text-gray-100", classes?.cartTitle), children: "Order Summary" }), (0, jsx_runtime_1.jsx)("div", { className: "anyspend-cart-items divide-y divide-gray-100 dark:divide-gray-800", children: items.map((item, index) => {
23
+ const itemTotal = (0, number_1.safeBigInt)(item.amount) * BigInt(item.quantity);
24
+ const formattedPrice = `${(0, number_1.formatTokenAmount)(itemTotal, tokenDecimals)} ${tokenSymbol}`;
25
+ return (0, jsx_runtime_1.jsx)(CartItemRow_1.CartItemRow, { item: item, formattedPrice: formattedPrice, classes: classes }, item.id || index);
26
+ }) }), (0, jsx_runtime_1.jsx)(CartSummary_1.CartSummary, { total: formattedTotal, tokenSymbol: tokenSymbol, classes: classes, subtotal: formattedSubtotal, tokenDecimals: tokenDecimals, shipping: shipping, tax: tax, discount: discount, summaryLines: summaryLines, usdEquivalent: usdEquivalent }), footer === undefined ? ((0, jsx_runtime_1.jsx)(PoweredByBranding_1.PoweredByBranding, { organizationName: organizationName, organizationLogo: organizationLogo, classes: classes })) : (footer)] }));
27
+ }
@@ -0,0 +1,10 @@
1
+ import type { CheckoutFormField as FormFieldType } from "../../../types/forms";
2
+ interface CheckoutFormFieldProps {
3
+ field: FormFieldType;
4
+ value: unknown;
5
+ onChange: (id: string, value: unknown) => void;
6
+ error?: string;
7
+ className?: string;
8
+ }
9
+ export declare function CheckoutFormFieldComponent({ field, value, onChange, error, className }: CheckoutFormFieldProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.CheckoutFormFieldComponent = CheckoutFormFieldComponent;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const cn_1 = require("../../../../shared/utils/cn");
7
+ 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";
8
+ const labelClass = "mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300";
9
+ function CheckoutFormFieldComponent({ field, value, onChange, error, className }) {
10
+ const handleChange = (val) => {
11
+ onChange(field.id, val);
12
+ };
13
+ const renderField = () => {
14
+ switch (field.type) {
15
+ case "text":
16
+ case "email":
17
+ case "phone":
18
+ case "number":
19
+ return ((0, jsx_runtime_1.jsx)("input", { type: field.type === "phone" ? "tel" : field.type, value: value || "", onChange: e => handleChange(e.target.value), placeholder: field.placeholder, required: field.required, className: (0, cn_1.cn)("anyspend-form-input", inputBaseClass, error && "border-red-400 focus:border-red-500 focus:ring-red-500"), minLength: field.validation?.minLength, maxLength: field.validation?.maxLength, min: field.validation?.min, max: field.validation?.max, pattern: field.validation?.pattern }));
20
+ case "textarea":
21
+ return ((0, jsx_runtime_1.jsx)("textarea", { value: value || "", onChange: e => handleChange(e.target.value), placeholder: field.placeholder, required: field.required, rows: 3, className: (0, cn_1.cn)("anyspend-form-textarea", inputBaseClass, "resize-y", error && "border-red-400 focus:border-red-500 focus:ring-red-500"), minLength: field.validation?.minLength, maxLength: field.validation?.maxLength }));
22
+ case "select":
23
+ return ((0, jsx_runtime_1.jsxs)("select", { value: value || "", onChange: e => handleChange(e.target.value), required: field.required, className: (0, cn_1.cn)("anyspend-form-select", inputBaseClass, "cursor-pointer", error && "border-red-400"), children: [(0, jsx_runtime_1.jsx)("option", { value: "", children: field.placeholder || "Select..." }), field.options?.map(opt => ((0, jsx_runtime_1.jsx)("option", { value: opt.value, children: opt.label }, opt.value)))] }));
24
+ case "checkbox":
25
+ return ((0, jsx_runtime_1.jsxs)("label", { className: "anyspend-form-checkbox flex cursor-pointer items-center gap-2", children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", checked: !!value, onChange: e => handleChange(e.target.checked), className: "h-4 w-4 rounded border-gray-300 text-blue-500 focus:ring-blue-500" }), (0, jsx_runtime_1.jsx)("span", { className: "text-sm text-gray-700 dark:text-gray-300", children: field.placeholder || field.label })] }));
26
+ default:
27
+ return ((0, jsx_runtime_1.jsx)("input", { type: "text", value: value || "", onChange: e => handleChange(e.target.value), placeholder: field.placeholder, required: field.required, className: (0, cn_1.cn)("anyspend-form-input", inputBaseClass, error && "border-red-400") }));
28
+ }
29
+ };
30
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("anyspend-form-field space-y-1", className), "data-field-id": field.id, "data-field-type": field.type, children: [field.type !== "checkbox" && ((0, jsx_runtime_1.jsxs)("label", { className: (0, cn_1.cn)("anyspend-form-label", labelClass), children: [field.label, field.required && (0, jsx_runtime_1.jsx)("span", { className: "ml-0.5 text-red-500", children: "*" })] })), renderField(), error && (0, jsx_runtime_1.jsx)("p", { className: "anyspend-form-error text-xs text-red-500", children: error })] }));
31
+ }
@@ -0,0 +1,39 @@
1
+ import type { CheckoutFormSchema, CheckoutFormComponentProps, AddressData, ShippingOption, DiscountResult } from "../../../types/forms";
2
+ import type { AnySpendCheckoutClasses } from "../types/classes";
3
+ interface CheckoutFormPanelProps {
4
+ /** JSON form definition */
5
+ formSchema?: CheckoutFormSchema | null;
6
+ /** Custom React component to render instead of schema-based form */
7
+ formComponent?: React.ComponentType<CheckoutFormComponentProps>;
8
+ /** Shipping options */
9
+ shippingOptions?: ShippingOption[] | null;
10
+ /** Whether to collect a shipping address */
11
+ collectShippingAddress?: boolean;
12
+ /** Enable discount code input */
13
+ enableDiscountCode?: boolean;
14
+ /** Validate a discount code */
15
+ validateDiscount?: (code: string) => Promise<DiscountResult>;
16
+ /** Token info for display */
17
+ tokenSymbol?: string;
18
+ tokenDecimals?: number;
19
+ /** CSS class overrides */
20
+ classes?: AnySpendCheckoutClasses;
21
+ /** Current form data (lifted state) */
22
+ formData: Record<string, unknown>;
23
+ /** Update form data */
24
+ onFormDataChange: (data: Record<string, unknown>) => void;
25
+ /** Shipping selection */
26
+ selectedShipping: ShippingOption | null;
27
+ onShippingChange: (option: ShippingOption) => void;
28
+ /** Discount state */
29
+ appliedDiscount: DiscountResult | null;
30
+ onDiscountApplied: (result: DiscountResult) => void;
31
+ onDiscountRemoved: () => void;
32
+ /** Shipping address */
33
+ shippingAddress: AddressData;
34
+ onShippingAddressChange: (address: AddressData) => void;
35
+ /** Slot overrides */
36
+ checkoutFormSlot?: (props: CheckoutFormComponentProps) => React.ReactNode;
37
+ }
38
+ export declare function CheckoutFormPanel({ formSchema, formComponent: FormComponent, shippingOptions, collectShippingAddress, enableDiscountCode, validateDiscount, tokenSymbol, tokenDecimals, classes, formData, onFormDataChange, selectedShipping, onShippingChange, appliedDiscount, onDiscountApplied, onDiscountRemoved, shippingAddress, onShippingAddressChange, checkoutFormSlot, }: CheckoutFormPanelProps): import("react/jsx-runtime").JSX.Element | null;
39
+ export {};
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.CheckoutFormPanel = CheckoutFormPanel;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const cn_1 = require("../../../../shared/utils/cn");
7
+ const react_1 = require("react");
8
+ const CheckoutFormField_1 = require("./CheckoutFormField");
9
+ const AddressForm_1 = require("./AddressForm");
10
+ const ShippingSelector_1 = require("./ShippingSelector");
11
+ const DiscountCodeInput_1 = require("./DiscountCodeInput");
12
+ const emptyAddress = { street: "", city: "", state: "", zip: "", country: "" };
13
+ function CheckoutFormPanel({ formSchema, formComponent: FormComponent, shippingOptions, collectShippingAddress, enableDiscountCode, validateDiscount, tokenSymbol, tokenDecimals, classes, formData, onFormDataChange, selectedShipping, onShippingChange, appliedDiscount, onDiscountApplied, onDiscountRemoved, shippingAddress, onShippingAddressChange, checkoutFormSlot, }) {
14
+ const [errors, setErrors] = (0, react_1.useState)({});
15
+ const hasFormFields = formSchema && formSchema.fields.length > 0;
16
+ const hasShipping = shippingOptions && shippingOptions.length > 0;
17
+ const hasAnyContent = hasFormFields || FormComponent || checkoutFormSlot || hasShipping || collectShippingAddress || enableDiscountCode;
18
+ // All hooks must be called before any early returns
19
+ const formDataRef = (0, react_1.useRef)(formData);
20
+ formDataRef.current = formData;
21
+ const handleFieldChange = (0, react_1.useCallback)((id, value) => {
22
+ onFormDataChange({ ...formDataRef.current, [id]: value });
23
+ setErrors(prev => {
24
+ if (!prev[id])
25
+ return prev;
26
+ const next = { ...prev };
27
+ delete next[id];
28
+ return next;
29
+ });
30
+ }, [onFormDataChange]);
31
+ const handleFormSubmit = (0, react_1.useCallback)((data) => {
32
+ onFormDataChange(data);
33
+ }, [onFormDataChange]);
34
+ const handleValidationChange = (0, react_1.useCallback)((_isValid) => {
35
+ // Validation is handled internally via errors state
36
+ }, []);
37
+ const handleDiscountApply = (0, react_1.useCallback)(async (code) => {
38
+ if (!validateDiscount) {
39
+ return { valid: false, error: "Discount validation not available" };
40
+ }
41
+ const result = await validateDiscount(code);
42
+ if (result.valid) {
43
+ onDiscountApplied(result);
44
+ }
45
+ return result;
46
+ }, [validateDiscount, onDiscountApplied]);
47
+ // Separate address fields from regular fields
48
+ const { regularFields, addressFields } = (0, react_1.useMemo)(() => {
49
+ if (!formSchema)
50
+ return { regularFields: [], addressFields: [] };
51
+ return {
52
+ regularFields: formSchema.fields.filter(f => f.type !== "address"),
53
+ addressFields: formSchema.fields.filter(f => f.type === "address"),
54
+ };
55
+ }, [formSchema]);
56
+ if (!hasAnyContent)
57
+ return null;
58
+ // Shared shipping + discount section
59
+ const shippingAndDiscount = ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [hasShipping && shippingOptions && ((0, jsx_runtime_1.jsx)(ShippingSelector_1.ShippingSelector, { options: shippingOptions, selectedId: selectedShipping?.id || null, onSelect: onShippingChange, tokenSymbol: tokenSymbol, tokenDecimals: tokenDecimals })), enableDiscountCode && validateDiscount && ((0, jsx_runtime_1.jsx)(DiscountCodeInput_1.DiscountCodeInput, { onApply: handleDiscountApply, appliedDiscount: appliedDiscount, onRemove: onDiscountRemoved, tokenSymbol: tokenSymbol, tokenDecimals: tokenDecimals }))] }));
60
+ // Render custom form slot if provided
61
+ if (checkoutFormSlot) {
62
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("anyspend-form-panel space-y-4", classes?.formPanel), children: [(0, jsx_runtime_1.jsx)("div", { className: "anyspend-form-slot", children: checkoutFormSlot({
63
+ onSubmit: handleFormSubmit,
64
+ onValidationChange: handleValidationChange,
65
+ formData,
66
+ setFormData: onFormDataChange,
67
+ }) }), shippingAndDiscount] }));
68
+ }
69
+ // Render custom form component if provided
70
+ if (FormComponent) {
71
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("anyspend-form-panel space-y-4", classes?.formPanel), children: [(0, jsx_runtime_1.jsx)("div", { className: "anyspend-form-component", children: (0, jsx_runtime_1.jsx)(FormComponent, { onSubmit: handleFormSubmit, onValidationChange: handleValidationChange, formData: formData, setFormData: onFormDataChange }) }), shippingAndDiscount] }));
72
+ }
73
+ // Schema-based form rendering
74
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("anyspend-form-panel space-y-4", classes?.formPanel), children: [regularFields.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: "anyspend-form-fields space-y-3", children: regularFields.map(field => ((0, jsx_runtime_1.jsx)(CheckoutFormField_1.CheckoutFormFieldComponent, { field: field, value: formData[field.id], onChange: handleFieldChange, error: errors[field.id] }, field.id))) })), addressFields.map(field => ((0, jsx_runtime_1.jsxs)("div", { className: "anyspend-form-address space-y-2", children: [(0, jsx_runtime_1.jsx)("h3", { className: "anyspend-form-address-title text-sm font-semibold text-gray-900 dark:text-gray-100", children: field.label }), (0, jsx_runtime_1.jsx)(AddressForm_1.AddressForm, { value: formData[field.id] || emptyAddress, onChange: addr => handleFieldChange(field.id, addr), required: field.required })] }, field.id))), collectShippingAddress && addressFields.length === 0 && ((0, jsx_runtime_1.jsxs)("div", { className: "anyspend-shipping-address space-y-2", children: [(0, jsx_runtime_1.jsx)("h3", { className: "anyspend-shipping-address-title text-sm font-semibold text-gray-900 dark:text-gray-100", children: "Shipping Address" }), (0, jsx_runtime_1.jsx)(AddressForm_1.AddressForm, { value: shippingAddress, onChange: onShippingAddressChange, required: true })] })), shippingAndDiscount] }));
75
+ }
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from "react";
2
+ import type { AnySpendCheckoutClasses } from "./AnySpendCheckout";
3
+ interface CheckoutLayoutProps {
4
+ mode: "page" | "embedded";
5
+ paymentPanel: ReactNode;
6
+ cartPanel: ReactNode;
7
+ classes?: AnySpendCheckoutClasses;
8
+ }
9
+ export declare function CheckoutLayout({ mode, paymentPanel, cartPanel, classes }: CheckoutLayoutProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};