@b3dotfun/sdk 0.1.69-alpha.2 → 0.1.69-alpha.21

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 (382) hide show
  1. package/dist/cjs/anyspend/constants/rpc.d.ts +1 -1
  2. package/dist/cjs/anyspend/constants/rpc.js +1 -1
  3. package/dist/cjs/anyspend/react/components/AnySpendNFT.js +2 -2
  4. package/dist/cjs/anyspend/react/components/AnySpendStakeB3.js +1 -1
  5. package/dist/cjs/anyspend/react/components/AnySpendStakeB3ExactIn.js +1 -1
  6. package/dist/cjs/anyspend/react/components/checkout/AnySpendCheckout.d.ts +3 -1
  7. package/dist/cjs/anyspend/react/components/checkout/AnySpendCheckout.js +15 -6
  8. package/dist/cjs/anyspend/react/components/checkout/CartItemRow.d.ts +2 -1
  9. package/dist/cjs/anyspend/react/components/checkout/CartSummary.d.ts +6 -4
  10. package/dist/cjs/anyspend/react/components/checkout/CartSummary.js +13 -11
  11. package/dist/cjs/anyspend/react/components/checkout/CheckoutCartPanel.d.ts +3 -1
  12. package/dist/cjs/anyspend/react/components/checkout/CheckoutCartPanel.js +5 -4
  13. package/dist/cjs/anyspend/react/components/checkout/CheckoutFormPanel.d.ts +3 -1
  14. package/dist/cjs/anyspend/react/components/checkout/CheckoutFormPanel.js +2 -2
  15. package/dist/cjs/anyspend/react/components/checkout/CheckoutPaymentPanel.js +2 -4
  16. package/dist/cjs/anyspend/react/components/checkout/CheckoutSuccess.d.ts +2 -1
  17. package/dist/cjs/anyspend/react/components/checkout/CheckoutSuccess.js +5 -3
  18. package/dist/cjs/anyspend/react/components/checkout/CryptoPayPanel.js +43 -23
  19. package/dist/cjs/anyspend/react/components/checkout/DiscountCodeInput.d.ts +3 -1
  20. package/dist/cjs/anyspend/react/components/checkout/DiscountCodeInput.js +3 -6
  21. package/dist/cjs/anyspend/react/components/checkout/FiatCheckoutPanel.js +1 -2
  22. package/dist/cjs/anyspend/react/components/checkout/KycGate.js +1 -2
  23. package/dist/cjs/anyspend/react/components/checkout/PriceSkeleton.d.ts +5 -0
  24. package/dist/cjs/anyspend/react/components/checkout/PriceSkeleton.js +9 -0
  25. package/dist/cjs/anyspend/react/components/checkout/ShippingSelector.d.ts +3 -1
  26. package/dist/cjs/anyspend/react/components/checkout/ShippingSelector.js +3 -2
  27. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.d.ts +8 -0
  28. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +10 -9
  29. package/dist/cjs/anyspend/react/components/common/InsufficientDepositPayment.js +2 -2
  30. package/dist/cjs/anyspend/react/components/common/OrderDetails.js +7 -2
  31. package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.js +2 -2
  32. package/dist/cjs/anyspend/react/components/common/OrderStatus.js +37 -6
  33. package/dist/cjs/anyspend/react/components/common/StepProgress.d.ts +2 -0
  34. package/dist/cjs/anyspend/react/components/common/StepProgress.js +7 -2
  35. package/dist/cjs/anyspend/react/components/common/TransferCryptoDetails.js +2 -2
  36. package/dist/cjs/anyspend/react/hooks/useAnyspendCreateOnrampOrder.js +4 -6
  37. package/dist/cjs/anyspend/react/hooks/useKycStatus.d.ts +3 -1
  38. package/dist/cjs/anyspend/react/hooks/useKycStatus.js +11 -7
  39. package/dist/cjs/anyspend/utils/chain.js +8 -7
  40. package/dist/cjs/app.shared.js +9 -7
  41. package/dist/cjs/global-account/better-auth-client.d.ts +1883 -0
  42. package/dist/cjs/global-account/better-auth-client.js +17 -0
  43. package/dist/cjs/global-account/bsmnt.d.ts +0 -1
  44. package/dist/cjs/global-account/bsmnt.js +0 -6
  45. package/dist/cjs/global-account/react/components/B3DynamicModal.js +5 -2
  46. package/dist/cjs/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +4 -1
  47. package/dist/cjs/global-account/react/components/B3Provider/B3ConfigProvider.js +2 -1
  48. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.d.ts +8 -1
  49. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.js +9 -12
  50. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.native.js +6 -8
  51. package/dist/cjs/global-account/react/components/B3Provider/BetterAuthProvider.d.ts +16 -0
  52. package/dist/cjs/global-account/react/components/B3Provider/BetterAuthProvider.js +120 -0
  53. package/dist/cjs/global-account/react/components/B3Provider/LocalSDKProvider.d.ts +3 -1
  54. package/dist/cjs/global-account/react/components/B3Provider/LocalSDKProvider.js +3 -1
  55. package/dist/cjs/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +3 -1
  56. package/dist/cjs/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.js +4 -2
  57. package/dist/cjs/global-account/react/components/LinkAccount/LinkedAccountItem.js +2 -1
  58. package/dist/cjs/global-account/react/components/ManageAccount/ProfileSection.js +15 -6
  59. package/dist/cjs/global-account/react/components/ManageAccount/SessionDurationContent.d.ts +5 -0
  60. package/dist/cjs/global-account/react/components/ManageAccount/SessionDurationContent.js +57 -0
  61. package/dist/cjs/global-account/react/components/ManageAccount/SettingsContent.js +12 -29
  62. package/dist/cjs/global-account/react/components/ManageAccount/SettingsProfileCard.js +2 -2
  63. package/dist/cjs/global-account/react/components/Send/Send.js +5 -2
  64. package/dist/cjs/global-account/react/components/SignInWithB3/BetterAuthResetPassword.d.ts +21 -0
  65. package/dist/cjs/global-account/react/components/SignInWithB3/BetterAuthResetPassword.js +67 -0
  66. package/dist/cjs/global-account/react/components/SignInWithB3/BetterAuthSignIn.d.ts +34 -0
  67. package/dist/cjs/global-account/react/components/SignInWithB3/BetterAuthSignIn.js +163 -0
  68. package/dist/cjs/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +13 -4
  69. package/dist/cjs/global-account/react/components/SignInWithB3/components/AuthButton.js +10 -1
  70. package/dist/cjs/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.d.ts +6 -0
  71. package/dist/cjs/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.js +138 -0
  72. package/dist/cjs/global-account/react/components/SignInWithB3/steps/LoginStepCustom.js +96 -15
  73. package/dist/cjs/global-account/react/components/SignInWithB3/utils/signInUtils.d.ts +5 -3
  74. package/dist/cjs/global-account/react/components/SignInWithB3/utils/signInUtils.js +20 -3
  75. package/dist/cjs/global-account/react/components/SingleUserSearchSelector/SingleUserSearchSelector.js +2 -1
  76. package/dist/cjs/global-account/react/components/Toast/ToastContext.d.ts +3 -0
  77. package/dist/cjs/global-account/react/components/Toast/ToastContext.js +30 -7
  78. package/dist/cjs/global-account/react/components/custom/Button.d.ts +1 -1
  79. package/dist/cjs/global-account/react/components/index.d.ts +3 -0
  80. package/dist/cjs/global-account/react/components/index.js +7 -3
  81. package/dist/cjs/global-account/react/components/ui/button.d.ts +1 -1
  82. package/dist/cjs/global-account/react/hooks/index.d.ts +1 -0
  83. package/dist/cjs/global-account/react/hooks/index.js +5 -2
  84. package/dist/cjs/global-account/react/hooks/useAuth.js +26 -15
  85. package/dist/cjs/global-account/react/hooks/useAuthentication.js +23 -12
  86. package/dist/cjs/global-account/react/hooks/useBetterAuth.d.ts +973 -0
  87. package/dist/cjs/global-account/react/hooks/useBetterAuth.js +157 -0
  88. package/dist/cjs/global-account/react/hooks/useConnect.d.ts +2 -2
  89. package/dist/cjs/global-account/react/hooks/useFirstEOA.d.ts +8 -8
  90. package/dist/cjs/global-account/react/stores/useModalStore.d.ts +10 -1
  91. package/dist/cjs/global-account/react/utils/createWagmiConfig.d.ts +4 -31
  92. package/dist/cjs/global-account/react/utils/createWagmiConfig.js +5 -24
  93. package/dist/cjs/global-account/react/utils/index.d.ts +0 -1
  94. package/dist/cjs/global-account/react/utils/index.js +0 -1
  95. package/dist/cjs/global-account/react/utils/profileDisplay.js +17 -18
  96. package/dist/cjs/shared/constants/chains/b3Chain.d.ts +7 -7
  97. package/dist/cjs/shared/constants/chains/b3Chain.js +4 -4
  98. package/dist/cjs/shared/constants/chains/b3Viem.d.ts +6 -0
  99. package/dist/cjs/shared/constants/chains/b3Viem.js +19 -0
  100. package/dist/cjs/shared/constants/chains/supported.d.ts +1 -1
  101. package/dist/cjs/shared/generated/chain-networks.json +2 -2
  102. package/dist/cjs/shared/utils/chains.d.ts +1 -1
  103. package/dist/cjs/shared/utils/chains.js +2 -2
  104. package/dist/cjs/shared/utils/session-duration.d.ts +15 -0
  105. package/dist/cjs/shared/utils/session-duration.js +69 -0
  106. package/dist/cjs/wallet/react/components/ConnectWallet.d.ts +11 -0
  107. package/dist/cjs/wallet/react/components/ConnectWallet.js +467 -0
  108. package/dist/cjs/wallet/react/components/WalletProvider.d.ts +35 -0
  109. package/dist/cjs/wallet/react/components/WalletProvider.js +20 -0
  110. package/dist/cjs/wallet/react/hooks/useWalletDisconnect.d.ts +13 -0
  111. package/dist/cjs/wallet/react/hooks/useWalletDisconnect.js +22 -0
  112. package/dist/cjs/wallet/react/hooks/useWalletState.d.ts +31 -0
  113. package/dist/cjs/wallet/react/hooks/useWalletState.js +63 -0
  114. package/dist/cjs/wallet/react/index.d.ts +5 -0
  115. package/dist/cjs/wallet/react/index.js +16 -0
  116. package/dist/cjs/wallet/utils/createWalletConfig.d.ts +21 -0
  117. package/dist/cjs/wallet/utils/createWalletConfig.js +24 -0
  118. package/dist/esm/anyspend/constants/rpc.d.ts +1 -1
  119. package/dist/esm/anyspend/constants/rpc.js +1 -1
  120. package/dist/esm/anyspend/react/components/AnySpendNFT.js +2 -2
  121. package/dist/esm/anyspend/react/components/AnySpendStakeB3.js +2 -2
  122. package/dist/esm/anyspend/react/components/AnySpendStakeB3ExactIn.js +2 -2
  123. package/dist/esm/anyspend/react/components/checkout/AnySpendCheckout.d.ts +3 -1
  124. package/dist/esm/anyspend/react/components/checkout/AnySpendCheckout.js +15 -6
  125. package/dist/esm/anyspend/react/components/checkout/CartItemRow.d.ts +2 -1
  126. package/dist/esm/anyspend/react/components/checkout/CartSummary.d.ts +6 -4
  127. package/dist/esm/anyspend/react/components/checkout/CartSummary.js +13 -11
  128. package/dist/esm/anyspend/react/components/checkout/CheckoutCartPanel.d.ts +3 -1
  129. package/dist/esm/anyspend/react/components/checkout/CheckoutCartPanel.js +5 -4
  130. package/dist/esm/anyspend/react/components/checkout/CheckoutFormPanel.d.ts +3 -1
  131. package/dist/esm/anyspend/react/components/checkout/CheckoutFormPanel.js +2 -2
  132. package/dist/esm/anyspend/react/components/checkout/CheckoutPaymentPanel.js +2 -4
  133. package/dist/esm/anyspend/react/components/checkout/CheckoutSuccess.d.ts +2 -1
  134. package/dist/esm/anyspend/react/components/checkout/CheckoutSuccess.js +5 -3
  135. package/dist/esm/anyspend/react/components/checkout/CryptoPayPanel.js +44 -24
  136. package/dist/esm/anyspend/react/components/checkout/DiscountCodeInput.d.ts +3 -1
  137. package/dist/esm/anyspend/react/components/checkout/DiscountCodeInput.js +3 -6
  138. package/dist/esm/anyspend/react/components/checkout/FiatCheckoutPanel.js +2 -3
  139. package/dist/esm/anyspend/react/components/checkout/KycGate.js +2 -3
  140. package/dist/esm/anyspend/react/components/checkout/PriceSkeleton.d.ts +5 -0
  141. package/dist/esm/anyspend/react/components/checkout/PriceSkeleton.js +6 -0
  142. package/dist/esm/anyspend/react/components/checkout/ShippingSelector.d.ts +3 -1
  143. package/dist/esm/anyspend/react/components/checkout/ShippingSelector.js +3 -2
  144. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.d.ts +8 -0
  145. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +9 -8
  146. package/dist/esm/anyspend/react/components/common/InsufficientDepositPayment.js +2 -2
  147. package/dist/esm/anyspend/react/components/common/OrderDetails.js +8 -3
  148. package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.js +2 -2
  149. package/dist/esm/anyspend/react/components/common/OrderStatus.js +34 -3
  150. package/dist/esm/anyspend/react/components/common/StepProgress.d.ts +2 -0
  151. package/dist/esm/anyspend/react/components/common/StepProgress.js +4 -2
  152. package/dist/esm/anyspend/react/components/common/TransferCryptoDetails.js +2 -2
  153. package/dist/esm/anyspend/react/hooks/useAnyspendCreateOnrampOrder.js +5 -7
  154. package/dist/esm/anyspend/react/hooks/useKycStatus.d.ts +3 -1
  155. package/dist/esm/anyspend/react/hooks/useKycStatus.js +9 -5
  156. package/dist/esm/anyspend/utils/chain.js +10 -9
  157. package/dist/esm/app.shared.js +9 -7
  158. package/dist/esm/global-account/better-auth-client.d.ts +1883 -0
  159. package/dist/esm/global-account/better-auth-client.js +13 -0
  160. package/dist/esm/global-account/bsmnt.d.ts +0 -1
  161. package/dist/esm/global-account/bsmnt.js +0 -5
  162. package/dist/esm/global-account/react/components/B3DynamicModal.js +5 -2
  163. package/dist/esm/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +4 -1
  164. package/dist/esm/global-account/react/components/B3Provider/B3ConfigProvider.js +2 -1
  165. package/dist/esm/global-account/react/components/B3Provider/B3Provider.d.ts +8 -1
  166. package/dist/esm/global-account/react/components/B3Provider/B3Provider.js +4 -7
  167. package/dist/esm/global-account/react/components/B3Provider/B3Provider.native.js +4 -6
  168. package/dist/esm/global-account/react/components/B3Provider/BetterAuthProvider.d.ts +16 -0
  169. package/dist/esm/global-account/react/components/B3Provider/BetterAuthProvider.js +115 -0
  170. package/dist/esm/global-account/react/components/B3Provider/LocalSDKProvider.d.ts +3 -1
  171. package/dist/esm/global-account/react/components/B3Provider/LocalSDKProvider.js +3 -1
  172. package/dist/esm/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +3 -1
  173. package/dist/esm/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.js +4 -2
  174. package/dist/esm/global-account/react/components/LinkAccount/LinkedAccountItem.js +2 -1
  175. package/dist/esm/global-account/react/components/ManageAccount/ProfileSection.js +13 -7
  176. package/dist/esm/global-account/react/components/ManageAccount/SessionDurationContent.d.ts +5 -0
  177. package/dist/esm/global-account/react/components/ManageAccount/SessionDurationContent.js +52 -0
  178. package/dist/esm/global-account/react/components/ManageAccount/SettingsContent.js +12 -29
  179. package/dist/esm/global-account/react/components/ManageAccount/SettingsProfileCard.js +2 -2
  180. package/dist/esm/global-account/react/components/Send/Send.js +5 -2
  181. package/dist/esm/global-account/react/components/SignInWithB3/BetterAuthResetPassword.d.ts +21 -0
  182. package/dist/esm/global-account/react/components/SignInWithB3/BetterAuthResetPassword.js +64 -0
  183. package/dist/esm/global-account/react/components/SignInWithB3/BetterAuthSignIn.d.ts +34 -0
  184. package/dist/esm/global-account/react/components/SignInWithB3/BetterAuthSignIn.js +160 -0
  185. package/dist/esm/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +13 -4
  186. package/dist/esm/global-account/react/components/SignInWithB3/components/AuthButton.js +11 -2
  187. package/dist/esm/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.d.ts +6 -0
  188. package/dist/esm/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.js +135 -0
  189. package/dist/esm/global-account/react/components/SignInWithB3/steps/LoginStepCustom.js +100 -19
  190. package/dist/esm/global-account/react/components/SignInWithB3/utils/signInUtils.d.ts +5 -3
  191. package/dist/esm/global-account/react/components/SignInWithB3/utils/signInUtils.js +19 -2
  192. package/dist/esm/global-account/react/components/SingleUserSearchSelector/SingleUserSearchSelector.js +2 -1
  193. package/dist/esm/global-account/react/components/Toast/ToastContext.d.ts +3 -0
  194. package/dist/esm/global-account/react/components/Toast/ToastContext.js +30 -7
  195. package/dist/esm/global-account/react/components/custom/Button.d.ts +1 -1
  196. package/dist/esm/global-account/react/components/index.d.ts +3 -0
  197. package/dist/esm/global-account/react/components/index.js +2 -0
  198. package/dist/esm/global-account/react/components/ui/button.d.ts +1 -1
  199. package/dist/esm/global-account/react/hooks/index.d.ts +1 -0
  200. package/dist/esm/global-account/react/hooks/index.js +1 -0
  201. package/dist/esm/global-account/react/hooks/useAuth.js +28 -17
  202. package/dist/esm/global-account/react/hooks/useAuthentication.js +24 -13
  203. package/dist/esm/global-account/react/hooks/useBetterAuth.d.ts +973 -0
  204. package/dist/esm/global-account/react/hooks/useBetterAuth.js +149 -0
  205. package/dist/esm/global-account/react/hooks/useConnect.d.ts +2 -2
  206. package/dist/esm/global-account/react/hooks/useFirstEOA.d.ts +8 -8
  207. package/dist/esm/global-account/react/stores/useModalStore.d.ts +10 -1
  208. package/dist/esm/global-account/react/utils/createWagmiConfig.d.ts +4 -31
  209. package/dist/esm/global-account/react/utils/createWagmiConfig.js +5 -23
  210. package/dist/esm/global-account/react/utils/index.d.ts +0 -1
  211. package/dist/esm/global-account/react/utils/index.js +0 -1
  212. package/dist/esm/global-account/react/utils/profileDisplay.js +17 -18
  213. package/dist/esm/shared/constants/chains/b3Chain.d.ts +7 -7
  214. package/dist/esm/shared/constants/chains/b3Chain.js +4 -4
  215. package/dist/esm/shared/constants/chains/b3Viem.d.ts +6 -0
  216. package/dist/esm/shared/constants/chains/b3Viem.js +16 -0
  217. package/dist/esm/shared/constants/chains/supported.d.ts +1 -1
  218. package/dist/esm/shared/generated/chain-networks.json +2 -2
  219. package/dist/esm/shared/utils/chains.d.ts +1 -1
  220. package/dist/esm/shared/utils/chains.js +2 -2
  221. package/dist/esm/shared/utils/session-duration.d.ts +15 -0
  222. package/dist/esm/shared/utils/session-duration.js +64 -0
  223. package/dist/esm/wallet/react/components/ConnectWallet.d.ts +11 -0
  224. package/dist/esm/wallet/react/components/ConnectWallet.js +431 -0
  225. package/dist/esm/wallet/react/components/WalletProvider.d.ts +35 -0
  226. package/dist/esm/wallet/react/components/WalletProvider.js +17 -0
  227. package/dist/esm/wallet/react/hooks/useWalletDisconnect.d.ts +13 -0
  228. package/dist/esm/wallet/react/hooks/useWalletDisconnect.js +19 -0
  229. package/dist/esm/wallet/react/hooks/useWalletState.d.ts +31 -0
  230. package/dist/esm/wallet/react/hooks/useWalletState.js +60 -0
  231. package/dist/esm/wallet/react/index.d.ts +5 -0
  232. package/dist/esm/wallet/react/index.js +8 -0
  233. package/dist/esm/wallet/utils/createWalletConfig.d.ts +21 -0
  234. package/dist/esm/wallet/utils/createWalletConfig.js +21 -0
  235. package/dist/styles/index.css +1 -1
  236. package/dist/types/anyspend/constants/rpc.d.ts +1 -1
  237. package/dist/types/anyspend/react/components/checkout/AnySpendCheckout.d.ts +3 -1
  238. package/dist/types/anyspend/react/components/checkout/CartItemRow.d.ts +2 -1
  239. package/dist/types/anyspend/react/components/checkout/CartSummary.d.ts +6 -4
  240. package/dist/types/anyspend/react/components/checkout/CheckoutCartPanel.d.ts +3 -1
  241. package/dist/types/anyspend/react/components/checkout/CheckoutFormPanel.d.ts +3 -1
  242. package/dist/types/anyspend/react/components/checkout/CheckoutSuccess.d.ts +2 -1
  243. package/dist/types/anyspend/react/components/checkout/DiscountCodeInput.d.ts +3 -1
  244. package/dist/types/anyspend/react/components/checkout/PriceSkeleton.d.ts +5 -0
  245. package/dist/types/anyspend/react/components/checkout/ShippingSelector.d.ts +3 -1
  246. package/dist/types/anyspend/react/components/common/CryptoPaymentMethod.d.ts +8 -0
  247. package/dist/types/anyspend/react/components/common/StepProgress.d.ts +2 -0
  248. package/dist/types/anyspend/react/hooks/useKycStatus.d.ts +3 -1
  249. package/dist/types/global-account/better-auth-client.d.ts +1883 -0
  250. package/dist/types/global-account/bsmnt.d.ts +0 -1
  251. package/dist/types/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +4 -1
  252. package/dist/types/global-account/react/components/B3Provider/B3Provider.d.ts +8 -1
  253. package/dist/types/global-account/react/components/B3Provider/BetterAuthProvider.d.ts +16 -0
  254. package/dist/types/global-account/react/components/B3Provider/LocalSDKProvider.d.ts +3 -1
  255. package/dist/types/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +3 -1
  256. package/dist/types/global-account/react/components/ManageAccount/SessionDurationContent.d.ts +5 -0
  257. package/dist/types/global-account/react/components/SignInWithB3/BetterAuthResetPassword.d.ts +21 -0
  258. package/dist/types/global-account/react/components/SignInWithB3/BetterAuthSignIn.d.ts +34 -0
  259. package/dist/types/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.d.ts +6 -0
  260. package/dist/types/global-account/react/components/SignInWithB3/utils/signInUtils.d.ts +5 -3
  261. package/dist/types/global-account/react/components/Toast/ToastContext.d.ts +3 -0
  262. package/dist/types/global-account/react/components/custom/Button.d.ts +1 -1
  263. package/dist/types/global-account/react/components/index.d.ts +3 -0
  264. package/dist/types/global-account/react/components/ui/button.d.ts +1 -1
  265. package/dist/types/global-account/react/hooks/index.d.ts +1 -0
  266. package/dist/types/global-account/react/hooks/useBetterAuth.d.ts +973 -0
  267. package/dist/types/global-account/react/hooks/useConnect.d.ts +2 -2
  268. package/dist/types/global-account/react/hooks/useFirstEOA.d.ts +8 -8
  269. package/dist/types/global-account/react/stores/useModalStore.d.ts +10 -1
  270. package/dist/types/global-account/react/utils/createWagmiConfig.d.ts +4 -31
  271. package/dist/types/global-account/react/utils/index.d.ts +0 -1
  272. package/dist/types/shared/constants/chains/b3Chain.d.ts +7 -7
  273. package/dist/types/shared/constants/chains/b3Viem.d.ts +6 -0
  274. package/dist/types/shared/constants/chains/supported.d.ts +1 -1
  275. package/dist/types/shared/utils/chains.d.ts +1 -1
  276. package/dist/types/shared/utils/session-duration.d.ts +15 -0
  277. package/dist/types/wallet/react/components/ConnectWallet.d.ts +11 -0
  278. package/dist/types/wallet/react/components/WalletProvider.d.ts +35 -0
  279. package/dist/types/wallet/react/hooks/useWalletDisconnect.d.ts +13 -0
  280. package/dist/types/wallet/react/hooks/useWalletState.d.ts +31 -0
  281. package/dist/types/wallet/react/index.d.ts +5 -0
  282. package/dist/types/wallet/utils/createWalletConfig.d.ts +21 -0
  283. package/package.json +15 -6
  284. package/src/anyspend/constants/rpc.ts +2 -1
  285. package/src/anyspend/react/components/AnySpendNFT.tsx +2 -2
  286. package/src/anyspend/react/components/AnySpendStakeB3.tsx +2 -2
  287. package/src/anyspend/react/components/AnySpendStakeB3ExactIn.tsx +2 -2
  288. package/src/anyspend/react/components/checkout/AnySpendCheckout.tsx +25 -5
  289. package/src/anyspend/react/components/checkout/CartItemRow.tsx +2 -1
  290. package/src/anyspend/react/components/checkout/CartSummary.tsx +24 -20
  291. package/src/anyspend/react/components/checkout/CheckoutCartPanel.tsx +12 -3
  292. package/src/anyspend/react/components/checkout/CheckoutFormPanel.tsx +5 -0
  293. package/src/anyspend/react/components/checkout/CheckoutPaymentPanel.tsx +2 -4
  294. package/src/anyspend/react/components/checkout/CheckoutSuccess.tsx +13 -3
  295. package/src/anyspend/react/components/checkout/CryptoPayPanel.tsx +45 -27
  296. package/src/anyspend/react/components/checkout/DiscountCodeInput.tsx +15 -5
  297. package/src/anyspend/react/components/checkout/FiatCheckoutPanel.tsx +9 -3
  298. package/src/anyspend/react/components/checkout/KycGate.tsx +8 -3
  299. package/src/anyspend/react/components/checkout/PriceSkeleton.tsx +19 -0
  300. package/src/anyspend/react/components/checkout/ShippingSelector.tsx +5 -1
  301. package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +10 -8
  302. package/src/anyspend/react/components/common/InsufficientDepositPayment.tsx +2 -2
  303. package/src/anyspend/react/components/common/OrderDetails.tsx +10 -2
  304. package/src/anyspend/react/components/common/OrderDetailsCollapsible.tsx +4 -4
  305. package/src/anyspend/react/components/common/OrderStatus.tsx +38 -3
  306. package/src/anyspend/react/components/common/StepProgress.tsx +15 -5
  307. package/src/anyspend/react/components/common/TransferCryptoDetails.tsx +2 -2
  308. package/src/anyspend/react/hooks/useAnyspendCreateOnrampOrder.ts +5 -7
  309. package/src/anyspend/react/hooks/useKycStatus.ts +8 -5
  310. package/src/anyspend/utils/chain.ts +9 -9
  311. package/src/app.shared.ts +9 -8
  312. package/src/global-account/better-auth-client.ts +17 -0
  313. package/src/global-account/bsmnt.ts +0 -6
  314. package/src/global-account/react/components/B3DynamicModal.tsx +5 -2
  315. package/src/global-account/react/components/B3Provider/B3ConfigProvider.tsx +6 -0
  316. package/src/global-account/react/components/B3Provider/B3Provider.native.tsx +16 -21
  317. package/src/global-account/react/components/B3Provider/B3Provider.tsx +52 -40
  318. package/src/global-account/react/components/B3Provider/BetterAuthProvider.tsx +127 -0
  319. package/src/global-account/react/components/B3Provider/LocalSDKProvider.tsx +5 -0
  320. package/src/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.tsx +17 -10
  321. package/src/global-account/react/components/LinkAccount/LinkedAccountItem.tsx +2 -1
  322. package/src/global-account/react/components/ManageAccount/ProfileSection.tsx +29 -11
  323. package/src/global-account/react/components/ManageAccount/SessionDurationContent.tsx +107 -0
  324. package/src/global-account/react/components/ManageAccount/SettingsContent.tsx +28 -30
  325. package/src/global-account/react/components/ManageAccount/SettingsProfileCard.tsx +2 -2
  326. package/src/global-account/react/components/Send/Send.tsx +8 -5
  327. package/src/global-account/react/components/SignInWithB3/BetterAuthResetPassword.tsx +146 -0
  328. package/src/global-account/react/components/SignInWithB3/BetterAuthSignIn.tsx +426 -0
  329. package/src/global-account/react/components/SignInWithB3/SignInWithB3Flow.tsx +13 -4
  330. package/src/global-account/react/components/SignInWithB3/components/AuthButton.tsx +21 -2
  331. package/src/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.tsx +308 -0
  332. package/src/global-account/react/components/SignInWithB3/steps/LoginStepCustom.tsx +207 -54
  333. package/src/global-account/react/components/SignInWithB3/utils/signInUtils.ts +24 -4
  334. package/src/global-account/react/components/SingleUserSearchSelector/SingleUserSearchSelector.tsx +2 -1
  335. package/src/global-account/react/components/Toast/ToastContext.tsx +39 -7
  336. package/src/global-account/react/components/index.ts +3 -0
  337. package/src/global-account/react/hooks/index.ts +1 -0
  338. package/src/global-account/react/hooks/useAuth.ts +28 -17
  339. package/src/global-account/react/hooks/useAuthentication.ts +24 -13
  340. package/src/global-account/react/hooks/useBetterAuth.ts +191 -0
  341. package/src/global-account/react/hooks/useConnect.tsx +2 -2
  342. package/src/global-account/react/stores/useModalStore.ts +11 -0
  343. package/src/global-account/react/utils/createWagmiConfig.tsx +6 -25
  344. package/src/global-account/react/utils/index.ts +0 -1
  345. package/src/global-account/react/utils/profileDisplay.ts +21 -19
  346. package/src/shared/constants/chains/b3Chain.ts +5 -5
  347. package/src/shared/constants/chains/b3Viem.ts +18 -0
  348. package/src/shared/generated/chain-networks.json +2 -2
  349. package/src/shared/utils/chains.ts +3 -2
  350. package/src/shared/utils/session-duration.ts +64 -0
  351. package/src/types/torph.d.ts +4 -0
  352. package/src/wallet/__tests__/createWalletConfig.test.ts +39 -0
  353. package/src/wallet/react/components/ConnectWallet.tsx +665 -0
  354. package/src/wallet/react/components/WalletProvider.tsx +64 -0
  355. package/src/wallet/react/hooks/useWalletDisconnect.ts +22 -0
  356. package/src/wallet/react/hooks/useWalletState.ts +93 -0
  357. package/src/wallet/react/index.ts +10 -0
  358. package/src/wallet/utils/createWalletConfig.ts +39 -0
  359. package/dist/cjs/global-account/react/components/AvatarCreator/AvatarCreator.d.ts +0 -6
  360. package/dist/cjs/global-account/react/components/AvatarCreator/AvatarCreator.js +0 -54
  361. package/dist/cjs/global-account/react/components/ProfileAvatar.d.ts +0 -0
  362. package/dist/cjs/global-account/react/components/ProfileAvatar.js +0 -127
  363. package/dist/cjs/global-account/react/hooks/useRPMToken.d.ts +0 -7
  364. package/dist/cjs/global-account/react/hooks/useRPMToken.js +0 -11
  365. package/dist/cjs/global-account/react/utils/updateAvatar.d.ts +0 -4
  366. package/dist/cjs/global-account/react/utils/updateAvatar.js +0 -54
  367. package/dist/esm/global-account/react/components/AvatarCreator/AvatarCreator.d.ts +0 -6
  368. package/dist/esm/global-account/react/components/AvatarCreator/AvatarCreator.js +0 -51
  369. package/dist/esm/global-account/react/components/ProfileAvatar.d.ts +0 -0
  370. package/dist/esm/global-account/react/components/ProfileAvatar.js +0 -127
  371. package/dist/esm/global-account/react/hooks/useRPMToken.d.ts +0 -7
  372. package/dist/esm/global-account/react/hooks/useRPMToken.js +0 -8
  373. package/dist/esm/global-account/react/utils/updateAvatar.d.ts +0 -4
  374. package/dist/esm/global-account/react/utils/updateAvatar.js +0 -18
  375. package/dist/types/global-account/react/components/AvatarCreator/AvatarCreator.d.ts +0 -6
  376. package/dist/types/global-account/react/components/ProfileAvatar.d.ts +0 -0
  377. package/dist/types/global-account/react/hooks/useRPMToken.d.ts +0 -7
  378. package/dist/types/global-account/react/utils/updateAvatar.d.ts +0 -4
  379. package/src/global-account/react/components/AvatarCreator/AvatarCreator.tsx +0 -90
  380. package/src/global-account/react/components/ProfileAvatar.tsx +0 -138
  381. package/src/global-account/react/hooks/useRPMToken.ts +0 -17
  382. package/src/global-account/react/utils/updateAvatar.ts +0 -21
