@b3dotfun/sdk 0.0.49 → 0.0.50-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 (155) hide show
  1. package/dist/cjs/anyspend/constants/index.d.ts +1 -0
  2. package/dist/cjs/anyspend/constants/index.js +12 -2
  3. package/dist/cjs/anyspend/react/components/AnySpend.d.ts +2 -1
  4. package/dist/cjs/anyspend/react/components/AnySpend.js +18 -5
  5. package/dist/cjs/anyspend/react/components/AnySpendCustom.js +12 -3
  6. package/dist/cjs/anyspend/react/components/AnyspendDepositHype.js +11 -4
  7. package/dist/cjs/anyspend/react/components/common/CryptoPaySection.d.ts +3 -1
  8. package/dist/cjs/anyspend/react/components/common/CryptoPaySection.js +2 -2
  9. package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
  10. package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.js +17 -11
  11. package/dist/cjs/anyspend/react/components/common/FeeBreakDown.d.ts +12 -0
  12. package/dist/cjs/anyspend/react/components/common/FeeBreakDown.js +19 -0
  13. package/dist/cjs/anyspend/react/components/common/FeeDetailPanel.d.ts +8 -0
  14. package/dist/cjs/anyspend/react/components/common/FeeDetailPanel.js +116 -0
  15. package/dist/cjs/anyspend/react/components/common/OrderDetails.d.ts +1 -0
  16. package/dist/cjs/anyspend/react/components/common/OrderDetails.js +6 -6
  17. package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +1 -0
  18. package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.js +3 -2
  19. package/dist/cjs/anyspend/react/components/common/OrderToken.js +1 -1
  20. package/dist/cjs/anyspend/react/components/common/OrderTokenAmount.js +1 -1
  21. package/dist/cjs/anyspend/react/components/common/OrderTokenAmountFiat.js +1 -1
  22. package/dist/cjs/anyspend/react/components/common/OrderTokenAmountNew.js +1 -1
  23. package/dist/cjs/anyspend/react/components/common/PanelOnramp.d.ts +2 -1
  24. package/dist/cjs/anyspend/react/components/common/PanelOnramp.js +36 -21
  25. package/dist/cjs/anyspend/react/components/common/PanelOnrampPayment.js +2 -1
  26. package/dist/cjs/anyspend/react/components/common/PointsDetailPanel.js +1 -2
  27. package/dist/cjs/anyspend/react/contexts/FeatureFlagsContext.js +1 -1
  28. package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.d.ts +3 -1
  29. package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.js +1 -0
  30. package/dist/cjs/anyspend/react/hooks/useAnyspendOrderHistory.d.ts +48 -12
  31. package/dist/cjs/anyspend/types/api.d.ts +133 -178
  32. package/dist/cjs/anyspend/utils/chain.js +4 -4
  33. package/dist/cjs/bondkit/bondkitToken.d.ts +3 -1
  34. package/dist/cjs/bondkit/bondkitToken.js +21 -2
  35. package/dist/cjs/bondkit/components/TradingView.d.ts +1 -1
  36. package/dist/cjs/bondkit/components/TradingView.js +14 -3
  37. package/dist/cjs/bondkit/components/index.d.ts +1 -1
  38. package/dist/cjs/bondkit/components/index.js +1 -1
  39. package/dist/cjs/bondkit/components/types.d.ts +1 -0
  40. package/dist/cjs/bondkit/config.d.ts +1 -0
  41. package/dist/cjs/bondkit/config.js +1 -0
  42. package/dist/cjs/bondkit/index.d.ts +1 -1
  43. package/dist/cjs/bondkit/index.js +2 -6
  44. package/dist/cjs/bondkit/types.d.ts +15 -0
  45. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.d.ts +1 -1
  46. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.js +1 -1
  47. package/dist/cjs/global-account/react/components/B3Provider/RelayKitProviderWrapper.js +2 -2
  48. package/dist/cjs/global-account/react/components/ui/tooltip.js +1 -1
  49. package/dist/cjs/global-account/react/hooks/useAuthentication.js +11 -0
  50. package/dist/cjs/shared/generated/chain-networks.json +40 -7
  51. package/dist/esm/anyspend/constants/index.d.ts +1 -0
  52. package/dist/esm/anyspend/constants/index.js +11 -1
  53. package/dist/esm/anyspend/react/components/AnySpend.d.ts +2 -1
  54. package/dist/esm/anyspend/react/components/AnySpend.js +18 -5
  55. package/dist/esm/anyspend/react/components/AnySpendCustom.js +14 -5
  56. package/dist/esm/anyspend/react/components/AnyspendDepositHype.js +11 -4
  57. package/dist/esm/anyspend/react/components/common/CryptoPaySection.d.ts +3 -1
  58. package/dist/esm/anyspend/react/components/common/CryptoPaySection.js +4 -4
  59. package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
  60. package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.js +19 -13
  61. package/dist/esm/anyspend/react/components/common/FeeBreakDown.d.ts +12 -0
  62. package/dist/esm/anyspend/react/components/common/FeeBreakDown.js +16 -0
  63. package/dist/esm/anyspend/react/components/common/FeeDetailPanel.d.ts +8 -0
  64. package/dist/esm/anyspend/react/components/common/FeeDetailPanel.js +113 -0
  65. package/dist/esm/anyspend/react/components/common/OrderDetails.d.ts +1 -0
  66. package/dist/esm/anyspend/react/components/common/OrderDetails.js +6 -6
  67. package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +1 -0
  68. package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.js +4 -3
  69. package/dist/esm/anyspend/react/components/common/OrderToken.js +1 -1
  70. package/dist/esm/anyspend/react/components/common/OrderTokenAmount.js +1 -1
  71. package/dist/esm/anyspend/react/components/common/OrderTokenAmountFiat.js +1 -1
  72. package/dist/esm/anyspend/react/components/common/OrderTokenAmountNew.js +1 -1
  73. package/dist/esm/anyspend/react/components/common/PanelOnramp.d.ts +2 -1
  74. package/dist/esm/anyspend/react/components/common/PanelOnramp.js +38 -23
  75. package/dist/esm/anyspend/react/components/common/PanelOnrampPayment.js +2 -1
  76. package/dist/esm/anyspend/react/components/common/PointsDetailPanel.js +2 -3
  77. package/dist/esm/anyspend/react/contexts/FeatureFlagsContext.js +1 -1
  78. package/dist/esm/anyspend/react/hooks/useAnyspendFlow.d.ts +3 -1
  79. package/dist/esm/anyspend/react/hooks/useAnyspendFlow.js +1 -0
  80. package/dist/esm/anyspend/react/hooks/useAnyspendOrderHistory.d.ts +48 -12
  81. package/dist/esm/anyspend/types/api.d.ts +133 -178
  82. package/dist/esm/anyspend/utils/chain.js +4 -4
  83. package/dist/esm/bondkit/bondkitToken.d.ts +3 -1
  84. package/dist/esm/bondkit/bondkitToken.js +21 -2
  85. package/dist/esm/bondkit/components/TradingView.d.ts +1 -1
  86. package/dist/esm/bondkit/components/TradingView.js +14 -3
  87. package/dist/esm/bondkit/components/index.d.ts +1 -1
  88. package/dist/esm/bondkit/components/index.js +1 -1
  89. package/dist/esm/bondkit/components/types.d.ts +1 -0
  90. package/dist/esm/bondkit/config.d.ts +1 -0
  91. package/dist/esm/bondkit/config.js +1 -0
  92. package/dist/esm/bondkit/index.d.ts +1 -1
  93. package/dist/esm/bondkit/index.js +1 -1
  94. package/dist/esm/bondkit/types.d.ts +15 -0
  95. package/dist/esm/global-account/react/components/B3Provider/B3Provider.d.ts +1 -1
  96. package/dist/esm/global-account/react/components/B3Provider/B3Provider.js +1 -1
  97. package/dist/esm/global-account/react/components/B3Provider/RelayKitProviderWrapper.js +2 -2
  98. package/dist/esm/global-account/react/components/ui/tooltip.js +1 -1
  99. package/dist/esm/global-account/react/hooks/useAuthentication.js +11 -0
  100. package/dist/esm/shared/generated/chain-networks.json +40 -7
  101. package/dist/styles/index.css +1 -1
  102. package/dist/types/anyspend/constants/index.d.ts +1 -0
  103. package/dist/types/anyspend/react/components/AnySpend.d.ts +2 -1
  104. package/dist/types/anyspend/react/components/common/CryptoPaySection.d.ts +3 -1
  105. package/dist/types/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
  106. package/dist/types/anyspend/react/components/common/FeeBreakDown.d.ts +12 -0
  107. package/dist/types/anyspend/react/components/common/FeeDetailPanel.d.ts +8 -0
  108. package/dist/types/anyspend/react/components/common/OrderDetails.d.ts +1 -0
  109. package/dist/types/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +1 -0
  110. package/dist/types/anyspend/react/components/common/PanelOnramp.d.ts +2 -1
  111. package/dist/types/anyspend/react/hooks/useAnyspendFlow.d.ts +3 -1
  112. package/dist/types/anyspend/react/hooks/useAnyspendOrderHistory.d.ts +48 -12
  113. package/dist/types/anyspend/types/api.d.ts +133 -178
  114. package/dist/types/bondkit/bondkitToken.d.ts +3 -1
  115. package/dist/types/bondkit/components/TradingView.d.ts +1 -1
  116. package/dist/types/bondkit/components/index.d.ts +1 -1
  117. package/dist/types/bondkit/components/types.d.ts +1 -0
  118. package/dist/types/bondkit/config.d.ts +1 -0
  119. package/dist/types/bondkit/index.d.ts +1 -1
  120. package/dist/types/bondkit/types.d.ts +15 -0
  121. package/dist/types/global-account/react/components/B3Provider/B3Provider.d.ts +1 -1
  122. package/package.json +3 -3
  123. package/src/anyspend/constants/index.ts +12 -1
  124. package/src/anyspend/react/components/AnySpend.tsx +33 -0
  125. package/src/anyspend/react/components/AnySpendCustom.tsx +69 -7
  126. package/src/anyspend/react/components/AnyspendDepositHype.tsx +24 -0
  127. package/src/anyspend/react/components/common/CryptoPaySection.tsx +14 -2
  128. package/src/anyspend/react/components/common/CryptoReceiveSection.tsx +31 -11
  129. package/src/anyspend/react/components/common/FeeBreakDown.tsx +105 -0
  130. package/src/anyspend/react/components/common/FeeDetailPanel.tsx +334 -0
  131. package/src/anyspend/react/components/common/OrderDetails.tsx +7 -0
  132. package/src/anyspend/react/components/common/OrderDetailsCollapsible.tsx +16 -0
  133. package/src/anyspend/react/components/common/OrderToken.tsx +1 -1
  134. package/src/anyspend/react/components/common/OrderTokenAmount.tsx +1 -1
  135. package/src/anyspend/react/components/common/OrderTokenAmountFiat.tsx +1 -1
  136. package/src/anyspend/react/components/common/OrderTokenAmountNew.tsx +1 -1
  137. package/src/anyspend/react/components/common/PanelOnramp.tsx +58 -27
  138. package/src/anyspend/react/components/common/PanelOnrampPayment.tsx +18 -6
  139. package/src/anyspend/react/components/common/PointsDetailPanel.tsx +1 -13
  140. package/src/anyspend/react/contexts/FeatureFlagsContext.tsx +2 -2
  141. package/src/anyspend/react/hooks/useAnyspendFlow.ts +1 -0
  142. package/src/anyspend/types/api.ts +135 -178
  143. package/src/anyspend/utils/chain.ts +4 -4
  144. package/src/bondkit/bondkitToken.ts +26 -2
  145. package/src/bondkit/components/TradingView.tsx +15 -3
  146. package/src/bondkit/components/index.ts +1 -1
  147. package/src/bondkit/components/types.ts +1 -0
  148. package/src/bondkit/config.ts +2 -0
  149. package/src/bondkit/index.ts +1 -1
  150. package/src/bondkit/types.ts +19 -0
  151. package/src/global-account/react/components/B3Provider/B3Provider.tsx +1 -1
  152. package/src/global-account/react/components/B3Provider/RelayKitProviderWrapper.tsx +2 -2
  153. package/src/global-account/react/components/ui/tooltip.tsx +11 -9
  154. package/src/global-account/react/hooks/useAuthentication.ts +13 -1
  155. package/src/shared/generated/chain-networks.json +40 -7
