@b3dotfun/sdk 0.0.62 → 0.0.63-test.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/dist/cjs/anyspend/react/components/AnySpend.js +61 -23
  2. package/dist/cjs/anyspend/react/components/AnySpendCustom.js +3 -0
  3. package/dist/cjs/anyspend/react/components/AnySpendStakeB3.js +5 -4
  4. package/dist/cjs/anyspend/react/components/AnyspendDepositHype.js +4 -4
  5. package/dist/cjs/anyspend/react/components/common/CryptoPaySection.js +4 -6
  6. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +9 -17
  7. package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.d.ts +6 -1
  8. package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.js +11 -1
  9. package/dist/cjs/anyspend/react/components/common/OrderDetails.js +56 -145
  10. package/dist/cjs/anyspend/react/components/common/OrderTokenAmount.d.ts +2 -1
  11. package/dist/cjs/anyspend/react/components/common/OrderTokenAmount.js +39 -15
  12. package/dist/cjs/anyspend/react/components/common/PaySection.js +1 -1
  13. package/dist/cjs/anyspend/react/components/common/TokenBalance.js +1 -1
  14. package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.js +12 -11
  15. package/dist/cjs/anyspend/react/hooks/useAutoSelectCryptoPaymentMethod.d.ts +26 -0
  16. package/dist/cjs/anyspend/react/hooks/useAutoSelectCryptoPaymentMethod.js +56 -0
  17. package/dist/cjs/anyspend/react/hooks/useAutoSetActiveWalletFromWagmi.d.ts +10 -0
  18. package/dist/cjs/anyspend/react/hooks/useAutoSetActiveWalletFromWagmi.js +73 -0
  19. package/dist/cjs/anyspend/react/hooks/useConnectedWalletDisplay.d.ts +14 -0
  20. package/dist/cjs/anyspend/react/hooks/useConnectedWalletDisplay.js +57 -0
  21. package/dist/cjs/anyspend/react/hooks/usePhantomTransfer.d.ts +36 -0
  22. package/dist/cjs/anyspend/react/hooks/usePhantomTransfer.js +211 -0
  23. package/dist/cjs/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +3 -1
  24. package/dist/cjs/global-account/react/hooks/index.d.ts +2 -1
  25. package/dist/cjs/global-account/react/hooks/index.js +5 -3
  26. package/dist/cjs/global-account/react/hooks/useSimBalance.d.ts +1 -1
  27. package/dist/cjs/global-account/react/hooks/useSimBalance.js +6 -5
  28. package/dist/cjs/global-account/react/hooks/useTokenBalanceDirect.d.ts +12 -0
  29. package/dist/cjs/global-account/react/hooks/useTokenBalanceDirect.js +62 -0
  30. package/dist/cjs/global-account/react/hooks/useTokenFromUrl.js +4 -3
  31. package/dist/esm/anyspend/react/components/AnySpend.js +62 -24
  32. package/dist/esm/anyspend/react/components/AnySpendCustom.js +3 -0
  33. package/dist/esm/anyspend/react/components/AnySpendStakeB3.js +7 -6
  34. package/dist/esm/anyspend/react/components/AnyspendDepositHype.js +4 -4
  35. package/dist/esm/anyspend/react/components/common/CryptoPaySection.js +5 -7
  36. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +9 -17
  37. package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.d.ts +6 -1
  38. package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.js +11 -1
  39. package/dist/esm/anyspend/react/components/common/OrderDetails.js +57 -146
  40. package/dist/esm/anyspend/react/components/common/OrderTokenAmount.d.ts +2 -1
  41. package/dist/esm/anyspend/react/components/common/OrderTokenAmount.js +40 -16
  42. package/dist/esm/anyspend/react/components/common/PaySection.js +1 -1
  43. package/dist/esm/anyspend/react/components/common/TokenBalance.js +2 -2
  44. package/dist/esm/anyspend/react/hooks/useAnyspendFlow.js +12 -11
  45. package/dist/esm/anyspend/react/hooks/useAutoSelectCryptoPaymentMethod.d.ts +26 -0
  46. package/dist/esm/anyspend/react/hooks/useAutoSelectCryptoPaymentMethod.js +53 -0
  47. package/dist/esm/anyspend/react/hooks/useAutoSetActiveWalletFromWagmi.d.ts +10 -0
  48. package/dist/esm/anyspend/react/hooks/useAutoSetActiveWalletFromWagmi.js +70 -0
  49. package/dist/esm/anyspend/react/hooks/useConnectedWalletDisplay.d.ts +14 -0
  50. package/dist/esm/anyspend/react/hooks/useConnectedWalletDisplay.js +54 -0
  51. package/dist/esm/anyspend/react/hooks/usePhantomTransfer.d.ts +36 -0
  52. package/dist/esm/anyspend/react/hooks/usePhantomTransfer.js +208 -0
  53. package/dist/esm/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +3 -1
  54. package/dist/esm/global-account/react/hooks/index.d.ts +2 -1
  55. package/dist/esm/global-account/react/hooks/index.js +2 -1
  56. package/dist/esm/global-account/react/hooks/useSimBalance.d.ts +1 -1
  57. package/dist/esm/global-account/react/hooks/useSimBalance.js +6 -5
  58. package/dist/esm/global-account/react/hooks/useTokenBalanceDirect.d.ts +12 -0
  59. package/dist/esm/global-account/react/hooks/useTokenBalanceDirect.js +59 -0
  60. package/dist/esm/global-account/react/hooks/useTokenFromUrl.js +4 -3
  61. package/dist/types/anyspend/react/components/common/CryptoReceiveSection.d.ts +6 -1
  62. package/dist/types/anyspend/react/components/common/OrderTokenAmount.d.ts +2 -1
  63. package/dist/types/anyspend/react/hooks/useAutoSelectCryptoPaymentMethod.d.ts +26 -0
  64. package/dist/types/anyspend/react/hooks/useAutoSetActiveWalletFromWagmi.d.ts +10 -0
  65. package/dist/types/anyspend/react/hooks/useConnectedWalletDisplay.d.ts +14 -0
  66. package/dist/types/anyspend/react/hooks/usePhantomTransfer.d.ts +36 -0
  67. package/dist/types/global-account/react/hooks/index.d.ts +2 -1
  68. package/dist/types/global-account/react/hooks/useSimBalance.d.ts +1 -1
  69. package/dist/types/global-account/react/hooks/useTokenBalanceDirect.d.ts +12 -0
  70. package/package.json +3 -2
  71. package/src/anyspend/react/components/AnySpend.tsx +73 -22
  72. package/src/anyspend/react/components/AnySpendCustom.tsx +4 -0
  73. package/src/anyspend/react/components/AnySpendStakeB3.tsx +8 -11
  74. package/src/anyspend/react/components/AnyspendDepositHype.tsx +7 -3
  75. package/src/anyspend/react/components/common/CryptoPaySection.tsx +5 -7
  76. package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +9 -18
  77. package/src/anyspend/react/components/common/CryptoReceiveSection.tsx +22 -0
  78. package/src/anyspend/react/components/common/OrderDetails.tsx +66 -188
  79. package/src/anyspend/react/components/common/OrderTokenAmount.tsx +48 -17
  80. package/src/anyspend/react/components/common/PaySection.tsx +1 -0
  81. package/src/anyspend/react/components/common/TokenBalance.tsx +2 -2
  82. package/src/anyspend/react/hooks/useAnyspendFlow.ts +13 -10
  83. package/src/anyspend/react/hooks/useAutoSelectCryptoPaymentMethod.ts +72 -0
  84. package/src/anyspend/react/hooks/useAutoSetActiveWalletFromWagmi.ts +80 -0
  85. package/src/anyspend/react/hooks/useConnectedWalletDisplay.ts +69 -0
  86. package/src/anyspend/react/hooks/usePhantomTransfer.ts +301 -0
  87. package/src/global-account/react/components/SignInWithB3/SignInWithB3Flow.tsx +3 -1
  88. package/src/global-account/react/hooks/index.ts +2 -1
  89. package/src/global-account/react/hooks/useSimBalance.ts +6 -5
  90. package/src/global-account/react/hooks/useTokenBalanceDirect.tsx +84 -0
  91. package/src/global-account/react/hooks/useTokenFromUrl.tsx +6 -5
