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

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 (342) 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 +10 -2
  8. package/dist/cjs/anyspend/react/components/checkout/CheckoutPaymentPanel.js +2 -4
  9. package/dist/cjs/anyspend/react/components/checkout/CheckoutSuccess.d.ts +2 -1
  10. package/dist/cjs/anyspend/react/components/checkout/CheckoutSuccess.js +5 -3
  11. package/dist/cjs/anyspend/react/components/checkout/CryptoPayPanel.js +43 -23
  12. package/dist/cjs/anyspend/react/components/checkout/FiatCheckoutPanel.js +1 -2
  13. package/dist/cjs/anyspend/react/components/checkout/KycGate.js +1 -2
  14. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.d.ts +8 -0
  15. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +10 -9
  16. package/dist/cjs/anyspend/react/components/common/InsufficientDepositPayment.js +2 -2
  17. package/dist/cjs/anyspend/react/components/common/OrderDetails.js +7 -2
  18. package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.js +2 -2
  19. package/dist/cjs/anyspend/react/components/common/OrderStatus.js +37 -6
  20. package/dist/cjs/anyspend/react/components/common/StepProgress.d.ts +2 -0
  21. package/dist/cjs/anyspend/react/components/common/StepProgress.js +7 -2
  22. package/dist/cjs/anyspend/react/components/common/TransferCryptoDetails.js +2 -2
  23. package/dist/cjs/anyspend/react/hooks/useAnyspendCreateOnrampOrder.js +4 -6
  24. package/dist/cjs/anyspend/react/hooks/useKycStatus.d.ts +3 -1
  25. package/dist/cjs/anyspend/react/hooks/useKycStatus.js +11 -7
  26. package/dist/cjs/anyspend/utils/chain.js +8 -7
  27. package/dist/cjs/app.shared.js +9 -7
  28. package/dist/cjs/global-account/better-auth-client.d.ts +1883 -0
  29. package/dist/cjs/global-account/better-auth-client.js +17 -0
  30. package/dist/cjs/global-account/bsmnt.d.ts +0 -1
  31. package/dist/cjs/global-account/bsmnt.js +0 -6
  32. package/dist/cjs/global-account/react/components/B3DynamicModal.js +5 -2
  33. package/dist/cjs/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +4 -1
  34. package/dist/cjs/global-account/react/components/B3Provider/B3ConfigProvider.js +2 -1
  35. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.d.ts +8 -1
  36. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.js +9 -12
  37. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.native.js +6 -8
  38. package/dist/cjs/global-account/react/components/B3Provider/BetterAuthProvider.d.ts +16 -0
  39. package/dist/cjs/global-account/react/components/B3Provider/BetterAuthProvider.js +120 -0
  40. package/dist/cjs/global-account/react/components/B3Provider/LocalSDKProvider.d.ts +3 -1
  41. package/dist/cjs/global-account/react/components/B3Provider/LocalSDKProvider.js +3 -1
  42. package/dist/cjs/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +3 -1
  43. package/dist/cjs/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.js +4 -2
  44. package/dist/cjs/global-account/react/components/LinkAccount/LinkedAccountItem.js +2 -1
  45. package/dist/cjs/global-account/react/components/ManageAccount/ProfileSection.js +15 -6
  46. package/dist/cjs/global-account/react/components/ManageAccount/SessionDurationContent.d.ts +5 -0
  47. package/dist/cjs/global-account/react/components/ManageAccount/SessionDurationContent.js +57 -0
  48. package/dist/cjs/global-account/react/components/ManageAccount/SettingsContent.js +12 -29
  49. package/dist/cjs/global-account/react/components/ManageAccount/SettingsProfileCard.js +2 -2
  50. package/dist/cjs/global-account/react/components/Send/Send.js +5 -2
  51. package/dist/cjs/global-account/react/components/SignInWithB3/BetterAuthResetPassword.d.ts +21 -0
  52. package/dist/cjs/global-account/react/components/SignInWithB3/BetterAuthResetPassword.js +67 -0
  53. package/dist/cjs/global-account/react/components/SignInWithB3/BetterAuthSignIn.d.ts +34 -0
  54. package/dist/cjs/global-account/react/components/SignInWithB3/BetterAuthSignIn.js +163 -0
  55. package/dist/cjs/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +13 -4
  56. package/dist/cjs/global-account/react/components/SignInWithB3/components/AuthButton.js +10 -1
  57. package/dist/cjs/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.d.ts +6 -0
  58. package/dist/cjs/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.js +138 -0
  59. package/dist/cjs/global-account/react/components/SignInWithB3/steps/LoginStepCustom.js +96 -15
  60. package/dist/cjs/global-account/react/components/SignInWithB3/utils/signInUtils.d.ts +5 -3
  61. package/dist/cjs/global-account/react/components/SignInWithB3/utils/signInUtils.js +20 -3
  62. package/dist/cjs/global-account/react/components/SingleUserSearchSelector/SingleUserSearchSelector.js +2 -1
  63. package/dist/cjs/global-account/react/components/Toast/ToastContext.d.ts +3 -0
  64. package/dist/cjs/global-account/react/components/Toast/ToastContext.js +30 -7
  65. package/dist/cjs/global-account/react/components/custom/Button.d.ts +1 -1
  66. package/dist/cjs/global-account/react/components/index.d.ts +3 -0
  67. package/dist/cjs/global-account/react/components/index.js +7 -3
  68. package/dist/cjs/global-account/react/components/ui/button.d.ts +1 -1
  69. package/dist/cjs/global-account/react/hooks/index.d.ts +1 -0
  70. package/dist/cjs/global-account/react/hooks/index.js +5 -2
  71. package/dist/cjs/global-account/react/hooks/useAuth.js +26 -15
  72. package/dist/cjs/global-account/react/hooks/useAuthentication.js +23 -12
  73. package/dist/cjs/global-account/react/hooks/useBetterAuth.d.ts +973 -0
  74. package/dist/cjs/global-account/react/hooks/useBetterAuth.js +157 -0
  75. package/dist/cjs/global-account/react/hooks/useConnect.d.ts +2 -2
  76. package/dist/cjs/global-account/react/hooks/useFirstEOA.d.ts +8 -8
  77. package/dist/cjs/global-account/react/stores/useModalStore.d.ts +10 -1
  78. package/dist/cjs/global-account/react/utils/createWagmiConfig.d.ts +4 -31
  79. package/dist/cjs/global-account/react/utils/createWagmiConfig.js +5 -24
  80. package/dist/cjs/global-account/react/utils/index.d.ts +0 -1
  81. package/dist/cjs/global-account/react/utils/index.js +0 -1
  82. package/dist/cjs/global-account/react/utils/profileDisplay.js +17 -18
  83. package/dist/cjs/shared/constants/chains/b3Chain.d.ts +7 -7
  84. package/dist/cjs/shared/constants/chains/b3Chain.js +4 -4
  85. package/dist/cjs/shared/constants/chains/b3Viem.d.ts +6 -0
  86. package/dist/cjs/shared/constants/chains/b3Viem.js +19 -0
  87. package/dist/cjs/shared/constants/chains/supported.d.ts +1 -1
  88. package/dist/cjs/shared/generated/chain-networks.json +2 -2
  89. package/dist/cjs/shared/utils/chains.d.ts +1 -1
  90. package/dist/cjs/shared/utils/chains.js +2 -2
  91. package/dist/cjs/shared/utils/session-duration.d.ts +15 -0
  92. package/dist/cjs/shared/utils/session-duration.js +69 -0
  93. package/dist/cjs/wallet/react/components/ConnectWallet.d.ts +11 -0
  94. package/dist/cjs/wallet/react/components/ConnectWallet.js +467 -0
  95. package/dist/cjs/wallet/react/components/WalletProvider.d.ts +35 -0
  96. package/dist/cjs/wallet/react/components/WalletProvider.js +20 -0
  97. package/dist/cjs/wallet/react/hooks/useWalletDisconnect.d.ts +13 -0
  98. package/dist/cjs/wallet/react/hooks/useWalletDisconnect.js +22 -0
  99. package/dist/cjs/wallet/react/hooks/useWalletState.d.ts +31 -0
  100. package/dist/cjs/wallet/react/hooks/useWalletState.js +63 -0
  101. package/dist/cjs/wallet/react/index.d.ts +5 -0
  102. package/dist/cjs/wallet/react/index.js +16 -0
  103. package/dist/cjs/wallet/utils/createWalletConfig.d.ts +21 -0
  104. package/dist/cjs/wallet/utils/createWalletConfig.js +24 -0
  105. package/dist/esm/anyspend/constants/rpc.d.ts +1 -1
  106. package/dist/esm/anyspend/constants/rpc.js +1 -1
  107. package/dist/esm/anyspend/react/components/AnySpendNFT.js +2 -2
  108. package/dist/esm/anyspend/react/components/AnySpendStakeB3.js +2 -2
  109. package/dist/esm/anyspend/react/components/AnySpendStakeB3ExactIn.js +2 -2
  110. package/dist/esm/anyspend/react/components/checkout/AnySpendCheckout.d.ts +3 -1
  111. package/dist/esm/anyspend/react/components/checkout/AnySpendCheckout.js +10 -2
  112. package/dist/esm/anyspend/react/components/checkout/CheckoutPaymentPanel.js +2 -4
  113. package/dist/esm/anyspend/react/components/checkout/CheckoutSuccess.d.ts +2 -1
  114. package/dist/esm/anyspend/react/components/checkout/CheckoutSuccess.js +5 -3
  115. package/dist/esm/anyspend/react/components/checkout/CryptoPayPanel.js +44 -24
  116. package/dist/esm/anyspend/react/components/checkout/FiatCheckoutPanel.js +2 -3
  117. package/dist/esm/anyspend/react/components/checkout/KycGate.js +2 -3
  118. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.d.ts +8 -0
  119. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +9 -8
  120. package/dist/esm/anyspend/react/components/common/InsufficientDepositPayment.js +2 -2
  121. package/dist/esm/anyspend/react/components/common/OrderDetails.js +8 -3
  122. package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.js +2 -2
  123. package/dist/esm/anyspend/react/components/common/OrderStatus.js +34 -3
  124. package/dist/esm/anyspend/react/components/common/StepProgress.d.ts +2 -0
  125. package/dist/esm/anyspend/react/components/common/StepProgress.js +4 -2
  126. package/dist/esm/anyspend/react/components/common/TransferCryptoDetails.js +2 -2
  127. package/dist/esm/anyspend/react/hooks/useAnyspendCreateOnrampOrder.js +5 -7
  128. package/dist/esm/anyspend/react/hooks/useKycStatus.d.ts +3 -1
  129. package/dist/esm/anyspend/react/hooks/useKycStatus.js +9 -5
  130. package/dist/esm/anyspend/utils/chain.js +10 -9
  131. package/dist/esm/app.shared.js +9 -7
  132. package/dist/esm/global-account/better-auth-client.d.ts +1883 -0
  133. package/dist/esm/global-account/better-auth-client.js +13 -0
  134. package/dist/esm/global-account/bsmnt.d.ts +0 -1
  135. package/dist/esm/global-account/bsmnt.js +0 -5
  136. package/dist/esm/global-account/react/components/B3DynamicModal.js +5 -2
  137. package/dist/esm/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +4 -1
  138. package/dist/esm/global-account/react/components/B3Provider/B3ConfigProvider.js +2 -1
  139. package/dist/esm/global-account/react/components/B3Provider/B3Provider.d.ts +8 -1
  140. package/dist/esm/global-account/react/components/B3Provider/B3Provider.js +4 -7
  141. package/dist/esm/global-account/react/components/B3Provider/B3Provider.native.js +4 -6
  142. package/dist/esm/global-account/react/components/B3Provider/BetterAuthProvider.d.ts +16 -0
  143. package/dist/esm/global-account/react/components/B3Provider/BetterAuthProvider.js +115 -0
  144. package/dist/esm/global-account/react/components/B3Provider/LocalSDKProvider.d.ts +3 -1
  145. package/dist/esm/global-account/react/components/B3Provider/LocalSDKProvider.js +3 -1
  146. package/dist/esm/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +3 -1
  147. package/dist/esm/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.js +4 -2
  148. package/dist/esm/global-account/react/components/LinkAccount/LinkedAccountItem.js +2 -1
  149. package/dist/esm/global-account/react/components/ManageAccount/ProfileSection.js +13 -7
  150. package/dist/esm/global-account/react/components/ManageAccount/SessionDurationContent.d.ts +5 -0
  151. package/dist/esm/global-account/react/components/ManageAccount/SessionDurationContent.js +52 -0
  152. package/dist/esm/global-account/react/components/ManageAccount/SettingsContent.js +12 -29
  153. package/dist/esm/global-account/react/components/ManageAccount/SettingsProfileCard.js +2 -2
  154. package/dist/esm/global-account/react/components/Send/Send.js +5 -2
  155. package/dist/esm/global-account/react/components/SignInWithB3/BetterAuthResetPassword.d.ts +21 -0
  156. package/dist/esm/global-account/react/components/SignInWithB3/BetterAuthResetPassword.js +64 -0
  157. package/dist/esm/global-account/react/components/SignInWithB3/BetterAuthSignIn.d.ts +34 -0
  158. package/dist/esm/global-account/react/components/SignInWithB3/BetterAuthSignIn.js +160 -0
  159. package/dist/esm/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +13 -4
  160. package/dist/esm/global-account/react/components/SignInWithB3/components/AuthButton.js +11 -2
  161. package/dist/esm/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.d.ts +6 -0
  162. package/dist/esm/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.js +135 -0
  163. package/dist/esm/global-account/react/components/SignInWithB3/steps/LoginStepCustom.js +100 -19
  164. package/dist/esm/global-account/react/components/SignInWithB3/utils/signInUtils.d.ts +5 -3
  165. package/dist/esm/global-account/react/components/SignInWithB3/utils/signInUtils.js +19 -2
  166. package/dist/esm/global-account/react/components/SingleUserSearchSelector/SingleUserSearchSelector.js +2 -1
  167. package/dist/esm/global-account/react/components/Toast/ToastContext.d.ts +3 -0
  168. package/dist/esm/global-account/react/components/Toast/ToastContext.js +30 -7
  169. package/dist/esm/global-account/react/components/custom/Button.d.ts +1 -1
  170. package/dist/esm/global-account/react/components/index.d.ts +3 -0
  171. package/dist/esm/global-account/react/components/index.js +2 -0
  172. package/dist/esm/global-account/react/components/ui/button.d.ts +1 -1
  173. package/dist/esm/global-account/react/hooks/index.d.ts +1 -0
  174. package/dist/esm/global-account/react/hooks/index.js +1 -0
  175. package/dist/esm/global-account/react/hooks/useAuth.js +28 -17
  176. package/dist/esm/global-account/react/hooks/useAuthentication.js +24 -13
  177. package/dist/esm/global-account/react/hooks/useBetterAuth.d.ts +973 -0
  178. package/dist/esm/global-account/react/hooks/useBetterAuth.js +149 -0
  179. package/dist/esm/global-account/react/hooks/useConnect.d.ts +2 -2
  180. package/dist/esm/global-account/react/hooks/useFirstEOA.d.ts +8 -8
  181. package/dist/esm/global-account/react/stores/useModalStore.d.ts +10 -1
  182. package/dist/esm/global-account/react/utils/createWagmiConfig.d.ts +4 -31
  183. package/dist/esm/global-account/react/utils/createWagmiConfig.js +5 -23
  184. package/dist/esm/global-account/react/utils/index.d.ts +0 -1
  185. package/dist/esm/global-account/react/utils/index.js +0 -1
  186. package/dist/esm/global-account/react/utils/profileDisplay.js +17 -18
  187. package/dist/esm/shared/constants/chains/b3Chain.d.ts +7 -7
  188. package/dist/esm/shared/constants/chains/b3Chain.js +4 -4
  189. package/dist/esm/shared/constants/chains/b3Viem.d.ts +6 -0
  190. package/dist/esm/shared/constants/chains/b3Viem.js +16 -0
  191. package/dist/esm/shared/constants/chains/supported.d.ts +1 -1
  192. package/dist/esm/shared/generated/chain-networks.json +2 -2
  193. package/dist/esm/shared/utils/chains.d.ts +1 -1
  194. package/dist/esm/shared/utils/chains.js +2 -2
  195. package/dist/esm/shared/utils/session-duration.d.ts +15 -0
  196. package/dist/esm/shared/utils/session-duration.js +64 -0
  197. package/dist/esm/wallet/react/components/ConnectWallet.d.ts +11 -0
  198. package/dist/esm/wallet/react/components/ConnectWallet.js +431 -0
  199. package/dist/esm/wallet/react/components/WalletProvider.d.ts +35 -0
  200. package/dist/esm/wallet/react/components/WalletProvider.js +17 -0
  201. package/dist/esm/wallet/react/hooks/useWalletDisconnect.d.ts +13 -0
  202. package/dist/esm/wallet/react/hooks/useWalletDisconnect.js +19 -0
  203. package/dist/esm/wallet/react/hooks/useWalletState.d.ts +31 -0
  204. package/dist/esm/wallet/react/hooks/useWalletState.js +60 -0
  205. package/dist/esm/wallet/react/index.d.ts +5 -0
  206. package/dist/esm/wallet/react/index.js +8 -0
  207. package/dist/esm/wallet/utils/createWalletConfig.d.ts +21 -0
  208. package/dist/esm/wallet/utils/createWalletConfig.js +21 -0
  209. package/dist/styles/index.css +1 -1
  210. package/dist/types/anyspend/constants/rpc.d.ts +1 -1
  211. package/dist/types/anyspend/react/components/checkout/AnySpendCheckout.d.ts +3 -1
  212. package/dist/types/anyspend/react/components/checkout/CheckoutSuccess.d.ts +2 -1
  213. package/dist/types/anyspend/react/components/common/CryptoPaymentMethod.d.ts +8 -0
  214. package/dist/types/anyspend/react/components/common/StepProgress.d.ts +2 -0
  215. package/dist/types/anyspend/react/hooks/useKycStatus.d.ts +3 -1
  216. package/dist/types/global-account/better-auth-client.d.ts +1883 -0
  217. package/dist/types/global-account/bsmnt.d.ts +0 -1
  218. package/dist/types/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +4 -1
  219. package/dist/types/global-account/react/components/B3Provider/B3Provider.d.ts +8 -1
  220. package/dist/types/global-account/react/components/B3Provider/BetterAuthProvider.d.ts +16 -0
  221. package/dist/types/global-account/react/components/B3Provider/LocalSDKProvider.d.ts +3 -1
  222. package/dist/types/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +3 -1
  223. package/dist/types/global-account/react/components/ManageAccount/SessionDurationContent.d.ts +5 -0
  224. package/dist/types/global-account/react/components/SignInWithB3/BetterAuthResetPassword.d.ts +21 -0
  225. package/dist/types/global-account/react/components/SignInWithB3/BetterAuthSignIn.d.ts +34 -0
  226. package/dist/types/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.d.ts +6 -0
  227. package/dist/types/global-account/react/components/SignInWithB3/utils/signInUtils.d.ts +5 -3
  228. package/dist/types/global-account/react/components/Toast/ToastContext.d.ts +3 -0
  229. package/dist/types/global-account/react/components/custom/Button.d.ts +1 -1
  230. package/dist/types/global-account/react/components/index.d.ts +3 -0
  231. package/dist/types/global-account/react/components/ui/button.d.ts +1 -1
  232. package/dist/types/global-account/react/hooks/index.d.ts +1 -0
  233. package/dist/types/global-account/react/hooks/useBetterAuth.d.ts +973 -0
  234. package/dist/types/global-account/react/hooks/useConnect.d.ts +2 -2
  235. package/dist/types/global-account/react/hooks/useFirstEOA.d.ts +8 -8
  236. package/dist/types/global-account/react/stores/useModalStore.d.ts +10 -1
  237. package/dist/types/global-account/react/utils/createWagmiConfig.d.ts +4 -31
  238. package/dist/types/global-account/react/utils/index.d.ts +0 -1
  239. package/dist/types/shared/constants/chains/b3Chain.d.ts +7 -7
  240. package/dist/types/shared/constants/chains/b3Viem.d.ts +6 -0
  241. package/dist/types/shared/constants/chains/supported.d.ts +1 -1
  242. package/dist/types/shared/utils/chains.d.ts +1 -1
  243. package/dist/types/shared/utils/session-duration.d.ts +15 -0
  244. package/dist/types/wallet/react/components/ConnectWallet.d.ts +11 -0
  245. package/dist/types/wallet/react/components/WalletProvider.d.ts +35 -0
  246. package/dist/types/wallet/react/hooks/useWalletDisconnect.d.ts +13 -0
  247. package/dist/types/wallet/react/hooks/useWalletState.d.ts +31 -0
  248. package/dist/types/wallet/react/index.d.ts +5 -0
  249. package/dist/types/wallet/utils/createWalletConfig.d.ts +21 -0
  250. package/package.json +15 -6
  251. package/src/anyspend/constants/rpc.ts +2 -1
  252. package/src/anyspend/react/components/AnySpendNFT.tsx +2 -2
  253. package/src/anyspend/react/components/AnySpendStakeB3.tsx +2 -2
  254. package/src/anyspend/react/components/AnySpendStakeB3ExactIn.tsx +2 -2
  255. package/src/anyspend/react/components/checkout/AnySpendCheckout.tsx +15 -1
  256. package/src/anyspend/react/components/checkout/CheckoutPaymentPanel.tsx +2 -4
  257. package/src/anyspend/react/components/checkout/CheckoutSuccess.tsx +13 -3
  258. package/src/anyspend/react/components/checkout/CryptoPayPanel.tsx +45 -27
  259. package/src/anyspend/react/components/checkout/FiatCheckoutPanel.tsx +9 -3
  260. package/src/anyspend/react/components/checkout/KycGate.tsx +8 -3
  261. package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +10 -8
  262. package/src/anyspend/react/components/common/InsufficientDepositPayment.tsx +2 -2
  263. package/src/anyspend/react/components/common/OrderDetails.tsx +10 -2
  264. package/src/anyspend/react/components/common/OrderDetailsCollapsible.tsx +4 -4
  265. package/src/anyspend/react/components/common/OrderStatus.tsx +38 -3
  266. package/src/anyspend/react/components/common/StepProgress.tsx +15 -5
  267. package/src/anyspend/react/components/common/TransferCryptoDetails.tsx +2 -2
  268. package/src/anyspend/react/hooks/useAnyspendCreateOnrampOrder.ts +5 -7
  269. package/src/anyspend/react/hooks/useKycStatus.ts +8 -5
  270. package/src/anyspend/utils/chain.ts +9 -9
  271. package/src/app.shared.ts +9 -8
  272. package/src/global-account/better-auth-client.ts +17 -0
  273. package/src/global-account/bsmnt.ts +0 -6
  274. package/src/global-account/react/components/B3DynamicModal.tsx +5 -2
  275. package/src/global-account/react/components/B3Provider/B3ConfigProvider.tsx +6 -0
  276. package/src/global-account/react/components/B3Provider/B3Provider.native.tsx +16 -21
  277. package/src/global-account/react/components/B3Provider/B3Provider.tsx +52 -40
  278. package/src/global-account/react/components/B3Provider/BetterAuthProvider.tsx +127 -0
  279. package/src/global-account/react/components/B3Provider/LocalSDKProvider.tsx +5 -0
  280. package/src/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.tsx +17 -10
  281. package/src/global-account/react/components/LinkAccount/LinkedAccountItem.tsx +2 -1
  282. package/src/global-account/react/components/ManageAccount/ProfileSection.tsx +29 -11
  283. package/src/global-account/react/components/ManageAccount/SessionDurationContent.tsx +107 -0
  284. package/src/global-account/react/components/ManageAccount/SettingsContent.tsx +28 -30
  285. package/src/global-account/react/components/ManageAccount/SettingsProfileCard.tsx +2 -2
  286. package/src/global-account/react/components/Send/Send.tsx +8 -5
  287. package/src/global-account/react/components/SignInWithB3/BetterAuthResetPassword.tsx +146 -0
  288. package/src/global-account/react/components/SignInWithB3/BetterAuthSignIn.tsx +426 -0
  289. package/src/global-account/react/components/SignInWithB3/SignInWithB3Flow.tsx +13 -4
  290. package/src/global-account/react/components/SignInWithB3/components/AuthButton.tsx +21 -2
  291. package/src/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.tsx +308 -0
  292. package/src/global-account/react/components/SignInWithB3/steps/LoginStepCustom.tsx +207 -54
  293. package/src/global-account/react/components/SignInWithB3/utils/signInUtils.ts +24 -4
  294. package/src/global-account/react/components/SingleUserSearchSelector/SingleUserSearchSelector.tsx +2 -1
  295. package/src/global-account/react/components/Toast/ToastContext.tsx +39 -7
  296. package/src/global-account/react/components/index.ts +3 -0
  297. package/src/global-account/react/hooks/index.ts +1 -0
  298. package/src/global-account/react/hooks/useAuth.ts +28 -17
  299. package/src/global-account/react/hooks/useAuthentication.ts +24 -13
  300. package/src/global-account/react/hooks/useBetterAuth.ts +191 -0
  301. package/src/global-account/react/hooks/useConnect.tsx +2 -2
  302. package/src/global-account/react/stores/useModalStore.ts +11 -0
  303. package/src/global-account/react/utils/createWagmiConfig.tsx +6 -25
  304. package/src/global-account/react/utils/index.ts +0 -1
  305. package/src/global-account/react/utils/profileDisplay.ts +21 -19
  306. package/src/shared/constants/chains/b3Chain.ts +5 -5
  307. package/src/shared/constants/chains/b3Viem.ts +18 -0
  308. package/src/shared/generated/chain-networks.json +2 -2
  309. package/src/shared/utils/chains.ts +3 -2
  310. package/src/shared/utils/session-duration.ts +64 -0
  311. package/src/types/torph.d.ts +4 -0
  312. package/src/wallet/__tests__/createWalletConfig.test.ts +39 -0
  313. package/src/wallet/react/components/ConnectWallet.tsx +665 -0
  314. package/src/wallet/react/components/WalletProvider.tsx +64 -0
  315. package/src/wallet/react/hooks/useWalletDisconnect.ts +22 -0
  316. package/src/wallet/react/hooks/useWalletState.ts +93 -0
  317. package/src/wallet/react/index.ts +10 -0
  318. package/src/wallet/utils/createWalletConfig.ts +39 -0
  319. package/dist/cjs/global-account/react/components/AvatarCreator/AvatarCreator.d.ts +0 -6
  320. package/dist/cjs/global-account/react/components/AvatarCreator/AvatarCreator.js +0 -54
  321. package/dist/cjs/global-account/react/components/ProfileAvatar.d.ts +0 -0
  322. package/dist/cjs/global-account/react/components/ProfileAvatar.js +0 -127
  323. package/dist/cjs/global-account/react/hooks/useRPMToken.d.ts +0 -7
  324. package/dist/cjs/global-account/react/hooks/useRPMToken.js +0 -11
  325. package/dist/cjs/global-account/react/utils/updateAvatar.d.ts +0 -4
  326. package/dist/cjs/global-account/react/utils/updateAvatar.js +0 -54
  327. package/dist/esm/global-account/react/components/AvatarCreator/AvatarCreator.d.ts +0 -6
  328. package/dist/esm/global-account/react/components/AvatarCreator/AvatarCreator.js +0 -51
  329. package/dist/esm/global-account/react/components/ProfileAvatar.d.ts +0 -0
  330. package/dist/esm/global-account/react/components/ProfileAvatar.js +0 -127
  331. package/dist/esm/global-account/react/hooks/useRPMToken.d.ts +0 -7
  332. package/dist/esm/global-account/react/hooks/useRPMToken.js +0 -8
  333. package/dist/esm/global-account/react/utils/updateAvatar.d.ts +0 -4
  334. package/dist/esm/global-account/react/utils/updateAvatar.js +0 -18
  335. package/dist/types/global-account/react/components/AvatarCreator/AvatarCreator.d.ts +0 -6
  336. package/dist/types/global-account/react/components/ProfileAvatar.d.ts +0 -0
  337. package/dist/types/global-account/react/hooks/useRPMToken.d.ts +0 -7
  338. package/dist/types/global-account/react/utils/updateAvatar.d.ts +0 -4
  339. package/src/global-account/react/components/AvatarCreator/AvatarCreator.tsx +0 -90
  340. package/src/global-account/react/components/ProfileAvatar.tsx +0 -138
  341. package/src/global-account/react/hooks/useRPMToken.ts +0 -17
  342. package/src/global-account/react/utils/updateAvatar.ts +0 -21