@@ -6,6 +6,7 @@ export declare const RELAY_SOLANA_MAINNET_CHAIN_ID = 792703809;
6
6
  export declare const SOLANA_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
7
7
  export declare const SOLANA_TOKEN_2022_PROGRAM_ID = "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb";
8
8
  export declare const B3_TOKEN: components["schemas"]["Token"];
9
+ export declare const ANYSPEND_TOKEN: components["schemas"]["Token"];
9
10
  export declare const USDC_BASE: components["schemas"]["Token"];
10
11
  export declare const ETH_BASE: components["schemas"]["Token"];
11
12
  export declare const NFT_CONTRACTS: components["schemas"]["NftContract"][];
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VENDOR_DISPLAY_NAMES = exports.PAYMENT_METHOD_ICONS = exports.STRIPE_CONFIG = exports.DEFAULT_NFT_CONTRACT = exports.NFT_CONTRACTS = exports.ETH_BASE = exports.USDC_BASE = exports.B3_TOKEN = exports.SOLANA_TOKEN_2022_PROGRAM_ID = exports.SOLANA_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = exports.RELAY_SOLANA_MAINNET_CHAIN_ID = exports.RELAY_SOL_ADDRESS = exports.RELAY_ETH_ADDRESS = exports.ANYSPEND_MAINNET_BASE_URL = void 0;
3
+ exports.VENDOR_DISPLAY_NAMES = exports.PAYMENT_METHOD_ICONS = exports.STRIPE_CONFIG = exports.DEFAULT_NFT_CONTRACT = exports.NFT_CONTRACTS = exports.ETH_BASE = exports.USDC_BASE = exports.ANYSPEND_TOKEN = exports.B3_TOKEN = exports.SOLANA_TOKEN_2022_PROGRAM_ID = exports.SOLANA_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = exports.RELAY_SOLANA_MAINNET_CHAIN_ID = exports.RELAY_SOL_ADDRESS = exports.RELAY_ETH_ADDRESS = exports.ANYSPEND_MAINNET_BASE_URL = void 0;
4
4
  const chains_1 = require("viem/chains");
5
5
  exports.ANYSPEND_MAINNET_BASE_URL = process.env.NEXT_PUBLIC_ANYSPEND_BASE_URL || "https://mainnet.anyspend.com";
6
6
  exports.RELAY_ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
@@ -9,7 +9,7 @@ exports.RELAY_SOLANA_MAINNET_CHAIN_ID = 792703809;
9
9
  exports.SOLANA_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
10
10
  exports.SOLANA_TOKEN_2022_PROGRAM_ID = "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb";
11
11
  exports.B3_TOKEN = {
12
- chainId: 8453,
12
+ chainId: chains_1.base.id,
13
13
  address: "0xb3b32f9f8827d4634fe7d973fa1034ec9fddb3b3",
14
14
  decimals: 18,
15
15
  name: "B3",
@@ -18,6 +18,16 @@ exports.B3_TOKEN = {
18
18
  logoURI: "https://s2.coinmarketcap.com/static/img/coins/64x64/35690.png",
19
19
  },
20
20
  };