@@ -8,9 +8,8 @@ import { useOnOrderSuccess } from "../../../../anyspend/react/hooks/useOnOrderSu
8
8
  import { ALL_CHAINS, RELAY_SOLANA_MAINNET_CHAIN_ID, getAvailableChainIds } from "../../../../anyspend/index.js";
9
9
  import { getPaymentUrl } from "../../../../anyspend/utils/chain.js";
10
10
  import { isNativeToken } from "../../../../anyspend/utils/token.js";
11
- import { useAccountWallet, useB3Config, useIsMobile, useModalStore, useSimTokenBalance, useTokenData, useUnifiedChainSwitchAndExecute, } from "../../../../global-account/react/index.js";
11
+ import { useAccountWallet, useIsMobile, useSimTokenBalance, useTokenData, useUnifiedChainSwitchAndExecute, } from "../../../../global-account/react/index.js";
12
12
  import { ShinyButton, TextShimmer } from "../../../../global-account/react/index.js";
13
- import { thirdwebB3Chain } from "../../../../shared/constants/chains/b3Chain.js";
14
13
  import { formatTokenAmount } from "../../../../shared/utils/number.js";
15
14
  import { cn } from "../../../../shared/utils/cn.js";
16
15
  import { Check, ChevronDown, ChevronsUpDown, Copy, Loader2, QrCode } from "lucide-react";