@@ -0,0 +1,107 @@
1
+ import app from "@b3dotfun/sdk/global-account/app";
2
+ import { useAuthentication, useModalStore } from "@b3dotfun/sdk/global-account/react";
3
+ import {
4
+ getSessionDurationDays,
5
+ SESSION_DURATION_LABELS,
6
+ SESSION_DURATION_OPTIONS,
7
+ SessionDurationDays,
8
+ setSessionDurationDays,
9
+ } from "@b3dotfun/sdk/shared/utils/session-duration";
10
+ import { useState } from "react";
11
+ import ModalHeader from "../ModalHeader/ModalHeader";
12
+
13
+ interface SessionDurationContentProps {
14
+ partnerId: string;
15
+ }
16
+
17
+ const DESCRIPTIONS: Record<SessionDurationDays, string> = {
18
+ 0: "Sign out when browser closes",
19
+ 1: "Stay signed in for 1 day",
20
+ 7: "Stay signed in for 7 days",
21
+ 14: "Stay signed in for 2 weeks",
22
+ 30: "Stay signed in for 30 days",
23
+ };
24
+
25
+ const SessionDurationContent = ({ partnerId }: SessionDurationContentProps) => {
26
+ const { user, setUser } = useAuthentication(partnerId);
27
+ const navigateBack = useModalStore(state => state.navigateBack);
28
+ const [sessionDays, setSessionDays] = useState<SessionDurationDays>(() =>
29
+ getSessionDurationDays(user?.preferences, partnerId),
30
+ );
31
+ const [saving, setSaving] = useState(false);
32
+
33
+ const handleSelect = async (days: SessionDurationDays) => {
34
+ const previous = sessionDays;
35
+ setSessionDurationDays(days, partnerId);
36
+ setSessionDays(days);
37
+ if (user?.userId) {
38
+ setSaving(true);
39
+ try {
40
+ const updated = await app.service("users").patch(user.userId, {
41
+ preferences: {
42
+ ...user.preferences,
43
+ [partnerId]: {
44
+ ...((((user.preferences as Record<string, unknown>) ?? {})[partnerId] as Record<string, unknown>) ?? {}),
45
+ sessionDuration: days,
46
+ },
47
+ },
48
+ });
49
+ setUser(updated);
50
+ } catch (error) {
51
+ console.error("Failed to save session duration preference:", error);
52
+ // Revert optimistic update so UI stays consistent with server state
53
+ setSessionDays(previous);
54
+ setSessionDurationDays(previous, partnerId);
55
+ } finally {
56
+ setSaving(false);
57
+ }
58
+ }
59
+ };
60
+
61
+ return (
62
+ <div className="flex h-[470px] flex-col">
63
+ <ModalHeader showBackButton={true} showCloseButton={false} title="Stay signed in" handleBack={navigateBack} />
64
+
65
+ <div className="flex flex-col gap-2 p-5">
66
+ {SESSION_DURATION_OPTIONS.map(days => (
67
+ <button
68
+ type="button"
69
+ key={days}
70
+ onClick={() => handleSelect(days)}
71
+ disabled={saving}
72
+ className={`flex items-center justify-between rounded-xl border px-4 py-3 transition-colors ${
73
+ sessionDays === days
74
+ ? "border-[#3f3f46] bg-[#f4f4f5] dark:border-white dark:bg-white/10"
75
+ : "border-[#e4e4e7] bg-transparent hover:bg-[#f4f4f5] dark:border-white/10 dark:hover:bg-white/5"
76
+ }`}
77
+ >
78
+ <div className="flex flex-col items-start gap-0.5">
79
+ <span className="font-neue-montreal-semibold text-[14px] leading-none tracking-[-0.28px] text-[#3f3f46] dark:text-white">
80
+ {SESSION_DURATION_LABELS[days]}
81
+ </span>
82
+ <span className="font-neue-montreal-medium text-[13px] leading-none tracking-[-0.26px] text-[#70707b] dark:text-white/50">
83
+ {DESCRIPTIONS[days]}
84
+ </span>
85
+ </div>
86
+ {sessionDays === days && (
87
+ <div className="flex size-5 items-center justify-center rounded-full bg-[#3f3f46] dark:bg-white">
88
+ <svg width="10" height="8" viewBox="0 0 10 8" fill="none">
89
+ <path
90
+ d="M1 4L3.5 6.5L9 1"
91
+ stroke="white"
92
+ strokeWidth="1.5"
93
+ strokeLinecap="round"
94
+ strokeLinejoin="round"
95
+ className="dark:stroke-[#3f3f46]"
96
+ />
97
+ </svg>
98
+ </div>
99
+ )}
100
+ </button>
101
+ ))}
102
+ </div>
103
+ </div>
104
+ );
105
+ };
106
+
107
+ export default SessionDurationContent;
@@ -1,5 +1,6 @@
1
1
  import { useAuthentication, useModalStore } from "@b3dotfun/sdk/global-account/react";