21
+ exports.ANYSPEND_TOKEN = {
22
+ chainId: chains_1.base.id,
23
+ address: "0xc17dda248e2d50fc006d8febb5a406dd31972712",
24
+ decimals: 18,
25
+ name: "Anyspend",
26
+ symbol: "ANY",
27
+ metadata: {
28
+ logoURI: "https://cdn.b3.fun/anyspend_64x64.png",
29
+ },
30
+ };
21
31
  exports.USDC_BASE = {
22
32
  symbol: "USDC",
23
33
  chainId: chains_1.base.id,
@@ -14,7 +14,8 @@ export declare enum PanelView {
14
14
  RECIPIENT_SELECTION = 5,
15
15
  CRYPTO_PAYMENT_METHOD = 6,
16
16
  FIAT_PAYMENT_METHOD = 7,
17
- POINTS_DETAIL = 8
17
+ POINTS_DETAIL = 8,
18
+ FEE_DETAIL = 9
18
19
  }
19
20
  export declare function AnySpend(props: {
20
21
  mode?: "page" | "modal";
@@ -29,6 +29,7 @@ const OrderHistory_1 = require("./common/OrderHistory");
29
29
  const PanelOnramp_1 = require("./common/PanelOnramp");
30
30
  const PanelOnrampPayment_1 = require("./common/PanelOnrampPayment");
31
31
  const PointsDetailPanel_1 = require("./common/PointsDetailPanel");
32
+ const FeeDetailPanel_1 = require("./common/FeeDetailPanel");
32
33
  const RecipientSelection_1 = require("./common/RecipientSelection");
33
34
  const TabSection_1 = require("./common/TabSection");
34
35
  var PanelView;
@@ -42,6 +43,7 @@ var PanelView;
42
43
  PanelView[PanelView["CRYPTO_PAYMENT_METHOD"] = 6] = "CRYPTO_PAYMENT_METHOD";
43
44
  PanelView[PanelView["FIAT_PAYMENT_METHOD"] = 7] = "FIAT_PAYMENT_METHOD";
44
45
  PanelView[PanelView["POINTS_DETAIL"] = 8] = "POINTS_DETAIL";
46
+ PanelView[PanelView["FEE_DETAIL"] = 9] = "FEE_DETAIL";
45
47
  })(PanelView || (exports.PanelView = PanelView = {}));
46
48
  const ANYSPEND_RECIPIENTS_KEY = "anyspend_recipients";
47
49
  function AnySpend(props) {
@@ -465,10 +467,18 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
465
467
  sonner_1.toast.error("Failed to create order: " + error.message);
466
468
  },
467
469
  });
470
+ // Check if it's a same-chain same-token swap
471
+ const isSameChainSameToken = (0, react_4.useMemo)(() => {
472
+ return (activeTab === "crypto" &&
473
+ selectedSrcChainId === selectedDstChainId &&
474
+ selectedSrcToken.address.toLowerCase() === selectedDstToken.address.toLowerCase());
475
+ }, [activeTab, selectedSrcChainId, selectedDstChainId, selectedSrcToken.address, selectedDstToken.address]);
468
476
  // Determine button state and text
469
477
  const btnInfo = (0, react_4.useMemo)(() => {
470
478
  if (activeInputAmountInWei === "0")
471
479
  return { text: "Enter an amount", disable: true, error: false, loading: false };
480
+ if (isSameChainSameToken)
481
+ return { text: "Select a different token or chain", disable: true, error: false, loading: false };
472
482
  if (isLoadingAnyspendQuote)
473
483
  return { text: "Loading quote...", disable: true, error: false, loading: true };
474
484
  if (!recipientAddress)
@@ -502,6 +512,7 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
502
512
  return { text: "Buy", disable: false, error: false, loading: false };
503
513
  }, [
504
514
  activeInputAmountInWei,
515
+ isSameChainSameToken,
505
516
  isLoadingAnyspendQuote,
506
517
  recipientAddress,
507
518
  isCreatingOrder,
@@ -718,12 +729,12 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
718
729
  };
719
730
  }, [activePanel, navigateBack]);
720
731
  const historyView = ((0, jsx_runtime_1.jsx)("div", { className: "mx-auto flex w-[560px] max-w-full flex-col items-center", children: (0, jsx_runtime_1.jsx)(OrderHistory_1.OrderHistory, { mode: mode, onBack: navigateBack, onSelectOrder: onSelectOrder }) }));