@@ -18,8 +17,10 @@ import { QRCodeSVG } from "qrcode.react";
18
17
  import { encodeFunctionData, erc20Abi } from "viem";
19
18
  import { AnimatePresence, motion } from "motion/react";
20
19
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
20
+ import { useConnectModal } from "thirdweb/react";
21
21
  import { TokenSelector } from "@relayprotocol/relay-kit-ui";
22
22
  import { ChainTokenIcon } from "../common/ChainTokenIcon.js";
23
+ import { connectModalConfig } from "../common/CryptoPaymentMethod.js";
23
24
  export function CryptoPayPanel({ recipientAddress, destinationTokenAddress, destinationTokenChainId, totalAmount, buttonText = "Pay", themeColor, onSuccess, onOrderCreated, onError, callbackMetadata, classes, senderAddress, }) {
24
25
  // Stable refs for callback props to avoid re-triggering effects
25
26
  const onErrorRef = useRef(onError);
@@ -32,11 +33,10 @@ export function CryptoPayPanel({ recipientAddress, destinationTokenAddress, dest
32
33
  const [selectedSrcChainId, setSelectedSrcChainId] = useState(destinationTokenChainId);
33
34
  const [selectedSrcToken, setSelectedSrcToken] = useState(null);
34
35
  const [copied, setCopied] = useState(false);
35
- const { address: walletAddress } = useAccountWallet();
36
- const effectiveAddress = senderAddress || walletAddress;
37
- const { partnerId } = useB3Config();
38
- const setB3ModalOpen = useModalStore(state => state.setB3ModalOpen);
39
- const setB3ModalContentType = useModalStore(state => state.setB3ModalContentType);
36
+ const { address: walletAddress, connectedEOAWallet } = useAccountWallet();
37
+ const connectedAddress = walletAddress || connectedEOAWallet?.getAccount()?.address;
38
+ const effectiveAddress = connectedAddress || senderAddress;
39
+ const { connect: openConnectModal } = useConnectModal();
40
40
  const { data: dstTokenData } = useTokenData(destinationTokenChainId, destinationTokenAddress);
41
41
  // Default to destination token data once available
42
42
  useEffect(() => {
@@ -166,9 +166,8 @@ export function CryptoPayPanel({ recipientAddress, destinationTokenAddress, dest
166
166
  /* ------------------------------------------------------------------ */
167
167
  const [walletOrderId, setWalletOrderId] = useState();
168
168
  const [isSendingDeposit, setIsSendingDeposit] = useState(false);
169
- const [depositRejected, setDepositRejected] = useState(false);
170
169
  const depositSentRef = useRef(false);
171
- const { switchChainAndExecute } = useUnifiedChainSwitchAndExecute();
170
+ const { switchChainAndExecuteWithEOA } = useUnifiedChainSwitchAndExecute();
172
171
  const { createOrder: createSwapOrder, isCreatingOrder: isCreatingSwapOrder } = useAnyspendCreateOrder({
173
172
  onSuccess: data => {
174
173
  const id = data.data?.id;
@@ -183,7 +182,7 @@ export function CryptoPayPanel({ recipientAddress, destinationTokenAddress, dest
183
182
  const { orderAndTransactions: walletOat } = useAnyspendOrderAndTransactions(walletOrderId);
184
183
  // Auto-send deposit tx once swap order is ready
185
184
  useEffect(() => {
186
- if (!walletOat?.data?.order || depositSentRef.current || depositRejected)
185
+ if (!walletOat?.data?.order || depositSentRef.current)
187
186
  return;
188
187
  const order = walletOat.data.order;
189
188
  if (order.status !== "scanning_deposit_transaction")
@@ -195,8 +194,9 @@ export function CryptoPayPanel({ recipientAddress, destinationTokenAddress, dest
195
194
  try {
196
195
  setIsSendingDeposit(true);
197
196
  const amount = BigInt(order.srcAmount);
197
+ let txHash;
198
198
  if (isNativeToken(order.srcTokenAddress)) {
199
- await switchChainAndExecute(order.srcChain, {
199
+ txHash = await switchChainAndExecuteWithEOA(order.srcChain, {
200
200
  to: order.globalAddress,
201
201
  value: amount,
202
202
  });
@@ -207,12 +207,18 @@ export function CryptoPayPanel({ recipientAddress, destinationTokenAddress, dest
207
207
  functionName: "transfer",
208
208
  args: [order.globalAddress, amount],
209
209
  });
210
- await switchChainAndExecute(order.srcChain, {
210
+ txHash = await switchChainAndExecuteWithEOA(order.srcChain, {
211
211
  to: order.srcTokenAddress,
212
212
  data,
213
213
  value: BigInt(0),
214
214
  });
215
215
  }
216
+ if (!txHash) {
217
+ // User cancelled or tx failed — reset so they can retry
218
+ depositSentRef.current = false;
219
+ setWalletOrderId(undefined);
220
+ return;
221
+ }
216
222
  // Deposit sent — notify parent to transition to order lifecycle tracking
217
223
  if (walletOrderId) {
218
224
  onOrderCreatedRef.current?.(walletOrderId);
@@ -220,10 +226,8 @@ export function CryptoPayPanel({ recipientAddress, destinationTokenAddress, dest
220
226
  }
221
227
  catch (error) {
222
228
  depositSentRef.current = false;
223
- const isUserRejection = error?.code === 4001 || error?.message?.includes("rejected") || error?.message?.includes("denied");
224
- if (isUserRejection) {
225
- setDepositRejected(true);
226
- }
229
+ // Reset order so user can retry
230
+ setWalletOrderId(undefined);
227
231
  onErrorRef.current?.(error instanceof Error ? error : new Error(error?.message || "Transaction rejected"));
228
232
  }
229
233
  finally {
@@ -231,7 +235,7 @@ export function CryptoPayPanel({ recipientAddress, destinationTokenAddress, dest
231
235
  }
232
236
  };
233
237
  sendDeposit();
234
- }, [walletOat, switchChainAndExecute, walletOrderId, depositRejected]);
238
+ }, [walletOat, switchChainAndExecuteWithEOA, walletOrderId]);
235
239
  useOnOrderSuccess({
236
240
  orderData: walletOat,
237
241
  orderId: walletOrderId,
@@ -239,9 +243,10 @@ export function CryptoPayPanel({ recipientAddress, destinationTokenAddress, dest
239
243
  });
240
244
  const isWaitingForExecution = !!walletOrderId && walletOat?.data?.order.status !== "executed";
241
245
  const handleWalletPay = useCallback(() => {
242
- if (!selectedSrcToken || !walletAddress)
246
+ if (!selectedSrcToken || !connectedAddress)
243
247
  return;
244
248
  depositSentRef.current = false;
249
+ setWalletOrderId(undefined);
245
250
  createSwapOrder({
246
251
  recipientAddress,
247
252
  orderType: "swap",
@@ -256,7 +261,7 @@ export function CryptoPayPanel({ recipientAddress, destinationTokenAddress, dest
256
261
  });
257
262
  }, [
258
263
  selectedSrcToken,
259
- walletAddress,
264
+ connectedAddress,
260
265
  effectiveAddress,
261
266
  recipientAddress,
262
267
  selectedSrcChainId,
@@ -288,13 +293,28 @@ export function CryptoPayPanel({ recipientAddress, destinationTokenAddress, dest
288
293
  setTimeout(() => setCopied(false), 2000);
289
294
  }
290
295
  };
291
- const handleConnectWallet = () => {
292
- setB3ModalContentType({ type: "signInWithB3", showBackButton: false, chain: thirdwebB3Chain, partnerId });
293
- setB3ModalOpen(true);
296
+ const [shouldAutoPay, setShouldAutoPay] = useState(false);
297
+ const handleConnectWallet = async () => {
298
+ try {
299
+ const wallet = await openConnectModal(connectModalConfig);
300
+ if (wallet) {
301
+ setShouldAutoPay(true);
302
+ }
303
+ }
304
+ catch (error) {
305
+ console.error("Failed to connect wallet:", error);
306
+ }
294
307
  };
308
+ // Auto-trigger payment after wallet connect
309
+ useEffect(() => {
310
+ if (shouldAutoPay && connectedAddress && selectedSrcToken && hasEnoughBalance && !isLoadingAnyspendQuote) {
311
+ setShouldAutoPay(false);
312
+ handleWalletPay();
313
+ }
314
+ }, [shouldAutoPay, connectedAddress, selectedSrcToken, hasEnoughBalance, isLoadingAnyspendQuote, handleWalletPay]);
295
315
  const isLoading = isLoadingAnyspendQuote;
296
316
  const isPending = isCreatingSwapOrder || isSendingDeposit || isWaitingForExecution;
297
- const canPay = walletAddress && selectedSrcToken && hasEnoughBalance && !isLoading && !isPending;
317
+ const canPay = connectedAddress && selectedSrcToken && hasEnoughBalance && !isLoading && !isPending;
298
318
  const chainName = ALL_CHAINS[selectedSrcChainId]?.name || "the specified chain";
299
319
  const chainLogoUrl = ALL_CHAINS[selectedSrcChainId]?.logoUrl;
300
320
  // Collapse QR on mobile when a wallet connector is available
@@ -313,7 +333,7 @@ export function CryptoPayPanel({ recipientAddress, destinationTokenAddress, dest
313
333
  name: token.name,
314
334
  symbol: token.symbol,
315
335
  });
316
- }, supportedWalletVMs: ["evm", "svm"], token: undefined, trigger: _jsxs("button", { className: cn("flex w-full items-center justify-between rounded-xl border border-gray-200 bg-white px-4 py-3 transition-colors hover:border-gray-300 dark:border-neutral-700 dark:bg-neutral-800 dark:hover:border-neutral-600", classes?.tokenSelector), children: [selectedSrcToken ? (_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(ChainTokenIcon, { chainUrl: ALL_CHAINS[selectedSrcToken.chainId]?.logoUrl || "", tokenUrl: selectedSrcToken.metadata?.logoURI, className: "h-8 w-8" }), _jsxs("div", { className: "text-left", children: [_jsx("p", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: selectedSrcToken.symbol }), _jsxs("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: ["Balance: ", balance.formatted] })] })] })) : (_jsx("span", { className: "text-sm text-gray-400", children: "Select token" })), _jsx(ChevronsUpDown, { className: "h-4 w-4 text-gray-400" })] }) })] }), _jsx(motion.div, { initial: { opacity: 0, y: 6 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.25, ease: "easeOut" }, className: cn("rounded-xl border border-gray-200 bg-gray-50 px-4 py-3 dark:border-neutral-700 dark:bg-neutral-800/50", classes?.quoteDisplay), children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-sm text-gray-500 dark:text-gray-400", children: "You pay" }), _jsx(AnimatePresence, { mode: "wait", children: isLoadingAnyspendQuote ? (_jsx(motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.15 }, children: _jsx(TextShimmer, { duration: 1, className: "text-sm", children: "Fetching quote..." }) }, "quote-loading")) : (_jsxs(motion.span, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.15 }, className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: [srcAmountFormatted, " ", selectedSrcToken?.symbol || ""] }, "quote-amount")) })] }) }), _jsx(AnimatePresence, { children: walletAddress && selectedSrcToken && !hasEnoughBalance && !isLoading && (_jsxs(motion.p, { initial: { opacity: 0, height: 0 }, animate: { opacity: 1, height: "auto" }, exit: { opacity: 0, height: 0 }, transition: { duration: 0.2, ease: "easeOut" }, className: "text-center text-sm text-red-500", children: ["Insufficient ", selectedSrcToken.symbol, " balance"] }, "balance-warning")) }), !walletAddress ? (_jsx(ShinyButton, { accentColor: themeColor || "hsl(var(--as-brand))", onClick: handleConnectWallet, className: cn("w-full", classes?.payButton), textClassName: "text-white", children: "Connect Wallet to Pay" })) : (_jsx(ShinyButton, { accentColor: themeColor || "hsl(var(--as-brand))", onClick: handleWalletPay, disabled: !canPay, className: cn("w-full", classes?.payButton), textClassName: cn(!canPay ? "text-as-secondary" : "text-white"), children: isPending ? (_jsxs("span", { className: "flex items-center justify-center gap-2", children: [_jsx(Loader2, { className: "h-4 w-4 animate-spin" }), isCreatingSwapOrder
336
+ }, supportedWalletVMs: ["evm", "svm"], token: undefined, trigger: _jsxs("button", { className: cn("flex w-full items-center justify-between rounded-xl border border-gray-200 bg-white px-4 py-3 transition-colors hover:border-gray-300 dark:border-neutral-700 dark:bg-neutral-800 dark:hover:border-neutral-600", classes?.tokenSelector), children: [selectedSrcToken ? (_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(ChainTokenIcon, { chainUrl: ALL_CHAINS[selectedSrcToken.chainId]?.logoUrl || "", tokenUrl: selectedSrcToken.metadata?.logoURI, className: "h-8 w-8" }), _jsxs("div", { className: "text-left", children: [_jsx("p", { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: selectedSrcToken.symbol }), _jsxs("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: ["Balance: ", balance.formatted] })] })] })) : (_jsx("span", { className: "text-sm text-gray-400", children: "Select token" })), _jsx(ChevronsUpDown, { className: "h-4 w-4 text-gray-400" })] }) })] }), _jsx(motion.div, { initial: { opacity: 0, y: 6 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.25, ease: "easeOut" }, className: cn("rounded-xl border border-gray-200 bg-gray-50 px-4 py-3 dark:border-neutral-700 dark:bg-neutral-800/50", classes?.quoteDisplay), children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-sm text-gray-500 dark:text-gray-400", children: "You pay" }), _jsx(AnimatePresence, { mode: "wait", children: isLoadingAnyspendQuote ? (_jsx(motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.15 }, children: _jsx(TextShimmer, { duration: 1, className: "text-sm", children: "Fetching quote..." }) }, "quote-loading")) : (_jsxs(motion.span, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.15 }, className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: [srcAmountFormatted, " ", selectedSrcToken?.symbol || ""] }, "quote-amount")) })] }) }), _jsx(AnimatePresence, { children: connectedAddress && selectedSrcToken && !hasEnoughBalance && !isLoading && (_jsxs(motion.p, { initial: { opacity: 0, height: 0 }, animate: { opacity: 1, height: "auto" }, exit: { opacity: 0, height: 0 }, transition: { duration: 0.2, ease: "easeOut" }, className: "text-center text-sm text-red-500", children: ["Insufficient ", selectedSrcToken.symbol, " balance"] }, "balance-warning")) }), !connectedAddress ? (_jsx(ShinyButton, { accentColor: themeColor || "hsl(var(--as-brand))", onClick: handleConnectWallet, className: cn("w-full", classes?.payButton), textClassName: "text-white", children: "Connect Wallet to Pay" })) : (_jsx(ShinyButton, { accentColor: themeColor || "hsl(var(--as-brand))", onClick: handleWalletPay, disabled: !canPay, className: cn("w-full", classes?.payButton), textClassName: cn(!canPay ? "text-as-secondary" : "text-white"), children: isPending ? (_jsxs("span", { className: "flex items-center justify-center gap-2", children: [_jsx(Loader2, { className: "h-4 w-4 animate-spin" }), isCreatingSwapOrder
317
337
  ? "Creating order..."
318
338
  : isSendingDeposit
319
339
  ? "Confirm in wallet..."
@@ -6,7 +6,9 @@ interface DiscountCodeInputProps {
6
6
  loading?: boolean;
7
7
  tokenSymbol?: string;
8
8
  tokenDecimals?: number;
9
+ /** True while token decimals/symbol are still loading — renders applied amount as skeleton. */
10
+ pricesLoading?: boolean;
9
11
  className?: string;
10
12
  }
11
- export declare function DiscountCodeInput({ onApply, appliedDiscount, onRemove, loading, tokenSymbol, tokenDecimals, className, }: DiscountCodeInputProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function DiscountCodeInput({ onApply, appliedDiscount, onRemove, loading, tokenSymbol, tokenDecimals, pricesLoading, className, }: DiscountCodeInputProps): import("react/jsx-runtime").JSX.Element;
12
14
  export {};
@@ -4,13 +4,14 @@ import { cn } from "../../../../shared/utils/cn.js";
4
4
  import { formatTokenAmount, safeBigInt } from "../../../../shared/utils/number.js";
5
5
  import { X, Loader2, Check } from "lucide-react";
6
6
  import { useState, useCallback } from "react";
7
+ import { PriceSkeleton } from "./PriceSkeleton.js";
7
8
  function formatAmount(amount, decimals, symbol) {
8
9
  const bi = safeBigInt(amount);
9
10
  if (bi === BigInt(0))
10
11
  return "Free";
11
12
  return `${formatTokenAmount(bi, decimals)} ${symbol}`;
12
13
  }
13
- export function DiscountCodeInput({ onApply, appliedDiscount, onRemove, loading = false, tokenSymbol = "", tokenDecimals = 6, className, }) {
14
+ export function DiscountCodeInput({ onApply, appliedDiscount, onRemove, loading = false, tokenSymbol = "", tokenDecimals = 6, pricesLoading = false, className, }) {
14
15
  const [code, setCode] = useState("");
15
16
  const [error, setError] = useState(null);
16
17
  const [isValidating, setIsValidating] = useState(false);
@@ -41,11 +42,7 @@ export function DiscountCodeInput({ onApply, appliedDiscount, onRemove, loading
41
42
  };
42
43
  // Show applied discount state
43
44
  if (appliedDiscount?.valid) {
44
- return (_jsxs("div", { className: cn("anyspend-discount anyspend-discount-applied space-y-2", className), children: [_jsx("div", { className: "anyspend-discount-title text-sm font-semibold text-gray-900 dark:text-gray-100", children: "Discount" }), _jsxs("div", { className: "anyspend-discount-badge flex items-center justify-between rounded-lg border border-green-200 bg-green-50 px-3 py-2 dark:border-green-800 dark:bg-green-900/20", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Check, { className: "h-4 w-4 text-green-600 dark:text-green-400" }), _jsx("span", { className: "anyspend-discount-value text-sm font-medium text-green-700 dark:text-green-300", children: appliedDiscount.discount_type === "percentage"
45
- ? `${appliedDiscount.discount_value}% off`
46
- : appliedDiscount.discount_amount
47
- ? `-${formatAmount(appliedDiscount.discount_amount, tokenDecimals, tokenSymbol)}`
48
- : "Discount applied" })] }), _jsx("button", { type: "button", onClick: handleRemove, className: "anyspend-discount-remove rounded p-1 text-gray-400 hover:bg-gray-200 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300", children: _jsx(X, { className: "h-3.5 w-3.5" }) })] })] }));
45
+ return (_jsxs("div", { className: cn("anyspend-discount anyspend-discount-applied space-y-2", className), children: [_jsx("div", { className: "anyspend-discount-title text-sm font-semibold text-gray-900 dark:text-gray-100", children: "Discount" }), _jsxs("div", { className: "anyspend-discount-badge flex items-center justify-between rounded-lg border border-green-200 bg-green-50 px-3 py-2 dark:border-green-800 dark:bg-green-900/20", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Check, { className: "h-4 w-4 text-green-600 dark:text-green-400" }), _jsx("span", { className: "anyspend-discount-value text-sm font-medium text-green-700 dark:text-green-300", children: appliedDiscount.discount_type === "percentage" ? (`${appliedDiscount.discount_value}% off`) : appliedDiscount.discount_amount ? (pricesLoading ? (_jsx(PriceSkeleton, {})) : (`-${formatAmount(appliedDiscount.discount_amount, tokenDecimals, tokenSymbol)}`)) : ("Discount applied") })] }), _jsx("button", { type: "button", onClick: handleRemove, className: "anyspend-discount-remove rounded p-1 text-gray-400 hover:bg-gray-200 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300", children: _jsx(X, { className: "h-3.5 w-3.5" }) })] })] }));
49
46
  }
50
47
  return (_jsxs("div", { className: cn("anyspend-discount space-y-2", className), children: [_jsx("div", { className: "anyspend-discount-title text-sm font-semibold text-gray-900 dark:text-gray-100", children: "Discount Code" }), _jsxs("div", { className: "anyspend-discount-input-row flex gap-2", children: [_jsx("input", { type: "text", value: code, onChange: e => {
51
48
  setCode(e.target.value.toUpperCase());
@@ -5,19 +5,18 @@ import { USDC_BASE } from "../../../../anyspend/constants/index.js";
5
5
  import { cn } from "../../../../shared/utils/cn.js";
6
6
  import { formatUnits } from "../../../../shared/utils/number.js";
7
7
  import { getStripePromise } from "../../../../shared/utils/payment.utils.js";
8
- import { ShinyButton, TextShimmer, useB3Config, useModalStore, useTokenData } from "../../../../global-account/react/index.js";
8
+ import { ShinyButton, TextShimmer, useAccountWallet, useB3Config, useModalStore, useTokenData, } from "../../../../global-account/react/index.js";
9
9
  import { thirdwebB3Chain } from "../../../../shared/constants/chains/b3Chain.js";
10
10
  import { AddressElement, Elements, PaymentElement, useElements, useStripe } from "@stripe/react-stripe-js";
11
11
  import { Loader2, Lock, Wallet } from "lucide-react";
12
12
  import { AnimatePresence, motion } from "motion/react";
13
13
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
14
- import { useAccount } from "wagmi";
15
14
  import { KycGate } from "./KycGate.js";
16
15
  export function FiatCheckoutPanel({ recipientAddress, destinationTokenAddress, destinationTokenChainId, totalAmount, themeColor, onSuccess, onOrderCreated, onError, callbackMetadata, classes, feeOnTop, kycEnabled = false, }) {
17
16
  // Stable refs for callback props to avoid re-triggering effects
18
17
  const onErrorRef = useRef(onError);
19
18
  onErrorRef.current = onError;
20
- const { address } = useAccount();
19
+ const { address } = useAccountWallet();
21
20
  const setB3ModalOpen = useModalStore(state => state.setB3ModalOpen);
22
21
  const setB3ModalContentType = useModalStore(state => state.setB3ModalContentType);
23
22
  const { data: tokenData } = useTokenData(destinationTokenChainId, destinationTokenAddress);
@@ -1,15 +1,14 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { cn } from "../../../../shared/utils/cn.js";
4
- import { ShinyButton, TextShimmer, useB3Config, useModalStore } from "../../../../global-account/react/index.js";
4
+ import { ShinyButton, TextShimmer, useAccountWallet, useB3Config, useModalStore, } from "../../../../global-account/react/index.js";
5
5
  import { thirdwebB3Chain } from "../../../../shared/constants/chains/b3Chain.js";
6
6
  import { Loader2, ShieldCheck, AlertTriangle, Clock, Wallet } from "lucide-react";
7
7
  import { AnimatePresence, motion } from "motion/react";
8
8
  import { useCallback, useEffect, useRef, useState } from "react";
9
- import { useAccount } from "wagmi";
10
9
  import { useCreateKycInquiry, useKycStatus, useVerifyKyc, useWalletAuthHeaders } from "../../hooks/useKycStatus.js";
11
10
  export function KycGate({ themeColor, classes, enabled = false, onStatusResolved }) {
12
- const { address } = useAccount();
11
+ const { address } = useAccountWallet();
13
12
  const { partnerId } = useB3Config();
14
13
  // Gate the status fetch behind explicit user consent so the wallet
15
14
  // signature prompt doesn't fire automatically on tab open.
@@ -0,0 +1,5 @@
1
+ interface PriceSkeletonProps {
2
+ className?: string;
3
+ }
4
+ export declare function PriceSkeleton({ className }: PriceSkeletonProps): import("react/jsx-runtime").JSX.Element;
5
+ export {};
@@ -0,0 +1,6 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { cn } from "../../../../shared/utils/cn.js";
4
+ export function PriceSkeleton({ className }) {
5
+ return (_jsx("span", { className: cn("animate-pulse-fade bg-b3-react-background inline-block h-4 w-16 rounded-md align-middle", className), "aria-hidden": "true" }));
6
+ }
@@ -5,7 +5,9 @@ interface ShippingSelectorProps {
5
5
  onSelect: (option: ShippingOption) => void;
6
6
  tokenSymbol?: string;
7
7
  tokenDecimals?: number;
8
+ /** True while token decimals/symbol are still loading — renders price as skeleton. */
9
+ pricesLoading?: boolean;
8
10
  className?: string;
9
11
  }
10
- export declare function ShippingSelector({ options, selectedId, onSelect, tokenSymbol, tokenDecimals, className, }: ShippingSelectorProps): import("react/jsx-runtime").JSX.Element | null;
12
+ export declare function ShippingSelector({ options, selectedId, onSelect, tokenSymbol, tokenDecimals, pricesLoading, className, }: ShippingSelectorProps): import("react/jsx-runtime").JSX.Element | null;
11
13
  export {};
@@ -2,16 +2,17 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { cn } from "../../../../shared/utils/cn.js";
4
4
  import { formatTokenAmount, safeBigInt } from "../../../../shared/utils/number.js";
5
+ import { PriceSkeleton } from "./PriceSkeleton.js";
5
6
  function formatAmount(amount, decimals, symbol) {
6
7
  const bi = safeBigInt(amount);
7
8
  if (bi === BigInt(0))
8
9
  return "Free";
9
10
  return `${formatTokenAmount(bi, decimals)} ${symbol}`;
10
11
  }
11
- export function ShippingSelector({ options, selectedId, onSelect, tokenSymbol = "", tokenDecimals = 6, className, }) {
12
+ export function ShippingSelector({ options, selectedId, onSelect, tokenSymbol = "", tokenDecimals = 6, pricesLoading = false, className, }) {
12
13
  if (options.length === 0)
13
14
  return null;
14
15
  return (_jsxs("div", { className: cn("anyspend-shipping-selector space-y-2", className), children: [_jsx("div", { className: "anyspend-shipping-title text-sm font-semibold text-gray-900 dark:text-gray-100", children: "Shipping" }), _jsx("div", { className: "anyspend-shipping-options space-y-2", children: options.map(option => (_jsxs("label", { className: cn("anyspend-shipping-option flex cursor-pointer items-center justify-between rounded-lg border p-3 transition-colors", selectedId === option.id
15
16
  ? "anyspend-shipping-option-selected border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/20"
16
- : "border-gray-200 bg-white hover:border-gray-300 dark:border-neutral-600 dark:bg-neutral-800 dark:hover:border-neutral-500"), children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("input", { type: "radio", name: "shipping", checked: selectedId === option.id, onChange: () => onSelect(option), className: "h-4 w-4 border-gray-300 text-blue-500 focus:ring-blue-500" }), _jsxs("div", { children: [_jsx("div", { className: "anyspend-shipping-option-name text-sm font-medium text-gray-900 dark:text-gray-100", children: option.name }), (option.description || option.estimated_days) && (_jsx("div", { className: "anyspend-shipping-option-detail text-xs text-gray-500 dark:text-gray-400", children: option.description || (option.estimated_days && `${option.estimated_days}`) }))] })] }), _jsx("div", { className: "anyspend-shipping-option-price text-sm font-medium text-gray-900 dark:text-gray-100", children: formatAmount(option.amount, tokenDecimals, tokenSymbol) })] }, option.id))) })] }));
17
+ : "border-gray-200 bg-white hover:border-gray-300 dark:border-neutral-600 dark:bg-neutral-800 dark:hover:border-neutral-500"), children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("input", { type: "radio", name: "shipping", checked: selectedId === option.id, onChange: () => onSelect(option), className: "h-4 w-4 border-gray-300 text-blue-500 focus:ring-blue-500" }), _jsxs("div", { children: [_jsx("div", { className: "anyspend-shipping-option-name text-sm font-medium text-gray-900 dark:text-gray-100", children: option.name }), (option.description || option.estimated_days) && (_jsx("div", { className: "anyspend-shipping-option-detail text-xs text-gray-500 dark:text-gray-400", children: option.description || (option.estimated_days && `${option.estimated_days}`) }))] })] }), _jsx("div", { className: "anyspend-shipping-option-price text-sm font-medium text-gray-900 dark:text-gray-100", children: pricesLoading ? _jsx(PriceSkeleton, {}) : formatAmount(option.amount, tokenDecimals, tokenSymbol) })] }, option.id))) })] }));
17
18
  }
@@ -5,6 +5,14 @@ export declare enum CryptoPaymentMethodType {
5
5
  GLOBAL_WALLET = "global_wallet",
6
6
  TRANSFER_CRYPTO = "transfer_crypto"
7
7
  }
8
+ export declare const recommendWallets: (import("thirdweb/wallets").Wallet<"io.metamask"> | import("thirdweb/wallets").Wallet<"com.coinbase.wallet"> | import("thirdweb/wallets").Wallet<"me.rainbow"> | import("thirdweb/wallets").Wallet<"io.rabby">)[];
9
+ export declare const connectModalConfig: {
10
+ client: import("thirdweb").ThirdwebClient;
11
+ setActive: false;
12
+ size: "compact";
13
+ showThirdwebBranding: boolean;
14
+ wallets: (import("thirdweb/wallets").Wallet<"io.metamask"> | import("thirdweb/wallets").Wallet<"com.coinbase.wallet"> | import("thirdweb/wallets").Wallet<"me.rainbow"> | import("thirdweb/wallets").Wallet<"io.rabby">)[];
15
+ };
8
16
  interface CryptoPaymentMethodProps {
9
17
  selectedPaymentMethod: CryptoPaymentMethodType;
10
18
  setSelectedPaymentMethod: (method: CryptoPaymentMethodType) => void;
@@ -15,12 +15,19 @@ export var CryptoPaymentMethodType;
15
15
  CryptoPaymentMethodType["GLOBAL_WALLET"] = "global_wallet";
16
16
  CryptoPaymentMethodType["TRANSFER_CRYPTO"] = "transfer_crypto";
17
17
  })(CryptoPaymentMethodType || (CryptoPaymentMethodType = {}));
18
- const recommendWallets = [
18
+ export const recommendWallets = [
19
19
  createWallet("io.metamask"),
20
20
  createWallet("com.coinbase.wallet"),
21
21
  createWallet("me.rainbow"),
22
22
  createWallet("io.rabby"),
23
23
  ];
24
+ export const connectModalConfig = {
25
+ client,
26
+ setActive: false,
27
+ size: "compact",
28
+ showThirdwebBranding: false,
29
+ wallets: recommendWallets,
30
+ };
24
31
  export function CryptoPaymentMethod({ selectedPaymentMethod, setSelectedPaymentMethod, isCreatingOrder, onBack, onSelectPaymentMethod, classes, }) {
25
32
  const { connectedEOAWallet, connectedSmartWallet } = useAccountWallet();
26
33
  const { disconnect } = useDisconnect();
@@ -40,13 +47,7 @@ export function CryptoPaymentMethod({ selectedPaymentMethod, setSelectedPaymentM
40
47
  if (connectedEOAWallet) {
41
48
  disconnect(connectedEOAWallet);
42
49
  }
43
- const wallet = await openConnectModal({
44
- client,
45
- setActive: false,
46
- size: "compact",
47
- showThirdwebBranding: false,
48
- wallets: recommendWallets,
49
- });
50
+ const wallet = await openConnectModal(connectModalConfig);
50
51
  if (wallet) {
51
52
  setSelectedPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
52
53
  onSelectPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
@@ -3,7 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
3
3
  import { ALL_CHAINS, getChainName, getPaymentUrl, RELAY_SOLANA_MAINNET_CHAIN_ID, ZERO_ADDRESS, } from "../../../../anyspend/index.js";
4
4
  import { Badge, CopyToClipboard, ShinyButton, TextLoop } from "../../../../global-account/react/index.js";
5
5
  import { cn } from "../../../../shared/utils/index.js";
6
- import { b3 } from "viem/chains";
6
+ import { b3Viem } from "../../../../shared/constants/chains/b3Viem.js";
7
7
  import { toast } from "../../../../global-account/react/index.js";
8
8
  import { formatUnits } from "../../../../shared/utils/number.js";
9
9
  import { WalletCoinbase, WalletMetamask, WalletPhantom, WalletTrust } from "@web3icons/react";
@@ -14,7 +14,7 @@ export function InsufficientDepositPayment({ order, srcToken, depositDeficit, ph
14
14
  const depositDeficitAmount = formatUnits(depositDeficit.toString(), srcToken.decimals);
15
15
  return (_jsxs("div", { className: "insufficient-deposit-payment relative flex w-full flex-1 flex-col", children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "insufficient-deposit-payment-text text-as-primary/50", children: "Please send remaining" }), _jsxs("div", { className: "flex w-full flex-wrap items-center gap-6 sm:justify-between sm:gap-0", children: [_jsx(CopyToClipboard, { text: depositDeficitAmount, onCopy: () => {
16
16
  toast.success("Copied to clipboard");
17
- }, children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("strong", { className: "border-as-brand text-as-primary border-b-2 pb-1 text-2xl font-semibold sm:text-xl", children: [depositDeficitAmount, " ", srcToken.symbol] }), _jsx(Copy, { className: "text-as-primary/50 hover:text-as-primary h-5 w-5 cursor-pointer transition-all duration-200" })] }) }), _jsxs(Badge, { variant: "outline", className: "flex h-10 items-center gap-2 px-3 py-1 pr-2 text-sm", children: ["on ", getChainName(order.srcChain), _jsx("img", { src: ALL_CHAINS[order.srcChain].logoUrl, alt: getChainName(order.srcChain), className: cn("h-6 rounded-full", order.srcChain === b3.id && "h-5 rounded-none") })] })] }), _jsx("span", { className: "text-as-primary/50 mb-1 mt-2", children: " to the address:" })] }), _jsx(CopyToClipboard, { text: order.globalAddress, onCopy: () => {
17
+ }, children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("strong", { className: "border-as-brand text-as-primary border-b-2 pb-1 text-2xl font-semibold sm:text-xl", children: [depositDeficitAmount, " ", srcToken.symbol] }), _jsx(Copy, { className: "text-as-primary/50 hover:text-as-primary h-5 w-5 cursor-pointer transition-all duration-200" })] }) }), _jsxs(Badge, { variant: "outline", className: "flex h-10 items-center gap-2 px-3 py-1 pr-2 text-sm", children: ["on ", getChainName(order.srcChain), _jsx("img", { src: ALL_CHAINS[order.srcChain].logoUrl, alt: getChainName(order.srcChain), className: cn("h-6 rounded-full", order.srcChain === b3Viem.id && "h-5 rounded-none") })] })] }), _jsx("span", { className: "text-as-primary/50 mb-1 mt-2", children: " to the address:" })] }), _jsx(CopyToClipboard, { text: order.globalAddress, onCopy: () => {
18
18
  toast.success("Copied to clipboard");
19
19
  }, children: _jsxs("div", { className: "payment-address bg-b3-react-background border-b3-react-border hover:border-as-brand group flex cursor-pointer items-center justify-between gap-4 rounded-lg border p-3 px-4 shadow-md transition-all duration-200", children: [_jsx("div", { className: "text-as-primary overflow-hidden text-ellipsis whitespace-nowrap text-sm", children: order.globalAddress }), _jsx(Copy, { className: "group-hover:text-as-brand text-as-primary/50 h-5 w-5 cursor-pointer transition-all duration-200" })] }) }), _jsxs("div", { className: "payment-buttons mt-4 flex w-full flex-col items-center gap-2", children: [_jsx(ShinyButton, { accentColor: "hsl(var(--as-brand))", textColor: "text-white", className: "flex w-5/6 max-w-[400px] items-center gap-2 sm:px-0", disabled: txLoading || isSwitchingOrExecuting, onClick: onPayment, children: txLoading ? (_jsxs(_Fragment, { children: ["Transaction Pending", _jsx(Loader2, { className: "ml-2 h-5 w-5 animate-spin" })] })) : (_jsxs(_Fragment, { children: [_jsx("span", { className: "whitespace-nowrap pl-4 text-lg md:text-sm", children: order.srcChain === RELAY_SOLANA_MAINNET_CHAIN_ID && phantomWalletAddress
20
20
  ? "Pay from Phantom Wallet"
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { ALL_CHAINS, getChainName, getErrorDisplay, getExplorerTxUrl, getPaymentUrl, getStatusDisplay, isNativeToken, RELAY_SOLANA_MAINNET_CHAIN_ID, ZERO_ADDRESS, } from "../../../../anyspend/index.js";
4
- import { Badge, Button, CopyToClipboard, ShinyButton, Skeleton, TextLoop, TextShimmer, useAccountWallet, useB3Config, useModalStore, useProfile, useUnifiedChainSwitchAndExecute, } from "../../../../global-account/react/index.js";
4
+ import { Badge, Button, CopyToClipboard, ShinyButton, Skeleton, TextLoop, TextShimmer, useAccountWallet, useB3Config, useModalStore, useProfile, useToastContext, useUnifiedChainSwitchAndExecute, } from "../../../../global-account/react/index.js";
5
5
  import { useRouter, useSearchParams } from "../../../../shared/react/hooks/index.js";
6
6
  import { cn } from "../../../../shared/utils/index.js";
7
7
  import centerTruncate from "../../../../shared/utils/centerTruncate.js";
@@ -14,7 +14,7 @@ import { QRCodeSVG } from "qrcode.react";
14
14
  import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
15
15
  import TimeAgo from "react-timeago";
16
16
  import { encodeFunctionData, erc20Abi } from "viem";
17
- import { b3 } from "viem/chains";
17
+ import { b3Viem } from "../../../../shared/constants/chains/b3Viem.js";
18
18
  import { useWaitForTransactionReceipt, useWalletClient } from "wagmi";
19
19
  import { usePhantomTransfer } from "../../hooks/usePhantomTransfer.js";
20
20
  import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "./Accordion.js";
@@ -134,6 +134,11 @@ function roundTokenAmount(amount) {
134
134
  export const OrderDetails = memo(function OrderDetails({ mode = "modal", order, depositTxs, relayTxs, executeTx, refundTxs, cryptoPaymentMethod, selectedCryptoPaymentMethod, onPaymentMethodChange, onBack, disableUrlParamManagement = false, points, returnToHomeUrl, returnHomeLabel, classes, }) {
135
135
  const router = useRouter();
136
136
  const searchParams = useSearchParams();
137
+ const { setHeaderMode } = useToastContext();
138
+ useEffect(() => {
139
+ setHeaderMode(true);
140
+ return () => setHeaderMode(false);
141
+ }, [setHeaderMode]);
137
142
  // Get theme from B3Provider context
138
143
  const { theme } = useB3Config();
139
144
  const colorMode = theme || "light";
@@ -455,7 +460,7 @@ export const OrderDetails = memo(function OrderDetails({ mode = "modal", order,
455
460
  // Transfer Crypto Payment Method - Show new card-based UI
456
461
  _jsx(TransferCryptoDetails, { order: order, recipientName: recipientName, srcToken: srcToken, dstToken: dstToken, tournament: tournament, nft: nft, onBack: handleBack, onPaymentMethodChange: onPaymentMethodChange })) : (_jsxs("div", { className: "order-details-payment-section relative flex w-full flex-1 flex-col", children: [_jsxs("div", { className: "order-details-amount-section flex flex-col gap-1", children: [_jsx("span", { className: "text-as-primary/50 order-details-amount-label", children: "Please send" }), _jsxs("div", { className: "order-details-amount-container flex w-full flex-wrap items-center gap-6 sm:justify-between sm:gap-0", children: [_jsx(CopyToClipboard, { text: roundedUpSrcAmount, onCopy: () => {
457
462
  toast.success("Copied to clipboard");
458
- }, children: _jsxs("div", { className: "order-details-amount-display flex items-center gap-2", children: [_jsxs("strong", { className: "border-as-brand text-as-primary order-details-amount-text border-b-2 pb-1 text-2xl font-semibold sm:text-xl", children: [roundedUpSrcAmount, " ", srcToken.symbol] }), _jsx(Copy, { className: "text-as-primary/50 hover:text-as-primary order-details-copy-icon h-5 w-5 cursor-pointer transition-all duration-200" })] }) }), _jsxs(Badge, { variant: "outline", className: "flex h-10 items-center gap-2 px-3 py-1 pr-2 text-sm", children: ["on ", getChainName(order.srcChain), _jsx("img", { src: ALL_CHAINS[order.srcChain].logoUrl, alt: getChainName(order.srcChain), className: cn("h-6 rounded-full", order.srcChain === b3.id && "h-5 rounded-none") })] })] }), _jsx("span", { className: "text-as-primary/50 order-details-address-label mb-1 mt-2", children: " to the address:" })] }), _jsx(CopyToClipboard, { text: order.globalAddress, onCopy: () => {
463
+ }, children: _jsxs("div", { className: "order-details-amount-display flex items-center gap-2", children: [_jsxs("strong", { className: "border-as-brand text-as-primary order-details-amount-text border-b-2 pb-1 text-2xl font-semibold sm:text-xl", children: [roundedUpSrcAmount, " ", srcToken.symbol] }), _jsx(Copy, { className: "text-as-primary/50 hover:text-as-primary order-details-copy-icon h-5 w-5 cursor-pointer transition-all duration-200" })] }) }), _jsxs(Badge, { variant: "outline", className: "flex h-10 items-center gap-2 px-3 py-1 pr-2 text-sm", children: ["on ", getChainName(order.srcChain), _jsx("img", { src: ALL_CHAINS[order.srcChain].logoUrl, alt: getChainName(order.srcChain), className: cn("h-6 rounded-full", order.srcChain === b3Viem.id && "h-5 rounded-none") })] })] }), _jsx("span", { className: "text-as-primary/50 order-details-address-label mb-1 mt-2", children: " to the address:" })] }), _jsx(CopyToClipboard, { text: order.globalAddress, onCopy: () => {
459
464
  toast.success("Copied to clipboard");
460
465
  }, children: _jsxs("div", { className: "bg-b3-react-background border-b3-react-border hover:border-as-brand order-details-address-container group flex cursor-pointer items-center justify-between gap-4 rounded-lg border p-3 px-4 shadow-md transition-all duration-200", children: [_jsx("div", { className: "text-as-primary order-details-address-text overflow-hidden text-ellipsis whitespace-nowrap text-sm", children: order.globalAddress }), _jsx(Copy, { className: "group-hover:text-as-brand text-as-primary/50 order-details-address-copy-icon h-5 w-5 cursor-pointer transition-all duration-200" })] }) }), (account?.address || phantomWalletAddress) && !showQRCode ? (_jsx("div", { className: "mb-4 mt-8 flex w-full flex-col items-center gap-4", children: _jsxs(_Fragment, { children: [_jsxs("div", { className: "relative flex w-full flex-col items-center gap-2", children: [_jsx(ShinyButton, { accentColor: "hsl(var(--as-brand))", textColor: "text-white", className: "flex w-5/6 items-center gap-2 sm:px-0", disabled: txLoading || isSwitchingOrExecuting, onClick: handlePayment, children: txLoading ? (_jsxs(_Fragment, { children: ["Transaction Pending", _jsx(Loader2, { className: "ml-2 h-5 w-5 animate-spin" })] })) : (_jsxs(_Fragment, { children: [_jsx("span", { className: "pl-4 text-lg md:text-sm", children: order.srcChain === RELAY_SOLANA_MAINNET_CHAIN_ID && phantomWalletAddress
461
466
  ? "Pay from Phantom Wallet"
@@ -9,7 +9,7 @@ import { formatTokenAmount } from "../../../../shared/utils/number.js";
9
9
  import { ChevronDown, Copy } from "lucide-react";
10
10
  import { motion } from "motion/react";
11
11
  import { memo, useState } from "react";
12
- import { b3 } from "viem/chains";
12
+ import { b3Viem } from "../../../../shared/constants/chains/b3Viem.js";
13
13
  export const OrderDetailsCollapsible = memo(function OrderDetailsCollapsible({ order, dstToken, tournament, nft, recipientName, formattedExpectedDstAmount, className, showTotal = false, totalAmount, points, isOpen, onOpenChange, classes, }) {
14
14
  const [internalOpen, setInternalOpen] = useState(true);
15
15
  // Use controlled mode if isOpen is provided, otherwise use internal state
@@ -39,5 +39,5 @@ export const OrderDetailsCollapsible = memo(function OrderDetailsCollapsible({ o
39
39
  ? order.metadata.action
40
40
  ? capitalizeFirstLetter(order.metadata.action)
41
41
  : "Contract execution"
42
- : "" }), _jsxs("div", { className: "order-details-expected-value flex flex-wrap items-center justify-end gap-2", children: [order.type === "swap" || order.type === "deposit_first" ? (_jsx("span", { className: "order-details-amount-text", children: `~${finalFormattedExpectedDstAmount} ${dstToken.symbol}` })) : order.type === "mint_nft" ? (_jsxs("div", { className: "order-details-nft-info flex items-center gap-2", children: [_jsx("img", { src: nft?.imageUrl, alt: nft?.name || "NFT", className: "order-details-nft-image h-5 w-5" }), _jsx("div", { className: "order-details-nft-name", children: nft?.name || "NFT" })] })) : order.type === "join_tournament" || order.type === "fund_tournament" ? (_jsxs("div", { className: "order-details-tournament-info flex items-center gap-2", children: [_jsx("img", { src: tournament?.imageUrl, alt: tournament?.name || "Tournament", className: "order-details-tournament-image h-5 w-5" }), _jsx("div", { className: "order-details-tournament-name", children: tournament?.name || "Tournament" })] })) : order.type === "hype_duel" ? (_jsx("div", { className: "order-details-hype-info flex items-center gap-2", children: _jsxs("div", { className: "order-details-hype-amount", children: [formatTokenAmount(BigInt(order.payload.expectedDstAmount), dstToken.decimals), " HYPE"] }) })) : order.type === "custom" || order.type === "custom_exact_in" ? (_jsx("span", { className: "order-details-amount-text", children: `~${finalFormattedExpectedDstAmount} ${dstToken.symbol}` })) : null, _jsxs("div", { className: "order-details-chain-info text-as-primary/50 flex items-center gap-2", children: [_jsxs("span", { className: "order-details-chain-text", children: ["on ", order.dstChain !== b3.id && getChainName(order.dstChain)] }), _jsx("img", { src: ALL_CHAINS[order.dstChain].logoUrl, alt: getChainName(order.dstChain), className: cn("order-details-chain-logo h-3", order.dstChain !== b3.id && "w-3 rounded-full", order.dstChain === b3.id && "h-4") })] })] })] }), points !== undefined && points !== null && (_jsxs(_Fragment, { children: [_jsx("div", { className: "order-details-divider divider w-full" }), _jsxs("div", { className: "order-details-points-section flex w-full justify-between gap-4", children: [_jsx("div", { className: "order-details-points-label text-as-tertiary", children: "Points" }), _jsxs("div", { className: "order-details-points-value text-as-brand font-semibold", children: ["+", formatNumber(points), " pts"] })] })] })), _jsx("div", { className: "order-details-divider divider w-full" }), _jsxs("div", { className: "order-details-id-total-section flex w-full justify-between gap-4", children: [_jsx("div", { className: "order-details-id-total-label text-as-tertiary", children: showTotal ? "Total (included fee)" : "Order ID" }), _jsx("div", { className: "order-details-id-total-value text-as-primary overflow-hidden text-ellipsis whitespace-nowrap", children: showTotal && totalAmount ? totalAmount : order.id })] })] }) })) : (_jsxs("div", { className: "order-details-collapsed flex w-full items-center", children: [_jsx("div", { className: "order-details-collapsed-divider divider w-full" }), _jsx("button", { className: "order-details-collapsed-button whitespace-nowrap text-sm", onClick: () => setShowOrderDetails(true), children: "Order Details" }), _jsx(ChevronDown, { className: "order-details-collapsed-chevron text-as-primary mx-1 h-4 min-h-4 w-4 min-w-4" }), _jsx("div", { className: "order-details-collapsed-divider divider w-full" })] })) }));
42
+ : "" }), _jsxs("div", { className: "order-details-expected-value flex flex-wrap items-center justify-end gap-2", children: [order.type === "swap" || order.type === "deposit_first" ? (_jsx("span", { className: "order-details-amount-text", children: `~${finalFormattedExpectedDstAmount} ${dstToken.symbol}` })) : order.type === "mint_nft" ? (_jsxs("div", { className: "order-details-nft-info flex items-center gap-2", children: [_jsx("img", { src: nft?.imageUrl, alt: nft?.name || "NFT", className: "order-details-nft-image h-5 w-5" }), _jsx("div", { className: "order-details-nft-name", children: nft?.name || "NFT" })] })) : order.type === "join_tournament" || order.type === "fund_tournament" ? (_jsxs("div", { className: "order-details-tournament-info flex items-center gap-2", children: [_jsx("img", { src: tournament?.imageUrl, alt: tournament?.name || "Tournament", className: "order-details-tournament-image h-5 w-5" }), _jsx("div", { className: "order-details-tournament-name", children: tournament?.name || "Tournament" })] })) : order.type === "hype_duel" ? (_jsx("div", { className: "order-details-hype-info flex items-center gap-2", children: _jsxs("div", { className: "order-details-hype-amount", children: [formatTokenAmount(BigInt(order.payload.expectedDstAmount), dstToken.decimals), " HYPE"] }) })) : order.type === "custom" || order.type === "custom_exact_in" ? (_jsx("span", { className: "order-details-amount-text", children: `~${finalFormattedExpectedDstAmount} ${dstToken.symbol}` })) : null, _jsxs("div", { className: "order-details-chain-info text-as-primary/50 flex items-center gap-2", children: [_jsxs("span", { className: "order-details-chain-text", children: ["on ", order.dstChain !== b3Viem.id && getChainName(order.dstChain)] }), _jsx("img", { src: ALL_CHAINS[order.dstChain].logoUrl, alt: getChainName(order.dstChain), className: cn("order-details-chain-logo h-3", order.dstChain !== b3Viem.id && "w-3 rounded-full", order.dstChain === b3Viem.id && "h-4") })] })] })] }), points !== undefined && points !== null && (_jsxs(_Fragment, { children: [_jsx("div", { className: "order-details-divider divider w-full" }), _jsxs("div", { className: "order-details-points-section flex w-full justify-between gap-4", children: [_jsx("div", { className: "order-details-points-label text-as-tertiary", children: "Points" }), _jsxs("div", { className: "order-details-points-value text-as-brand font-semibold", children: ["+", formatNumber(points), " pts"] })] })] })), _jsx("div", { className: "order-details-divider divider w-full" }), _jsxs("div", { className: "order-details-id-total-section flex w-full justify-between gap-4", children: [_jsx("div", { className: "order-details-id-total-label text-as-tertiary", children: showTotal ? "Total (included fee)" : "Order ID" }), _jsx("div", { className: "order-details-id-total-value text-as-primary overflow-hidden text-ellipsis whitespace-nowrap", children: showTotal && totalAmount ? totalAmount : order.id })] })] }) })) : (_jsxs("div", { className: "order-details-collapsed flex w-full items-center", children: [_jsx("div", { className: "order-details-collapsed-divider divider w-full" }), _jsx("button", { className: "order-details-collapsed-button whitespace-nowrap text-sm", onClick: () => setShowOrderDetails(true), children: "Order Details" }), _jsx(ChevronDown, { className: "order-details-collapsed-chevron text-as-primary mx-1 h-4 min-h-4 w-4 min-w-4" }), _jsx("div", { className: "order-details-collapsed-divider divider w-full" })] })) }));
43
43
  });
@@ -1,7 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { getStatusDisplay } from "../../../../anyspend/index.js";
3
3
  import { useSearchParams } from "../../../../shared/react/index.js";
4
- import { Clock, Loader2, RotateCcw, X } from "lucide-react";
4
+ import { AlertCircle, AlertTriangle, CheckCircle, Clock, Info, Loader2, RotateCcw, X } from "lucide-react";
5
+ import { useToastContext } from "../../../../global-account/react/index.js";
5
6
  import { memo, useEffect, useRef } from "react";
6
7
  import { useAnySpendCustomization } from "../context/AnySpendCustomizationContext.js";
7
8
  import { AnimatedCheckmark } from "../icons/AnimatedCheckmark.js";
@@ -14,6 +15,19 @@ function getStepIndex(status) {
14
15
  return 1;
15
16
  return -1;
16
17
  }
18
+ function getToastIcon(type) {
19
+ const iconClass = "h-5 w-5";
20
+ switch (type) {
21
+ case "success":
22
+ return _jsx(CheckCircle, { className: `${iconClass} text-green-500` });
23
+ case "error":
24
+ return _jsx(AlertCircle, { className: `${iconClass} text-red-500` });
25
+ case "info":
26
+ return _jsx(Info, { className: `${iconClass} text-blue-500` });
27
+ case "warning":
28
+ return _jsx(AlertTriangle, { className: `${iconClass} text-amber-500` });
29
+ }
30
+ }
17
31
  export const OrderStatus = memo(function OrderStatus({ order, selectedCryptoPaymentMethod, }) {
18
32
  const { text: defaultText, description: defaultDescription } = getStatusDisplay(order);
19
33
  const { content, slots } = useAnySpendCustomization();
@@ -58,9 +72,26 @@ export const OrderStatus = memo(function OrderStatus({ order, selectedCryptoPaym
58
72
  if (content.processingDescription)
59
73
  description = content.processingDescription;
60
74
  }
75
+ const { latestToast } = useToastContext();
76
+ // Override subtitle with toast notification when present (title stays unchanged)
77
+ let notificationIcon = undefined;
78
+ if (latestToast && currentStepIndex >= 0) {
79
+ description = latestToast.message;
80
+ notificationIcon = getToastIcon(latestToast.type);
81
+ }
61
82
  const paymentSteps = [
62
- { id: 1, title: text, description: typeof description === "string" ? description : defaultDescription || "" },
63
- { id: 2, title: text, description: typeof description === "string" ? description : defaultDescription || "" },
83
+ {
84
+ id: 1,
85
+ title: text,
86
+ description: typeof description === "string" ? description : defaultDescription || "",
87
+ icon: notificationIcon,
88
+ },
89
+ {
90
+ id: 2,
91
+ title: text,
92
+ description: typeof description === "string" ? description : defaultDescription || "",
93
+ icon: notificationIcon,
94
+ },
64
95
  ];
65
96
  if (currentStepIndex === 0) {
66
97
  if (!(order.status === "scanning_deposit_transaction" && cryptoPaymentMethod === "transfer_crypto")) {
@@ -1,7 +1,9 @@
1
+ import React from "react";
1
2
  export interface Step {
2
3
  id: string | number;
3
4
  title: string;
4
5
  description?: string;
6
+ icon?: React.ReactNode;
5
7
  }
6
8
  export interface StepProgressProps {
7
9
  steps: Step[];
@@ -1,14 +1,16 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React from "react";
3
4
  import { motion } from "framer-motion";
5
+ import { TextMorph } from "torph/react";
4
6
  import { AnimatedCheckmark } from "../icons/AnimatedCheckmark.js";
5
7
  export function StepProgress({ steps, currentStepIndex, className = "", animateCompletedSteps = true, }) {
6
8
  const currentStep = steps[currentStepIndex];
7
- return (_jsxs("div", { className: `flex w-full flex-col items-center gap-4 ${className}`, children: [_jsx("div", { className: "flex items-center gap-2", children: steps.map((_, index) => (_jsxs(_Fragment, { children: [_jsx("div", { className: "flex items-center", children: index < currentStepIndex ? (
9
+ return (_jsxs("div", { className: `flex w-full flex-col items-center gap-4 ${className}`, children: [_jsx("div", { className: "flex items-center gap-2", children: steps.map((_, index) => (_jsxs(React.Fragment, { children: [_jsx("div", { className: "flex items-center", children: index < currentStepIndex ? (
8
10
  // Completed step - checkmark replaces the whole circle
9
11
  _jsx(motion.div, { initial: { scale: 0.8, opacity: 0 }, animate: { scale: 1, opacity: 1 }, transition: { delay: index * 0.2 }, children: _jsx(AnimatedCheckmark, { className: "h-10 w-10", strokeWidth: 2.5, static: !animateCompletedSteps }) })) : (_jsx(motion.div, { initial: { scale: 0.8, opacity: 0 }, animate: { scale: 1, opacity: 1 }, transition: { delay: index * 0.2 }, className: `border-as-border-secondary relative flex h-10 w-10 items-center justify-center rounded-full border-[3px]`, children: index === currentStepIndex ? (
10
12
  // Current step - show spinning border and step number
11
13
  _jsxs(_Fragment, { children: [_jsx("div", { className: "border-t-as-primary absolute -inset-0.5 animate-spin rounded-full border-[3px] border-transparent" }), _jsx("span", { className: "text-as-primary font-semibold", children: index + 1 })] })) : (
12
14
  // Future step - show step number with disabled styling
13
- _jsx("span", { className: "text-as-content-disabled font-semibold", children: index + 1 })) })) }, index), index < steps.length - 1 && (_jsx("div", { className: "flex w-8 items-center justify-center gap-1", children: Array.from({ length: 6 }).map((_, dotIndex) => (_jsx("div", { className: "bg-as-primary/30 h-[2px] w-[2px] rounded-full" }, dotIndex))) }))] }))) }), currentStep && (_jsxs(motion.div, { initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, transition: { delay: 0.3 }, className: "text-center", children: [_jsx("h2", { className: "text-as-primary text-xl font-semibold", children: currentStep.title }), currentStep.description && _jsx("p", { className: "text-as-tertiary mt-1 text-sm", children: currentStep.description })] }))] }));
15
+ _jsx("span", { className: "text-as-content-disabled font-semibold", children: index + 1 })) })) }), index < steps.length - 1 && (_jsx("div", { className: "flex w-8 items-center justify-center gap-1", children: Array.from({ length: 6 }).map((_, dotIndex) => (_jsx("div", { className: "bg-as-primary/30 h-[2px] w-[2px] rounded-full" }, dotIndex))) }))] }, index))) }), currentStep && (_jsxs(motion.div, { initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, transition: { delay: 0.3 }, className: "text-center", children: [_jsx("h2", { className: "text-as-primary text-xl font-semibold", children: _jsx(TextMorph, { children: currentStep.title }) }), currentStep.description && (_jsxs("p", { className: "text-as-tertiary mt-1 flex items-center justify-center gap-1.5 text-sm", children: [currentStep.icon, _jsx(TextMorph, { children: currentStep.description })] }))] }))] }));
14
16
  }