@b3dotfun/sdk 0.0.29 → 0.0.30-alpha.1

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 (126) hide show
  1. package/dist/cjs/anyspend/constants/index.d.ts +1 -0
  2. package/dist/cjs/anyspend/constants/index.js +2 -1
  3. package/dist/cjs/anyspend/react/components/AnySpend.js +2 -2
  4. package/dist/cjs/anyspend/react/components/AnySpendBondKit.d.ts +1 -1
  5. package/dist/cjs/anyspend/react/components/AnySpendBondKit.js +23 -24
  6. package/dist/cjs/anyspend/react/components/AnySpendBuySpin.js +2 -1
  7. package/dist/cjs/anyspend/react/components/AnySpendCustom.js +1 -1
  8. package/dist/cjs/anyspend/react/components/AnySpendStakeB3.js +2 -1
  9. package/dist/cjs/anyspend/react/components/AnyspendDepositHype.d.ts +4 -2
  10. package/dist/cjs/anyspend/react/components/AnyspendDepositHype.js +17 -10
  11. package/dist/cjs/anyspend/react/components/common/ConnectWalletPayment.js +9 -1
  12. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +124 -41
  13. package/dist/cjs/anyspend/react/components/common/OrderDetails.js +6 -3
  14. package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.js +6 -4
  15. package/dist/cjs/anyspend/react/components/common/OrderStatus.d.ts +2 -0
  16. package/dist/cjs/anyspend/react/components/common/OrderStatus.js +2 -2
  17. package/dist/cjs/anyspend/react/components/common/OrderTokenAmount.js +1 -1
  18. package/dist/cjs/anyspend/react/components/common/PanelOnramp.d.ts +2 -1
  19. package/dist/cjs/anyspend/react/components/common/PanelOnramp.js +2 -2
  20. package/dist/cjs/anyspend/react/components/common/PaySection.js +6 -4
  21. package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.d.ts +2 -1
  22. package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.js +34 -3
  23. package/dist/cjs/anyspend/react/hooks/useSigMint.d.ts +1 -1
  24. package/dist/cjs/bondkit/abis/BondkitTokenABI.d.ts +62 -17
  25. package/dist/cjs/bondkit/abis/BondkitTokenABI.js +41 -9
  26. package/dist/cjs/bondkit/abis/BondkitTokenFactoryABI.d.ts +0 -25
  27. package/dist/cjs/bondkit/abis/BondkitTokenFactoryABI.js +0 -9
  28. package/dist/cjs/bondkit/constants.js +1 -1
  29. package/dist/cjs/global-account/react/components/LinkAccount/LinkAccount.js +28 -15
  30. package/dist/cjs/global-account/react/components/ManageAccount/ManageAccount.js +1 -1
  31. package/dist/cjs/global-account/react/hooks/useB3BalanceFromAddresses.js +2 -1
  32. package/dist/cjs/global-account/react/hooks/useNativeBalance.js +2 -1
  33. package/dist/cjs/global-account/react/hooks/useUnifiedChainSwitchAndExecute.d.ts +1 -0
  34. package/dist/cjs/global-account/react/hooks/useUnifiedChainSwitchAndExecute.js +1 -0
  35. package/dist/cjs/global-account/react/stores/useModalStore.d.ts +4 -2
  36. package/dist/cjs/shared/constants/chains/b3Chain.d.ts +2 -2
  37. package/dist/cjs/shared/constants/chains/supported.d.ts +4 -4
  38. package/dist/cjs/shared/constants/index.d.ts +1 -0
  39. package/dist/cjs/shared/constants/index.js +2 -1
  40. package/dist/esm/anyspend/constants/index.d.ts +1 -0
  41. package/dist/esm/anyspend/constants/index.js +1 -0
  42. package/dist/esm/anyspend/react/components/AnySpend.js +2 -2
  43. package/dist/esm/anyspend/react/components/AnySpendBondKit.d.ts +1 -1
  44. package/dist/esm/anyspend/react/components/AnySpendBondKit.js +23 -24
  45. package/dist/esm/anyspend/react/components/AnySpendBuySpin.js +2 -1
  46. package/dist/esm/anyspend/react/components/AnySpendCustom.js +1 -1
  47. package/dist/esm/anyspend/react/components/AnySpendStakeB3.js +2 -1
  48. package/dist/esm/anyspend/react/components/AnyspendDepositHype.d.ts +4 -2
  49. package/dist/esm/anyspend/react/components/AnyspendDepositHype.js +19 -12
  50. package/dist/esm/anyspend/react/components/common/ConnectWalletPayment.js +6 -1
  51. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +126 -43
  52. package/dist/esm/anyspend/react/components/common/OrderDetails.js +7 -4
  53. package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.js +7 -5
  54. package/dist/esm/anyspend/react/components/common/OrderStatus.d.ts +2 -0
  55. package/dist/esm/anyspend/react/components/common/OrderStatus.js +2 -2
  56. package/dist/esm/anyspend/react/components/common/OrderTokenAmount.js +1 -1
  57. package/dist/esm/anyspend/react/components/common/PanelOnramp.d.ts +2 -1
  58. package/dist/esm/anyspend/react/components/common/PanelOnramp.js +2 -2
  59. package/dist/esm/anyspend/react/components/common/PaySection.js +7 -5
  60. package/dist/esm/anyspend/react/hooks/useAnyspendFlow.d.ts +2 -1
  61. package/dist/esm/anyspend/react/hooks/useAnyspendFlow.js +35 -4
  62. package/dist/esm/anyspend/react/hooks/useSigMint.d.ts +1 -1
  63. package/dist/esm/bondkit/abis/BondkitTokenABI.d.ts +62 -17
  64. package/dist/esm/bondkit/abis/BondkitTokenABI.js +41 -9
  65. package/dist/esm/bondkit/abis/BondkitTokenFactoryABI.d.ts +0 -25
  66. package/dist/esm/bondkit/abis/BondkitTokenFactoryABI.js +0 -9
  67. package/dist/esm/bondkit/constants.js +1 -1
  68. package/dist/esm/global-account/react/components/LinkAccount/LinkAccount.js +28 -15
  69. package/dist/esm/global-account/react/components/ManageAccount/ManageAccount.js +1 -1
  70. package/dist/esm/global-account/react/hooks/useB3BalanceFromAddresses.js +2 -1
  71. package/dist/esm/global-account/react/hooks/useNativeBalance.js +2 -1
  72. package/dist/esm/global-account/react/hooks/useUnifiedChainSwitchAndExecute.d.ts +1 -0
  73. package/dist/esm/global-account/react/hooks/useUnifiedChainSwitchAndExecute.js +1 -0
  74. package/dist/esm/global-account/react/stores/useModalStore.d.ts +4 -2
  75. package/dist/esm/shared/constants/chains/b3Chain.d.ts +2 -2
  76. package/dist/esm/shared/constants/chains/supported.d.ts +4 -4
  77. package/dist/esm/shared/constants/index.d.ts +1 -0
  78. package/dist/esm/shared/constants/index.js +1 -0
  79. package/dist/styles/index.css +1 -1
  80. package/dist/types/anyspend/constants/index.d.ts +1 -0
  81. package/dist/types/anyspend/react/components/AnySpendBondKit.d.ts +1 -1
  82. package/dist/types/anyspend/react/components/AnyspendDepositHype.d.ts +4 -2
  83. package/dist/types/anyspend/react/components/common/OrderStatus.d.ts +2 -0
  84. package/dist/types/anyspend/react/components/common/PanelOnramp.d.ts +2 -1
  85. package/dist/types/anyspend/react/hooks/useAnyspendFlow.d.ts +2 -1
  86. package/dist/types/anyspend/react/hooks/useSigMint.d.ts +1 -1
  87. package/dist/types/bondkit/abis/BondkitTokenABI.d.ts +62 -17
  88. package/dist/types/bondkit/abis/BondkitTokenFactoryABI.d.ts +0 -25
  89. package/dist/types/global-account/react/hooks/useUnifiedChainSwitchAndExecute.d.ts +1 -0
  90. package/dist/types/global-account/react/stores/useModalStore.d.ts +4 -2
  91. package/dist/types/shared/constants/chains/b3Chain.d.ts +2 -2
  92. package/dist/types/shared/constants/chains/supported.d.ts +4 -4
  93. package/dist/types/shared/constants/index.d.ts +1 -0
  94. package/package.json +1 -1
  95. package/src/anyspend/constants/index.ts +2 -0
  96. package/src/anyspend/react/components/AnySpend.tsx +2 -1
  97. package/src/anyspend/react/components/AnySpendBondKit.tsx +28 -28
  98. package/src/anyspend/react/components/AnySpendBuySpin.tsx +2 -1
  99. package/src/anyspend/react/components/AnySpendCustom.tsx +1 -1
  100. package/src/anyspend/react/components/AnySpendStakeB3.tsx +2 -1
  101. package/src/anyspend/react/components/AnyspendDepositHype.tsx +143 -130
  102. package/src/anyspend/react/components/common/ConnectWalletPayment.tsx +9 -0
  103. package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +243 -104
  104. package/src/anyspend/react/components/common/OrderDetails.tsx +7 -3
  105. package/src/anyspend/react/components/common/OrderDetailsCollapsible.tsx +10 -4
  106. package/src/anyspend/react/components/common/OrderStatus.tsx +9 -2
  107. package/src/anyspend/react/components/common/OrderTokenAmount.tsx +2 -2
  108. package/src/anyspend/react/components/common/PanelOnramp.tsx +3 -1
  109. package/src/anyspend/react/components/common/PaySection.tsx +10 -8
  110. package/src/anyspend/react/hooks/useAnyspendFlow.ts +41 -3
  111. package/src/bondkit/abis/BondkitTokenABI.ts +41 -9
  112. package/src/bondkit/abis/BondkitTokenFactoryABI.ts +0 -9
  113. package/src/bondkit/constants.ts +1 -1
  114. package/src/global-account/react/components/LinkAccount/LinkAccount.tsx +26 -10
  115. package/src/global-account/react/components/ManageAccount/ManageAccount.tsx +5 -1
  116. package/src/global-account/react/hooks/useB3BalanceFromAddresses.ts +2 -1
  117. package/src/global-account/react/hooks/useNativeBalance.tsx +2 -1
  118. package/src/global-account/react/hooks/useUnifiedChainSwitchAndExecute.ts +1 -0
  119. package/src/global-account/react/stores/useModalStore.ts +4 -2
  120. package/src/shared/constants/index.ts +2 -0
  121. package/dist/cjs/anyspend/abis/bondKit.d.ts +0 -35
  122. package/dist/cjs/anyspend/abis/bondKit.js +0 -29
  123. package/dist/esm/anyspend/abis/bondKit.d.ts +0 -35
  124. package/dist/esm/anyspend/abis/bondKit.js +0 -26
  125. package/dist/types/anyspend/abis/bondKit.d.ts +0 -35
  126. package/src/anyspend/abis/bondKit.ts +0 -26