721
- const orderDetailsView = ((0, jsx_runtime_1.jsx)("div", { className: "mx-auto w-[460px] max-w-full", children: (0, jsx_runtime_1.jsx)("div", { className: "relative flex flex-col gap-4", children: oat && ((0, jsx_runtime_1.jsx)(OrderDetails_1.OrderDetails, { mode: mode, order: oat.data.order, depositTxs: oat.data.depositTxs, relayTxs: oat.data.relayTxs, executeTx: oat.data.executeTx, refundTxs: oat.data.refundTxs, selectedCryptoPaymentMethod: selectedCryptoPaymentMethod, onPaymentMethodChange: setSelectedCryptoPaymentMethod, onBack: () => {
732
+ const orderDetailsView = ((0, jsx_runtime_1.jsx)("div", { className: "mx-auto w-[460px] max-w-full", children: (0, jsx_runtime_1.jsx)("div", { className: "relative flex flex-col gap-4", children: oat && ((0, jsx_runtime_1.jsx)(OrderDetails_1.OrderDetails, { mode: mode, order: oat.data.order, depositTxs: oat.data.depositTxs, relayTxs: oat.data.relayTxs, executeTx: oat.data.executeTx, refundTxs: oat.data.refundTxs, selectedCryptoPaymentMethod: selectedCryptoPaymentMethod, onPaymentMethodChange: setSelectedCryptoPaymentMethod, points: oat.data.points || undefined, onBack: () => {
722
733
  setOrderId(undefined);
723
734
  navigateBack();
724
735
  setSelectedCryptoPaymentMethod(CryptoPaymentMethod_1.CryptoPaymentMethodType.NONE); // Reset payment method when going back
725
736
  } })) }) }));
726
- const mainView = ((0, jsx_runtime_1.jsxs)("div", { className: "mx-auto flex w-[460px] max-w-full flex-col items-center gap-2", children: [isBuyMode && ((0, jsx_runtime_1.jsxs)("div", { className: "mb-4 flex flex-col items-center gap-3 text-center", children: [selectedDstToken.metadata?.logoURI && ((0, jsx_runtime_1.jsx)("div", { className: "relative", children: (0, jsx_runtime_1.jsx)("img", { src: selectedDstToken.metadata.logoURI, alt: selectedDstToken.symbol, className: "border-as-stroke h-12 w-12 rounded-full border-2 shadow-md" }) })), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("h1", { className: "text-as-primary text-xl font-bold", children: ["Buy ", selectedDstToken.symbol] }) })] })), (0, jsx_runtime_1.jsx)(TabSection_1.TabSection, { activeTab: activeTab, setActiveTab: setActiveTab, setSelectedCryptoPaymentMethod: setSelectedCryptoPaymentMethod, setSelectedFiatPaymentMethod: setSelectedFiatPaymentMethod }), (0, jsx_runtime_1.jsxs)("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: [activeTab === "crypto" ? ((0, jsx_runtime_1.jsx)(CryptoPaySection_1.CryptoPaySection, { selectedSrcChainId: selectedSrcChainId, setSelectedSrcChainId: setSelectedSrcChainId, selectedSrcToken: selectedSrcToken, setSelectedSrcToken: setSelectedSrcToken, srcAmount: srcAmount, setSrcAmount: setSrcAmount, setIsSrcInputDirty: setIsSrcInputDirty, selectedCryptoPaymentMethod: selectedCryptoPaymentMethod, onSelectCryptoPaymentMethod: () => navigateToPanel(PanelView.CRYPTO_PAYMENT_METHOD, "forward"), anyspendQuote: anyspendQuote, onTokenSelect: onTokenSelect })) : ((0, jsx_runtime_1.jsx)(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, ease: "easeInOut" }, children: (0, jsx_runtime_1.jsx)(PanelOnramp_1.PanelOnramp, { srcAmountOnRamp: srcAmountOnRamp, setSrcAmountOnRamp: setSrcAmountOnRamp, selectedPaymentMethod: selectedFiatPaymentMethod, setActivePanel: (panelIndex) => {
737
+ const mainView = ((0, jsx_runtime_1.jsxs)("div", { className: "mx-auto flex w-[460px] max-w-full flex-col items-center gap-2", children: [isBuyMode && ((0, jsx_runtime_1.jsxs)("div", { className: "mb-4 flex flex-col items-center gap-3 text-center", children: [selectedDstToken.metadata?.logoURI && ((0, jsx_runtime_1.jsx)("div", { className: "relative", children: (0, jsx_runtime_1.jsx)("img", { src: selectedDstToken.metadata.logoURI, alt: selectedDstToken.symbol, className: "border-as-stroke h-12 w-12 rounded-full border-2 shadow-md" }) })), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("h1", { className: "text-as-primary text-xl font-bold", children: ["Buy ", selectedDstToken.symbol] }) })] })), (0, jsx_runtime_1.jsx)(TabSection_1.TabSection, { activeTab: activeTab, setActiveTab: setActiveTab, setSelectedCryptoPaymentMethod: setSelectedCryptoPaymentMethod, setSelectedFiatPaymentMethod: setSelectedFiatPaymentMethod }), (0, jsx_runtime_1.jsxs)("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: [activeTab === "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: () => navigateToPanel(PanelView.CRYPTO_PAYMENT_METHOD, "forward"), anyspendQuote: anyspendQuote, onTokenSelect: onTokenSelect, onShowFeeDetail: () => navigateToPanel(PanelView.FEE_DETAIL, "forward") })) : ((0, jsx_runtime_1.jsx)(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, ease: "easeInOut" }, children: (0, jsx_runtime_1.jsx)(PanelOnramp_1.PanelOnramp, { srcAmountOnRamp: srcAmountOnRamp, setSrcAmountOnRamp: setSrcAmountOnRamp, selectedPaymentMethod: selectedFiatPaymentMethod, setActivePanel: (panelIndex) => {
727
738
  // Map panel index to navigation with direction
728
739
  const panelsWithForwardNav = [PanelView.FIAT_PAYMENT_METHOD, PanelView.RECIPIENT_SELECTION];
729
740
  if (panelsWithForwardNav.includes(panelIndex)) {
@@ -732,7 +743,7 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
732
743
  else {
733
744
  setActivePanel(panelIndex);
734
745
  }
735
- }, _recipientAddress: recipientAddress, destinationToken: selectedDstToken, destinationChainId: selectedDstChainId, destinationAmount: dstAmount, onDestinationTokenChange: setSelectedDstToken, onDestinationChainChange: setSelectedDstChainId, fiatPaymentMethodIndex: PanelView.FIAT_PAYMENT_METHOD, recipientSelectionPanelIndex: PanelView.RECIPIENT_SELECTION, hideDstToken: isBuyMode, anyspendQuote: anyspendQuote, onShowPointsDetail: () => navigateToPanel(PanelView.POINTS_DETAIL, "forward"), customUsdInputValues: customUsdInputValues }) })), (0, jsx_runtime_1.jsx)(react_2.Button, { variant: "ghost", className: (0, cn_1.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: () => {
746
+ }, _recipientAddress: recipientAddress, destinationToken: selectedDstToken, destinationChainId: selectedDstChainId, destinationAmount: dstAmount, onDestinationTokenChange: setSelectedDstToken, onDestinationChainChange: setSelectedDstChainId, fiatPaymentMethodIndex: PanelView.FIAT_PAYMENT_METHOD, recipientSelectionPanelIndex: PanelView.RECIPIENT_SELECTION, hideDstToken: isBuyMode, anyspendQuote: anyspendQuote, onShowPointsDetail: () => navigateToPanel(PanelView.POINTS_DETAIL, "forward"), onShowFeeDetail: () => navigateToPanel(PanelView.FEE_DETAIL, "forward"), customUsdInputValues: customUsdInputValues }) })), (0, jsx_runtime_1.jsx)(react_2.Button, { variant: "ghost", className: (0, cn_1.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: () => {
736
747
  if (activeTab === "fiat" || isBuyMode) {
737
748
  return;
738
749
  }
@@ -751,10 +762,10 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
751
762
  const tempDstAmount = dstAmount;
752
763
  setSrcAmount(tempDstAmount);
753
764
  setDstAmount(tempSrcAmount);
754
- }, 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, onChangeDstAmount: value => {
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 => {
755
766
  setIsSrcInputDirty(false);
756
767
  setDstAmount(value);
757
- }, anyspendQuote: anyspendQuote, onShowPointsDetail: () => navigateToPanel(PanelView.POINTS_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] })] }));
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] })] }));
758
769
  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 => {
759
770
  setOrderId(orderId);
760
771
  navigateToPanel(PanelView.ORDER_DETAILS, "forward");
@@ -783,6 +794,7 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
783
794
  navigateBack(); // Go back to main panel to show updated pricing
784
795
  }, srcAmountOnRamp: srcAmountOnRamp }));
785
796
  const pointsDetailView = ((0, jsx_runtime_1.jsx)(PointsDetailPanel_1.PointsDetailPanel, { pointsAmount: anyspendQuote?.data?.pointsAmount || 0, onBack: navigateBack }));
797
+ const feeDetailView = anyspendQuote?.data?.fee ? ((0, jsx_runtime_1.jsx)(FeeDetailPanel_1.FeeDetailPanel, { fee: anyspendQuote.data.fee, transactionAmountUsd: activeTab === "crypto" ? Number(anyspendQuote.data.currencyIn?.amountUsd) : parseFloat(srcAmountOnRamp), onBack: navigateBack })) : null;
786
798
  // Add tabs to the main component when no order is loaded
787
799
  return ((0, jsx_runtime_1.jsx)(react_2.StyleRoot, { children: (0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)("anyspend-container font-inter mx-auto w-full max-w-[460px]", mode === "page" &&
788
800
  "bg-as-surface-primary border-as-border-secondary overflow-hidden rounded-2xl border shadow-xl"), children: (0, jsx_runtime_1.jsx)(react_2.TransitionPanel, { activeIndex: orderId
@@ -813,5 +825,6 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
813
825
  (0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)(mode === "page" && "p-6"), children: cryptoPaymentMethodView }, "crypto-payment-method-view"),
814
826
  (0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)(mode === "page" && "p-6"), children: fiatPaymentMethodView }, "fiat-payment-method-view"),
815
827
  (0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)(mode === "page" && "p-6"), children: pointsDetailView }, "points-detail-view"),
828
+ (0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)(mode === "page" && "p-6"), children: feeDetailView }, "fee-detail-view"),
816
829
  ] }) }) }));
817
830
  }
@@ -55,6 +55,7 @@ const chains_1 = require("viem/chains");
55
55
  const FeatureFlagsContext_1 = require("../contexts/FeatureFlagsContext");
56
56
  const AnySpendFingerprintWrapper_1 = require("./AnySpendFingerprintWrapper");
57
57
  const CryptoPaymentMethod_1 = require("./common/CryptoPaymentMethod");
58
+ const FeeBreakDown_1 = require("./common/FeeBreakDown");
58
59
  const FiatPaymentMethod_1 = require("./common/FiatPaymentMethod");
59
60
  const OrderDetails_1 = require("./common/OrderDetails");
60
61
  const OrderHistory_1 = require("./common/OrderHistory");
@@ -73,7 +74,7 @@ var PanelView;
73
74
  PanelView[PanelView["FIAT_PAYMENT_METHOD"] = 6] = "FIAT_PAYMENT_METHOD";
74
75
  PanelView[PanelView["POINTS_DETAIL"] = 7] = "POINTS_DETAIL";