@@ -19,17 +19,19 @@ const react_4 = require("react");
19
19
  const sonner_1 = require("sonner");
20
20
  const viem_1 = require("viem");
21
21
  const chains_1 = require("viem/chains");
22
+ const useAutoSelectCryptoPaymentMethod_1 = require("../hooks/useAutoSelectCryptoPaymentMethod");
23
+ const useAutoSetActiveWalletFromWagmi_1 = require("../hooks/useAutoSetActiveWalletFromWagmi");
22
24
  const AnySpendFingerprintWrapper_1 = require("./AnySpendFingerprintWrapper");
23
25
  const CryptoPaymentMethod_1 = require("./common/CryptoPaymentMethod");
24
26
  const CryptoPaySection_1 = require("./common/CryptoPaySection");
25
27
  const CryptoReceiveSection_1 = require("./common/CryptoReceiveSection");
28
+ const FeeDetailPanel_1 = require("./common/FeeDetailPanel");
26
29
  const FiatPaymentMethod_1 = require("./common/FiatPaymentMethod");
27
30
  const OrderDetails_1 = require("./common/OrderDetails");
28
31
  const OrderHistory_1 = require("./common/OrderHistory");
29
32
  const PanelOnramp_1 = require("./common/PanelOnramp");
30
33
  const PanelOnrampPayment_1 = require("./common/PanelOnrampPayment");
31
34
  const PointsDetailPanel_1 = require("./common/PointsDetailPanel");
32
- const FeeDetailPanel_1 = require("./common/FeeDetailPanel");
33
35
  const RecipientSelection_1 = require("./common/RecipientSelection");
34
36
  const TabSection_1 = require("./common/TabSection");
35
37
  var PanelView;
@@ -311,13 +313,36 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
311
313
  // );
312
314
  // State for recipient selection
313
315
  const [recipientAddress, setRecipientAddress] = (0, react_4.useState)();
314
- const { address: globalAddress, wallet: globalWallet } = (0, react_2.useAccountWallet)();
316
+ const { address: globalAddress, wallet: globalWallet, connectedEOAWallet } = (0, react_2.useAccountWallet)();
315
317
  const recipientProfile = (0, react_2.useProfile)({ address: recipientAddress, fresh: true });
316
318
  const recipientName = recipientProfile.data?.name;
317
- // Set default recipient address when wallet changes
318
- (0, react_4.useEffect)(() => {
319
- setRecipientAddress(recipientAddressFromProps || globalAddress);
320
- }, [recipientAddressFromProps, globalAddress]);
319
+ // Auto-set active wallet from wagmi
320
+ (0, useAutoSetActiveWalletFromWagmi_1.useAutoSetActiveWalletFromWagmi)();
321
+ // Check token balance for crypto payments
322
+ const { rawBalance, isLoading: isBalanceLoading } = (0, react_2.useTokenBalanceDirect)({
323
+ token: selectedSrcToken,
324
+ address: connectedEOAWallet?.getAccount()?.address,
325
+ });
326
+ // Check if user has enough balanceuseAutoSetActiveWalletFromWagmi
327
+ const hasEnoughBalance = (0, react_4.useMemo)(() => {
328
+ if (!rawBalance || isBalanceLoading || activeTab !== "crypto")
329
+ return false;
330
+ try {
331
+ const requiredAmount = (0, viem_1.parseUnits)(srcAmount.replace(/,/g, ""), selectedSrcToken.decimals);
332
+ return rawBalance >= requiredAmount;
333
+ }
334
+ catch {
335
+ return false;
336
+ }
337
+ }, [rawBalance, srcAmount, selectedSrcToken.decimals, isBalanceLoading, activeTab]);
338
+ // Auto-select crypto payment method based on available wallets and balance
339
+ (0, useAutoSelectCryptoPaymentMethod_1.useAutoSelectCryptoPaymentMethod)({
340
+ paymentType: activeTab,
341
+ selectedCryptoPaymentMethod,
342
+ setSelectedCryptoPaymentMethod,
343
+ hasEnoughBalance,
344
+ isBalanceLoading,
345
+ });
321
346
  // Get geo-based onramp options for fiat payments
322
347
  const { geoData, coinbaseAvailablePaymentMethods, stripeWeb2Support } = (0, react_1.useGeoOnrampOptions)(srcAmountOnRamp);
323
348
  // Helper function to map payment method to onramp vendor
@@ -481,17 +506,30 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
481
506
  return { text: "Select a different token or chain", disable: true, error: false, loading: false };
482
507
  if (isLoadingAnyspendQuote)
483
508
  return { text: "Loading quote...", disable: true, error: false, loading: true };
484
- if (!recipientAddress)
485
- return { text: "Select recipient", disable: false, error: false, loading: false };
486
509
  if (isCreatingOrder || isCreatingOnrampOrder)
487
510
  return { text: "Creating order...", disable: true, error: false, loading: true };
488
511
  if (!anyspendQuote || !anyspendQuote.success)
489
512
  return { text: "No quote found", disable: true, error: false, loading: false };
513
+ if (activeTab === "fiat") {
514
+ // For fiat: check recipient first, then payment method
515
+ if (!recipientAddress)
516
+ return { text: "Select recipient", disable: false, error: false, loading: false };
517
+ // If no fiat payment method selected, show "Select payment method"
518
+ if (selectedFiatPaymentMethod === FiatPaymentMethod_1.FiatPaymentMethod.NONE) {
519
+ return { text: "Select payment method", disable: false, error: false, loading: false };
520
+ }
521
+ // If payment method is selected, show "Buy"
522
+ return { text: "Buy", disable: false, error: false, loading: false };
523
+ }
490
524
  if (activeTab === "crypto") {
525
+ // For crypto: check payment method first, then recipient
491
526
  // If no payment method selected, show "Choose payment method"
492
527
  if (selectedCryptoPaymentMethod === CryptoPaymentMethod_1.CryptoPaymentMethodType.NONE) {
493
528
  return { text: "Choose payment method", disable: false, error: false, loading: false };
494
529
  }
530
+ // Check recipient after payment method
531
+ if (!recipientAddress)
532
+ return { text: "Select recipient", disable: false, error: false, loading: false };
495
533
  // If payment method selected, show appropriate action
496
534
  if (selectedCryptoPaymentMethod === CryptoPaymentMethod_1.CryptoPaymentMethodType.CONNECT_WALLET ||
497
535
  selectedCryptoPaymentMethod === CryptoPaymentMethod_1.CryptoPaymentMethodType.GLOBAL_WALLET) {
@@ -501,14 +539,6 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
501
539
  return { text: "Continue to payment", disable: false, error: false, loading: false };
502
540
  }
503
541
  }