2
2
  import { client } from "@b3dotfun/sdk/shared/utils/thirdweb";
3
+ import { getSessionDurationDays, SESSION_DURATION_LABELS } from "@b3dotfun/sdk/shared/utils/session-duration";
3
4
  import { Loader2 } from "lucide-react";
4
5
  import { useState } from "react";
5
6
  import { Chain } from "thirdweb";
@@ -20,46 +21,29 @@ const SettingsContent = ({
20
21
  }) => {
21
22
  const setB3ModalContentType = useModalStore(state => state.setB3ModalContentType);
22
23
  const setB3ModalOpen = useModalStore(state => state.setB3ModalOpen);
23
- const { logout } = useAuthentication(partnerId);
24
+ const { logout, user } = useAuthentication(partnerId);
24
25
  const [logoutLoading, setLogoutLoading] = useState(false);
25
26
 
26
- const { data: profilesRaw = [] } = useProfiles({ client });
27
+ const sessionDays = getSessionDurationDays(user?.preferences, partnerId);
27
28
 
29
+ const { data: profilesRaw = [] } = useProfiles({ client });
28
30
  const profiles = profilesRaw.filter((profile: any) => !["custom_auth_endpoint"].includes(profile.type));
29
31
 
30
- const handleNavigate = (type: "home" | "swap" | "linkAccount" | "avatarEditor" | "notifications") => {
32
+ const handleNavigate = (
33
+ type: "home" | "swap" | "linkAccount" | "avatarEditor" | "notifications" | "sessionDuration",
34
+ ) => {
31
35
  if (type === "home") {
32
- setB3ModalContentType({
33
- type: "manageAccount",
34
- chain,
35
- partnerId,
36
- onLogout,
37
- activeTab: "home",
38
- });
36
+ setB3ModalContentType({ type: "manageAccount", chain, partnerId, onLogout, activeTab: "home" });
39
37
  } else if (type === "swap") {
40
- setB3ModalContentType({
41
- type: "manageAccount",
42
- chain,
43
- partnerId,
44
- onLogout,
45
- activeTab: "tokens",
46
- });
38
+ setB3ModalContentType({ type: "manageAccount", chain, partnerId, onLogout, activeTab: "tokens" });
47
39
  } else if (type === "linkAccount") {
48
- setB3ModalContentType({
49
- type: "linkAccount",
50
- chain,
51
- partnerId,
52
- });
40
+ setB3ModalContentType({ type: "linkAccount", chain, partnerId });
53
41
  } else if (type === "notifications") {
54
- setB3ModalContentType({
55
- type: "notifications",
56
- chain,
57
- partnerId,
58
- });
42
+ setB3ModalContentType({ type: "notifications", chain, partnerId });
43
+ } else if (type === "sessionDuration") {
44
+ setB3ModalContentType({ type: "sessionDuration", chain, partnerId });
59
45
  } else {
60
- setB3ModalContentType({
61
- type: "avatarEditor",
62
- });
46
+ setB3ModalContentType({ type: "avatarEditor" });
63
47
  }
64
48
  setB3ModalOpen(true);
65
49
  };
@@ -111,11 +95,25 @@ const SettingsContent = ({
111
95
  subtitle="Manage your notifications"
112
96
  onClick={() => handleNavigate("notifications")}
113
97
  />
98
+ <SettingsMenuItem
99
+ icon={
100
+ <svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
101
+ <path
102
+ d="M0 12C0 5.37258 5.37258 0 12 0H28C34.6274 0 40 5.37258 40 12V28C40 34.6274 34.6274 40 28 40H12C5.37258 40 0 34.6274 0 28V12Z"
103
+ fill="#F4F4F5"
104
+ />
105
+ </svg>
106
+ }
107
+ title="Stay signed in"
108
+ subtitle={SESSION_DURATION_LABELS[sessionDays] ?? `${sessionDays} days`}
109
+ onClick={() => handleNavigate("sessionDuration")}
110
+ />
114
111
  </div>
115
112
 
116
113
  {/* Logout Section */}
117
114
  <div className="mt-auto px-5 pb-5">
118
115
  <button
116
+ type="button"
119
117
  className="b3-modal-sign-out-button border-b3-line hover:bg-b3-line bg-b3-background dark:bg-b3-background dark:border-b3-line dark:hover:bg-b3-line/80 flex w-full items-center justify-center gap-1.5 rounded-xl border border-solid p-3 transition-colors"
120
118
  onClick={onLogoutEnhanced}
121
119
  disabled={logoutLoading}
@@ -1,6 +1,7 @@
1
1
  import { ens_normalize } from "@adraffy/ens-normalize";
2
2
  import app from "@b3dotfun/sdk/global-account/app";
3
3
  import { toast, useAuthentication, useB3Config, useModalStore, useProfile } from "@b3dotfun/sdk/global-account/react";
4
+ import { validateImageUrl } from "@b3dotfun/sdk/global-account/react/utils/profileDisplay";
4
5
  import { formatUsername } from "@b3dotfun/sdk/shared/utils";
5
6
  import { Check, Loader2, Pencil, X } from "lucide-react";
6
7
  import { useEffect, useRef, useState } from "react";
@@ -29,8 +30,7 @@ const SettingsProfileCard = () => {
29
30
  const [isSaving, setIsSaving] = useState(false);
30
31
  const inputRef = useRef<HTMLInputElement>(null);
31
32
 
32
- // IPFSMediaRenderer will handle IPFS URL conversion and validation
33
- const avatarSrc = user?.avatar || profile?.avatar;
33
+ const avatarSrc = validateImageUrl(user?.avatar) || validateImageUrl(profile?.avatar);
34
34
 
35
35
  // Get current username - prioritize user.username, fallback to profile data
36
36
  const currentUsername = user?.username || profile?.displayName || formatUsername(profile?.name || "");
@@ -9,6 +9,7 @@ import {
9
9
  useSimBalance,
10
10
  useUnifiedChainSwitchAndExecute,
11
11
  } from "@b3dotfun/sdk/global-account/react";
12
+ import { validateImageUrl } from "@b3dotfun/sdk/global-account/react/utils/profileDisplay";
12
13
  import { formatDisplayNumber, formatTokenAmount } from "@b3dotfun/sdk/shared/utils/number";
13
14
  import invariant from "invariant";
14
15
  import { CircleHelp, Clock, Loader2, Send as SendIcon, Wallet } from "lucide-react";
@@ -32,6 +33,7 @@ type SendStep = "recipient" | "token" | "amount" | "confirm" | "success";
32
33
  // Component for displaying a recent address with profile data
33
34
  function RecentAddressItem({ address, onClick }: { address: string; onClick: () => void }) {
34
35
  const { data: profileData } = useProfile({ address });
36
+ const validatedAvatar = validateImageUrl(profileData?.avatar);
35
37
 
36
38
  return (
37
39
  <button
@@ -39,8 +41,8 @@ function RecentAddressItem({ address, onClick }: { address: string; onClick: ()
39
41
  className="flex items-center gap-2 rounded-xl px-3 py-2 transition-colors hover:bg-[#fafafa]"
40
42
  >
41
43
  {/* Avatar */}
42
- {profileData?.avatar ? (
43
- <img src={profileData.avatar} alt={profileData.name || address} className="h-10 w-10 rounded-full" />
44
+ {validatedAvatar ? (
45
+ <img src={validatedAvatar} alt={profileData?.name || address} className="h-10 w-10 rounded-full" />
44
46
  ) : (
45
47
  <div className="flex h-10 w-10 items-center justify-center rounded-full border border-[#e4e4e7] bg-[#f4f4f5]">
46
48
  <Wallet className="h-5 w-5 text-[#a0a0ab]" />
@@ -84,6 +86,7 @@ export function Send({ recipientAddress: initialRecipient, onSuccess }: SendModa
84
86
  const { data: validatedProfileData } = useProfile({
85
87
  address: showValidatedResult && recipientAddress && isAddress(recipientAddress) ? recipientAddress : undefined,
86
88
  });
89
+ const validatedRecipientAvatar = validateImageUrl(validatedProfileData?.avatar);
87
90
 
88
91
  // Address validation
89
92
  const handleRecipientAddressChange = (value: string) => {
@@ -290,10 +293,10 @@ export function Send({ recipientAddress: initialRecipient, onSuccess }: SendModa
290
293
  className="dark:bg-b3-background dark:border-b3-line flex items-center gap-2 rounded-xl bg-[#f4f4f5] px-3 py-2 transition-colors hover:bg-[#e4e4e7]"
291
294
  >
292
295
  {/* Avatar */}
293
- {validatedProfileData?.avatar ? (
296
+ {validatedRecipientAvatar ? (
294
297
  <img
295
- src={validatedProfileData.avatar}
296
- alt={validatedProfileData.name || recipientAddress}
298
+ src={validatedRecipientAvatar}
299
+ alt={validatedProfileData?.name || recipientAddress}
297
300
  className="h-10 w-10 rounded-full"
298
301
  />
299
302
  ) : (
@@ -0,0 +1,146 @@
1
+ import { Button, Input } from "@b3dotfun/sdk/global-account/react";
2
+ import { debugB3React } from "@b3dotfun/sdk/shared/utils/debug";
3
+ import { useState } from "react";
4
+ import { useBetterAuth } from "../../hooks/useBetterAuth";
5
+
6
+ const debug = debugB3React("BetterAuthResetPassword");
7
+
8
+ export interface BetterAuthResetPasswordProps {
9
+ /** The reset token from the URL query param */
10
+ token: string;
11
+ /** Called after password is successfully reset */
12
+ onSuccess?: () => void;
13
+ /** Called on error */
14
+ onError?: (error: Error) => void;
15
+ /** Optional class name */
16
+ className?: string;
17
+ }
18
+
19
+ /**
20
+ * Standalone reset password form. Render this on your reset password page.
21
+ * Reads the token from props (extract it from the URL query string).
22
+ *
23
+ * Usage:
24
+ * ```tsx
25
+ * const token = new URLSearchParams(window.location.search).get("token");
26
+ * <BetterAuthResetPassword token={token} onSuccess={() => navigate("/login")} />
27
+ * ```
28
+ */
29
+ export function BetterAuthResetPassword({ token, onSuccess, onError, className }: BetterAuthResetPasswordProps) {
30
+ const { resetPassword } = useBetterAuth();
31
+
32
+ const [password, setPassword] = useState("");
33
+ const [confirmPassword, setConfirmPassword] = useState("");
34
+ const [isLoading, setIsLoading] = useState(false);
35
+ const [error, setError] = useState<string | null>(null);
36
+ const [success, setSuccess] = useState(false);
37
+
38
+ const handleSubmit = async () => {
39
+ if (!password) {
40
+ setError("Please enter a new password");
41
+ return;
42
+ }
43
+
44
+ if (password.length < 8) {
45
+ setError("Password must be at least 8 characters");
46
+ return;
47
+ }
48
+
49
+ if (password !== confirmPassword) {
50
+ setError("Passwords do not match");
51
+ return;
52
+ }
53
+
54
+ try {
55
+ setIsLoading(true);
56
+ setError(null);
57
+ await resetPassword(password, token);
58
+ setSuccess(true);
59
+ debug("Password reset successful");
60
+ onSuccess?.();
61
+ } catch (err) {
62
+ const message = err instanceof Error ? err.message : "Password reset failed";
63
+ setError(message);
64
+ debug("Password reset failed", err);
65
+ onError?.(err as Error);
66
+ } finally {
67
+ setPassword("");
68
+ setConfirmPassword("");
69
+ setIsLoading(false);
70
+ }
71
+ };
72
+
73
+ if (!token) {
74
+ return (
75
+ <div className={`w-full max-w-[400px] px-6 text-center ${className || ""}`}>
76
+ <p className="text-sm text-red-500">Invalid or missing reset token.</p>
77
+ </div>
78
+ );
79
+ }
80
+
81
+ return (
82
+ <div className={`w-full max-w-[400px] px-6 ${className || ""}`}>
83
+ <div className="mb-10 text-center">
84
+ <h1 className="text-[28px] font-semibold tracking-tight text-gray-900 dark:text-gray-100">
85
+ {success ? "Password reset" : "Set new password"}
86
+ </h1>
87
+ <p className="mt-3 text-[15px] text-gray-500 dark:text-gray-400">
88
+ {success ? "Your password has been updated." : "Enter your new password below."}
89
+ </p>
90
+ </div>
91
+
92
+ {success ? (
93
+ <div className="space-y-4 text-center">
94
+ <div className="mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-green-100">
95
+ <svg className="h-6 w-6 text-green-600" fill="none" viewBox="0 0 24 24" stroke="currentColor">
96
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" />
97
+ </svg>
98
+ </div>
99
+ </div>
100
+ ) : (
101
+ <div className="space-y-5">
102
+ <div>
103
+ <label className="mb-2 block text-xs font-medium uppercase tracking-wide text-gray-700 dark:text-gray-300">
104
+ New password
105
+ </label>
106
+ <Input
107
+ type="password"
108
+ placeholder="At least 8 characters"
109
+ value={password}
110
+ onChange={e => setPassword(e.target.value)}
111
+ disabled={isLoading}
112
+ className="h-11 px-4 text-[15px]"
113
+ />
114
+ </div>
115
+
116
+ <div>
117
+ <label className="mb-2 block text-xs font-medium uppercase tracking-wide text-gray-700 dark:text-gray-300">
118
+ Confirm password
119
+ </label>
120
+ <Input
121
+ type="password"
122
+ placeholder="Repeat your password"
123
+ value={confirmPassword}
124
+ onChange={e => setConfirmPassword(e.target.value)}
125
+ disabled={isLoading}
126
+ onKeyDown={e => {
127
+ if (e.key === "Enter") handleSubmit();
128
+ }}
129
+ className="h-11 px-4 text-[15px]"
130
+ />
131
+ </div>
132
+
133
+ {error && <p className="text-sm text-red-500">{error}</p>}
134
+
135
+ <Button
136
+ onClick={handleSubmit}
137
+ disabled={isLoading}
138
+ className="h-11 w-full bg-gray-900 text-[15px] font-medium text-white hover:bg-gray-800 dark:bg-white dark:text-gray-900 dark:hover:bg-gray-100"
139
+ >
140
+ {isLoading ? "Resetting..." : "Reset password"}
141
+ </Button>
142
+ </div>
143
+ )}
144
+ </div>
145
+ );
146
+ }