75
76
  })(PanelView || (PanelView = {}));
76
- function generateGetRelayQuoteRequest({ orderType, srcChainId, srcToken, dstChainId, dstToken, recipientAddress, dstAmount, contractAddress, tokenId, contractType, encodedData, spenderAddress, }) {
77
+ function generateGetRelayQuoteRequest({ orderType, srcChainId, srcToken, dstChainId, dstToken, recipientAddress, dstAmount, contractAddress, tokenId, contractType, encodedData, spenderAddress, onrampVendor, }) {
77
78
  switch (orderType) {
78
79
  case "mint_nft": {
79
80
  (0, invariant_1.default)(contractType, "Contract type is required");
@@ -88,6 +89,7 @@ function generateGetRelayQuoteRequest({ orderType, srcChainId, srcToken, dstChai
88
89
  contractAddress: contractAddress,
89
90
  tokenId: tokenId,
90
91
  contractType: contractType,
92
+ onrampVendor,
91
93
  };
92
94
  }
93
95
  case "join_tournament": {
@@ -100,6 +102,7 @@ function generateGetRelayQuoteRequest({ orderType, srcChainId, srcToken, dstChai
100
102
  recipientAddress,
101
103
  price: dstAmount,
102
104
  contractAddress: contractAddress,
105
+ onrampVendor,
103
106
  };
104
107
  }
105
108
  case "fund_tournament": {
@@ -112,6 +115,7 @@ function generateGetRelayQuoteRequest({ orderType, srcChainId, srcToken, dstChai
112
115
  recipientAddress,
113
116
  fundAmount: dstAmount,
114
117
  contractAddress: contractAddress,
118
+ onrampVendor,
115
119
  };
116
120
  }
117
121
  case "custom": {
@@ -128,6 +132,7 @@ function generateGetRelayQuoteRequest({ orderType, srcChainId, srcToken, dstChai
128
132
  to: contractAddress,
129
133
  spenderAddress: spenderAddress,
130
134
  },
135
+ onrampVendor,
131
136
  };
132
137
  }
133
138
  default: {
@@ -225,6 +230,7 @@ function AnySpendCustomInner({ loadOrder, mode = "modal", activeTab: activeTabPr
225
230
  contractType: orderType === "mint_nft" ? metadata?.nftContract?.type : undefined,
226
231
  encodedData: encodedData,
227
232
  spenderAddress: spenderAddress,
233
+ onrampVendor: selectedFiatPaymentMethod === FiatPaymentMethod_1.FiatPaymentMethod.STRIPE ? "stripe-web2" : undefined,
228
234
  });
229
235
  }, [
230
236
  activeTab,
@@ -240,6 +246,7 @@ function AnySpendCustomInner({ loadOrder, mode = "modal", activeTab: activeTabPr
240
246
  spenderAddress,
241
247
  srcChainId,
242
248
  srcToken,
249
+ selectedFiatPaymentMethod,
243
250
  ]);
244
251
  const { anyspendQuote, isLoadingAnyspendQuote } = (0, react_1.useAnyspendQuote)(getRelayQuoteRequest);
245
252
  const { orderAndTransactions: oat } = (0, react_1.useAnyspendOrderAndTransactions)(orderId);
@@ -512,7 +519,8 @@ function AnySpendCustomInner({ loadOrder, mode = "modal", activeTab: activeTabPr
512
519
  opacity: hasMounted ? 1 : 0,
513
520
  y: hasMounted ? 0 : 20,
514
521
  filter: hasMounted ? "blur(0px)" : "blur(10px)",
515
- }, transition: { duration: 0.3, delay: 0.1, ease: "easeInOut" }, className: "relative flex w-full items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsxs)("span", { className: "text-as-tertiarry text-sm", children: ["Total ", (0, jsx_runtime_1.jsx)("span", { className: "text-as-tertiarry", children: "(with fee)" })] }), renderPointsBadge()] }), (0, jsx_runtime_1.jsxs)("span", { className: "text-as-primary font-semibold", children: [formattedSrcAmount || "--", " ", srcToken.symbol] })] })] })] }), (0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.cn)("flex w-full flex-col items-center justify-between gap-2"), children: (0, jsx_runtime_1.jsx)(react_3.motion.div, { initial: false, animate: {
522
+ }, transition: { duration: 0.3, delay: 0.1, ease: "easeInOut" }, className: "relative flex w-full items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsxs)("span", { className: "text-as-tertiarry flex items-center gap-1.5 text-sm", children: ["Total ", (0, jsx_runtime_1.jsx)("span", { className: "text-as-tertiarry", children: "(with fee)" }), anyspendQuote?.data?.fee && ((0, jsx_runtime_1.jsx)(react_2.TooltipProvider, { children: (0, jsx_runtime_1.jsxs)(react_2.Tooltip, { children: [(0, jsx_runtime_1.jsx)(react_2.TooltipTrigger, { asChild: true, children: (0, jsx_runtime_1.jsx)("button", { 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)(react_2.TooltipContent, { side: "top", children: (0, jsx_runtime_1.jsx)(FeeBreakDown_1.FeeBreakDown, { fee: anyspendQuote.data.fee }) })] }) }))] }), renderPointsBadge()] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col items-end gap-0.5", children: [(0, jsx_runtime_1.jsxs)("span", { className: "text-as-primary font-semibold", children: [formattedSrcAmount || "--", " ", srcToken.symbol] }), anyspendQuote?.data?.fee?.type === "standard_fee" && anyspendQuote.data.currencyIn?.amountUsd && ((0, jsx_runtime_1.jsxs)("span", { className: "text-as-secondary text-xs", children: ["incl. $", ((Number(anyspendQuote.data.currencyIn.amountUsd) * anyspendQuote.data.fee.finalFeeBps) /
523
+ 10000).toFixed(2), " ", "fee"] }))] })] })] })] }), (0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.cn)("flex w-full flex-col items-center justify-between gap-2"), children: (0, jsx_runtime_1.jsx)(react_3.motion.div, { initial: false, animate: {
516
524
  opacity: hasMounted ? 1 : 0,
517
525
  y: hasMounted ? 0 : 20,
518
526
  filter: hasMounted ? "blur(0px)" : "blur(10px)",
@@ -524,7 +532,8 @@ function AnySpendCustomInner({ loadOrder, mode = "modal", activeTab: activeTabPr
524
532
  opacity: hasMounted ? 1 : 0,
525
533
  y: hasMounted ? 0 : 20,
526
534
  filter: hasMounted ? "blur(0px)" : "blur(10px)",
527
- }, transition: { duration: 0.3, delay: 0.1, ease: "easeInOut" }, className: "relative flex w-full items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsxs)("span", { className: "text-as-tertiarry text-sm", children: ["Total ", (0, jsx_runtime_1.jsx)("span", { className: "text-as-tertiarry", children: "(USD)" })] }), renderPointsBadge()] }), (0, jsx_runtime_1.jsxs)("span", { className: "text-as-primary text-xl font-semibold", children: ["$", srcFiatAmount || "0.00"] })] })] }), (0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.cn)("flex w-full flex-col items-center justify-between gap-2"), children: (0, jsx_runtime_1.jsx)(react_3.motion.div, { initial: false, animate: {
535
+ }, transition: { duration: 0.3, delay: 0.1, ease: "easeInOut" }, className: "relative flex w-full items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsxs)("span", { className: "text-as-tertiarry flex items-center gap-1.5 text-sm", children: ["Total ", (0, jsx_runtime_1.jsx)("span", { className: "text-as-tertiarry", children: "(USD)" }), anyspendQuote?.data?.fee && ((0, jsx_runtime_1.jsx)(react_2.TooltipProvider, { children: (0, jsx_runtime_1.jsxs)(react_2.Tooltip, { children: [(0, jsx_runtime_1.jsx)(react_2.TooltipTrigger, { asChild: true, children: (0, jsx_runtime_1.jsx)("button", { 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)(react_2.TooltipContent, { side: "top", children: (0, jsx_runtime_1.jsx)(FeeBreakDown_1.FeeBreakDown, { fee: anyspendQuote.data.fee }) })] }) }))] }), renderPointsBadge()] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col items-end gap-0.5", children: [(0, jsx_runtime_1.jsxs)("span", { className: "text-as-primary text-xl font-semibold", children: ["$", srcFiatAmount || "0.00"] }), anyspendQuote?.data?.fee?.type === "stripeweb2_fee" && anyspendQuote.data.fee.originalAmount && ((0, jsx_runtime_1.jsxs)("span", { className: "text-as-secondary text-xs", children: ["incl. $", ((Number(anyspendQuote.data.fee.originalAmount) - Number(anyspendQuote.data.fee.finalAmount)) /
536
+ 1e6).toFixed(2), " ", "fee"] }))] })] })] }), (0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.cn)("flex w-full flex-col items-center justify-between gap-2"), children: (0, jsx_runtime_1.jsx)(react_3.motion.div, { initial: false, animate: {
528
537
  opacity: hasMounted ? 1 : 0,
529
538
  y: hasMounted ? 0 : 20,
530
539
  filter: hasMounted ? "blur(0px)" : "blur(10px)",
@@ -19,6 +19,7 @@ const AnySpendFingerprintWrapper_1 = require("./AnySpendFingerprintWrapper");
19
19
  const CryptoPaySection_1 = require("./common/CryptoPaySection");
20
20
  const CryptoPaymentMethod_1 = require("./common/CryptoPaymentMethod");
21
21
  const CryptoReceiveSection_1 = require("./common/CryptoReceiveSection");
22
+ const FeeDetailPanel_1 = require("./common/FeeDetailPanel");
22
23
  const FiatPaymentMethod_1 = require("./common/FiatPaymentMethod");
23
24
  const OrderDetails_1 = require("./common/OrderDetails");
24
25
  const PointsDetailPanel_1 = require("./common/PointsDetailPanel");
@@ -36,7 +37,7 @@ function AnySpendDepositHype(props) {
36
37
  }
37
38
  function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress, paymentType = "crypto", sourceTokenAddress, sourceTokenChainId, onSuccess, mainFooter, onTokenSelect, customUsdInputValues, }) {
38
39
  // Use shared flow hook
39
- const { activePanel, setActivePanel, orderId, setOrderId, oat, selectedSrcChainId, setSelectedSrcChainId, selectedSrcToken, setSelectedSrcToken, srcAmount, setSrcAmount, dstAmount, setIsSrcInputDirty, selectedCryptoPaymentMethod, setSelectedCryptoPaymentMethod, selectedFiatPaymentMethod, setSelectedFiatPaymentMethod, selectedRecipientAddress, setSelectedRecipientAddress, recipientName, globalAddress, anyspendQuote, isLoadingAnyspendQuote, activeInputAmountInWei, geoData, coinbaseAvailablePaymentMethods, stripeWeb2Support, createOrder, isCreatingOrder, createOnrampOrder, isCreatingOnrampOrder, } = (0, useAnyspendFlow_1.useAnyspendFlow)({
40
+ const { activePanel, setActivePanel, orderId, setOrderId, oat, selectedSrcChainId, setSelectedSrcChainId, selectedSrcToken, setSelectedSrcToken, srcAmount, setSrcAmount, dstAmount, isSrcInputDirty, setIsSrcInputDirty, selectedCryptoPaymentMethod, setSelectedCryptoPaymentMethod, selectedFiatPaymentMethod, setSelectedFiatPaymentMethod, selectedRecipientAddress, setSelectedRecipientAddress, recipientName, globalAddress, anyspendQuote, isLoadingAnyspendQuote, activeInputAmountInWei, geoData, coinbaseAvailablePaymentMethods, stripeWeb2Support, createOrder, isCreatingOrder, createOnrampOrder, isCreatingOnrampOrder, } = (0, useAnyspendFlow_1.useAnyspendFlow)({
40
41
  paymentType,
41
42
  recipientAddress,
42
43
  loadOrder,
@@ -118,10 +119,10 @@ function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress,
118
119
  await handleFiatOrder();
119
120
  }
120
121
  };
121
- 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, 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), 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: () => { }, onChangeDstAmount: value => {
122
+ 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 => {
122
123
  setIsSrcInputDirty(false);
123
124
  setSrcAmount(value);
124
- }, anyspendQuote: anyspendQuote, onShowPointsDetail: () => setActivePanel(useAnyspendFlow_1.PanelView.POINTS_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] }));
125
+ }, 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] }));
125
126
  // Handle crypto order creation