504
- if (activeTab === "fiat") {
505
- // If no fiat payment method selected, show "Select payment method"
506
- if (selectedFiatPaymentMethod === FiatPaymentMethod_1.FiatPaymentMethod.NONE) {
507
- return { text: "Select payment method", disable: false, error: false, loading: false };
508
- }
509
- // If payment method is selected, show "Buy"
510
- return { text: "Buy", disable: false, error: false, loading: false };
511
- }
512
542
  return { text: "Buy", disable: false, error: false, loading: false };
513
543
  }, [
514
544
  activeInputAmountInWei,
@@ -526,14 +556,15 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
526
556
  const onMainButtonClick = async () => {
527
557
  if (btnInfo.disable)
528
558
  return;
529
- if (!recipientAddress) {
530
- navigateToPanel(PanelView.RECIPIENT_SELECTION, "forward");
531
- return;
532
- }
533
559
  try {
534
560
  (0, invariant_1.default)(anyspendQuote, "Relay price is not found");
535
- (0, invariant_1.default)(recipientAddress, "Recipient address is not found");
536
561
  if (activeTab === "fiat") {
562
+ // For fiat: check recipient first
563
+ if (!recipientAddress) {
564
+ navigateToPanel(PanelView.RECIPIENT_SELECTION, "forward");
565
+ return;
566
+ }
567
+ (0, invariant_1.default)(recipientAddress, "Recipient address is not found");
537
568
  // If no fiat payment method selected, show payment method selection
538
569
  if (selectedFiatPaymentMethod === FiatPaymentMethod_1.FiatPaymentMethod.NONE) {
539
570
  navigateToPanel(PanelView.FIAT_PAYMENT_METHOD, "forward");
@@ -544,12 +575,19 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
544
575
  return;
545
576
  }
546
577
  if (activeTab === "crypto") {
578
+ // For crypto: check payment method first, then recipient
547
579
  // If no payment method selected, show payment method selection
548
580
  if (selectedCryptoPaymentMethod === CryptoPaymentMethod_1.CryptoPaymentMethodType.NONE) {
549
581
  console.log("No payment method selected, showing selection panel");
550
582
  navigateToPanel(PanelView.CRYPTO_PAYMENT_METHOD, "forward");
551
583
  return;
552
584
  }
585
+ // Check recipient after payment method
586
+ if (!recipientAddress) {
587
+ navigateToPanel(PanelView.RECIPIENT_SELECTION, "forward");
588
+ return;
589
+ }
590
+ (0, invariant_1.default)(recipientAddress, "Recipient address is not found");
553
591
  // If payment method is selected, create order with payment method info
554
592
  if (selectedCryptoPaymentMethod === CryptoPaymentMethod_1.CryptoPaymentMethodType.CONNECT_WALLET ||
555
593
  selectedCryptoPaymentMethod === CryptoPaymentMethod_1.CryptoPaymentMethodType.GLOBAL_WALLET ||
@@ -762,10 +800,10 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
762
800
  const tempDstAmount = dstAmount;
763
801
  setSrcAmount(tempDstAmount);
764
802
  setDstAmount(tempSrcAmount);
765
- }, children: (0, jsx_runtime_1.jsx)("div", { className: "relative flex items-center justify-center transition-opacity", children: (0, jsx_runtime_1.jsx)(lucide_react_1.ArrowDown, { className: "text-as-primary/50 h-5 w-5" }) }) }), activeTab === "crypto" && ((0, jsx_runtime_1.jsx)(CryptoReceiveSection_1.CryptoReceiveSection, { isDepositMode: false, isBuyMode: isBuyMode, selectedRecipientAddress: recipientAddress, recipientName: recipientName || undefined, onSelectRecipient: () => navigateToPanel(PanelView.RECIPIENT_SELECTION, "forward"), dstAmount: dstAmount, dstToken: selectedDstToken, selectedDstChainId: selectedDstChainId, setSelectedDstChainId: setSelectedDstChainId, setSelectedDstToken: setSelectedDstToken, isSrcInputDirty: isSrcInputDirty, onChangeDstAmount: value => {
803
+ }, children: (0, jsx_runtime_1.jsx)("div", { className: "relative flex items-center justify-center transition-opacity", children: (0, jsx_runtime_1.jsx)(lucide_react_1.ArrowDown, { className: "text-as-primary/50 h-5 w-5" }) }) }), activeTab === "crypto" && ((0, jsx_runtime_1.jsx)(CryptoReceiveSection_1.CryptoReceiveSection, { isDepositMode: false, isBuyMode: isBuyMode, selectedRecipientAddress: recipientAddress, recipientName: recipientName || undefined, onSelectRecipient: () => navigateToPanel(PanelView.RECIPIENT_SELECTION, "forward"), setRecipientAddress: setRecipientAddress, recipientAddressFromProps: recipientAddressFromProps, globalAddress: globalAddress, dstAmount: dstAmount, dstToken: selectedDstToken, selectedDstChainId: selectedDstChainId, setSelectedDstChainId: setSelectedDstChainId, setSelectedDstToken: setSelectedDstToken, isSrcInputDirty: isSrcInputDirty, onChangeDstAmount: value => {
766
804
  setIsSrcInputDirty(false);
767
805
  setDstAmount(value);
768
- }, anyspendQuote: anyspendQuote, onShowPointsDetail: () => navigateToPanel(PanelView.POINTS_DETAIL, "forward"), onShowFeeDetail: () => navigateToPanel(PanelView.FEE_DETAIL, "forward") }))] }), (0, jsx_runtime_1.jsxs)(react_3.motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0.2, ease: "easeInOut" }, className: (0, cn_1.cn)("mt-4 flex w-full max-w-[460px] flex-col gap-2"), children: [(0, jsx_runtime_1.jsx)(react_2.ShinyButton, { accentColor: "hsl(var(--as-brand))", disabled: btnInfo.disable, onClick: onMainButtonClick, className: (0, cn_1.cn)("as-main-button relative w-full", btnInfo.error ? "!bg-as-red" : btnInfo.disable ? "!bg-as-on-surface-2" : "!bg-as-brand"), textClassName: (0, cn_1.cn)(btnInfo.error ? "text-white" : btnInfo.disable ? "text-as-secondary" : "text-white"), children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-center gap-2", children: [btnInfo.loading && (0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "h-4 w-4 animate-spin" }), btnInfo.text] }) }), !hideTransactionHistoryButton && (globalAddress || recipientAddress) ? ((0, jsx_runtime_1.jsxs)(react_2.Button, { variant: "link", onClick: onClickHistory, className: "text-as-primary/50 hover:text-as-primary flex items-center gap-1 transition-colors", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.HistoryIcon, { className: "h-4 w-4" }), " ", (0, jsx_runtime_1.jsx)("span", { className: "pr-4", children: "Transaction History" })] })) : null] })] }));
806
+ }, anyspendQuote: anyspendQuote, onShowPointsDetail: () => navigateToPanel(PanelView.POINTS_DETAIL, "forward"), onShowFeeDetail: () => navigateToPanel(PanelView.FEE_DETAIL, "forward"), selectedCryptoPaymentMethod: selectedCryptoPaymentMethod }))] }), (0, jsx_runtime_1.jsxs)(react_3.motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0.2, ease: "easeInOut" }, className: (0, cn_1.cn)("mt-4 flex w-full max-w-[460px] flex-col gap-2"), children: [(0, jsx_runtime_1.jsx)(react_2.ShinyButton, { accentColor: "hsl(var(--as-brand))", disabled: btnInfo.disable, onClick: onMainButtonClick, className: (0, cn_1.cn)("as-main-button relative w-full", btnInfo.error ? "!bg-as-red" : btnInfo.disable ? "!bg-as-on-surface-2" : "!bg-as-brand"), textClassName: (0, cn_1.cn)(btnInfo.error ? "text-white" : btnInfo.disable ? "text-as-secondary" : "text-white"), children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-center gap-2", children: [btnInfo.loading && (0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "h-4 w-4 animate-spin" }), btnInfo.text] }) }), !hideTransactionHistoryButton && (globalAddress || recipientAddress) ? ((0, jsx_runtime_1.jsxs)(react_2.Button, { variant: "link", onClick: onClickHistory, className: "text-as-primary/50 hover:text-as-primary flex items-center gap-1 transition-colors", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.HistoryIcon, { className: "h-4 w-4" }), " ", (0, jsx_runtime_1.jsx)("span", { className: "pr-4", children: "Transaction History" })] })) : null] })] }));
769
807
  const onrampPaymentView = ((0, jsx_runtime_1.jsx)(PanelOnrampPayment_1.PanelOnrampPayment, { srcAmountOnRamp: srcAmountOnRamp, recipientName: recipientName || undefined, recipientAddress: recipientAddress, isBuyMode: isBuyMode, destinationTokenChainId: destinationTokenChainId, destinationTokenAddress: destinationTokenAddress, selectedDstChainId: selectedDstChainId, selectedDstToken: selectedDstToken, orderType: "swap", anyspendQuote: anyspendQuote, globalAddress: globalAddress, onOrderCreated: orderId => {
770
808
  setOrderId(orderId);
771
809
  navigateToPanel(PanelView.ORDER_DETAILS, "forward");
@@ -53,6 +53,7 @@ const react_4 = __importStar(require("react"));
53
53
  const sonner_1 = require("sonner");
54
54
  const chains_1 = require("viem/chains");
55
55
  const FeatureFlagsContext_1 = require("../contexts/FeatureFlagsContext");
56
+ const useAutoSetActiveWalletFromWagmi_1 = require("../hooks/useAutoSetActiveWalletFromWagmi");
56
57
  const AnySpendFingerprintWrapper_1 = require("./AnySpendFingerprintWrapper");
57
58
  const CryptoPaymentMethod_1 = require("./common/CryptoPaymentMethod");
58
59
  const FeeBreakDown_1 = require("./common/FeeBreakDown");
@@ -149,6 +150,8 @@ function AnySpendCustomInner({ loadOrder, mode = "modal", activeTab: activeTabPr
149
150
  const featureFlags = (0, FeatureFlagsContext_1.useFeatureFlags)();
150
151
  const searchParams = (0, react_2.useSearchParamsSSR)();
151
152
  const router = (0, react_2.useRouter)();
153
+ // Auto-set active wallet from wagmi
154
+ (0, useAutoSetActiveWalletFromWagmi_1.useAutoSetActiveWalletFromWagmi)();
152
155
  const [activePanel, setActivePanel] = (0, react_4.useState)(loadOrder ? PanelView.ORDER_DETAILS : PanelView.CONFIRM_ORDER);
153
156
  const [activeTab, setActiveTab] = (0, react_4.useState)(activeTabProps);
154
157
  // Add state for selected payment methods
@@ -38,13 +38,14 @@ function generateEncodedDataForStakingB3(amount, beneficiary) {
38
38
  function AnySpendStakeB3({ loadOrder, mode = "modal", recipientAddress, stakeAmount, onSuccess, }) {
39
39
  const hasMounted = (0, react_1.useHasMounted)();
40
40
  const { setB3ModalOpen } = (0, react_1.useModalStore)();
41
- // Fetch B3 token balance
42
- const { formattedBalance: b3Balance, isLoading: isBalanceLoading, rawBalance: b3RawBalance, } = (0, react_1.useTokenBalance)({
43
- token: anyspend_1.B3_TOKEN,
44
- });
45
41
  // Wagmi hooks for direct staking
46
42
  const { address } = (0, wagmi_1.useAccount)();
47
43
  const { switchChainAndExecute, isSwitchingOrExecuting } = (0, react_1.useUnifiedChainSwitchAndExecute)();
44
+ // Fetch B3 token balance
45
+ const { data: simBalance, isLoading: isBalanceLoading } = (0, react_1.useSimBalance)(address, [chains_1.base.id]);
46
+ const b3RawBalanceStr = simBalance?.balances.find(b => (0, anyspend_1.eqci)(b.address, anyspend_1.B3_TOKEN.address))?.amount || "0";
47
+ const b3RawBalance = BigInt(b3RawBalanceStr);
48
+ const b3Balance = (0, number_1.formatTokenAmount)(b3RawBalance, anyspend_1.B3_TOKEN.decimals);
48
49
  // State for direct staking flow
49
50
  const [isStaking, setIsStaking] = (0, react_3.useState)(false);
50
51
  const [stakingTxHash, setStakingTxHash] = (0, react_3.useState)("");
@@ -13,6 +13,7 @@ const invariant_1 = __importDefault(require("invariant"));
13
13
  const react_2 = require("motion/react");
14
14
  const react_3 = require("react");
15
15
  const sonner_1 = require("sonner");
16
+ const react_4 = require("thirdweb/react");
16
17
  const chains_1 = require("viem/chains");
17
18
  const useAnyspendFlow_1 = require("../hooks/useAnyspendFlow");
18
19
  const AnySpendFingerprintWrapper_1 = require("./AnySpendFingerprintWrapper");
@@ -24,10 +25,9 @@ const FiatPaymentMethod_1 = require("./common/FiatPaymentMethod");
24
25
  const OrderDetails_1 = require("./common/OrderDetails");
25
26
  const PointsDetailPanel_1 = require("./common/PointsDetailPanel");
26
27
  const RecipientSelection_1 = require("./common/RecipientSelection");
27
- const react_4 = require("thirdweb/react");
28
28
  const lucide_react_1 = require("lucide-react");
29
- const PanelOnramp_1 = require("./common/PanelOnramp");
30
29
  const utils_1 = require("../../utils");
30
+ const PanelOnramp_1 = require("./common/PanelOnramp");
31
31
  const SLIPPAGE_PERCENT = 3;
32
32
  exports.HYPE_TOKEN_DETAILS = {
33
33
  SYMBOL: "HYPE",
@@ -135,10 +135,10 @@ function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress,
135
135
  await handleFiatOrder();
136
136
  }
137
137
  };
138
- const mainView = ((0, jsx_runtime_1.jsxs)("div", { className: "mx-auto flex w-[460px] max-w-full flex-col items-center gap-2", children: [(0, jsx_runtime_1.jsx)("div", { className: "mb-4 flex flex-col items-center gap-3 text-center", children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("h1", { className: "text-as-primary text-xl font-bold", children: paymentType === "crypto" ? "Deposit Crypto" : "Fund with Fiat" }) }) }), (0, jsx_runtime_1.jsx)("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: (0, jsx_runtime_1.jsxs)("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: [paymentType === "crypto" ? ((0, jsx_runtime_1.jsx)(CryptoPaySection_1.CryptoPaySection, { selectedSrcChainId: selectedSrcChainId, setSelectedSrcChainId: setSelectedSrcChainId, selectedSrcToken: selectedSrcToken, setSelectedSrcToken: setSelectedSrcToken, srcAmount: srcAmount, setSrcAmount: setSrcAmount, isSrcInputDirty: isSrcInputDirty, setIsSrcInputDirty: setIsSrcInputDirty, selectedCryptoPaymentMethod: selectedCryptoPaymentMethod, onSelectCryptoPaymentMethod: () => setActivePanel(useAnyspendFlow_1.PanelView.CRYPTO_PAYMENT_METHOD), anyspendQuote: anyspendQuote, onTokenSelect: onTokenSelect })) : ((0, jsx_runtime_1.jsx)(react_2.motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0, ease: "easeInOut" }, children: (0, jsx_runtime_1.jsx)(PanelOnramp_1.PanelOnramp, { srcAmountOnRamp: srcAmount, setSrcAmountOnRamp: setSrcAmount, selectedPaymentMethod: selectedFiatPaymentMethod, setActivePanel: setActivePanel, _recipientAddress: recipientAddress, destinationToken: anyspend_1.B3_TOKEN, destinationChainId: chains_1.base.id, dstTokenSymbol: exports.HYPE_TOKEN_DETAILS.SYMBOL, hideDstToken: true, destinationAmount: dstAmount, onDestinationTokenChange: () => { }, onDestinationChainChange: () => { }, fiatPaymentMethodIndex: useAnyspendFlow_1.PanelView.FIAT_PAYMENT_METHOD, recipientSelectionPanelIndex: useAnyspendFlow_1.PanelView.RECIPIENT_SELECTION, anyspendQuote: anyspendQuote, onShowPointsDetail: () => setActivePanel(useAnyspendFlow_1.PanelView.POINTS_DETAIL), onShowFeeDetail: () => setActivePanel(useAnyspendFlow_1.PanelView.FEE_DETAIL), customUsdInputValues: customUsdInputValues }) })), (0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)("relative -my-1 flex h-0 items-center justify-center", paymentType === "fiat" && "hidden"), children: (0, jsx_runtime_1.jsx)(react_1.Button, { variant: "ghost", className: (0, cn_1.cn)("swap-direction-button border-as-stroke bg-as-surface-primary z-10 h-10 w-10 cursor-default rounded-xl border-2 sm:h-8 sm:w-8 sm:rounded-xl"), children: (0, jsx_runtime_1.jsx)("div", { className: "relative flex items-center justify-center transition-opacity", children: (0, jsx_runtime_1.jsx)(lucide_react_1.ArrowDown, { className: "text-as-primary/50 h-5 w-5" }) }) }) }), paymentType === "crypto" && ((0, jsx_runtime_1.jsx)(CryptoReceiveSection_1.CryptoReceiveSection, { isDepositMode: false, isBuyMode: true, selectedRecipientAddress: recipientAddress, recipientName: recipientName || undefined, onSelectRecipient: () => setActivePanel(useAnyspendFlow_1.PanelView.RECIPIENT_SELECTION), dstAmount: dstAmount, dstToken: anyspend_1.B3_TOKEN, dstTokenSymbol: exports.HYPE_TOKEN_DETAILS.SYMBOL, dstTokenLogoURI: exports.HYPE_TOKEN_DETAILS.LOGO_URI, selectedDstChainId: chains_1.base.id, setSelectedDstChainId: () => { }, setSelectedDstToken: () => { }, isSrcInputDirty: isSrcInputDirty, onChangeDstAmount: value => {
138
+ const mainView = ((0, jsx_runtime_1.jsxs)("div", { className: "mx-auto flex w-[460px] max-w-full flex-col items-center gap-2", children: [(0, jsx_runtime_1.jsx)("div", { className: "mb-4 flex flex-col items-center gap-3 text-center", children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("h1", { className: "text-as-primary text-xl font-bold", children: paymentType === "crypto" ? "Deposit Crypto" : "Fund with Fiat" }) }) }), (0, jsx_runtime_1.jsx)("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: (0, jsx_runtime_1.jsxs)("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: [paymentType === "crypto" ? ((0, jsx_runtime_1.jsx)(CryptoPaySection_1.CryptoPaySection, { selectedSrcChainId: selectedSrcChainId, setSelectedSrcChainId: setSelectedSrcChainId, selectedSrcToken: selectedSrcToken, setSelectedSrcToken: setSelectedSrcToken, srcAmount: srcAmount, setSrcAmount: setSrcAmount, isSrcInputDirty: isSrcInputDirty, setIsSrcInputDirty: setIsSrcInputDirty, selectedCryptoPaymentMethod: selectedCryptoPaymentMethod, onSelectCryptoPaymentMethod: () => setActivePanel(useAnyspendFlow_1.PanelView.CRYPTO_PAYMENT_METHOD), anyspendQuote: anyspendQuote, onTokenSelect: onTokenSelect })) : ((0, jsx_runtime_1.jsx)(react_2.motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0, ease: "easeInOut" }, children: (0, jsx_runtime_1.jsx)(PanelOnramp_1.PanelOnramp, { srcAmountOnRamp: srcAmount, setSrcAmountOnRamp: setSrcAmount, selectedPaymentMethod: selectedFiatPaymentMethod, setActivePanel: setActivePanel, _recipientAddress: recipientAddress, destinationToken: anyspend_1.B3_TOKEN, destinationChainId: chains_1.base.id, dstTokenSymbol: exports.HYPE_TOKEN_DETAILS.SYMBOL, hideDstToken: true, destinationAmount: dstAmount, onDestinationTokenChange: () => { }, onDestinationChainChange: () => { }, fiatPaymentMethodIndex: useAnyspendFlow_1.PanelView.FIAT_PAYMENT_METHOD, recipientSelectionPanelIndex: useAnyspendFlow_1.PanelView.RECIPIENT_SELECTION, anyspendQuote: anyspendQuote, onShowPointsDetail: () => setActivePanel(useAnyspendFlow_1.PanelView.POINTS_DETAIL), onShowFeeDetail: () => setActivePanel(useAnyspendFlow_1.PanelView.FEE_DETAIL), customUsdInputValues: customUsdInputValues }) })), (0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)("relative -my-1 flex h-0 items-center justify-center", paymentType === "fiat" && "hidden"), children: (0, jsx_runtime_1.jsx)(react_1.Button, { variant: "ghost", className: (0, cn_1.cn)("swap-direction-button border-as-stroke bg-as-surface-primary z-10 h-10 w-10 cursor-default rounded-xl border-2 sm:h-8 sm:w-8 sm:rounded-xl"), children: (0, jsx_runtime_1.jsx)("div", { className: "relative flex items-center justify-center transition-opacity", children: (0, jsx_runtime_1.jsx)(lucide_react_1.ArrowDown, { className: "text-as-primary/50 h-5 w-5" }) }) }) }), paymentType === "crypto" && ((0, jsx_runtime_1.jsx)(CryptoReceiveSection_1.CryptoReceiveSection, { isDepositMode: false, isBuyMode: true, selectedRecipientAddress: selectedRecipientAddress, recipientName: recipientName || undefined, onSelectRecipient: () => setActivePanel(useAnyspendFlow_1.PanelView.RECIPIENT_SELECTION), setRecipientAddress: setSelectedRecipientAddress, recipientAddressFromProps: recipientAddress, globalAddress: globalAddress, dstAmount: dstAmount, dstToken: anyspend_1.B3_TOKEN, dstTokenSymbol: exports.HYPE_TOKEN_DETAILS.SYMBOL, dstTokenLogoURI: exports.HYPE_TOKEN_DETAILS.LOGO_URI, selectedDstChainId: chains_1.base.id, setSelectedDstChainId: () => { }, setSelectedDstToken: () => { }, isSrcInputDirty: isSrcInputDirty, onChangeDstAmount: value => {
139
139
  setIsSrcInputDirty(false);
140
140
  setSrcAmount(value);
141
- }, anyspendQuote: anyspendQuote, onShowPointsDetail: () => setActivePanel(useAnyspendFlow_1.PanelView.POINTS_DETAIL), onShowFeeDetail: () => setActivePanel(useAnyspendFlow_1.PanelView.FEE_DETAIL) }))] }) }), (0, jsx_runtime_1.jsx)(react_2.motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0.2, ease: "easeInOut" }, className: (0, cn_1.cn)("mt-4 flex w-full max-w-[460px] flex-col gap-2"), children: (0, jsx_runtime_1.jsx)(react_1.ShinyButton, { accentColor: "hsl(var(--as-brand))", disabled: btnInfo.disable, onClick: onMainButtonClick, className: (0, cn_1.cn)("as-main-button relative w-full", btnInfo.error ? "!bg-as-red" : btnInfo.disable ? "!bg-as-on-surface-2" : "!bg-as-brand"), textClassName: (0, cn_1.cn)(btnInfo.error ? "text-white" : btnInfo.disable ? "text-as-secondary" : "text-white"), children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-center gap-2", children: [btnInfo.loading && (0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "h-4 w-4 animate-spin" }), btnInfo.text] }) }) }), mainFooter ? mainFooter : null] }));
141
+ }, anyspendQuote: anyspendQuote, onShowPointsDetail: () => setActivePanel(useAnyspendFlow_1.PanelView.POINTS_DETAIL), onShowFeeDetail: () => setActivePanel(useAnyspendFlow_1.PanelView.FEE_DETAIL), selectedCryptoPaymentMethod: selectedCryptoPaymentMethod }))] }) }), (0, jsx_runtime_1.jsx)(react_2.motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0.2, ease: "easeInOut" }, className: (0, cn_1.cn)("mt-4 flex w-full max-w-[460px] flex-col gap-2"), children: (0, jsx_runtime_1.jsx)(react_1.ShinyButton, { accentColor: "hsl(var(--as-brand))", disabled: btnInfo.disable, onClick: onMainButtonClick, className: (0, cn_1.cn)("as-main-button relative w-full", btnInfo.error ? "!bg-as-red" : btnInfo.disable ? "!bg-as-on-surface-2" : "!bg-as-brand"), textClassName: (0, cn_1.cn)(btnInfo.error ? "text-white" : btnInfo.disable ? "text-as-secondary" : "text-white"), children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-center gap-2", children: [btnInfo.loading && (0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "h-4 w-4 animate-spin" }), btnInfo.text] }) }) }), mainFooter ? mainFooter : null] }));
142
142
  // Handle crypto order creation
143
143
  const handleCryptoOrder = async () => {
144
144
  try {
@@ -9,16 +9,14 @@ const number_1 = require("../../../../shared/utils/number");
9
9
  const lucide_react_1 = require("lucide-react");
10
10
  const react_2 = require("motion/react");
11
11
  const react_3 = require("react");
12
+ const useConnectedWalletDisplay_1 = require("../../hooks/useConnectedWalletDisplay");
12
13
  const CryptoPaymentMethod_1 = require("./CryptoPaymentMethod");
13
14
  const OrderTokenAmount_1 = require("./OrderTokenAmount");
14
15
  const TokenBalance_1 = require("./TokenBalance");
15
16
  function CryptoPaySection({ selectedSrcChainId, setSelectedSrcChainId, selectedSrcToken, setSelectedSrcToken, srcAmount, setSrcAmount, isSrcInputDirty, setIsSrcInputDirty, selectedCryptoPaymentMethod, onSelectCryptoPaymentMethod, anyspendQuote, onTokenSelect, onShowFeeDetail, }) {
16
- const { connectedSmartWallet, connectedEOAWallet } = (0, react_1.useAccountWallet)();
17
17
  const { data: srcTokenMetadata } = (0, react_1.useTokenData)(selectedSrcToken?.chainId, selectedSrcToken?.address);
18
- // Determine which address to use based on payment method
19
- const walletAddress = selectedCryptoPaymentMethod === CryptoPaymentMethod_1.CryptoPaymentMethodType.GLOBAL_WALLET
20
- ? connectedSmartWallet?.getAccount()?.address
21
- : connectedEOAWallet?.getAccount()?.address;
18
+ // Use custom hook to determine wallet address based on payment method
19
+ const { walletAddress } = (0, useConnectedWalletDisplay_1.useConnectedWalletDisplay)(selectedCryptoPaymentMethod);
22
20
  const { data: profileData } = (0, react_1.useProfile)({ address: walletAddress });
23
21
  const connectedName = profileData?.displayName;
24
22
  // Add ref to track if we've applied metadata
@@ -45,7 +43,7 @@ function CryptoPaySection({ selectedSrcChainId, setSelectedSrcChainId, selectedS
45
43
  (0, react_3.useEffect)(() => {
46
44
  appliedSrcMetadataRef.current = false;
47
45
  }, [selectedSrcToken.address, selectedSrcToken.chainId]);
48
- return ((0, jsx_runtime_1.jsxs)(react_2.motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0, ease: "easeInOut" }, className: "pay-section bg-as-surface-secondary border-as-border-secondary relative flex w-full flex-col gap-2 rounded-2xl border p-4 sm:p-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "text-as-primary/50 flex h-7 items-center gap-1.5 text-sm", children: ["Pay", !isSrcInputDirty && anyspendQuote?.data?.fee && onShowFeeDetail && ((0, jsx_runtime_1.jsx)("button", { onClick: onShowFeeDetail, className: "text-as-primary/40 hover:text-as-primary/60 transition-colors", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Info, { className: "h-4 w-4" }) }))] }), (0, jsx_runtime_1.jsx)("button", { className: "text-as-tertiarry flex h-7 items-center gap-2 text-sm transition-colors focus:!outline-none", onClick: onSelectCryptoPaymentMethod, children: selectedCryptoPaymentMethod === CryptoPaymentMethod_1.CryptoPaymentMethodType.CONNECT_WALLET ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [walletAddress ? ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center gap-1", children: connectedName ? (0, utils_1.formatUsername)(connectedName) : (0, formatAddress_1.shortenAddress)(walletAddress || "") })) : ("Connect wallet"), (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { className: "h-4 w-4" })] })) : selectedCryptoPaymentMethod === CryptoPaymentMethod_1.CryptoPaymentMethodType.GLOBAL_WALLET ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Global Account", (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { className: "h-4 w-4" })] })) : selectedCryptoPaymentMethod === CryptoPaymentMethod_1.CryptoPaymentMethodType.TRANSFER_CRYPTO ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Transfer crypto", (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { className: "h-4 w-4" })] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Select payment method", (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { className: "h-4 w-4" })] })) })] }), (0, jsx_runtime_1.jsx)(OrderTokenAmount_1.OrderTokenAmount, { address: walletAddress, context: "from", inputValue: srcAmount, onChangeInput: value => {
46
+ return ((0, jsx_runtime_1.jsxs)(react_2.motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0, ease: "easeInOut" }, className: "pay-section bg-as-surface-secondary border-as-border-secondary relative flex w-full flex-col gap-2 rounded-2xl border p-4 sm:p-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "text-as-primary/50 flex h-7 items-center gap-1.5 text-sm", children: ["Pay", !isSrcInputDirty && anyspendQuote?.data?.fee && onShowFeeDetail && ((0, jsx_runtime_1.jsx)("button", { onClick: onShowFeeDetail, className: "text-as-primary/40 hover:text-as-primary/60 transition-colors", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Info, { className: "h-4 w-4" }) }))] }), (0, jsx_runtime_1.jsx)("button", { className: "text-as-tertiarry flex h-7 items-center gap-2 text-sm transition-colors focus:!outline-none", onClick: onSelectCryptoPaymentMethod, children: selectedCryptoPaymentMethod === CryptoPaymentMethod_1.CryptoPaymentMethodType.CONNECT_WALLET ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [walletAddress ? ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center gap-1", children: connectedName ? (0, utils_1.formatUsername)(connectedName) : (0, formatAddress_1.shortenAddress)(walletAddress || "") })) : ("Connect wallet"), (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { className: "h-4 w-4" })] })) : selectedCryptoPaymentMethod === CryptoPaymentMethod_1.CryptoPaymentMethodType.GLOBAL_WALLET ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Global Account", (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { className: "h-4 w-4" })] })) : selectedCryptoPaymentMethod === CryptoPaymentMethod_1.CryptoPaymentMethodType.TRANSFER_CRYPTO ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Transfer crypto", (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { className: "h-4 w-4" })] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Select payment method", (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { className: "h-4 w-4" })] })) })] }), (0, jsx_runtime_1.jsx)(OrderTokenAmount_1.OrderTokenAmount, { address: walletAddress, walletAddress: walletAddress, context: "from", inputValue: srcAmount, onChangeInput: value => {
49
47
  setIsSrcInputDirty(true);