@@ -650,12 +650,12 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
650
650
  window.scrollTo({ top: 0, behavior: "smooth" });
651
651
  }, [activePanel]);
652
652
  const historyView = (_jsx("div", { className: "mx-auto flex w-[560px] max-w-full flex-col items-center", children: _jsx(OrderHistory, { mode: mode, onBack: () => setActivePanel(PanelView.MAIN), onSelectOrder: onSelectOrder }) }));
653
- const orderDetailsView = (_jsx("div", { className: "mx-auto w-[460px] max-w-full", children: _jsx("div", { className: "relative flex flex-col gap-4", children: oat && (_jsxs(_Fragment, { children: [_jsx(OrderStatus, { order: oat.data.order }), _jsx(OrderDetails, { mode: mode, order: oat.data.order, depositTxs: oat.data.depositTxs, relayTx: oat.data.relayTx, executeTx: oat.data.executeTx, refundTxs: oat.data.refundTxs, onBack: () => {
653
+ const orderDetailsView = (_jsx("div", { className: "mx-auto w-[460px] max-w-full", children: _jsx("div", { className: "relative flex flex-col gap-4", children: oat && (_jsxs(_Fragment, { children: [_jsx(OrderStatus, { order: oat.data.order, selectedCryptoPaymentMethod: selectedCryptoPaymentMethod }), _jsx(OrderDetails, { mode: mode, order: oat.data.order, depositTxs: oat.data.depositTxs, relayTx: oat.data.relayTx, executeTx: oat.data.executeTx, refundTxs: oat.data.refundTxs, onBack: () => {
654
654
  setOrderId(undefined);
655
655
  setActivePanel(PanelView.MAIN);
656
656
  setSelectedCryptoPaymentMethod(CryptoPaymentMethodType.NONE); // Reset payment method when going back
657
657
  } })] })) }) }));
658
- const mainView = (_jsxs("div", { className: "mx-auto flex w-[460px] max-w-full flex-col items-center gap-2", children: [isBuyMode && (_jsxs("div", { className: "mb-4 flex flex-col items-center gap-3 text-center", children: [selectedDstToken.metadata?.logoURI && (_jsx("div", { className: "relative", children: _jsx("img", { src: selectedDstToken.metadata.logoURI, alt: selectedDstToken.symbol, className: "border-as-stroke h-12 w-12 rounded-full border-2 shadow-md" }) })), _jsx("div", { children: _jsxs("h1", { className: "text-as-primary text-xl font-bold", children: ["Buy ", selectedDstToken.symbol] }) })] })), _jsx(TabSection, { activeTab: activeTab, setActiveTab: setActiveTab, setSelectedCryptoPaymentMethod: setSelectedCryptoPaymentMethod, setSelectedFiatPaymentMethod: setSelectedFiatPaymentMethod }), _jsxs("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: [activeTab === "crypto" ? (_jsx(PaySection, { paymentType: "crypto", selectedSrcChainId: selectedSrcChainId, setSelectedSrcChainId: setSelectedSrcChainId, selectedSrcToken: selectedSrcToken, setSelectedSrcToken: setSelectedSrcToken, srcAmount: srcAmount, setSrcAmount: setSrcAmount, setIsSrcInputDirty: setIsSrcInputDirty, selectedCryptoPaymentMethod: selectedCryptoPaymentMethod, selectedFiatPaymentMethod: selectedFiatPaymentMethod, onSelectCryptoPaymentMethod: () => setActivePanel(PanelView.CRYPTO_PAYMENT_METHOD), onSelectFiatPaymentMethod: () => setActivePanel(PanelView.FIAT_PAYMENT_METHOD), anyspendQuote: anyspendQuote })) : (_jsx(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: _jsx(PanelOnramp, { srcAmountOnRamp: srcAmountOnRamp, setSrcAmountOnRamp: setSrcAmountOnRamp, selectedPaymentMethod: selectedFiatPaymentMethod, setActivePanel: setActivePanel, _recipientAddress: recipientAddress, destinationToken: selectedDstToken, destinationChainId: selectedDstChainId, destinationAmount: dstAmount, onDestinationTokenChange: setSelectedDstToken, onDestinationChainChange: setSelectedDstChainId, fiatPaymentMethodIndex: PanelView.FIAT_PAYMENT_METHOD }) })), _jsx(Button, { variant: "ghost", className: cn("border-as-stroke bg-as-surface-primary absolute left-1/2 top-1/2 z-10 h-10 w-10 -translate-x-1/2 -translate-y-1/2 rounded-xl border-2 sm:h-8 sm:w-8 sm:rounded-xl", isBuyMode && "top-[calc(50%+56px)] cursor-default", activeTab === "fiat" && "hidden"), onClick: () => {
658
+ const mainView = (_jsxs("div", { className: "mx-auto flex w-[460px] max-w-full flex-col items-center gap-2", children: [isBuyMode && (_jsxs("div", { className: "mb-4 flex flex-col items-center gap-3 text-center", children: [selectedDstToken.metadata?.logoURI && (_jsx("div", { className: "relative", children: _jsx("img", { src: selectedDstToken.metadata.logoURI, alt: selectedDstToken.symbol, className: "border-as-stroke h-12 w-12 rounded-full border-2 shadow-md" }) })), _jsx("div", { children: _jsxs("h1", { className: "text-as-primary text-xl font-bold", children: ["Buy ", selectedDstToken.symbol] }) })] })), _jsx(TabSection, { activeTab: activeTab, setActiveTab: setActiveTab, setSelectedCryptoPaymentMethod: setSelectedCryptoPaymentMethod, setSelectedFiatPaymentMethod: setSelectedFiatPaymentMethod }), _jsxs("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: [activeTab === "crypto" ? (_jsx(PaySection, { paymentType: "crypto", selectedSrcChainId: selectedSrcChainId, setSelectedSrcChainId: setSelectedSrcChainId, selectedSrcToken: selectedSrcToken, setSelectedSrcToken: setSelectedSrcToken, srcAmount: srcAmount, setSrcAmount: setSrcAmount, setIsSrcInputDirty: setIsSrcInputDirty, selectedCryptoPaymentMethod: selectedCryptoPaymentMethod, selectedFiatPaymentMethod: selectedFiatPaymentMethod, onSelectCryptoPaymentMethod: () => setActivePanel(PanelView.CRYPTO_PAYMENT_METHOD), onSelectFiatPaymentMethod: () => setActivePanel(PanelView.FIAT_PAYMENT_METHOD), anyspendQuote: anyspendQuote })) : (_jsx(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: _jsx(PanelOnramp, { srcAmountOnRamp: srcAmountOnRamp, setSrcAmountOnRamp: setSrcAmountOnRamp, selectedPaymentMethod: selectedFiatPaymentMethod, setActivePanel: setActivePanel, _recipientAddress: recipientAddress, destinationToken: selectedDstToken, destinationChainId: selectedDstChainId, destinationAmount: dstAmount, onDestinationTokenChange: setSelectedDstToken, onDestinationChainChange: setSelectedDstChainId, fiatPaymentMethodIndex: PanelView.FIAT_PAYMENT_METHOD, recipientSelectionPanelIndex: PanelView.RECIPIENT_SELECTION }) })), _jsx(Button, { variant: "ghost", className: cn("border-as-stroke bg-as-surface-primary absolute left-1/2 top-1/2 z-10 h-10 w-10 -translate-x-1/2 -translate-y-1/2 rounded-xl border-2 sm:h-8 sm:w-8 sm:rounded-xl", isBuyMode && "top-[calc(50%+56px)] cursor-default", activeTab === "fiat" && "hidden"), onClick: () => {
659
659
  if (activeTab === "fiat" || isBuyMode) {
660
660
  return;
661
661
  }
@@ -1,2 +1,2 @@
1
1
  import { AnySpendBondKitProps } from "../../../global-account/react/stores/useModalStore";
2
- export declare function AnySpendBondKit({ mode, recipientAddress, contractAddress, minTokensOut, imageUrl, ethAmount: initialEthAmount, onSuccess, }: AnySpendBondKitProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function AnySpendBondKit({ mode, recipientAddress, contractAddress, minTokensOut, imageUrl, b3Amount: initialB3Amount, onSuccess, }: AnySpendBondKitProps): import("react/jsx-runtime").JSX.Element;
@@ -1,11 +1,10 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { BondkitToken } from "../../../bondkit/index.js";
3
2
  import { Button, GlareCardRounded, Input, StyleRoot, useHasMounted, useTokenData, } from "../../../global-account/react/index.js";
4
3
  import { baseMainnet } from "../../../shared/constants/chains/supported.js";
5
4
  import { motion } from "motion/react";
6
5
  import { useEffect, useMemo, useState } from "react";
7
6
  import { createPublicClient, encodeFunctionData, formatEther, http, parseEther } from "viem";
8
- import { ABI_bondKit } from "../../abis/bondKit.js";
7
+ import { BondkitToken, BondkitTokenABI } from "../../../bondkit/index.js";
9
8
  import { AnySpendCustom } from "./AnySpendCustom.js";
10
9
  // Debounce utility function
11
10
  function debounce(func, wait) {
@@ -21,11 +20,11 @@ function formatNumberWithCommas(x) {
21
20
  parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
22
21
  return parts.join(".");
23
22
  }
24
- export function AnySpendBondKit({ mode = "modal", recipientAddress, contractAddress, minTokensOut = "0", imageUrl, ethAmount: initialEthAmount, onSuccess, }) {
23
+ export function AnySpendBondKit({ mode = "modal", recipientAddress, contractAddress, minTokensOut = "0", imageUrl, b3Amount: initialB3Amount, onSuccess, }) {
25
24
  const hasMounted = useHasMounted();
26
- const [showAmountPrompt, setShowAmountPrompt] = useState(!initialEthAmount);
27
- const [ethAmount, setEthAmount] = useState(initialEthAmount || "");
28
- const [isAmountValid, setIsAmountValid] = useState(!!initialEthAmount);
25
+ const [showAmountPrompt, setShowAmountPrompt] = useState(!initialB3Amount);
26
+ const [b3Amount, setB3Amount] = useState(initialB3Amount || "");
27
+ const [isAmountValid, setIsAmountValid] = useState(!!initialB3Amount);
29
28
  const [validationError, setValidationError] = useState("");
30
29
  const [tokenName, setTokenName] = useState("");
31
30
  const [tokenSymbol, setTokenSymbol] = useState("");
@@ -57,12 +56,12 @@ export function AnySpendBondKit({ mode = "modal", recipientAddress, contractAddr
57
56
  const [name, symbol] = await Promise.all([
58
57
  basePublicClient.readContract({
59
58
  address: contractAddress,
60
- abi: ABI_bondKit,
59
+ abi: BondkitTokenABI,
61
60
  functionName: "name",
62
61
  }),
63
62
  basePublicClient.readContract({
64
63
  address: contractAddress,
65
- abi: ABI_bondKit,
64
+ abi: BondkitTokenABI,
66
65
  functionName: "symbol",
67
66
  }),
68
67
  ]);
@@ -79,8 +78,8 @@ export function AnySpendBondKit({ mode = "modal", recipientAddress, contractAddr
79
78
  fetchTokenName();
80
79
  }
81
80
  }, [contractAddress, basePublicClient]);
82
- // Get native token data for the chain
83
- const { data: tokenData, isError: isTokenError, isLoading, } = useTokenData(baseMainnet.id, "0x0000000000000000000000000000000000000000");
81
+ // Get b3 token data
82
+ const { data: tokenData, isError: isTokenError, isLoading, } = useTokenData(baseMainnet.id, "0xB3B32F9f8827D4634fE7d973Fa1034Ec9fdDB3B3");
84
83
  // Convert token data to AnySpend Token type
85
84
  const dstToken = useMemo(() => {
86
85
  if (!tokenData)
@@ -116,16 +115,16 @@ export function AnySpendBondKit({ mode = "modal", recipientAddress, contractAddr
116
115
  setIsLoadingQuote(false);
117
116
  }
118
117
  }, 500), [bondkitTokenClient]);
119
- // Fetch initial quote if ethAmount is provided
118
+ // Fetch initial quote if b3Amount is provided
120
119
  useEffect(() => {
121
- if (initialEthAmount && bondkitTokenClient) {
122
- debouncedGetQuote(initialEthAmount);
120
+ if (initialB3Amount && bondkitTokenClient) {
121
+ debouncedGetQuote(initialB3Amount);
123
122
  }
124
- }, [initialEthAmount, bondkitTokenClient, debouncedGetQuote]);
123
+ }, [initialB3Amount, bondkitTokenClient, debouncedGetQuote]);
125
124
  const validateAndSetAmount = (value) => {
126
125
  // Allow empty input
127
126
  if (value === "") {
128
- setEthAmount("");
127
+ setB3Amount("");
129
128
  setIsAmountValid(false);
130
129
  setValidationError("");
131
130
  setQuote(null);
@@ -141,14 +140,14 @@ export function AnySpendBondKit({ mode = "modal", recipientAddress, contractAddr
141
140
  if ((value.match(/\./g) || []).length > 1) {
142
141
  return;
143
142
  }
144
- // Prevent more than 18 decimal places (ETH precision)
143
+ // Prevent more than 18 decimal places (B3 precision)
145
144
  const parts = value.split(".");
146
145
  if (parts[1] && parts[1].length > 18) {
147
146
  return;
148
147
  }
149
148
  // Clean the input - remove leading zeros if not decimal
150
149
  const cleanedValue = value.startsWith("0") && !value.startsWith("0.") ? value.replace(/^0+/, "0") : value;
151
- setEthAmount(cleanedValue);
150
+ setB3Amount(cleanedValue);
152
151
  try {
153
152
  const parsedAmount = parseEther(cleanedValue);
154
153
  if (parsedAmount <= BigInt(0)) {
@@ -166,7 +165,7 @@ export function AnySpendBondKit({ mode = "modal", recipientAddress, contractAddr
166
165
  setValidationError("Please enter a valid amount");
167
166
  }
168
167
  };
169
- const header = () => (_jsx("div", { className: "bg-as-surface-primary w-full px-6 py-4", children: _jsxs("div", { className: "flex w-full flex-col items-center space-y-6", children: [_jsxs("h2", { className: "text-[28px] font-bold", children: ["Buy ", tokenName, " (", tokenSymbol, ")"] }), _jsxs("div", { className: "flex w-full flex-col items-center space-y-2", children: [_jsxs("span", { className: "text-[28px] font-bold", children: [ethAmount, " ETH"] }), quote && (_jsxs("span", { className: "text-lg", children: ["\u2248 ", formatNumberWithCommas(parseFloat(quote).toFixed(4)), " ", tokenSymbol] }))] })] }) }));
168
+ const header = () => (_jsx("div", { className: "bg-as-surface-primary w-full px-6 py-4", children: _jsxs("div", { className: "flex w-full flex-col items-center space-y-6", children: [_jsxs("h2", { className: "text-[28px] font-bold", children: ["Buy ", tokenName, " (", tokenSymbol, ")"] }), _jsxs("div", { className: "flex w-full flex-col items-center space-y-2", children: [_jsxs("span", { className: "text-[28px] font-bold", children: [b3Amount, " B3"] }), quote && (_jsxs("span", { className: "text-lg", children: ["\u2248 ", formatNumberWithCommas(parseFloat(quote).toFixed(4)), " ", tokenSymbol] }))] })] }) }));
170
169
  // Show loading state while fetching token data
171
170
  if (isLoading) {
172
171
  return (_jsx(StyleRoot, { children: _jsx("div", { className: "b3-root b3-modal bg-b3-react-background flex w-full flex-col items-center p-8", children: _jsx("p", { className: "text-as-primary/70 text-center text-sm", children: "Loading payment information..." }) }) }));
@@ -188,18 +187,18 @@ export function AnySpendBondKit({ mode = "modal", recipientAddress, contractAddr
188
187
  opacity: hasMounted ? 1 : 0,
189
188
  y: hasMounted ? 0 : 20,
190
189
  filter: hasMounted ? "blur(0px)" : "blur(10px)",
191
- }, transition: { duration: 0.3, delay: 0.2, ease: "easeInOut" }, className: "bg-b3-react-background w-full p-6", children: _jsxs("div", { className: "space-y-4", children: [_jsx("div", { className: "flex items-center justify-between", children: _jsx("p", { className: "text-as-primary/70 text-sm font-medium", children: "ETH Amount" }) }), _jsx("div", { className: "relative", children: _jsx(Input, { type: "text", inputMode: "decimal", placeholder: "0.1", value: ethAmount, onChange: e => validateAndSetAmount(e.target.value), className: `h-14 px-4 text-lg ${!isAmountValid && ethAmount ? "border-as-red" : "border-b3-react-border"}` }) }), !isAmountValid && ethAmount && _jsx("p", { className: "text-as-red text-sm", children: validationError }), _jsxs("div", { className: "bg-as-on-surface-2/30 rounded-lg border border-white/10 p-4 backdrop-blur-sm", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-as-primary/70 text-sm font-medium", children: "Total Cost:" }), _jsx("div", { className: "flex items-center gap-2", children: _jsxs("span", { className: "text-as-primary text-lg font-bold", children: [ethAmount || "0", " ETH"] }) })] }), isLoadingQuote ? (_jsx("div", { className: "mt-2 text-center", children: _jsx("span", { className: "text-as-primary/70 text-sm", children: "Calculating tokens..." }) })) : quote ? (_jsxs("div", { className: "mt-2 flex items-center justify-between", children: [_jsx("span", { className: "text-as-primary/70 text-sm font-medium", children: "You'll receive:" }), _jsxs("span", { className: "text-as-primary text-sm font-medium", children: ["\u2248 ", formatNumberWithCommas(parseFloat(quote).toFixed(4)), " ", tokenSymbol] })] })) : null] }), _jsx(Button, { onClick: () => {
192
- if (isAmountValid && ethAmount) {
190
+ }, transition: { duration: 0.3, delay: 0.2, ease: "easeInOut" }, className: "bg-b3-react-background w-full p-6", children: _jsxs("div", { className: "space-y-4", children: [_jsx("div", { className: "flex items-center justify-between", children: _jsx("p", { className: "text-as-primary/70 text-sm font-medium", children: "B3 Amount" }) }), _jsx("div", { className: "relative", children: _jsx(Input, { type: "text", inputMode: "decimal", placeholder: "0.1", value: b3Amount, onChange: e => validateAndSetAmount(e.target.value), className: `h-14 px-4 text-lg ${!isAmountValid && b3Amount ? "border-as-red" : "border-b3-react-border"}` }) }), !isAmountValid && b3Amount && _jsx("p", { className: "text-as-red text-sm", children: validationError }), _jsxs("div", { className: "bg-as-on-surface-2/30 rounded-lg border border-white/10 p-4 backdrop-blur-sm", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-as-primary/70 text-sm font-medium", children: "Total Cost:" }), _jsx("div", { className: "flex items-center gap-2", children: _jsxs("span", { className: "text-as-primary text-lg font-bold", children: [b3Amount || "0", " B3"] }) })] }), isLoadingQuote ? (_jsx("div", { className: "mt-2 text-center", children: _jsx("span", { className: "text-as-primary/70 text-sm", children: "Calculating tokens..." }) })) : quote ? (_jsxs("div", { className: "mt-2 flex items-center justify-between", children: [_jsx("span", { className: "text-as-primary/70 text-sm font-medium", children: "You'll receive:" }), _jsxs("span", { className: "text-as-primary text-sm font-medium", children: ["\u2248 ", formatNumberWithCommas(parseFloat(quote).toFixed(4)), " ", tokenSymbol] })] })) : null] }), _jsx(Button, { onClick: () => {
191
+ if (isAmountValid && b3Amount) {
193
192
  setShowAmountPrompt(false);
194
193
  }
195
- }, disabled: !isAmountValid || !ethAmount || isLoadingQuote, className: "bg-as-brand hover:bg-as-brand/90 text-as-primary mt-4 h-14 w-full rounded-xl text-lg font-medium", children: "Continue" })] }) })] }) }));
194
+ }, disabled: !isAmountValid || !b3Amount || isLoadingQuote, className: "bg-as-brand hover:bg-as-brand/90 text-as-primary mt-4 h-14 w-full rounded-xl text-lg font-medium", children: "Continue" })] }) })] }) }));
196
195
  }
197
196
  const encodedData = encodeFunctionData({
198
- abi: ABI_bondKit,
197
+ abi: BondkitTokenABI,
199
198
  functionName: "buyFor",
200
- args: [recipientAddress, BigInt(minTokensOut)],
199
+ args: [recipientAddress, parseEther(b3Amount), BigInt(minTokensOut)],
201
200
  });
202
- return (_jsx(AnySpendCustom, { mode: mode, recipientAddress: recipientAddress, orderType: "custom", dstChainId: baseMainnet.id, dstToken: dstToken, dstAmount: parseEther(ethAmount).toString(), contractAddress: contractAddress, encodedData: encodedData, metadata: {
201
+ return (_jsx(AnySpendCustom, { mode: mode, recipientAddress: recipientAddress, orderType: "custom", dstChainId: baseMainnet.id, dstToken: dstToken, dstAmount: parseEther(b3Amount).toString(), contractAddress: contractAddress, encodedData: encodedData, metadata: {
203
202
  type: "custom",
204
203
  action: "BondKit Buy",
205
204
  }, header: header, onSuccess: onSuccess, showRecipient: true }));
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { B3_TOKEN } from "../../../anyspend/index.js";
3
3
  import { Button, GlareCardRounded, Input, StyleRoot, TextLoop, useHasMounted, useModalStore, useTokenBalance, useUnifiedChainSwitchAndExecute, } from "../../../global-account/react/index.js";
4
+ import { PUBLIC_BASE_RPC_URL } from "../../../shared/constants/index.js";
4
5
  import { baseMainnet } from "../../../shared/constants/chains/supported.js";
5
6
  import invariant from "invariant";
6
7
  import { ArrowRight, Loader2 } from "lucide-react";
@@ -82,7 +83,7 @@ function generateEncodedDataForBuyEntriesAndSpin(user, quantity) {
82
83
  }
83
84
  const basePublicClient = createPublicClient({
84
85
  chain: baseMainnet,
85
- transport: http(),
86
+ transport: http(PUBLIC_BASE_RPC_URL),
86
87
  });
87
88
  export function AnySpendBuySpin({ loadOrder, mode = "modal", spinwheelContractAddress, chainId, recipientAddress, prefillQuantity, onSuccess, }) {
88
89
  const hasMounted = useHasMounted();
@@ -413,7 +413,7 @@ function AnySpendCustomInner({ loadOrder, mode = "modal", activeTab: activeTabPr
413
413
  const historyView = (_jsx("div", { className: cn("mx-auto flex w-full max-w-2xl flex-col items-center p-5", mode === "modal" && "bg-b3-react-background"), children: _jsx(OrderHistory, { mode: mode, onBack: () => {
414
414
  setActivePanel(PanelView.HISTORY);
415
415
  }, onSelectOrder: onSelectOrder }) }));
416
- const orderDetailsView = (_jsxs("div", { className: cn("mx-auto flex w-full flex-col items-center gap-4", mode === "modal" && "bg-b3-react-background rounded-xl"), children: [oat && (_jsxs(_Fragment, { children: [_jsx(OrderStatusDisplay, { order: oat.data.order }), _jsx(OrderDetails, { mode: mode, order: oat.data.order, depositTxs: oat.data.depositTxs, relayTx: oat.data.relayTx, executeTx: oat.data.executeTx, refundTxs: oat.data.refundTxs, cryptoPaymentMethod: activeTab === "fiat" ? CryptoPaymentMethodType.NONE : selectedCryptoPaymentMethod, onBack: () => {
416
+ const orderDetailsView = (_jsxs("div", { className: cn("mx-auto flex w-full flex-col items-center gap-4", mode === "modal" && "bg-b3-react-background rounded-xl"), children: [oat && (_jsxs(_Fragment, { children: [_jsx(OrderStatusDisplay, { order: oat.data.order, selectedCryptoPaymentMethod: selectedCryptoPaymentMethod }), _jsx(OrderDetails, { mode: mode, order: oat.data.order, depositTxs: oat.data.depositTxs, relayTx: oat.data.relayTx, executeTx: oat.data.executeTx, refundTxs: oat.data.refundTxs, cryptoPaymentMethod: activeTab === "fiat" ? CryptoPaymentMethodType.NONE : selectedCryptoPaymentMethod, onBack: () => {
417
417
  setOrderId(undefined);
418
418
  setActivePanel(PanelView.CONFIRM_ORDER);
419
419
  // Remove orderId from URL when canceling
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { ABI_ERC20_STAKING, B3_TOKEN } from "../../../anyspend/index.js";
3
3
  import { Button, GlareCardRounded, Input, StyleRoot, TextLoop, useHasMounted, useModalStore, useTokenBalance, useUnifiedChainSwitchAndExecute, } from "../../../global-account/react/index.js";
4
+ import { PUBLIC_BASE_RPC_URL } from "../../../shared/constants/index.js";
4
5
  import { formatTokenAmount } from "../../../shared/utils/number.js";
5
6
  import invariant from "invariant";
6
7
  import { ArrowRight, Loader2 } from "lucide-react";
@@ -16,7 +17,7 @@ import { SolIcon } from "./icons/SolIcon.js";
16
17
  import { UsdcIcon } from "./icons/USDCIcon.js";
17
18
  const basePublicClient = createPublicClient({
18
19
  chain: base,
19
- transport: http(),
20
+ transport: http(PUBLIC_BASE_RPC_URL),
20
21
  });
21
22
  const ERC20Staking = "0xbf04200be3cbf371467a539706393c81c470f523";
22
23
  function generateEncodedDataForStakingB3(amount, beneficiary) {
@@ -1,4 +1,4 @@
1
- export declare function AnySpendDepositHype(props: {
1
+ export interface AnySpendDepositHypeProps {
2
2
  loadOrder?: string;
3
3
  mode?: "modal" | "page";
4
4
  recipientAddress: string;
@@ -7,4 +7,6 @@ export declare function AnySpendDepositHype(props: {
7
7
  sourceTokenChainId?: number;
8
8
  onSuccess?: () => void;
9
9
  depositContractAddress?: string;
10
- }): import("react/jsx-runtime").JSX.Element;
10
+ mainFooter?: React.ReactNode;
11
+ }
12
+ export declare function AnySpendDepositHype(props: AnySpendDepositHypeProps): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,5 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { B3_TOKEN } from "../../../anyspend/index.js";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { B3_TOKEN, DEPOSIT_HYPE_ACTION } from "../../../anyspend/index.js";
3
3
  import { Button, ShinyButton, StyleRoot, TransitionPanel } from "../../../global-account/react/index.js";
4
4
  import { cn } from "../../../shared/utils/cn.js";
5
5
  import invariant from "invariant";
@@ -21,6 +21,7 @@ import { RecipientSelection } from "./common/RecipientSelection.js";
21
21
  import { ESCROW_ABI } from "../../../anyspend/abis/escrow.js";
22
22
  import { ArrowDown } from "lucide-react";
23
23
  import { PanelOnramp } from "./common/PanelOnramp.js";
24
+ const SLIPPAGE_PERCENT = 3;
24
25
  function generateEncodedDataForDepositHype(amount, beneficiary) {
25
26
  invariant(BigInt(amount) > 0, "Amount must be greater than zero");
26
27
  const encodedData = encodeFunctionData({
@@ -34,9 +35,9 @@ export function AnySpendDepositHype(props) {
34
35
  const fingerprintConfig = getFingerprintConfig();
35
36
  return (_jsx(AnySpendFingerprintWrapper, { fingerprint: fingerprintConfig, children: _jsx(AnySpendDepositHypeInner, { ...props }) }));
36
37
  }
37
- function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress, paymentType = "crypto", sourceTokenAddress, sourceTokenChainId, onSuccess, depositContractAddress, }) {
38
+ function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress, paymentType = "crypto", sourceTokenAddress, sourceTokenChainId, onSuccess, depositContractAddress, mainFooter, }) {
38
39
  // Use shared flow hook
39
- const { activePanel, setActivePanel, orderId, oat, selectedSrcChainId, setSelectedSrcChainId, selectedSrcToken, setSelectedSrcToken, srcAmount, setSrcAmount, dstAmount, setIsSrcInputDirty, selectedCryptoPaymentMethod, setSelectedCryptoPaymentMethod, selectedFiatPaymentMethod, setSelectedFiatPaymentMethod, selectedRecipientAddress, setSelectedRecipientAddress, recipientName, globalAddress, anyspendQuote, isLoadingAnyspendQuote, getAnyspendQuoteError, activeInputAmountInWei, geoData, coinbaseAvailablePaymentMethods, stripeWeb2Support, createOrder, isCreatingOrder, createOnrampOrder, isCreatingOnrampOrder, } = useAnyspendFlow({
40
+ const { activePanel, setActivePanel, orderId, setOrderId, oat, selectedSrcChainId, setSelectedSrcChainId, selectedSrcToken, setSelectedSrcToken, srcAmount, setSrcAmount, dstAmount, setIsSrcInputDirty, selectedCryptoPaymentMethod, setSelectedCryptoPaymentMethod, selectedFiatPaymentMethod, setSelectedFiatPaymentMethod, selectedRecipientAddress, setSelectedRecipientAddress, recipientName, globalAddress, anyspendQuote, isLoadingAnyspendQuote, getAnyspendQuoteError, activeInputAmountInWei, geoData, coinbaseAvailablePaymentMethods, stripeWeb2Support, createOrder, isCreatingOrder, createOnrampOrder, isCreatingOnrampOrder, } = useAnyspendFlow({
40
41
  paymentType,
41
42
  recipientAddress,
42
43
  loadOrder,
@@ -44,6 +45,7 @@ function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress,
44
45
  onTransactionSuccess: onSuccess,
45
46
  sourceTokenAddress,
46
47
  sourceTokenChainId,
48
+ slippage: SLIPPAGE_PERCENT,
47
49
  });
48
50
  // Button state logic
49
51
  const btnInfo = useMemo(() => {
@@ -116,6 +118,10 @@ function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress,
116
118
  await handleFiatOrder();
117
119
  }
118
120
  };
121
+ const mainView = (_jsxs("div", { className: "mx-auto flex w-[460px] max-w-full flex-col items-center gap-2", children: [_jsx("div", { className: "mb-4 flex flex-col items-center gap-3 text-center", children: _jsx("div", { children: _jsx("h1", { className: "text-as-primary text-xl font-bold", children: paymentType === "crypto" ? "Deposit Crypto" : "Fund with Fiat" }) }) }), _jsx("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: _jsxs("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: [paymentType === "crypto" ? (_jsx(PaySection, { paymentType: "crypto", selectedSrcChainId: selectedSrcChainId, setSelectedSrcChainId: setSelectedSrcChainId, selectedSrcToken: selectedSrcToken, setSelectedSrcToken: setSelectedSrcToken, srcAmount: srcAmount, setSrcAmount: setSrcAmount, setIsSrcInputDirty: setIsSrcInputDirty, selectedCryptoPaymentMethod: selectedCryptoPaymentMethod, selectedFiatPaymentMethod: selectedFiatPaymentMethod, onSelectCryptoPaymentMethod: () => setActivePanel(PanelView.CRYPTO_PAYMENT_METHOD), onSelectFiatPaymentMethod: () => setActivePanel(PanelView.FIAT_PAYMENT_METHOD), anyspendQuote: anyspendQuote })) : (_jsx(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: _jsx(PanelOnramp, { srcAmountOnRamp: srcAmount, setSrcAmountOnRamp: setSrcAmount, selectedPaymentMethod: selectedFiatPaymentMethod, setActivePanel: setActivePanel, _recipientAddress: recipientAddress, destinationToken: B3_TOKEN, destinationChainId: base.id, destinationAmount: dstAmount, onDestinationTokenChange: () => { }, onDestinationChainChange: () => { }, fiatPaymentMethodIndex: PanelView.FIAT_PAYMENT_METHOD, recipientSelectionPanelIndex: PanelView.RECIPIENT_SELECTION }) })), _jsx("div", { className: cn("relative -my-1 flex h-0 items-center justify-center", paymentType === "fiat" && "hidden"), children: _jsx(Button, { variant: "ghost", className: 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: _jsx("div", { className: "relative flex items-center justify-center transition-opacity", children: _jsx(ArrowDown, { className: "text-as-primary/50 h-5 w-5" }) }) }) }), paymentType === "crypto" && (_jsx(CryptoReceiveSection, { isDepositMode: false, isBuyMode: true, selectedRecipientAddress: recipientAddress, recipientName: recipientName || undefined, onSelectRecipient: () => setActivePanel(PanelView.RECIPIENT_SELECTION), dstAmount: dstAmount, dstToken: B3_TOKEN, selectedDstChainId: base.id, setSelectedDstChainId: () => { }, setSelectedDstToken: () => { }, onChangeDstAmount: value => {
122
+ setIsSrcInputDirty(false);
123
+ setSrcAmount(value);
124
+ }, anyspendQuote: anyspendQuote }))] }) }), _jsx(ErrorSection, { error: getAnyspendQuoteError }), _jsx(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: cn("mt-4 flex w-full max-w-[460px] flex-col gap-2", getAnyspendQuoteError && "mt-0"), children: _jsx(ShinyButton, { accentColor: "hsl(var(--as-brand))", disabled: btnInfo.disable, onClick: onMainButtonClick, className: cn("as-main-button relative w-full", btnInfo.error ? "!bg-as-red" : btnInfo.disable ? "!bg-as-on-surface-2" : "!bg-as-brand"), textClassName: cn(btnInfo.error ? "text-white" : btnInfo.disable ? "text-as-secondary" : "text-white"), children: btnInfo.text }) }), mainFooter ? mainFooter : null] }));
119
125
  // Handle crypto order creation
120
126
  const handleCryptoOrder = async () => {
121
127
  try {
@@ -123,7 +129,10 @@ function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress,
123
129
  invariant(selectedRecipientAddress, "Recipient address is not found");
124
130
  invariant(depositContractAddress, "Deposit contract address is not found");
125
131
  const srcAmountBigInt = BigInt(activeInputAmountInWei);
126
- const depositAmountWei = anyspendQuote.data?.currencyOut?.amount || "0";
132
+ // TODO: temp subtract 3% for slippage
133
+ const originalDepositAmountWei = anyspendQuote.data?.currencyOut?.amount || "0";
134
+ const depositAmountWei = ((BigInt(originalDepositAmountWei) * BigInt(100 - SLIPPAGE_PERCENT)) /
135
+ BigInt(100)).toString();
127
136
  const encodedData = generateEncodedDataForDepositHype(depositAmountWei, selectedRecipientAddress);
128
137
  createOrder({
129
138
  recipientAddress: selectedRecipientAddress,
@@ -138,7 +147,7 @@ function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress,
138
147
  amount: depositAmountWei,
139
148
  data: encodedData,
140
149
  to: depositContractAddress,
141
- action: "deposit HYPE",
150
+ action: DEPOSIT_HYPE_ACTION,
142
151
  },
143
152
  });
144
153
  }
@@ -200,7 +209,7 @@ function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress,
200
209
  amount: depositAmountWei,
201
210
  data: encodedData,
202
211
  to: depositContractAddress,
203
- action: "deposit HYPE",
212
+ action: DEPOSIT_HYPE_ACTION,
204
213
  },
205
214
  });
206
215
  }
@@ -210,7 +219,8 @@ function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress,
210
219
  }
211
220
  };
212
221
  // Order details view
213
- const orderDetailsView = (_jsx("div", { className: "mx-auto w-[460px] max-w-full", children: _jsx("div", { className: "relative flex flex-col gap-4", children: oat && (_jsxs(_Fragment, { children: [_jsx(OrderStatus, { order: oat.data.order }), _jsx(OrderDetails, { mode: mode, order: oat.data.order, depositTxs: oat.data.depositTxs, relayTx: oat.data.relayTx, executeTx: oat.data.executeTx, refundTxs: oat.data.refundTxs, cryptoPaymentMethod: paymentType === "fiat" ? CryptoPaymentMethodType.NONE : selectedCryptoPaymentMethod, onBack: () => {
222
+ const orderDetailsView = (_jsx("div", { className: "mx-auto w-[460px] max-w-full", children: _jsx("div", { className: "relative flex flex-col gap-4", children: oat && (_jsxs(_Fragment, { children: [_jsx(OrderStatus, { order: oat.data.order, selectedCryptoPaymentMethod: selectedCryptoPaymentMethod }), _jsx(OrderDetails, { mode: mode, order: oat.data.order, depositTxs: oat.data.depositTxs, relayTx: oat.data.relayTx, executeTx: oat.data.executeTx, refundTxs: oat.data.refundTxs, cryptoPaymentMethod: paymentType === "fiat" ? CryptoPaymentMethodType.NONE : selectedCryptoPaymentMethod, onBack: () => {
223
+ setOrderId(undefined);
214
224
  setActivePanel(PanelView.MAIN);
215
225
  onSuccess?.();
216
226
  } })] })) }) }));
@@ -244,10 +254,7 @@ function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress,
244
254
  center: { x: 0, opacity: 1 },
245
255
  exit: { x: -300, opacity: 0 },
246
256
  }, transition: { type: "spring", stiffness: 300, damping: 30 }, children: [
247
- _jsx("div", { className: cn(mode === "page" && "p-6"), children: _jsxs("div", { className: "mx-auto flex w-[460px] max-w-full flex-col items-center gap-2", children: [_jsx("div", { className: "mb-4 flex flex-col items-center gap-3 text-center", children: _jsx("div", { children: _jsx("h1", { className: "text-as-primary text-xl font-bold", children: paymentType === "crypto" ? "Deposit Crypto" : "Fund with Fiat" }) }) }), _jsx("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: _jsxs("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: [paymentType === "crypto" ? (_jsx(PaySection, { paymentType: "crypto", selectedSrcChainId: selectedSrcChainId, setSelectedSrcChainId: setSelectedSrcChainId, selectedSrcToken: selectedSrcToken, setSelectedSrcToken: setSelectedSrcToken, srcAmount: srcAmount, setSrcAmount: setSrcAmount, setIsSrcInputDirty: setIsSrcInputDirty, selectedCryptoPaymentMethod: selectedCryptoPaymentMethod, selectedFiatPaymentMethod: selectedFiatPaymentMethod, onSelectCryptoPaymentMethod: () => setActivePanel(PanelView.CRYPTO_PAYMENT_METHOD), onSelectFiatPaymentMethod: () => setActivePanel(PanelView.FIAT_PAYMENT_METHOD), anyspendQuote: anyspendQuote })) : (_jsx(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: _jsx(PanelOnramp, { srcAmountOnRamp: srcAmount, setSrcAmountOnRamp: setSrcAmount, selectedPaymentMethod: selectedFiatPaymentMethod, setActivePanel: setActivePanel, _recipientAddress: recipientAddress, destinationToken: B3_TOKEN, destinationChainId: base.id, destinationAmount: dstAmount, onDestinationTokenChange: () => { }, onDestinationChainChange: () => { }, fiatPaymentMethodIndex: PanelView.FIAT_PAYMENT_METHOD }) })), _jsx(Button, { variant: "ghost", className: cn("swap-direction-button border-as-stroke bg-as-surface-primary absolute left-1/2 top-[calc(50%+56px)] z-10 h-10 w-10 -translate-x-1/2 -translate-y-1/2 cursor-default rounded-xl border-2 sm:h-8 sm:w-8 sm:rounded-xl", paymentType === "fiat" && "hidden"), children: _jsx("div", { className: "relative flex items-center justify-center transition-opacity", children: _jsx(ArrowDown, { className: "text-as-primary/50 h-5 w-5" }) }) }), paymentType === "crypto" && (_jsx(CryptoReceiveSection, { isDepositMode: false, isBuyMode: true, selectedRecipientAddress: recipientAddress, recipientName: recipientName || undefined, onSelectRecipient: () => setActivePanel(PanelView.RECIPIENT_SELECTION), dstAmount: dstAmount, dstToken: B3_TOKEN, selectedDstChainId: base.id, setSelectedDstChainId: () => { }, setSelectedDstToken: () => { }, onChangeDstAmount: value => {
248
- setIsSrcInputDirty(false);
249
- setSrcAmount(value);
250
- }, anyspendQuote: anyspendQuote }))] }) }), _jsx(ErrorSection, { error: getAnyspendQuoteError }), _jsx(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: cn("mt-4 flex w-full max-w-[460px] flex-col gap-2", getAnyspendQuoteError && "mt-0"), children: _jsx(ShinyButton, { accentColor: "hsl(var(--as-brand))", disabled: btnInfo.disable, onClick: onMainButtonClick, className: cn("as-main-button relative w-full", btnInfo.error ? "!bg-as-red" : btnInfo.disable ? "!bg-as-on-surface-2" : "!bg-as-brand"), textClassName: cn(btnInfo.error ? "text-white" : btnInfo.disable ? "text-as-secondary" : "text-white"), children: btnInfo.text }) })] }) }, "main-view"),
257
+ _jsx("div", { className: cn(mode === "page" && "p-6"), children: mainView }, "main-view"),
251
258
  _jsx("div", { className: cn(mode === "page" && "p-6"), children: cryptoPaymentMethodView }, "crypto-payment-method-view"),
252
259
  _jsx("div", { className: cn(mode === "page" && "p-6"), children: fiatPaymentMethodView }, "fiat-payment-method-view"),
253
260
  _jsx("div", { className: cn(mode === "page" && "p-6"), children: recipientSelectionView }, "recipient-selection-view"),
@@ -2,13 +2,16 @@
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { RELAY_SOLANA_MAINNET_CHAIN_ID } from "../../../../anyspend/index.js";
4
4
  import { ShinyButton, useProfile } from "../../../../global-account/react/index.js";
5
+ import centerTruncate from "../../../../shared/utils/centerTruncate.js";
5
6
  import { formatTokenAmount } from "../../../../shared/utils/number.js";
6
7
  import { motion } from "framer-motion";
7
8
  import { ChevronRight, Loader2 } from "lucide-react";
9
+ import { useAccount } from "wagmi";
8
10
  import { OrderDetailsCollapsible } from "./OrderDetailsCollapsible.js";
9
11
  export default function ConnectWalletPayment({ order, onPayment, txLoading, isSwitchingOrExecuting, phantomWalletAddress, tournament, nft, }) {
10
12
  const profile = useProfile({ address: order.recipientAddress });
11
13
  const recipientName = profile.data?.name?.replace(/\.b3\.fun/g, "");
14
+ const { address: connectedAddress } = useAccount();
12
15
  const srcToken = order.metadata.srcToken;
13
16
  const dstToken = order.metadata.dstToken;
14
17
  const expectedDstAmount = order.type === "mint_nft" ||
@@ -23,5 +26,7 @@ export default function ConnectWalletPayment({ order, onPayment, txLoading, isSw
23
26
  }
24
27
  return (_jsx("div", { className: "flex w-full flex-col items-center gap-6", children: _jsxs(motion.div, { initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { delay: 0.5 }, className: "flex w-full flex-col items-center gap-2", children: [_jsx(ShinyButton, { accentColor: "hsl(var(--as-brand))", textColor: "text-white", className: "flex w-5/6 max-w-[400px] items-center gap-2 sm:px-0", disabled: txLoading || isSwitchingOrExecuting, onClick: onPayment, children: txLoading ? (_jsxs(_Fragment, { children: ["Transaction Pending", _jsx(Loader2, { className: "ml-2 h-5 w-5 animate-spin" })] })) : (_jsxs(_Fragment, { children: [_jsx("span", { className: "whitespace-nowrap pl-4 text-lg md:text-sm", children: order.srcChain === RELAY_SOLANA_MAINNET_CHAIN_ID && phantomWalletAddress
25
28
  ? "Pay from Phantom Wallet"
26
- : "Pay from Connected Wallet" }), _jsx(ChevronRight, { className: "h-4 w-4" })] })) }), _jsx("div", { className: "mt-4", children: _jsx(OrderDetailsCollapsible, { order: order, dstToken: dstToken, tournament: tournament, nft: nft, recipientName: recipientName, formattedExpectedDstAmount: formattedExpectedDstAmount }) })] }) }));
29
+ : "Pay from Connected Wallet" }), _jsx(ChevronRight, { className: "h-4 w-4" })] })) }), _jsxs("span", { className: "label-style text-as-primary/50 text-xs", children: ["Connected to:", " ", order.srcChain === RELAY_SOLANA_MAINNET_CHAIN_ID && phantomWalletAddress
30
+ ? centerTruncate(phantomWalletAddress, 6)
31
+ : centerTruncate(connectedAddress || "")] }), _jsx("div", { className: "mt-4", children: _jsx(OrderDetailsCollapsible, { order: order, dstToken: dstToken, tournament: tournament, nft: nft, recipientName: recipientName, formattedExpectedDstAmount: formattedExpectedDstAmount }) })] }) }));
27
32
  }
@@ -1,17 +1,13 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useAccountWallet } from "../../../../global-account/react/index.js";
4
- import { thirdwebB3Mainnet } from "../../../../shared/constants/chains/b3Chain.js";
5
4
  import { cn } from "../../../../shared/utils/cn.js";
6
5
  import { shortenAddress } from "../../../../shared/utils/formatAddress.js";
7
- import { client } from "../../../../shared/utils/thirdweb.js";
8
- import { ChevronLeft, ChevronRightCircle, Wallet, X } from "lucide-react";
6
+ import { ChevronLeft, ChevronRightCircle, Wallet, X, ZapIcon } from "lucide-react";
9
7
  import { useState } from "react";
10
8
  import { createPortal } from "react-dom";
11
9
  import { toast } from "sonner";
12
- import { ConnectEmbed, lightTheme, useActiveWallet, useDisconnect as useThirdwebDisconnect } from "thirdweb/react";
13
- import { createWallet } from "thirdweb/wallets";
14
- import { useDisconnect } from "wagmi";
10
+ import { useAccount, useConnect, useDisconnect, useWalletClient } from "wagmi";
15
11
  export var CryptoPaymentMethodType;
16
12
  (function (CryptoPaymentMethodType) {
17
13
  CryptoPaymentMethodType["NONE"] = "none";
@@ -20,45 +16,132 @@ export var CryptoPaymentMethodType;
20
16
  })(CryptoPaymentMethodType || (CryptoPaymentMethodType = {}));
21
17
  export function CryptoPaymentMethod({ selectedPaymentMethod, setSelectedPaymentMethod, isCreatingOrder, onBack, onSelectPaymentMethod, }) {
22
18
  const { wallet: globalWallet } = useAccountWallet();
23
- const activeWallet = useActiveWallet();
19
+ const { address, isConnected, connector } = useAccount();
20
+ const { connect, connectors, isPending } = useConnect();
24
21
  const { disconnect } = useDisconnect();
25
- const { disconnect: disconnectThirdweb } = useThirdwebDisconnect();
22
+ const { data: walletClient } = useWalletClient();
26
23
  const [showWalletModal, setShowWalletModal] = useState(false);
27
- // Define available wallets for the modal
28
- const availableWallets = [
29
- createWallet("io.metamask"),
30
- // createWallet("com.coinbase.wallet"),
31
- createWallet("me.rainbow"),
32
- createWallet("walletConnect"),
33
- createWallet("io.rabby"),
34
- createWallet("app.phantom"),
35
- ];
36
- return (_jsxs("div", { className: "crypto-payment-method mx-auto h-fit w-[460px] max-w-full", children: [_jsxs("div", { className: cn("relative flex flex-col gap-10"), children: [_jsx("button", { onClick: onBack, className: "text-as-quaternary hover:text-as-primary absolute flex h-8 w-8 items-center justify-center rounded-lg transition-colors", children: _jsx(ChevronLeft, { className: "h-6 w-6" }) }), _jsx("div", { className: "flex items-center justify-around gap-4", children: _jsx("div", { className: "flex-1 text-center", children: _jsx("h2", { className: "text-as-primary text-lg font-semibold", children: "Choose payment method" }) }) }), _jsxs("div", { className: "crypto-payment-methods flex flex-col gap-3", children: [!activeWallet ? (
37
- // Not connected - show single connect button
38
- _jsxs("button", { onClick: () => setShowWalletModal(true), className: "crypto-payment-method-connect-wallet bg-as-surface-primary border-as-border-secondary hover:border-as-secondary/80 group flex w-full items-center justify-between gap-4 rounded-xl border px-4 py-3.5 transition-all duration-200 hover:shadow-md", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "wallet-icon flex h-8 w-8 items-center justify-center rounded-full bg-blue-100", children: _jsx(Wallet, { className: "h-4 w-4 text-blue-600" }) }), _jsxs("div", { className: "flex flex-col items-start text-left", children: [_jsx("h4", { className: "text-as-primary font-semibold", children: "Connect wallet" }), _jsx("p", { className: "text-as-primary/60 text-sm", children: "Choose from multiple wallet options" })] })] }), _jsx(ChevronRightCircle, { className: "text-as-primary/40 group-hover:text-as-primary/60 h-5 w-5 transition-colors" })] })) : (
39
- // Connected - show wallet info
40
- _jsx("div", { className: "crypto-payment-method-connect-wallet wallet-connected bg-as-surface-primary border-as-border-secondary rounded-xl border", children: _jsxs("div", { className: "flex items-center justify-between p-4", children: [_jsxs("div", { className: "flex items-center gap-3", children: [globalWallet?.meta?.icon ? (_jsx("img", { src: globalWallet.meta.icon, alt: "Connected Wallet", className: "h-8 w-8 rounded-full" })) : (_jsx("div", { className: "wallet-icon flex h-8 w-8 items-center justify-center rounded-full bg-green-100", children: _jsx(Wallet, { className: "h-4 w-4 text-green-600" }) })), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-as-primary font-semibold", children: "Connected Wallet" }), _jsx("span", { className: "text-as-primary/60 text-sm", children: shortenAddress(activeWallet.getAccount()?.address || "") })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { onClick: () => {
41
- setSelectedPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
42
- onSelectPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
43
- }, className: "bg-as-brand hover:bg-as-brand/90 rounded-lg px-3 py-1.5 text-sm font-medium text-white transition-colors", children: "Use Wallet" }), _jsx("button", { onClick: async () => {
44
- disconnect();
45
- disconnectThirdweb(activeWallet);
46
- toast.success("Wallet disconnected");
47
- if (selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET) {
48
- setSelectedPaymentMethod(CryptoPaymentMethodType.NONE);
49
- }
50
- }, className: "text-as-primary/60 hover:text-as-primary/80 rounded-lg p-1.5 transition-colors", children: _jsx(X, { className: "h-4 w-4" }) })] })] }) })), _jsxs("button", { onClick: () => {
24
+ // Define available wallet connectors
25
+ const availableConnectors = connectors.filter(connector => ["MetaMask", "WalletConnect", "Coinbase Wallet", "Rainbow"].includes(connector.name));
26
+ // Define wallet options with icons and info
27
+ const walletOptions = [
28
+ {
29
+ id: "metamask",
30
+ name: "MetaMask",
31
+ icon: "🦊",
32
+ description: "Connect using MetaMask browser extension",
33
+ connector: availableConnectors.find(c => c.name === "MetaMask"),
34
+ },
35
+ {
36
+ id: "coinbase",
37
+ name: "Coinbase Wallet",
38
+ icon: "🔵",
39
+ description: "Connect using Coinbase Wallet",
40
+ connector: availableConnectors.find(c => c.name === "Coinbase Wallet"),
41
+ },
42
+ {
43
+ id: "rainbow",
44
+ name: "Rainbow",
45
+ icon: "🌈",
46
+ description: "Connect using Rainbow wallet",
47
+ connector: availableConnectors.find(c => c.name === "Rainbow"),
48
+ },
49
+ {
50
+ id: "walletconnect",
51
+ name: "WalletConnect",
52
+ icon: "🔗",
53
+ description: "Connect using WalletConnect protocol",
54
+ connector: availableConnectors.find(c => c.name === "WalletConnect"),
55
+ },
56
+ {
57
+ id: "phantom",
58
+ name: "Phantom",
59
+ icon: "https://phantom.app/favicon.ico",
60
+ description: "Connect using Phantom wallet",
61
+ connector: availableConnectors.find(c => c.name === "Phantom"),
62
+ },
63
+ ].filter(wallet => wallet.connector); // Only show wallets that have available connectors
64
+ // Reset modal state when closing
65
+ const handleCloseModal = () => {
66
+ setShowWalletModal(false);
67
+ };
68
+ // Function to request wallet permissions for specific wallet
69
+ const requestWalletPermissions = async (walletConnector) => {
70
+ try {
71
+ // If a specific wallet connector is provided and it's different from current
72
+ if (walletConnector && connector?.name !== walletConnector.name) {
73
+ // Disconnect current and connect to the selected wallet
74
+ // if (isConnected) {
75
+ // disconnect();
76
+ // // Small delay to ensure disconnection
77
+ // await new Promise(resolve => setTimeout(resolve, 100));
78
+ // }
79
+ await connect({ connector: walletConnector });
80
+ setSelectedPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
81
+ onSelectPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
82
+ toast.success(`Connected to ${walletConnector.name}`);
83
+ return;
84
+ }
85
+ // If same wallet or no specific wallet, request permissions for account switching
86
+ if (walletClient && "request" in walletClient) {
87
+ await walletClient.request({
88
+ method: "wallet_requestPermissions",
89
+ params: [{ eth_accounts: {} }],
90
+ });
91
+ toast.success("Account selection completed");
92
+ setSelectedPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
93
+ onSelectPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
94
+ }
95
+ else {
96
+ // Fallback: show modal for manual wallet selection
97
+ setShowWalletModal(true);
98
+ }
99
+ }
100
+ catch (error) {
101
+ console.error("Failed to request wallet permissions:", error);
102
+ if (error && typeof error === "object" && "message" in error) {
103
+ const errorMessage = error.message.toLowerCase();
104
+ if (errorMessage.includes("rejected") ||
105
+ errorMessage.includes("denied") ||
106
+ errorMessage.includes("cancelled")) {
107
+ toast.error("Account selection cancelled");
108
+ }
109
+ else {
110
+ toast.error("Failed to open account selection");
111
+ }
112
+ }
113
+ else {
114
+ toast.error("Failed to open account selection");
115
+ }
116
+ }
117
+ };
118
+ return (_jsxs("div", { className: "crypto-payment-method mx-auto h-fit w-[460px] max-w-full", children: [_jsxs("div", { className: cn("relative flex flex-col gap-10"), children: [_jsx("button", { onClick: onBack, className: "text-as-quaternary hover:text-as-primary absolute flex h-8 w-8 items-center justify-center rounded-lg transition-colors", children: _jsx(ChevronLeft, { className: "h-6 w-6" }) }), _jsx("div", { className: "flex items-center justify-around gap-4", children: _jsx("div", { className: "flex-1 text-center", children: _jsx("h2", { className: "text-as-primary text-lg font-semibold", children: "Select a payment method" }) }) }), _jsxs("div", { className: "crypto-payment-methods flex flex-col gap-6", children: [_jsxs("button", { onClick: () => {
119
+ // Always show wallet selection modal first
120
+ setShowWalletModal(true);
121
+ }, className: "crypto-payment-method-connect-wallet bg-as-surface-primary border-as-border-secondary hover:border-as-secondary/80 group flex w-full items-center justify-between gap-4 rounded-xl border px-4 py-3.5 transition-all duration-200 hover:shadow-md", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "wallet-icon flex h-8 w-8 items-center justify-center rounded-full bg-blue-100", children: _jsx(Wallet, { className: "h-4 w-4 text-blue-600" }) }), _jsx("div", { className: "flex flex-col items-start text-left", children: _jsx("h4", { className: "text-as-primary font-semibold", children: "Connect wallet" }) })] }), _jsx(ChevronRightCircle, { className: "text-as-primary/40 group-hover:text-as-primary/60 h-5 w-5 transition-colors" })] }), _jsxs("button", { onClick: () => {
51
122
  setSelectedPaymentMethod(CryptoPaymentMethodType.TRANSFER_CRYPTO);
52
123
  onSelectPaymentMethod(CryptoPaymentMethodType.TRANSFER_CRYPTO);
53
- }, disabled: isCreatingOrder, className: "crypto-payment-method-transfer bg-as-surface-primary border-as-border-secondary hover:border-as-secondary/80 group flex w-full items-center justify-between gap-4 rounded-xl border px-4 py-3.5 transition-all duration-200 hover:shadow-md", children: [_jsx("div", { className: "flex flex-col items-start text-left", children: _jsx("h4", { className: "text-as-primary font-semibold", children: "Transfer crypto" }) }), _jsx(ChevronRightCircle, { className: "text-as-primary/40 group-hover:text-as-primary/60 h-5 w-5 transition-colors" })] })] })] }), showWalletModal &&
54
- createPortal(_jsx("div", { className: "pointer-events-auto fixed inset-0 z-[9999] flex items-center justify-center bg-black/50", children: _jsxs("div", { className: "max-h-[80vh] w-[400px] max-w-[90vw] overflow-auto rounded-xl bg-white p-6 dark:bg-gray-900", children: [_jsxs("div", { className: "mb-4 flex items-center justify-between", children: [_jsx("h3", { className: "text-lg font-semibold text-gray-900 dark:text-white", children: "Connect Wallet" }), _jsx("button", { onClick: () => setShowWalletModal(false), className: "text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200", children: _jsx(X, { className: "h-5 w-5" }) })] }), _jsx(ConnectEmbed, { client: client, chain: thirdwebB3Mainnet, wallets: availableWallets, showThirdwebBranding: false, theme: lightTheme(), onConnect: async (wallet) => {
55
- console.log("Wallet connected:", wallet);
56
- // setShowWalletModal(false);
57
- setSelectedPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
58
- onSelectPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
59
- setShowWalletModal(false);
60
- }, style: {
61
- width: "100%",
62
- minHeight: "300px",
63
- } })] }) }), typeof window !== "undefined" ? document.getElementById("b3-root") || document.body : document.body)] }));
124
+ }, disabled: isCreatingOrder, className: "crypto-payment-method-transfer bg-as-surface-primary border-as-border-secondary hover:border-as-secondary/80 group flex w-full items-center justify-between gap-4 rounded-xl border px-4 py-3.5 transition-all duration-200 hover:shadow-md", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "wallet-icon flex h-8 w-8 items-center justify-center rounded-full bg-orange-100", children: _jsx(ZapIcon, { className: "h-4 w-4" }) }), _jsx("div", { className: "flex flex-col items-start text-left", children: _jsx("h4", { className: "text-as-primary font-semibold", children: "Transfer crypto" }) })] }), _jsx(ChevronRightCircle, { className: "text-as-primary/40 group-hover:text-as-primary/60 h-5 w-5 transition-colors" })] }), isConnected && (_jsxs("div", { className: "installed-wallets", children: [_jsx("h3", { className: "text-as-primary/80 mb-3 text-sm font-medium", children: "Connected wallets" }), _jsx("div", { className: "space-y-2", children: _jsx("button", { onClick: () => {
125
+ setSelectedPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
126
+ onSelectPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
127
+ toast.success(`Selected ${connector?.name || "wallet"}`);
128
+ }, className: cn("crypto-payment-method-connect-wallet w-full rounded-xl border p-4 text-left transition-all hover:shadow-md", selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET
129
+ ? "connected-wallet border-as-brand bg-as-brand/5"
130
+ : "border-as-border-secondary bg-as-surface-primary hover:border-as-secondary/80"), children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [globalWallet?.meta?.icon ? (_jsx("img", { src: globalWallet.meta.icon, alt: "Wallet", className: "h-10 w-10 rounded-full" })) : (_jsx("div", { className: "wallet-icon flex h-10 w-10 items-center justify-center rounded-full bg-blue-100", children: _jsx(Wallet, { className: "h-5 w-5 text-blue-600" }) })), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-as-primary font-semibold", children: connector?.name || "Connected Wallet" }), _jsx("span", { className: "text-as-primary/60 text-sm", children: shortenAddress(address || "") })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET && (_jsx("div", { className: "h-2 w-2 rounded-full bg-green-500" })), _jsx("button", { onClick: e => {
131
+ e.stopPropagation();
132
+ disconnect();
133
+ toast.success("Wallet disconnected");
134
+ if (selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET) {
135
+ setSelectedPaymentMethod(CryptoPaymentMethodType.NONE);
136
+ }
137
+ }, className: "text-as-primary/60 hover:text-as-primary/80 rounded-lg p-1.5 transition-colors", children: _jsx(X, { className: "h-4 w-4" }) })] })] }) }) })] }))] })] }), showWalletModal &&
138
+ createPortal(_jsx("div", { className: "wallet-connection-modal pointer-events-auto fixed inset-0 z-[9999] flex items-center justify-center bg-black/50", children: _jsxs("div", { className: "max-h-[80vh] w-[400px] max-w-[90vw] overflow-auto rounded-xl bg-white p-6 dark:bg-gray-900", children: [_jsxs("div", { className: "mb-4 flex items-center justify-between", children: [_jsx("h3", { className: "text-lg font-semibold text-gray-900 dark:text-white", children: isConnected ? "Switch wallet or account" : "Choose wallet to connect" }), _jsx("button", { onClick: handleCloseModal, className: "text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200", children: _jsx(X, { className: "h-5 w-5" }) })] }), _jsx("div", { className: "space-y-4", children: _jsx("div", { className: "space-y-3", children: walletOptions.map(walletOption => {
139
+ const isCurrentWallet = isConnected && connector?.name === walletOption.connector?.name;
140
+ return (_jsx("button", { onClick: async () => {
141
+ handleCloseModal();
142
+ await requestWalletPermissions(walletOption.connector);
143
+ }, disabled: isPending, className: `wallet-option w-full rounded-xl border p-4 text-left transition-all hover:shadow-md disabled:opacity-50 ${isCurrentWallet
144
+ ? "wallet-option--active border-blue-500 bg-blue-50 dark:bg-blue-900/20"
145
+ : "border-gray-200 bg-white hover:border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:hover:border-gray-500"}`, children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: `flex h-12 w-12 items-center justify-center rounded-xl text-xl ${isCurrentWallet ? "bg-blue-100 dark:bg-blue-800" : "bg-gray-100 dark:bg-gray-700"}`, children: walletOption.icon }), _jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: "text-sm font-semibold text-gray-900 dark:text-white", children: walletOption.name }), isCurrentWallet && (_jsx("span", { className: "rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-800 dark:text-blue-200", children: "Connected" }))] }), _jsx("div", { className: "text-xs text-gray-500 dark:text-gray-400", children: isCurrentWallet ? "Switch account or reconnect" : walletOption.description })] })] }), _jsx(ChevronRightCircle, { className: "h-5 w-5 text-gray-400" })] }) }, walletOption.id));
146
+ }) }) })] }) }), typeof window !== "undefined" ? document.getElementById("b3-root") || document.body : document.body)] }));
64
147
  }