126
127
  const handleCryptoOrder = async () => {
127
128
  try {
@@ -202,7 +203,7 @@ function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress,
202
203
  const orderDetailsView = ((0, jsx_runtime_1.jsx)("div", { className: "mx-auto w-[460px] max-w-full", children: (0, jsx_runtime_1.jsx)("div", { className: "relative flex flex-col gap-4", children: oat && ((0, jsx_runtime_1.jsx)(OrderDetails_1.OrderDetails, { mode: mode, order: oat.data.order, depositTxs: oat.data.depositTxs, relayTxs: oat.data.relayTxs, executeTx: oat.data.executeTx, refundTxs: oat.data.refundTxs, cryptoPaymentMethod: paymentType === "fiat" ? CryptoPaymentMethod_1.CryptoPaymentMethodType.NONE : selectedCryptoPaymentMethod, selectedCryptoPaymentMethod: selectedCryptoPaymentMethod, onPaymentMethodChange: setSelectedCryptoPaymentMethod, onBack: () => {
203
204
  setOrderId(undefined);
204
205
  setActivePanel(useAnyspendFlow_1.PanelView.MAIN);
205
- }, disableUrlParamManagement: true })) }) }));
206
+ }, disableUrlParamManagement: true, points: oat.data.points || undefined })) }) }));
206
207
  // Loading view
207
208
  const loadingView = ((0, jsx_runtime_1.jsx)("div", { className: "mx-auto flex w-full flex-col items-center gap-4 p-5", children: (0, jsx_runtime_1.jsx)("div", { className: "text-as-primary", children: "Loading order details..." }) }));
208
209
  // Panel views
@@ -219,6 +220,11 @@ function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress,
219
220
  setActivePanel(useAnyspendFlow_1.PanelView.MAIN);
220
221
  }, srcAmountOnRamp: srcAmount }));
221
222
  const pointsDetailView = ((0, jsx_runtime_1.jsx)(PointsDetailPanel_1.PointsDetailPanel, { pointsAmount: anyspendQuote?.data?.pointsAmount || 0, onBack: () => setActivePanel(useAnyspendFlow_1.PanelView.MAIN) }));
223
+ const feeDetailView = anyspendQuote?.data?.fee ? ((0, jsx_runtime_1.jsx)(FeeDetailPanel_1.FeeDetailPanel, { fee: anyspendQuote.data.fee, transactionAmountUsd: paymentType === "fiat"
224
+ ? parseFloat(srcAmount)
225
+ : anyspendQuote.data.currencyIn?.amountUsd
226
+ ? Number(anyspendQuote.data.currencyIn.amountUsd)
227
+ : undefined, onBack: () => setActivePanel(useAnyspendFlow_1.PanelView.MAIN) })) : null;
222
228
  // If showing token selection, render with panel transitions