50
48
  setSrcAmount(value);
51
49
  }, chainId: selectedSrcChainId, setChainId: setSelectedSrcChainId, token: selectedSrcToken, setToken: setSelectedSrcToken, onTokenSelect: onTokenSelect }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-as-primary/50 flex h-5 items-center text-sm", children: (0, number_1.formatDisplayNumber)(anyspendQuote?.data?.currencyIn?.amountUsd, {
@@ -17,6 +17,7 @@ const sonner_1 = require("sonner");
17
17
  const react_4 = require("thirdweb/react");
18
18
  const wallets_1 = require("thirdweb/wallets");
19
19
  const wagmi_1 = require("wagmi");
20
+ const useConnectedWalletDisplay_1 = require("../../hooks/useConnectedWalletDisplay");
20
21
  var CryptoPaymentMethodType;
21
22
  (function (CryptoPaymentMethodType) {
22
23
  CryptoPaymentMethodType["NONE"] = "none";
@@ -26,7 +27,7 @@ var CryptoPaymentMethodType;
26
27
  })(CryptoPaymentMethodType || (exports.CryptoPaymentMethodType = CryptoPaymentMethodType = {}));
27
28
  function CryptoPaymentMethod({ selectedPaymentMethod, setSelectedPaymentMethod, isCreatingOrder, onBack, onSelectPaymentMethod, }) {
28
29
  const { wallet: globalWallet, connectedEOAWallet: connectedEOAWallet, connectedSmartWallet: connectedSmartWallet, } = (0, react_1.useAccountWallet)();
29
- const { connector, address, isConnected: wagmiWalletIsConnected } = (0, wagmi_1.useAccount)();
30
+ const { connector, address } = (0, wagmi_1.useAccount)();
30
31
  const { connect, connectors, isPending } = (0, wagmi_1.useConnect)();
31
32
  const { disconnect } = (0, wagmi_1.useDisconnect)();
32
33
  const { data: walletClient } = (0, wagmi_1.useWalletClient)();
@@ -37,19 +38,8 @@ function CryptoPaymentMethod({ selectedPaymentMethod, setSelectedPaymentMethod,
37
38
  const setGlobalAccountWallet = (0, utils_1.useGlobalWalletState)(state => state.setGlobalAccountWallet);
38
39
  const isConnected = !!connectedEOAWallet;
39
40
  const globalAddress = connectedSmartWallet?.getAccount()?.address;
40
- // Helper function to check if two addresses are the same
41
- const isSameAddress = (addr1, addr2) => {
42
- if (!addr1 || !addr2)
43
- return false;
44
- return addr1.toLowerCase() === addr2.toLowerCase();
45
- };
46
- // Check if connectedEOAWallet and wagmi wallet represent the same wallet
47
- const connectedEOAAddress = connectedEOAWallet?.getAccount()?.address;
48
- const wagmiAddress = address;
49
- const isWalletDuplicated = isSameAddress(connectedEOAAddress, wagmiAddress);
50
- // Determine which wallet to show (prefer connectedEOAWallet if both exist and are the same)
51
- const shouldShowConnectedEOA = !!connectedEOAWallet;
52
- const shouldShowWagmiWallet = wagmiWalletIsConnected && (!isWalletDuplicated || !connectedEOAWallet);
41
+ // Use custom hook to determine wallet display logic
42
+ const { shouldShowConnectedEOA, shouldShowWagmiWallet } = (0, useConnectedWalletDisplay_1.useConnectedWalletDisplay)(selectedPaymentMethod);
53
43
  // Map wagmi connector names to thirdweb wallet IDs
54
44
  const getThirdwebWalletId = (connectorName) => {
55
45
  const walletMap = {
@@ -177,9 +167,11 @@ function CryptoPaymentMethod({ selectedPaymentMethod, setSelectedPaymentMethod,
177
167
  setSelectedPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
178
168
  onSelectPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
179
169
  setGlobalAccountWallet(activeWallet);
180
- setActiveWallet(connectedEOAWallet);
170
+ if (connectedEOAWallet) {
171
+ setActiveWallet(connectedEOAWallet);
172
+ }
181
173
  sonner_1.toast.success(`Selected ${eoaWalletInfo?.name || connector?.name || "wallet"}`);
182
- }, className: (0, cn_1.cn)("crypto-payment-method-connect-wallet w-full rounded-xl border p-4 text-left transition-all hover:shadow-md", selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET
174
+ }, className: (0, cn_1.cn)("crypto-payment-method-connect-wallet eoa-wallet w-full rounded-xl border p-4 text-left transition-all hover:shadow-md", selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET
183
175
  ? "connected-wallet border-as-brand bg-as-brand/5"
184
176
  : "border-as-border-secondary bg-as-surface-primary hover:border-as-secondary/80"), children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "wallet-icon flex h-10 w-10 items-center justify-center rounded-full bg-blue-100", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Wallet, { className: "h-5 w-5 text-blue-600" }) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-as-primary font-semibold", children: eoaWalletInfo?.name || connector?.name || "Connected Wallet" }), (0, jsx_runtime_1.jsx)("span", { className: "text-as-primary/60 text-sm", children: (0, formatAddress_1.shortenAddress)(connectedEOAWallet?.getAccount()?.address || "") })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET && ((0, jsx_runtime_1.jsx)("div", { className: "h-2 w-2 rounded-full bg-green-500" })), (0, jsx_runtime_1.jsx)("button", { onClick: e => {
185
177
  e.stopPropagation();
@@ -199,7 +191,7 @@ function CryptoPaymentMethod({ selectedPaymentMethod, setSelectedPaymentMethod,
199
191
  }
200
192
  }
201
193
  sonner_1.toast.success(`Selected ${connector?.name || "wallet"}`);
202
- }, className: (0, cn_1.cn)("crypto-payment-method-connect-wallet w-full rounded-xl border p-4 text-left transition-all hover:shadow-md", selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET
194
+ }, className: (0, cn_1.cn)("crypto-payment-method-connect-wallet wagmi-wallet w-full rounded-xl border p-4 text-left transition-all hover:shadow-md", selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET
203
195
  ? "connected-wallet border-as-brand bg-as-brand/5"
204
196
  : "border-as-border-secondary bg-as-surface-primary hover:border-as-secondary/80"), children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "wallet-icon flex h-10 w-10 items-center justify-center rounded-full bg-blue-100", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Wallet, { className: "h-5 w-5 text-blue-600" }) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-as-primary font-semibold", children: connector?.name || "Connected Wallet" }), (0, jsx_runtime_1.jsx)("span", { className: "text-as-primary/60 text-sm", children: (0, formatAddress_1.shortenAddress)(address || "") })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET && ((0, jsx_runtime_1.jsx)("div", { className: "h-2 w-2 rounded-full bg-green-500" })), (0, jsx_runtime_1.jsx)("button", { onClick: e => {
205
197
  e.stopPropagation();
@@ -1,10 +1,14 @@
1
1
  import { components } from "../../../types/api";
2
+ import { CryptoPaymentMethodType } from "./CryptoPaymentMethod";
2
3
  interface CryptoReceiveSectionProps {
3
4
  isDepositMode?: boolean;
4
5
  isBuyMode?: boolean;
5
6
  selectedRecipientAddress?: string;
6
7
  recipientName?: string;
7
8
  onSelectRecipient: () => void;
9
+ setRecipientAddress?: (address: string | undefined) => void;
10
+ recipientAddressFromProps?: string;
11
+ globalAddress?: string;
8
12
  dstAmount: string;
9
13
  dstToken: components["schemas"]["Token"];
10
14
  selectedDstChainId?: number;
@@ -17,6 +21,7 @@ interface CryptoReceiveSectionProps {
17
21
  dstTokenLogoURI?: string;
18
22
  onShowPointsDetail?: () => void;
19
23
  onShowFeeDetail?: () => void;
24
+ selectedCryptoPaymentMethod?: CryptoPaymentMethodType;
20
25
  }
21
- export declare function CryptoReceiveSection({ isDepositMode, isBuyMode, selectedRecipientAddress, recipientName, onSelectRecipient, dstAmount, dstToken, selectedDstChainId, setSelectedDstChainId, setSelectedDstToken, isSrcInputDirty, onChangeDstAmount, anyspendQuote, dstTokenSymbol, dstTokenLogoURI, onShowPointsDetail, onShowFeeDetail, }: CryptoReceiveSectionProps): import("react/jsx-runtime").JSX.Element;
26
+ export declare function CryptoReceiveSection({ isDepositMode, isBuyMode, selectedRecipientAddress, recipientName, onSelectRecipient, setRecipientAddress, recipientAddressFromProps, globalAddress, dstAmount, dstToken, selectedDstChainId, setSelectedDstChainId, setSelectedDstToken, isSrcInputDirty, onChangeDstAmount, anyspendQuote, dstTokenSymbol, dstTokenLogoURI, onShowPointsDetail, onShowFeeDetail, selectedCryptoPaymentMethod, }: CryptoReceiveSectionProps): import("react/jsx-runtime").JSX.Element;
22
27
  export {};
@@ -8,11 +8,21 @@ const formatAddress_1 = require("../../../../shared/utils/formatAddress");
8
8
  const number_1 = require("../../../../shared/utils/number");
9
9
  const lucide_react_1 = require("lucide-react");
10
10
  const react_1 = require("motion/react");
11
+ const react_2 = require("react");
11
12
  const FeatureFlagsContext_1 = require("../../contexts/FeatureFlagsContext");
13
+ const useConnectedWalletDisplay_1 = require("../../hooks/useConnectedWalletDisplay");
12
14
  const OrderTokenAmount_1 = require("./OrderTokenAmount");
13
15
  const PointsBadge_1 = require("./PointsBadge");
14
- function CryptoReceiveSection({ isDepositMode = false, isBuyMode = false, selectedRecipientAddress, recipientName, onSelectRecipient, dstAmount, dstToken, selectedDstChainId, setSelectedDstChainId, setSelectedDstToken, isSrcInputDirty, onChangeDstAmount, anyspendQuote, dstTokenSymbol, dstTokenLogoURI, onShowPointsDetail, onShowFeeDetail, }) {
16
+ function CryptoReceiveSection({ isDepositMode = false, isBuyMode = false, selectedRecipientAddress, recipientName, onSelectRecipient, setRecipientAddress, recipientAddressFromProps, globalAddress, dstAmount, dstToken, selectedDstChainId, setSelectedDstChainId, setSelectedDstToken, isSrcInputDirty, onChangeDstAmount, anyspendQuote, dstTokenSymbol, dstTokenLogoURI, onShowPointsDetail, onShowFeeDetail, selectedCryptoPaymentMethod, }) {
15
17
  const featureFlags = (0, FeatureFlagsContext_1.useFeatureFlags)();
18
+ // Get wallet address based on selected payment method
19
+ const { walletAddress } = (0, useConnectedWalletDisplay_1.useConnectedWalletDisplay)(selectedCryptoPaymentMethod);
20
+ // Set default recipient address when wallet changes
21
+ (0, react_2.useEffect)(() => {
22
+ if (setRecipientAddress) {
23
+ setRecipientAddress(recipientAddressFromProps || walletAddress || globalAddress);
24
+ }
25
+ }, [recipientAddressFromProps, walletAddress, globalAddress, setRecipientAddress]);
16
26
  return ((0, jsx_runtime_1.jsxs)(react_1.motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0.1, ease: "easeInOut" }, className: "receive-section bg-as-surface-secondary border-as-border-secondary relative flex w-full flex-col gap-2 rounded-2xl border p-4 sm:p-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex w-full items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "text-as-primary/50 flex h-7 items-center gap-1.5 text-sm", children: [isDepositMode ? "Deposit" : "Receive", isSrcInputDirty && anyspendQuote?.data?.fee && onShowFeeDetail && ((0, jsx_runtime_1.jsx)("button", { onClick: onShowFeeDetail, className: "text-as-primary/40 hover:text-as-primary/60 transition-colors", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Info, { className: "h-4 w-4" }) }))] }), selectedRecipientAddress ? ((0, jsx_runtime_1.jsx)("button", { className: (0, cn_1.cn)("text-as-tertiarry flex h-7 items-center gap-2 rounded-lg"), onClick: onSelectRecipient, children: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: "text-as-tertiarry flex items-center gap-1 text-sm", children: recipientName ? (0, utils_1.formatUsername)(recipientName) : (0, formatAddress_1.shortenAddress)(selectedRecipientAddress || "") }), (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { className: "h-4 w-4" })] }) })) : ((0, jsx_runtime_1.jsx)("button", { className: "text-as-primary/70 flex items-center gap-1 rounded-lg", onClick: onSelectRecipient, children: (0, jsx_runtime_1.jsx)("div", { className: "text-sm font-medium", children: "Select recipient" }) }))] }), isBuyMode || isDepositMode ? (
17
27
  // Fixed destination token display for buy mode and deposit mode
18
28
  (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-as-primary text-2xl font-bold", children: dstAmount || "0" }), (0, jsx_runtime_1.jsxs)("div", { className: "bg-as-brand/10 border-as-brand/30 flex items-center gap-3 rounded-xl border px-4 py-3", children: [(dstTokenLogoURI || dstToken.metadata?.logoURI) && ((0, jsx_runtime_1.jsx)("img", { src: dstTokenLogoURI || dstToken.metadata?.logoURI, alt: dstTokenSymbol || dstToken.symbol, className: "h-8 w-8 rounded-full" })), (0, jsx_runtime_1.jsx)("span", { className: "text-as-brand text-lg font-bold", children: dstTokenSymbol || dstToken.symbol })] })] })) : (