223
229
  return ((0, jsx_runtime_1.jsx)(react_1.StyleRoot, { children: (0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)("anyspend-container font-inter mx-auto w-full max-w-[460px]", mode === "page" &&
224
230
  "bg-as-surface-primary border-as-border-secondary overflow-hidden rounded-2xl border shadow-xl"), children: (0, jsx_runtime_1.jsx)(react_1.TransitionPanel, { activeIndex: orderId
@@ -241,5 +247,6 @@ function AnySpendDepositHypeInner({ loadOrder, mode = "modal", recipientAddress,
241
247
  (0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)(mode === "page" && "p-6"), children: orderDetailsView }, "order-details-view"),
242
248
  (0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)(mode === "page" && "p-6"), children: loadingView }, "loading-view"),
243
249
  (0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)(mode === "page" && "p-6"), children: pointsDetailView }, "points-detail-view"),
250
+ (0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)(mode === "page" && "p-6"), children: feeDetailView }, "fee-detail-view"),
244
251
  ] }) }) }));
245
252
  }
@@ -7,6 +7,7 @@ interface CryptoPaySectionProps {
7
7
  setSelectedSrcToken: (token: components["schemas"]["Token"]) => void;
8
8
  srcAmount: string;
9
9
  setSrcAmount: (amount: string) => void;
10
+ isSrcInputDirty: boolean;
10
11
  setIsSrcInputDirty: (dirty: boolean) => void;
11
12
  selectedCryptoPaymentMethod: CryptoPaymentMethodType;
12
13
  onSelectCryptoPaymentMethod: () => void;
@@ -14,6 +15,7 @@ interface CryptoPaySectionProps {
14
15
  onTokenSelect?: (token: components["schemas"]["Token"], event: {
15
16
  preventDefault: () => void;
16
17
  }) => void;
18
+ onShowFeeDetail?: () => void;
17
19
  }
18
- export declare function CryptoPaySection({ selectedSrcChainId, setSelectedSrcChainId, selectedSrcToken, setSelectedSrcToken, srcAmount, setSrcAmount, setIsSrcInputDirty, selectedCryptoPaymentMethod, onSelectCryptoPaymentMethod, anyspendQuote, onTokenSelect, }: CryptoPaySectionProps): import("react/jsx-runtime").JSX.Element;
20
+ export declare function CryptoPaySection({ selectedSrcChainId, setSelectedSrcChainId, selectedSrcToken, setSelectedSrcToken, srcAmount, setSrcAmount, isSrcInputDirty, setIsSrcInputDirty, selectedCryptoPaymentMethod, onSelectCryptoPaymentMethod, anyspendQuote, onTokenSelect, onShowFeeDetail, }: CryptoPaySectionProps): import("react/jsx-runtime").JSX.Element;
19
21
  export {};
@@ -12,7 +12,7 @@ const react_3 = require("react");
12
12
  const CryptoPaymentMethod_1 = require("./CryptoPaymentMethod");
13
13
  const OrderTokenAmount_1 = require("./OrderTokenAmount");
14
14
  const TokenBalance_1 = require("./TokenBalance");
15
- function CryptoPaySection({ selectedSrcChainId, setSelectedSrcChainId, selectedSrcToken, setSelectedSrcToken, srcAmount, setSrcAmount, setIsSrcInputDirty, selectedCryptoPaymentMethod, onSelectCryptoPaymentMethod, anyspendQuote, onTokenSelect, }) {
15
+ function CryptoPaySection({ selectedSrcChainId, setSelectedSrcChainId, selectedSrcToken, setSelectedSrcToken, srcAmount, setSrcAmount, isSrcInputDirty, setIsSrcInputDirty, selectedCryptoPaymentMethod, onSelectCryptoPaymentMethod, anyspendQuote, onTokenSelect, onShowFeeDetail, }) {
16
16
  const { connectedSmartWallet, connectedEOAWallet } = (0, react_1.useAccountWallet)();
17
17
  const { data: srcTokenMetadata } = (0, react_1.useTokenData)(selectedSrcToken?.chainId, selectedSrcToken?.address);
18
18
  // Determine which address to use based on payment method
@@ -45,7 +45,7 @@ function CryptoPaySection({ selectedSrcChainId, setSelectedSrcChainId, selectedS
45
45
  (0, react_3.useEffect)(() => {
46
46
  appliedSrcMetadataRef.current = false;
47
47
  }, [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.jsx)("div", { className: "text-as-primary/50 flex h-7 items-center text-sm", children: "Pay" }), (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 => {
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 => {
49
49
  setIsSrcInputDirty(true);
50
50
  setSrcAmount(value);
51
51
  }, 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, {
@@ -10,11 +10,13 @@ interface CryptoReceiveSectionProps {
10
10
  selectedDstChainId?: number;
11
11
  setSelectedDstChainId?: (chainId: number) => void;
12
12
  setSelectedDstToken?: (token: components["schemas"]["Token"]) => void;
13
+ isSrcInputDirty: boolean;
13
14
  onChangeDstAmount?: (value: string) => void;
14
15
  anyspendQuote?: any;
15
16
  dstTokenSymbol?: string;
16
17
  dstTokenLogoURI?: string;
17
18
  onShowPointsDetail?: () => void;
19
+ onShowFeeDetail?: () => void;
18
20
  }
19
- export declare function CryptoReceiveSection({ isDepositMode, isBuyMode, selectedRecipientAddress, recipientName, onSelectRecipient, dstAmount, dstToken, selectedDstChainId, setSelectedDstChainId, setSelectedDstToken, onChangeDstAmount, anyspendQuote, dstTokenSymbol, dstTokenLogoURI, onShowPointsDetail, }: CryptoReceiveSectionProps): import("react/jsx-runtime").JSX.Element;
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;
20
22
  export {};
@@ -11,9 +11,9 @@ const react_1 = require("motion/react");
11
11
  const FeatureFlagsContext_1 = require("../../contexts/FeatureFlagsContext");
12
12
  const OrderTokenAmount_1 = require("./OrderTokenAmount");
13
13
  const PointsBadge_1 = require("./PointsBadge");
14
- function CryptoReceiveSection({ isDepositMode = false, isBuyMode = false, selectedRecipientAddress, recipientName, onSelectRecipient, dstAmount, dstToken, selectedDstChainId, setSelectedDstChainId, setSelectedDstToken, onChangeDstAmount, anyspendQuote, dstTokenSymbol, dstTokenLogoURI, onShowPointsDetail, }) {
14
+ function CryptoReceiveSection({ isDepositMode = false, isBuyMode = false, selectedRecipientAddress, recipientName, onSelectRecipient, dstAmount, dstToken, selectedDstChainId, setSelectedDstChainId, setSelectedDstToken, isSrcInputDirty, onChangeDstAmount, anyspendQuote, dstTokenSymbol, dstTokenLogoURI, onShowPointsDetail, onShowFeeDetail, }) {
15
15
  const featureFlags = (0, FeatureFlagsContext_1.useFeatureFlags)();
16
- 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.jsx)("div", { className: "text-as-primary/50 flex h-7 items-center text-sm", children: isDepositMode ? "Deposit" : "Receive" }), 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 ? (
16
+ 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
17
  // Fixed destination token display for buy mode and deposit mode
18
18
  (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 })] })] })) : (
19
19
  // Token selection for regular swap mode
@@ -25,32 +25,38 @@ function CryptoReceiveSection({ isDepositMode = false, isBuyMode = false, select
25
25
  (() => {
26
26
  const calculatePriceImpact = (inputUsd, outputUsd) => {
27
27
  if (!inputUsd || !outputUsd) {
28
- return { percentage: "0.00", isNegative: false };
28
+ return { percentage: "0.00", percentageNum: 0, isNegative: false };
29
29
  }
30
30
  const input = Number(inputUsd);
31
31
  const output = Number(outputUsd);
32
32
  // Handle edge cases
33
33
  if (input === 0 || isNaN(input) || isNaN(output) || input <= output) {
34
- return { percentage: "0.00", isNegative: false };
34
+ return { percentage: "0.00", percentageNum: 0, isNegative: false };
35
35
  }
36
36
  const percentageValue = ((output - input) / input) * 100;
37
37
  // Handle the -0.00% case
38
38
  if (percentageValue > -0.005 && percentageValue < 0) {
39
- return { percentage: "0.00", isNegative: false };
39
+ return { percentage: "0.00", percentageNum: 0, isNegative: false };
40
40
  }
41
41
  return {
42
42
  percentage: Math.abs(percentageValue).toFixed(2),
43
+ percentageNum: Math.abs(percentageValue),
43
44
  isNegative: percentageValue < 0,
44
45
  };
45
46
  };
46
- const { percentage, isNegative } = calculatePriceImpact(anyspendQuote.data.currencyIn.amountUsd, anyspendQuote.data.currencyOut.amountUsd);
47
- // Parse the percentage as a number for comparison
48
- const percentageNum = parseFloat(percentage);
49
- // Don't show if less than 1%
50
- if (percentageNum < 1) {
47
+ const { percentage, percentageNum, isNegative } = calculatePriceImpact(anyspendQuote.data.currencyIn.amountUsd, anyspendQuote.data.currencyOut.amountUsd);
48
+ // Get the fee percentage if available
49
+ const feePercent = anyspendQuote.data.fee?.finalFeeBps ? anyspendQuote.data.fee.finalFeeBps / 100 : 0;
50
+ // Calculate actual slippage (price impact minus fee)
51
+ const actualSlippage = percentageNum - feePercent;
52
+ // Show warning based on actual slippage, not total impact
53
+ const yellowThreshold = 1; // 1% actual slippage
54
+ const redThreshold = 2; // 2% actual slippage
55
+ // Don't show if actual slippage is less than yellow threshold
56
+ if (actualSlippage < yellowThreshold) {
51
57
  return null;
52
58
  }
53
59
  // Using inline style to ensure color displays
54
- return ((0, jsx_runtime_1.jsxs)("span", { className: "ml-2", style: { color: percentageNum >= 10 ? "red" : "#FFD700" }, children: ["(", isNegative ? "-" : "", percentage, "%)"] }));
60
+ return ((0, jsx_runtime_1.jsxs)("span", { className: "ml-2", style: { color: actualSlippage >= redThreshold ? "red" : "#FFD700" }, children: ["(", isNegative ? "-" : "", percentage, "%)"] }));
55
61
  })()] }), featureFlags.showPoints && anyspendQuote?.data?.pointsAmount > 0 && ((0, jsx_runtime_1.jsx)(PointsBadge_1.PointsBadge, { pointsAmount: anyspendQuote.data.pointsAmount, pointsMultiplier: anyspendQuote.data.pointsMultiplier, onClick: () => onShowPointsDetail?.() }))] })] }));
56
62
  }
@@ -0,0 +1,12 @@
1
+ import { components } from "../../../types/api";
2
+ interface FeeBreakDownProps {
3
+ fee: components["schemas"]["Fee"];
4
+ /** Number of decimals for amount display (default: 6 for USDC) */
5
+ decimals?: number;
6
+ /** Show currency symbol for amounts (default: true) */
7
+ showCurrency?: boolean;
8
+ /** Custom className for the container */
9
+ className?: string;
10
+ }
11
+ export declare function FeeBreakDown({ fee, decimals, showCurrency, className }: FeeBreakDownProps): import("react/jsx-runtime").JSX.Element;
12
+ export {};
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FeeBreakDown = FeeBreakDown;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ function FeeBreakDown({ fee, decimals = 6, showCurrency = true, className = "" }) {
6
+ const isStripeFee = fee.type === "stripeweb2_fee";
7
+ // Convert basis points to percentage
8
+ const bpsToPercent = (bps) => (bps / 100).toFixed(2);
9
+ // Format amount with optional currency
10
+ const formatAmount = (amount) => {
11
+ const divisor = Math.pow(10, decimals);
12
+ const formatted = (Number(amount) / divisor).toFixed(2);
13
+ return showCurrency ? `$${formatted}` : formatted;
14
+ };
15
+ // Check if discount is active
16
+ const hasWhaleDiscount = fee.anyspendWhaleDiscountBps > 0;
17
+ const hasPartnerDiscount = fee.anyspendPartnerDiscountBps > 0;
18
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `min-w-[240px] ${className}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-as-primary mb-2 text-sm font-semibold", children: "Fee Breakdown" }), (0, jsx_runtime_1.jsx)("table", { className: "w-full", children: (0, jsx_runtime_1.jsxs)("tbody", { className: "text-as-secondary text-xs", children: [isStripeFee && ((0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { className: "py-1", children: "Stripe Fee" }), (0, jsx_runtime_1.jsxs)("td", { className: "py-1 text-right", children: [bpsToPercent(fee.stripeFeeBps), "% + $", fee.stripeFeeUsd.toFixed(2)] })] })), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { className: "py-1", children: "AnySpend Fee" }), (0, jsx_runtime_1.jsxs)("td", { className: "py-1 text-right", children: [bpsToPercent(fee.anyspendFeeBps), "%", isStripeFee && fee.anyspendFeeUsd > 0 && ` + $${fee.anyspendFeeUsd.toFixed(2)}`] })] }), hasWhaleDiscount && ((0, jsx_runtime_1.jsxs)("tr", { className: "text-green-600", children: [(0, jsx_runtime_1.jsx)("td", { className: "py-1", children: "Whale Discount" }), (0, jsx_runtime_1.jsxs)("td", { className: "py-1 text-right", children: ["-", bpsToPercent(fee.anyspendWhaleDiscountBps), "%"] })] })), hasPartnerDiscount && ((0, jsx_runtime_1.jsxs)("tr", { className: "text-green-600", children: [(0, jsx_runtime_1.jsx)("td", { className: "py-1", children: "Partner Discount" }), (0, jsx_runtime_1.jsxs)("td", { className: "py-1 text-right", children: ["-", bpsToPercent(fee.anyspendPartnerDiscountBps), "%"] })] })), (0, jsx_runtime_1.jsxs)("tr", { className: "border-as-border-secondary border-t", children: [(0, jsx_runtime_1.jsx)("td", { className: "text-as-primary py-1.5 pt-2 font-semibold", children: "Total Fee" }), (0, jsx_runtime_1.jsxs)("td", { className: "text-as-primary py-1.5 pt-2 text-right font-semibold", children: [bpsToPercent(fee.finalFeeBps), "%", isStripeFee && ` + $${fee.finalFeeUsd.toFixed(2)}`] })] })] }) })] }), isStripeFee && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "border-as-border-secondary my-3 border-t" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-as-primary mb-2 text-sm font-semibold", children: "Amount Calculation" }), (0, jsx_runtime_1.jsx)("table", { className: "w-full", children: (0, jsx_runtime_1.jsxs)("tbody", { className: "text-as-secondary text-xs", children: [(0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { className: "py-1", children: "Original Amount" }), (0, jsx_runtime_1.jsx)("td", { className: "py-1 text-right font-medium", children: formatAmount(fee.originalAmount) })] }), (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { className: "py-1", children: "Total Fee" }), (0, jsx_runtime_1.jsxs)("td", { className: "py-1 text-right text-red-600", children: ["-", formatAmount((Number(fee.originalAmount) - Number(fee.finalAmount)).toString())] })] }), (0, jsx_runtime_1.jsxs)("tr", { className: "border-as-border-secondary border-t", children: [(0, jsx_runtime_1.jsx)("td", { className: "text-as-primary py-1.5 pt-2 font-semibold", children: "You Receive" }), (0, jsx_runtime_1.jsx)("td", { className: "text-as-primary py-1.5 pt-2 text-right font-semibold", children: formatAmount(fee.finalAmount) })] })] }) })] })] }))] }));
19
+ }
@@ -0,0 +1,8 @@
1
+ import { components } from "../../../types/api";
2
+ interface FeeDetailPanelProps {
3
+ fee: components["schemas"]["Fee"];
4
+ transactionAmountUsd?: number;
5
+ onBack: () => void;
6
+ }
7
+ export declare function FeeDetailPanel({ fee, transactionAmountUsd, onBack }: FeeDetailPanelProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};