@ape.swap/bonds-sdk 6.2.1 → 6.2.2

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 (184) hide show
  1. package/dist/components/MenuSelect/MenuSelect.d.ts +1 -1
  2. package/dist/components/MenuSelect/MenuSelect.js.map +1 -1
  3. package/dist/components/ProgressBar/ProgressBarWrapper.d.ts +1 -1
  4. package/dist/components/ProgressBar/ProgressBarWrapper.js.map +1 -1
  5. package/dist/components/TokenInfoAndName/index.d.ts +0 -1
  6. package/dist/components/TokenInfoAndName/index.js +1 -1
  7. package/dist/components/TokenInfoAndName/index.js.map +1 -1
  8. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  9. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  10. package/dist/components/uikit-sdk/Button/Button.js +0 -36
  11. package/dist/components/uikit-sdk/Button/Button.js.map +1 -1
  12. package/dist/components/uikit-sdk/Button/types.d.ts +6 -10
  13. package/dist/components/uikit-sdk/Button/types.js +0 -5
  14. package/dist/components/uikit-sdk/Button/types.js.map +1 -1
  15. package/dist/components/uikit-sdk/Checkbox/types.d.ts +2 -1
  16. package/dist/components/uikit-sdk/Checkbox/types.js.map +1 -1
  17. package/dist/components/uikit-sdk/Skeleton/styles.d.ts +0 -12
  18. package/dist/components/uikit-sdk/Skeleton/styles.js +1 -1
  19. package/dist/components/uikit-sdk/Skeleton/styles.js.map +1 -1
  20. package/dist/components/uikit-sdk/Svg/Icons/ZapIcon.d.ts +2 -2
  21. package/dist/components/uikit-sdk/Svg/styles.d.ts +0 -2
  22. package/dist/components/uikit-sdk/Svg/styles.js.map +1 -1
  23. package/dist/components/uikit-sdk/Text/types.d.ts +1 -1
  24. package/dist/components/uikit-sdk/Text/types.js +1 -1
  25. package/dist/components/uikit-sdk/Text/types.js.map +1 -1
  26. package/dist/components/uikit-sdk/TooltipBubble/types.d.ts +2 -1
  27. package/dist/components/uikit-sdk/TooltipBubble/types.js.map +1 -1
  28. package/dist/config/constants/aptosZapTokens.d.ts +0 -9
  29. package/dist/config/constants/aptosZapTokens.js +1 -2
  30. package/dist/config/constants/aptosZapTokens.js.map +1 -1
  31. package/dist/config/constants/networks.d.ts +0 -2
  32. package/dist/config/constants/networks.js +1 -1
  33. package/dist/config/constants/networks.js.map +1 -1
  34. package/dist/config/constants/tokens.d.ts +1 -2
  35. package/dist/constants/aptosConstants.d.ts +0 -6
  36. package/dist/constants/aptosConstants.js +15 -1
  37. package/dist/constants/aptosConstants.js.map +1 -1
  38. package/dist/constants/solanaConstants.d.ts +0 -6
  39. package/dist/constants/solanaConstants.js +0 -21
  40. package/dist/constants/solanaConstants.js.map +1 -1
  41. package/dist/constants/suiConstants.d.ts +0 -5
  42. package/dist/constants/suiConstants.js +11 -0
  43. package/dist/constants/suiConstants.js.map +1 -1
  44. package/dist/hooks/useSortedZapList.d.ts +1 -1
  45. package/dist/hooks/useSortedZapList.js +1 -2
  46. package/dist/hooks/useSortedZapList.js.map +1 -1
  47. package/dist/hooks/useTokenFromZapList.js +0 -1
  48. package/dist/hooks/useTokenFromZapList.js.map +1 -1
  49. package/dist/state/balance/useCurrencyBalanceSolana.d.ts +0 -2
  50. package/dist/state/balance/useCurrencyBalanceSolana.js +0 -1
  51. package/dist/state/balance/useCurrencyBalanceSolana.js.map +1 -1
  52. package/dist/state/bondApiStats/useGetBondApiStats.d.ts +0 -1
  53. package/dist/state/bondApiStats/useGetBondApiStats.js +1 -1
  54. package/dist/state/bondApiStats/useGetBondApiStats.js.map +1 -1
  55. package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsEVM.d.ts +1 -2
  56. package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsEVM.js +1 -1
  57. package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsEVM.js.map +1 -1
  58. package/dist/state/bonds/useBondsList.d.ts +1 -2
  59. package/dist/state/bonds/useBondsList.js +1 -1
  60. package/dist/state/bonds/useBondsList.js.map +1 -1
  61. package/dist/state/bonds/useBondsListPreTGE.d.ts +1 -2
  62. package/dist/state/bonds/useBondsListPreTGE.js +1 -1
  63. package/dist/state/bonds/useBondsListPreTGE.js.map +1 -1
  64. package/dist/state/bonds/useTierProofSignature.d.ts +0 -1
  65. package/dist/state/bonds/useTierProofSignature.js +1 -1
  66. package/dist/state/bonds/useTierProofSignature.js.map +1 -1
  67. package/dist/state/bonds/useUserBondsPreTGE.d.ts +3 -4
  68. package/dist/state/bonds/useUserBondsPreTGE.js +1 -1
  69. package/dist/state/bonds/useUserBondsPreTGE.js.map +1 -1
  70. package/dist/state/historicalPrice/useHistoricalPrice.d.ts +1 -2
  71. package/dist/state/historicalPrice/useHistoricalPrice.js +1 -1
  72. package/dist/state/historicalPrice/useHistoricalPrice.js.map +1 -1
  73. package/dist/state/hotBonds/useHotBonds.d.ts +0 -2
  74. package/dist/state/hotBonds/useHotBonds.js +1 -1
  75. package/dist/state/hotBonds/useHotBonds.js.map +1 -1
  76. package/dist/state/price/useCurrencyPrice.js +1 -2
  77. package/dist/state/price/useCurrencyPrice.js.map +1 -1
  78. package/dist/state/recommendations/useGetBondRecommendations.d.ts +0 -1
  79. package/dist/state/recommendations/useGetBondRecommendations.js +1 -1
  80. package/dist/state/recommendations/useGetBondRecommendations.js.map +1 -1
  81. package/dist/state/tiers/useTierPoints.d.ts +0 -6
  82. package/dist/state/tiers/useTierPoints.js +1 -1
  83. package/dist/state/tiers/useTierPoints.js.map +1 -1
  84. package/dist/state/zap/useAptosZapQuote.d.ts +1 -16
  85. package/dist/state/zap/useAptosZapQuote.js.map +1 -1
  86. package/dist/state/zap/useSoulZapBondQuote.js +0 -1
  87. package/dist/state/zap/useSoulZapBondQuote.js.map +1 -1
  88. package/dist/state/zap/useSuiZapQuote.d.ts +1 -1
  89. package/dist/state/zap/useSuiZapQuote.js.map +1 -1
  90. package/dist/theme/base.d.ts +1 -4
  91. package/dist/theme/base.js +1 -1
  92. package/dist/theme/base.js.map +1 -1
  93. package/dist/theme/components.d.ts +0 -20
  94. package/dist/theme/components.js +1 -1
  95. package/dist/theme/components.js.map +1 -1
  96. package/dist/types/aptosBonds.d.ts +0 -60
  97. package/dist/types/bondIssuanceCodec.d.ts +0 -1
  98. package/dist/types/bondIssuanceCodec.js.map +1 -1
  99. package/dist/types/bondTermCodec.d.ts +0 -1
  100. package/dist/types/bondTermCodec.js.map +1 -1
  101. package/dist/types/solanaBonds.d.ts +4 -3
  102. package/dist/utils/aptosHelpers.d.ts +1 -14
  103. package/dist/utils/aptosHelpers.js +30 -2
  104. package/dist/utils/aptosHelpers.js.map +1 -1
  105. package/dist/utils/calculateSolanaTrueBillPrice.d.ts +0 -1
  106. package/dist/utils/calculateSolanaTrueBillPrice.js +0 -5
  107. package/dist/utils/calculateSolanaTrueBillPrice.js.map +1 -1
  108. package/dist/utils/convertToBigish.d.ts +0 -1
  109. package/dist/utils/convertToBigish.js +1 -1
  110. package/dist/utils/convertToBigish.js.map +1 -1
  111. package/dist/utils/displayHelpers.d.ts +0 -6
  112. package/dist/utils/displayHelpers.js +1 -1
  113. package/dist/utils/displayHelpers.js.map +1 -1
  114. package/dist/utils/formatNumber.d.ts +0 -7
  115. package/dist/utils/formatNumber.js +1 -1
  116. package/dist/utils/formatNumber.js.map +1 -1
  117. package/dist/utils/getNativeTicker.js +0 -1
  118. package/dist/utils/getNativeTicker.js.map +1 -1
  119. package/dist/utils/suiHelpers.d.ts +0 -2
  120. package/dist/utils/suiHelpers.js +13 -15
  121. package/dist/utils/suiHelpers.js.map +1 -1
  122. package/dist/views/Bonds/Bonds.d.ts +0 -4
  123. package/dist/views/Bonds/Bonds.js.map +1 -1
  124. package/dist/views/Bonds/components/BondRows/ActiveBondRows.d.ts +1 -1
  125. package/dist/views/Bonds/components/BondRows/ActiveBondRows.js.map +1 -1
  126. package/dist/views/Bonds/components/RecommendationCards/SmallRecommendationCard.d.ts +1 -1
  127. package/dist/views/Bonds/components/RecommendationCards/SmallRecommendationCard.js.map +1 -1
  128. package/dist/views/Bonds/utils.d.ts +0 -2
  129. package/dist/views/Bonds/utils.js.map +1 -1
  130. package/dist/views/BuyBond/BuyBondModal.d.ts +1 -1
  131. package/dist/views/BuyBond/BuyBondModal.js.map +1 -1
  132. package/dist/views/BuyBond/BuyComponentAptos.d.ts +1 -1
  133. package/dist/views/BuyBond/BuyComponentAptos.js.map +1 -1
  134. package/dist/views/BuyBond/BuyComponentSolana.d.ts +1 -1
  135. package/dist/views/BuyBond/BuyComponentSolana.js.map +1 -1
  136. package/dist/views/BuyBond/BuyComponentSui.d.ts +1 -1
  137. package/dist/views/BuyBond/BuyComponentSui.js.map +1 -1
  138. package/dist/views/ProjectView/components/BondLeaderboard/components/SalesTable.d.ts +1 -1
  139. package/dist/views/ProjectView/components/BondLeaderboard/components/SalesTable.js.map +1 -1
  140. package/dist/views/ProjectView/components/BondLeaderboard/components/TopSaleCard.d.ts +1 -1
  141. package/dist/views/ProjectView/components/BondLeaderboard/components/TopSaleCard.js.map +1 -1
  142. package/dist/views/ProjectView/components/BondLeaderboard/components/TopThreeSalesCards.d.ts +1 -1
  143. package/dist/views/ProjectView/components/BondLeaderboard/components/TopThreeSalesCards.js.map +1 -1
  144. package/dist/views/ProjectView/components/BondStats/types.d.ts +2 -1
  145. package/dist/views/ProjectView/components/BondStats/types.js.map +1 -1
  146. package/dist/views/SingleBond/SoldOutBuyBondPlaceholder.d.ts +1 -1
  147. package/dist/views/SingleBond/SoldOutBuyBondPlaceholder.js.map +1 -1
  148. package/package.json +6 -5
  149. package/dist/components/AccordionText/index.d.ts +0 -6
  150. package/dist/components/RestrictedRegionModal/index.d.ts +0 -5
  151. package/dist/components/TabNavigation/index.d.ts +0 -8
  152. package/dist/components/uikit-sdk/Input/NumericInput.d.ts +0 -9
  153. package/dist/components/uikit-sdk/Modal/ModalFooter.d.ts +0 -4
  154. package/dist/components/uikit-sdk/Svg/Icons/Audit.d.ts +0 -4
  155. package/dist/components/uikit-sdk/Svg/Icons/Fire.d.ts +0 -4
  156. package/dist/components/uikit-sdk/Svg/Icons/FullLogo.d.ts +0 -4
  157. package/dist/components/uikit-sdk/Svg/Icons/Instagram.d.ts +0 -4
  158. package/dist/components/uikit-sdk/Svg/Icons/Language.d.ts +0 -4
  159. package/dist/components/uikit-sdk/Svg/Icons/Medium.d.ts +0 -4
  160. package/dist/components/uikit-sdk/Svg/Icons/Pool.d.ts +0 -4
  161. package/dist/components/uikit-sdk/Svg/Icons/Reddit.d.ts +0 -4
  162. package/dist/components/uikit-sdk/Svg/Icons/Telegram.d.ts +0 -4
  163. package/dist/components/uikit-sdk/Svg/Icons/Website.d.ts +0 -4
  164. package/dist/components/uikit-sdk/Svg/tokens/BSC.d.ts +0 -4
  165. package/dist/components/uikit-sdk/Svg/tokens/CELO.d.ts +0 -4
  166. package/dist/components/uikit-sdk/Svg/tokens/CRONOS.d.ts +0 -4
  167. package/dist/components/uikit-sdk/Svg/tokens/FANTOM.d.ts +0 -4
  168. package/dist/components/uikit-sdk/Svg/tokens/GNOSIS.d.ts +0 -4
  169. package/dist/components/uikit-sdk/Svg/tokens/OKX.d.ts +0 -4
  170. package/dist/components/uikit-sdk/Svg/tokens/OPTIMISM.d.ts +0 -4
  171. package/dist/components/uikit-sdk/Svg/tokens/POLYGONZK.d.ts +0 -4
  172. package/dist/config/constants/tokens.js +0 -36
  173. package/dist/config/constants/tokens.js.map +0 -1
  174. package/dist/contexts/RefreshContext.d.ts +0 -10
  175. package/dist/hooks/useRefresh.d.ts +0 -6
  176. package/dist/hooks/useTimer.d.ts +0 -2
  177. package/dist/state/bondApiStats/useUserApiStats.d.ts +0 -22
  178. package/dist/state/bonds/aptosBondsConfig.d.ts +0 -4
  179. package/dist/state/bonds/fetchUsersBonds/getBillNftData.d.ts +0 -9
  180. package/dist/state/geoFencing/useGeoFencing.d.ts +0 -5
  181. package/dist/state/zap/useSoulZapTokenQuote.d.ts +0 -3
  182. package/dist/state/zap/useTierOptimizationPreview.d.ts +0 -27
  183. package/dist/views/ZapModal/index.d.ts +0 -13
  184. package/dist/views/ZapModal/styles.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"displayHelpers.js","sources":["../../src/utils/displayHelpers.ts"],"sourcesContent":["import { BigNumber } from 'bignumber.js'\nimport { UserBill } from '../types/yourbonds'\nimport { getBalanceNumber } from './getBalanceNumber'\nimport { BondsData } from '../types/bonds'\nimport { getFirstNonZeroDigits } from './roundNumber'\nimport { getTimePeriods } from './getTimePeriods'\nimport { formatNumberSI } from './formatNumber'\nimport { BillsConfig, LaunchBondTiers } from '@ape.swap/apeswap-lists'\nimport { TIERS_WEIGHT } from '../state/tiers/useTierPoints'\nimport { findHighestTrueBondPrice } from './bondPriceHelpers'\n\nexport const claimable = (userBill?: UserBill) => {\n return getBalanceNumber(\n new BigNumber(userBill?.pendingRewards ?? '0'),\n userBill?.bond?.earnToken?.decimals?.[userBill?.bond?.chainId] ?? 18,\n )\n}\n\nexport const claimableUSD = (userBill?: UserBill) => {\n const claimableTokens = claimable(userBill)\n return claimableTokens * parseFloat(userBill?.bond?.payoutTokenPrice ?? '0')\n}\n\nexport const earnTokenPrice = (bond: BondsData) => {\n return formatNumberSI(bond?.payoutTokenPrice ?? '0')\n}\n\n// Amount of unvested (locked) tokens\nexport const pending = (userBill?: UserBill) => {\n return (\n getBalanceNumber(\n new BigNumber(userBill?.payout ?? 0),\n userBill?.bond?.earnToken?.decimals?.[userBill?.bond?.chainId] ?? 18,\n ) - claimable(userBill)\n )\n}\n\nexport const pendingUSD = (userBill?: UserBill) => {\n const pendingTokens = pending(userBill)\n return pendingTokens * parseFloat(userBill?.bond?.payoutTokenPrice ?? '0')\n}\n\nexport const claimed = (userBill?: UserBill) => {\n return getBalanceNumber(\n new BigNumber(userBill?.payoutClaimed ?? '0'),\n userBill?.bond?.earnToken?.decimals?.[userBill?.bond?.chainId] ?? 18,\n )\n}\n\nexport const claimedUSD = (userBill?: UserBill) => {\n const claimedTokens = claimed(userBill)\n return claimedTokens * parseFloat(userBill?.bond?.payoutTokenPrice ?? '0')\n}\n\nexport const getPercentageVested = (bond?: UserBill) => {\n const vestingTerm = parseInt(bond?.vestingTerm ?? '0')\n const timeLeftForFullyVested = getTimeLeftForFullyVested(bond)\n if (timeLeftForFullyVested <= 0) return 100\n return ((vestingTerm - timeLeftForFullyVested) / vestingTerm) * 100\n}\n\nexport const getTimeLeftForFullyVested = (bond?: UserBill) => {\n const vestingTerm = parseInt(bond?.vestingTerm ?? '0')\n const purchaseTimestamp = parseInt(bond?.vestingStartTimestamp ?? '0')\n const now = Math.round(Date.now() / 1000)\n return purchaseTimestamp + vestingTerm - now\n}\n\nexport const getPendingVestingString = (bond?: UserBill) => {\n const timeLeftForFullyVested = getTimeLeftForFullyVested(bond)\n const vestingTime = getTimePeriods(timeLeftForFullyVested, true)\n return `${vestingTime.days}d, ${vestingTime.hours}h, ${vestingTime.minutes}m`\n}\n\nexport const getVestingTermsString = (bond?: BondsData | BillsConfig) => {\n const vestingTerm = bond?.vestingTerm ?? 0\n const vestingCliff = bond?.vestingCliff ?? 0\n if (!vestingCliff) {\n const vestingTime = getTimePeriods(vestingTerm, true)\n return `${vestingTime.days} D`\n } else if (vestingCliff) {\n // TODO: remove this hardcoded shit\n if (bond?.earnToken.symbol === 'AIX') {\n return `${getTimePeriods(vestingCliff, true).days} D`\n }\n const vestingTime = getTimePeriods(vestingTerm - vestingCliff, true)\n const vestingCliffString = getTimePeriods(vestingCliff, true)\n return `${vestingCliffString.days + vestingTime.days} D`\n }\n return '-'\n}\n\nexport const getVestingTermsTooltipString = (bond?: BondsData | BillsConfig) => {\n const vestingTerm = bond?.vestingTerm ?? 0\n const vestingCliff = bond?.vestingCliff\n if (!vestingCliff) return undefined\n const vestingTime = getTimePeriods(vestingTerm - vestingCliff, true)\n const vestingCliffString = getTimePeriods(vestingCliff, true)\n if (vestingTerm - vestingCliff === 0) {\n return `${vestingCliffString.days}-day cliff, then instant release of all tokens.`\n }\n return `${vestingCliffString.days}-day cliff + ${vestingTime.days}-day linear vesting.`\n}\n\nexport const discountEarnTokenPrice = (bond: BondsData, useTiers?: boolean) => {\n const feeInPayout = bond?.feeInPayout ?? 0\n const tierBoostRate = bond?.tierBoostRate ?? 0\n const principalTokenPrice = parseFloat(bond.principalTokenPrice ?? '0')\n const trueBondPrice = findHighestTrueBondPrice(\n useTiers ? TIERS_WEIGHT[LaunchBondTiers.Legend] : '0',\n bond?.trueBondPrices,\n )?.trueBondPrice\n const trueBondPriceWithFee = getBalanceNumber(\n new BigNumber(trueBondPrice ?? '0').times((100 + tierBoostRate) / 100).times((100 + feeInPayout) / 100),\n )\n return formatNumberSI(principalTokenPrice * trueBondPriceWithFee, 3)\n}\n\nexport const discountEarnTokenPriceForUser = (bond: BondsData, useTiers?: boolean, userTier?: LaunchBondTiers) => {\n const feeInPayout = bond?.feeInPayout ?? 0\n const tierBoostRate = bond?.tierBoostRate ?? 0\n const principalTokenPrice = parseFloat(bond.principalTokenPrice ?? '0')\n const trueBondPrice = findHighestTrueBondPrice(\n useTiers && userTier ? TIERS_WEIGHT[userTier] : '0',\n bond?.trueBondPrices,\n )?.trueBondPrice\n const trueBondPriceWithFee = getBalanceNumber(\n new BigNumber(trueBondPrice ?? '0').times((100 + tierBoostRate) / 100).times((100 + feeInPayout) / 100),\n )\n return getFirstNonZeroDigits(principalTokenPrice * trueBondPriceWithFee)\n}\n\nexport const SAFETY_THRESHOLD = 5 // in USD\n\nexport const getSafetyAvailable = (bond?: BondsData, allowLowValueBonds?: boolean): BigNumber => {\n const available = new BigNumber(bond?.tokensRemaining ?? '0')\n const payoutTokenPrice = new BigNumber(bond?.payoutTokenPrice ?? 0)\n const threshold = allowLowValueBonds ? 0 : SAFETY_THRESHOLD\n const thresholdToShow = payoutTokenPrice.gt(0) ? new BigNumber(threshold).div(payoutTokenPrice) : new BigNumber(0)\n const feeInPayoutAdjuster = (100 - (bond?.feeInPayout ?? 0)) / 100\n let safeAvailable = available.times(feeInPayoutAdjuster).minus(thresholdToShow)\n if (safeAvailable.lt(0)) safeAvailable = new BigNumber(0)\n if (available.isZero()) return new BigNumber(0)\n return safeAvailable\n}\n\nexport const getSafetyPurchaseLimit = (bond?: BondsData, allowLowValueBonds?: boolean): BigNumber => {\n const threshold = allowLowValueBonds ? 0 : SAFETY_THRESHOLD\n const payoutTokenPrice = new BigNumber(bond?.payoutTokenPrice ?? 0)\n const thresholdToShow = payoutTokenPrice.gt(0) ? new BigNumber(threshold).div(payoutTokenPrice) : new BigNumber(0)\n return new BigNumber(bond?.maxPayout ?? 0)\n .div(new BigNumber(10).pow(bond?.earnToken?.decimals?.[bond?.chainId] ?? 18))\n .minus(thresholdToShow)\n}\n\nexport const getMaxBuy = (bond?: BondsData, allowLowValueBonds?: boolean): BigNumber => {\n const safeAvailable = getSafetyAvailable(bond, allowLowValueBonds)\n const safePurchaseLimit = getSafetyPurchaseLimit(bond, allowLowValueBonds)\n\n return safePurchaseLimit.lt(safeAvailable) ? safePurchaseLimit : safeAvailable\n}\n\nexport function formatUSDNumber(input: string): string {\n const number = new BigNumber(input)\n if (number.isNaN()) return '0'\n\n // If the number is greater than 0 but less than 0.01\n if (number.gt(0) && number.lt(0.01)) {\n return '< 0.01'\n }\n // If the number is greater than 1k, round to no decimals.\n if (number.gt(1000)) {\n return number.toNumber().toLocaleString('en-US', { maximumFractionDigits: 0 })\n }\n // Note: Between 1k and 0.01 show 2 decimals\n return parseFloat(number.toFixed(2)).toLocaleString('en-US')\n}\n\nexport const youSpendUSD = (bond: BondsData, inputValue: string) => {\n return (parseFloat(inputValue) * parseFloat(bond?.principalTokenPrice ?? '0')).toString()\n}\n\n// receives depositAmount and returns the payoutTokens the user will receive. IT DOES SUBTRACT FEE IN PAYOUT\nexport const getPayoutAmount = (bond?: BondsData, inputValue?: string, userPoints?: string | null) => {\n if (!inputValue || !bond || !userPoints || !bond.trueBondPrices) return 0\n\n const bigValue = new BigNumber(inputValue).times(new BigNumber(10).pow(18))\n const fee = bond?.feeInPayout ?? 0\n const trueBondPriceObject = findHighestTrueBondPrice(userPoints, bond?.trueBondPrices)\n const trueBondPrice = new BigNumber(trueBondPriceObject?.trueBondPrice ?? '0')\n const reverseFee = new BigNumber(fee / 100 / (1 - fee / 100))\n const billValue = bigValue.div(trueBondPrice.plus(trueBondPrice.times(reverseFee)))\n return billValue.toNumber()\n}\n\nexport const youGetUSD = (bond?: BondsData, inputValue?: string, userPoints?: string) => {\n if (!inputValue || !bond || !userPoints || !bond.trueBondPrices) return 0\n const payoutAmount = getPayoutAmount(bond, inputValue, userPoints)\n return payoutAmount * parseFloat(bond?.payoutTokenPrice ?? '0')\n}\n\nexport const getRawBonus = (bond?: BondsData, inputValue?: string, userPoints?: string) => {\n if (!bond || !inputValue || !userPoints) return '0'\n const premiumUSD = youGetUSD(bond, inputValue, userPoints) - parseFloat(youSpendUSD(bond, inputValue))\n return premiumUSD.toString()\n}\n\nexport const getFeeAmount = (bond?: BondsData, inputValue?: string, userPoints?: string) => {\n const fee = bond?.feeInPayout\n if (!bond || !inputValue || !fee || !userPoints) return 0\n const billValue = new BigNumber(inputValue).times(new BigNumber(10).pow(18))\n const trueBondPrice = findHighestTrueBondPrice(userPoints, bond?.trueBondPrices)\n const feeAmount = billValue.div(new BigNumber(trueBondPrice?.trueBondPrice ?? 0).div(fee / 100))\n return feeAmount.toNumber()\n}\n\nexport const getBonusColor = (premiumString: string): string => {\n return parseFloat(premiumString) < 0 ? 'premium-negative' : 'premium-positive'\n}\n\n/**\n * Calculates the principal token amount needed to receive a target payout amount.\n * This is the reverse of getRawPayoutAmount function (does NOT include fees).\n *\n * @param bond - The bond data\n * @param targetPayoutAmount - The desired payout amount in payout tokens\n * @param userPoints - User's tier points\n * @returns The principal token amount needed, or '0' if calculation cannot be performed\n */\nexport const getPrincipalAmount = (\n bond?: BondsData,\n targetPayoutAmount?: number | string,\n userPoints?: string | null,\n): BigNumber => {\n if (!targetPayoutAmount || !bond || !userPoints || !bond.trueBondPrices) return new BigNumber(0)\n\n const billValue = new BigNumber(targetPayoutAmount)\n const fee = bond?.feeInPayout ?? 0\n const trueBondPriceObject = findHighestTrueBondPrice(userPoints, bond?.trueBondPrices)\n const trueBondPrice = new BigNumber(trueBondPriceObject?.trueBondPrice ?? '0')\n\n if (trueBondPrice.isZero()) return new BigNumber(0)\n\n const reverseFee = new BigNumber(fee / 100 / (1 - fee / 100))\n const trueBondPriceWithFee = trueBondPrice.plus(trueBondPrice.times(reverseFee))\n\n // Reverse the formula: bigValue = billValue * (trueBondPrice + trueBondPrice * reverseFee)\n const bigValue = billValue.times(trueBondPriceWithFee)\n\n // Convert from 18 decimals back to regular amount\n return bigValue.div(new BigNumber(10).pow(18))\n}\n\nexport const getRemainingTokensString = (bond: BondsData, allowLowValueBonds?: boolean) => {\n const remainingTokens = getSafetyAvailable(bond, allowLowValueBonds).toNumber()\n // const remainingTokens = parseFloat(bond?.tokensRemaining ?? '0')\n const remainingTokensUsd = remainingTokens * parseFloat(bond.payoutTokenPrice ?? '0')\n\n return `${formatNumberSI(remainingTokens, 0)} ${bond.earnToken.symbol} ($${formatNumberSI(remainingTokensUsd, 0)})`\n}\n\nexport const remainingPercentage = (bond: BondsData): number => {\n const totalMaxPayout = new BigNumber(bond.maxTotalPayout ?? '0').div(\n new BigNumber(10).pow(bond.earnToken.decimals?.[bond.chainId] ?? 18),\n )\n const remainingTokens = new BigNumber(bond.tokensRemaining ?? '0')\n\n return remainingTokens.div(totalMaxPayout).times(100).toNumber()\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"displayHelpers.js","sources":["../../src/utils/displayHelpers.ts"],"sourcesContent":["import { BigNumber } from 'bignumber.js'\nimport { UserBill } from '../types/yourbonds'\nimport { getBalanceNumber } from './getBalanceNumber'\nimport { BondsData } from '../types/bonds'\nimport { getFirstNonZeroDigits } from './roundNumber'\nimport { getTimePeriods } from './getTimePeriods'\nimport { formatNumberSI } from './formatNumber'\nimport { BillsConfig, LaunchBondTiers } from '@ape.swap/apeswap-lists'\nimport { TIERS_WEIGHT } from '../state/tiers/useTierPoints'\nimport { findHighestTrueBondPrice } from './bondPriceHelpers'\n\nexport const claimable = (userBill?: UserBill) => {\n return getBalanceNumber(\n new BigNumber(userBill?.pendingRewards ?? '0'),\n userBill?.bond?.earnToken?.decimals?.[userBill?.bond?.chainId] ?? 18,\n )\n}\n\nexport const claimableUSD = (userBill?: UserBill) => {\n const claimableTokens = claimable(userBill)\n return claimableTokens * parseFloat(userBill?.bond?.payoutTokenPrice ?? '0')\n}\n\nexport const earnTokenPrice = (bond: BondsData) => {\n return formatNumberSI(bond?.payoutTokenPrice ?? '0')\n}\n\n// Amount of unvested (locked) tokens\nexport const pending = (userBill?: UserBill) => {\n return (\n getBalanceNumber(\n new BigNumber(userBill?.payout ?? 0),\n userBill?.bond?.earnToken?.decimals?.[userBill?.bond?.chainId] ?? 18,\n ) - claimable(userBill)\n )\n}\n\nexport const pendingUSD = (userBill?: UserBill) => {\n const pendingTokens = pending(userBill)\n return pendingTokens * parseFloat(userBill?.bond?.payoutTokenPrice ?? '0')\n}\n\nexport const claimed = (userBill?: UserBill) => {\n return getBalanceNumber(\n new BigNumber(userBill?.payoutClaimed ?? '0'),\n userBill?.bond?.earnToken?.decimals?.[userBill?.bond?.chainId] ?? 18,\n )\n}\n\nexport const claimedUSD = (userBill?: UserBill) => {\n const claimedTokens = claimed(userBill)\n return claimedTokens * parseFloat(userBill?.bond?.payoutTokenPrice ?? '0')\n}\n\nexport const getPercentageVested = (bond?: UserBill) => {\n const vestingTerm = parseInt(bond?.vestingTerm ?? '0')\n const timeLeftForFullyVested = getTimeLeftForFullyVested(bond)\n if (timeLeftForFullyVested <= 0) return 100\n return ((vestingTerm - timeLeftForFullyVested) / vestingTerm) * 100\n}\n\nexport const getTimeLeftForFullyVested = (bond?: UserBill) => {\n const vestingTerm = parseInt(bond?.vestingTerm ?? '0')\n const purchaseTimestamp = parseInt(bond?.vestingStartTimestamp ?? '0')\n const now = Math.round(Date.now() / 1000)\n return purchaseTimestamp + vestingTerm - now\n}\n\nexport const getPendingVestingString = (bond?: UserBill) => {\n const timeLeftForFullyVested = getTimeLeftForFullyVested(bond)\n const vestingTime = getTimePeriods(timeLeftForFullyVested, true)\n return `${vestingTime.days}d, ${vestingTime.hours}h, ${vestingTime.minutes}m`\n}\n\nexport const getVestingTermsString = (bond?: BondsData | BillsConfig) => {\n const vestingTerm = bond?.vestingTerm ?? 0\n const vestingCliff = bond?.vestingCliff ?? 0\n if (!vestingCliff) {\n const vestingTime = getTimePeriods(vestingTerm, true)\n return `${vestingTime.days} D`\n } else if (vestingCliff) {\n // TODO: remove this hardcoded shit\n if (bond?.earnToken.symbol === 'AIX') {\n return `${getTimePeriods(vestingCliff, true).days} D`\n }\n const vestingTime = getTimePeriods(vestingTerm - vestingCliff, true)\n const vestingCliffString = getTimePeriods(vestingCliff, true)\n return `${vestingCliffString.days + vestingTime.days} D`\n }\n return '-'\n}\n\nexport const getVestingTermsTooltipString = (bond?: BondsData | BillsConfig) => {\n const vestingTerm = bond?.vestingTerm ?? 0\n const vestingCliff = bond?.vestingCliff\n if (!vestingCliff) return undefined\n const vestingTime = getTimePeriods(vestingTerm - vestingCliff, true)\n const vestingCliffString = getTimePeriods(vestingCliff, true)\n if (vestingTerm - vestingCliff === 0) {\n return `${vestingCliffString.days}-day cliff, then instant release of all tokens.`\n }\n return `${vestingCliffString.days}-day cliff + ${vestingTime.days}-day linear vesting.`\n}\n\nexport const discountEarnTokenPrice = (bond: BondsData, useTiers?: boolean) => {\n const feeInPayout = bond?.feeInPayout ?? 0\n const tierBoostRate = bond?.tierBoostRate ?? 0\n const principalTokenPrice = parseFloat(bond.principalTokenPrice ?? '0')\n const trueBondPrice = findHighestTrueBondPrice(\n useTiers ? TIERS_WEIGHT[LaunchBondTiers.Legend] : '0',\n bond?.trueBondPrices,\n )?.trueBondPrice\n const trueBondPriceWithFee = getBalanceNumber(\n new BigNumber(trueBondPrice ?? '0').times((100 + tierBoostRate) / 100).times((100 + feeInPayout) / 100),\n )\n return formatNumberSI(principalTokenPrice * trueBondPriceWithFee, 3)\n}\n\nexport const discountEarnTokenPriceForUser = (bond: BondsData, useTiers?: boolean, userTier?: LaunchBondTiers) => {\n const feeInPayout = bond?.feeInPayout ?? 0\n const tierBoostRate = bond?.tierBoostRate ?? 0\n const principalTokenPrice = parseFloat(bond.principalTokenPrice ?? '0')\n const trueBondPrice = findHighestTrueBondPrice(\n useTiers && userTier ? TIERS_WEIGHT[userTier] : '0',\n bond?.trueBondPrices,\n )?.trueBondPrice\n const trueBondPriceWithFee = getBalanceNumber(\n new BigNumber(trueBondPrice ?? '0').times((100 + tierBoostRate) / 100).times((100 + feeInPayout) / 100),\n )\n return getFirstNonZeroDigits(principalTokenPrice * trueBondPriceWithFee)\n}\n\nconst SAFETY_THRESHOLD = 5 // in USD\n\nconst getSafetyAvailable = (bond?: BondsData, allowLowValueBonds?: boolean): BigNumber => {\n const available = new BigNumber(bond?.tokensRemaining ?? '0')\n const payoutTokenPrice = new BigNumber(bond?.payoutTokenPrice ?? 0)\n const threshold = allowLowValueBonds ? 0 : SAFETY_THRESHOLD\n const thresholdToShow = payoutTokenPrice.gt(0) ? new BigNumber(threshold).div(payoutTokenPrice) : new BigNumber(0)\n const feeInPayoutAdjuster = (100 - (bond?.feeInPayout ?? 0)) / 100\n let safeAvailable = available.times(feeInPayoutAdjuster).minus(thresholdToShow)\n if (safeAvailable.lt(0)) safeAvailable = new BigNumber(0)\n if (available.isZero()) return new BigNumber(0)\n return safeAvailable\n}\n\nconst getSafetyPurchaseLimit = (bond?: BondsData, allowLowValueBonds?: boolean): BigNumber => {\n const threshold = allowLowValueBonds ? 0 : SAFETY_THRESHOLD\n const payoutTokenPrice = new BigNumber(bond?.payoutTokenPrice ?? 0)\n const thresholdToShow = payoutTokenPrice.gt(0) ? new BigNumber(threshold).div(payoutTokenPrice) : new BigNumber(0)\n return new BigNumber(bond?.maxPayout ?? 0)\n .div(new BigNumber(10).pow(bond?.earnToken?.decimals?.[bond?.chainId] ?? 18))\n .minus(thresholdToShow)\n}\n\nexport const getMaxBuy = (bond?: BondsData, allowLowValueBonds?: boolean): BigNumber => {\n const safeAvailable = getSafetyAvailable(bond, allowLowValueBonds)\n const safePurchaseLimit = getSafetyPurchaseLimit(bond, allowLowValueBonds)\n\n return safePurchaseLimit.lt(safeAvailable) ? safePurchaseLimit : safeAvailable\n}\n\nexport function formatUSDNumber(input: string): string {\n const number = new BigNumber(input)\n if (number.isNaN()) return '0'\n\n // If the number is greater than 0 but less than 0.01\n if (number.gt(0) && number.lt(0.01)) {\n return '< 0.01'\n }\n // If the number is greater than 1k, round to no decimals.\n if (number.gt(1000)) {\n return number.toNumber().toLocaleString('en-US', { maximumFractionDigits: 0 })\n }\n // Note: Between 1k and 0.01 show 2 decimals\n return parseFloat(number.toFixed(2)).toLocaleString('en-US')\n}\n\nconst youSpendUSD = (bond: BondsData, inputValue: string) => {\n return (parseFloat(inputValue) * parseFloat(bond?.principalTokenPrice ?? '0')).toString()\n}\n\n// receives depositAmount and returns the payoutTokens the user will receive. IT DOES SUBTRACT FEE IN PAYOUT\nexport const getPayoutAmount = (bond?: BondsData, inputValue?: string, userPoints?: string | null) => {\n if (!inputValue || !bond || !userPoints || !bond.trueBondPrices) return 0\n\n const bigValue = new BigNumber(inputValue).times(new BigNumber(10).pow(18))\n const fee = bond?.feeInPayout ?? 0\n const trueBondPriceObject = findHighestTrueBondPrice(userPoints, bond?.trueBondPrices)\n const trueBondPrice = new BigNumber(trueBondPriceObject?.trueBondPrice ?? '0')\n const reverseFee = new BigNumber(fee / 100 / (1 - fee / 100))\n const billValue = bigValue.div(trueBondPrice.plus(trueBondPrice.times(reverseFee)))\n return billValue.toNumber()\n}\n\nconst youGetUSD = (bond?: BondsData, inputValue?: string, userPoints?: string) => {\n if (!inputValue || !bond || !userPoints || !bond.trueBondPrices) return 0\n const payoutAmount = getPayoutAmount(bond, inputValue, userPoints)\n return payoutAmount * parseFloat(bond?.payoutTokenPrice ?? '0')\n}\n\nexport const getRawBonus = (bond?: BondsData, inputValue?: string, userPoints?: string) => {\n if (!bond || !inputValue || !userPoints) return '0'\n const premiumUSD = youGetUSD(bond, inputValue, userPoints) - parseFloat(youSpendUSD(bond, inputValue))\n return premiumUSD.toString()\n}\n\nexport const getBonusColor = (premiumString: string): string => {\n return parseFloat(premiumString) < 0 ? 'premium-negative' : 'premium-positive'\n}\n\n/**\n * Calculates the principal token amount needed to receive a target payout amount.\n * This is the reverse of getRawPayoutAmount function (does NOT include fees).\n *\n * @param bond - The bond data\n * @param targetPayoutAmount - The desired payout amount in payout tokens\n * @param userPoints - User's tier points\n * @returns The principal token amount needed, or '0' if calculation cannot be performed\n */\nexport const getPrincipalAmount = (\n bond?: BondsData,\n targetPayoutAmount?: number | string,\n userPoints?: string | null,\n): BigNumber => {\n if (!targetPayoutAmount || !bond || !userPoints || !bond.trueBondPrices) return new BigNumber(0)\n\n const billValue = new BigNumber(targetPayoutAmount)\n const fee = bond?.feeInPayout ?? 0\n const trueBondPriceObject = findHighestTrueBondPrice(userPoints, bond?.trueBondPrices)\n const trueBondPrice = new BigNumber(trueBondPriceObject?.trueBondPrice ?? '0')\n\n if (trueBondPrice.isZero()) return new BigNumber(0)\n\n const reverseFee = new BigNumber(fee / 100 / (1 - fee / 100))\n const trueBondPriceWithFee = trueBondPrice.plus(trueBondPrice.times(reverseFee))\n\n // Reverse the formula: bigValue = billValue * (trueBondPrice + trueBondPrice * reverseFee)\n const bigValue = billValue.times(trueBondPriceWithFee)\n\n // Convert from 18 decimals back to regular amount\n return bigValue.div(new BigNumber(10).pow(18))\n}\n\nexport const getRemainingTokensString = (bond: BondsData, allowLowValueBonds?: boolean) => {\n const remainingTokens = getSafetyAvailable(bond, allowLowValueBonds).toNumber()\n // const remainingTokens = parseFloat(bond?.tokensRemaining ?? '0')\n const remainingTokensUsd = remainingTokens * parseFloat(bond.payoutTokenPrice ?? '0')\n\n return `${formatNumberSI(remainingTokens, 0)} ${bond.earnToken.symbol} ($${formatNumberSI(remainingTokensUsd, 0)})`\n}\n\nexport const remainingPercentage = (bond: BondsData): number => {\n const totalMaxPayout = new BigNumber(bond.maxTotalPayout ?? '0').div(\n new BigNumber(10).pow(bond.earnToken.decimals?.[bond.chainId] ?? 18),\n )\n const remainingTokens = new BigNumber(bond.tokensRemaining ?? '0')\n\n return remainingTokens.div(totalMaxPayout).times(100).toNumber()\n}\n"],"names":[],"mappings":"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"}
@@ -1,9 +1,2 @@
1
1
  export declare const localeFormat: (number: number, precision?: number) => string;
2
- /**
3
- * Formats very small numbers with compressed zero notation.
4
- * e.g. 0.0000000456 → "0.0₆456"
5
- * Threshold: 4 or more leading zeros after the decimal point.
6
- */
7
- export declare const formatSmallNumber: (num: number, sigDigits?: number) => string;
8
- export declare const formatSignificantDigits: (num: number, digits: number) => string;
9
2
  export declare const formatNumberSI: (num?: number | string, digits?: number, useKSuffix?: boolean) => string | undefined;
@@ -103,5 +103,5 @@ const formatNumberSI = (num, digits = 2, useKSuffix = false) => {
103
103
  return isNegative ? `-${formatted}` : formatted;
104
104
  };
105
105
 
106
- export { formatNumberSI, formatSignificantDigits, formatSmallNumber, localeFormat };
106
+ export { formatNumberSI, localeFormat };
107
107
  //# sourceMappingURL=formatNumber.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatNumber.js","sources":["../../src/utils/formatNumber.ts"],"sourcesContent":["import { BigNumber } from 'bignumber.js'\n\n// Ideally let's keep all formating in this file and DO NOT CREATE MORE FILES\n\nexport const localeFormat = (number: number, precision = 2) => {\n const options = {\n minimumFractionDigits: precision,\n maximumFractionDigits: precision,\n }\n const formatted = number.toLocaleString('en-US', options)\n // Remove .0, .00, .000, etc. when all decimal places are zero (but keep .0001, .01, etc.)\n return formatted.replace(/\\.0+$/, '')\n}\n\nconst SUPERSCRIPT_DIGITS = ['⁰', '¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹']\n\nconst toSuperscript = (n: number): string =>\n String(n)\n .split('')\n .map((d) => SUPERSCRIPT_DIGITS[parseInt(d)])\n .join('')\n\n/**\n * Formats very small numbers with compressed zero notation.\n * e.g. 0.0000000456 → \"0.0₆456\"\n * Threshold: 4 or more leading zeros after the decimal point.\n */\nexport const formatSmallNumber = (num: number, sigDigits = 3): string => {\n if (num === 0) return '0'\n const isNegative = num < 0\n const abs = Math.abs(num)\n\n // Get decimal string avoiding scientific notation\n const str = abs.toFixed(20).replace(/0+$/, '')\n const afterDot = str.split('.')[1] ?? ''\n const leadingZeros = afterDot.match(/^0+/)?.[0].length ?? 0\n\n if (leadingZeros < 4) {\n // Not small enough to compress — fall back to significant digits\n const result = formatSignificantDigits(abs, sigDigits)\n return isNegative ? `-${result}` : result\n }\n\n // Significant digits after the leading zeros\n const significantPart = afterDot.slice(leadingZeros)\n const bn = new BigNumber(`0.${significantPart}`)\n const rounded = bn\n .sd(sigDigits)\n .toFixed()\n .replace(/^0\\./, '')\n .replace(/\\.?0+$/, '')\n\n // Format: \"0.0⁽ⁿ⁻¹⁾<digits>\" where n = total leading zeros\n const formatted = `0.0${toSuperscript(leadingZeros - 1)}${rounded}`\n return isNegative ? `-${formatted}` : formatted\n}\n\nexport const formatSignificantDigits = (num: number, digits: number): string => {\n const bn = new BigNumber(num)\n\n if (bn.isNaN() || bn.isZero()) {\n return '0'\n }\n\n // Use toSignificantDigits (sd) to round to significant digits\n const rounded = bn.sd(digits || 3)\n\n // Convert to string and remove trailing zeros\n return rounded.toFixed().replace(/\\.?0+$/, '')\n}\n\nexport const formatNumberSI = (num?: number | string, digits = 2, useKSuffix = false): string | undefined => {\n if (num === undefined || num === null) return undefined\n let number = typeof num === 'string' ? parseFloat(num) : num\n\n if (isNaN(number)) {\n number = 0\n }\n\n // Handle negative numbers by formatting the absolute value and adding the sign back\n const isNegative = number < 0\n const absNumber = Math.abs(number)\n\n const suffixes = useKSuffix\n ? [\n { value: 1e12, symbol: 'T' },\n { value: 1e9, symbol: 'B' },\n { value: 1e6, symbol: 'M' },\n { value: 1e3, symbol: 'K' },\n { value: 1, symbol: '' },\n ]\n : [\n { value: 1e12, symbol: 'T' },\n { value: 1e9, symbol: 'B' },\n { value: 1e6, symbol: 'M' },\n { value: 1, symbol: '' },\n ]\n\n const suffix = suffixes.find(({ value }) => absNumber >= value)\n\n if (useKSuffix && absNumber >= 1e3 && suffix && suffix.symbol) {\n const formatted = `${localeFormat(absNumber / suffix.value, digits)}${suffix.symbol}`\n return isNegative ? `-${formatted}` : formatted\n }\n\n if (absNumber >= 1e6 && suffix) {\n const formatted = `${localeFormat(absNumber / suffix.value, 2)}${suffix.symbol}`\n return isNegative ? `-${formatted}` : formatted\n }\n\n if (absNumber >= 1000) {\n const formatted = localeFormat(Math.round(absNumber), 0)\n return isNegative ? `-${formatted}` : formatted\n }\n\n if (absNumber > 1) {\n const formatted = localeFormat(absNumber, digits)\n return isNegative ? `-${formatted}` : formatted\n }\n\n if (absNumber === 0) return '0'\n\n const formatted =\n absNumber < 0.00001 ? formatSmallNumber(absNumber, digits) : formatSignificantDigits(absNumber, digits)\n return isNegative ? `-${formatted}` : formatted\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatNumber.js","sources":["../../src/utils/formatNumber.ts"],"sourcesContent":["import { BigNumber } from 'bignumber.js'\n\n// Ideally let's keep all formating in this file and DO NOT CREATE MORE FILES\n\nexport const localeFormat = (number: number, precision = 2) => {\n const options = {\n minimumFractionDigits: precision,\n maximumFractionDigits: precision,\n }\n const formatted = number.toLocaleString('en-US', options)\n // Remove .0, .00, .000, etc. when all decimal places are zero (but keep .0001, .01, etc.)\n return formatted.replace(/\\.0+$/, '')\n}\n\nconst SUPERSCRIPT_DIGITS = ['⁰', '¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹']\n\nconst toSuperscript = (n: number): string =>\n String(n)\n .split('')\n .map((d) => SUPERSCRIPT_DIGITS[parseInt(d)])\n .join('')\n\n/**\n * Formats very small numbers with compressed zero notation.\n * e.g. 0.0000000456 → \"0.0₆456\"\n * Threshold: 4 or more leading zeros after the decimal point.\n */\nconst formatSmallNumber = (num: number, sigDigits = 3): string => {\n if (num === 0) return '0'\n const isNegative = num < 0\n const abs = Math.abs(num)\n\n // Get decimal string avoiding scientific notation\n const str = abs.toFixed(20).replace(/0+$/, '')\n const afterDot = str.split('.')[1] ?? ''\n const leadingZeros = afterDot.match(/^0+/)?.[0].length ?? 0\n\n if (leadingZeros < 4) {\n // Not small enough to compress — fall back to significant digits\n const result = formatSignificantDigits(abs, sigDigits)\n return isNegative ? `-${result}` : result\n }\n\n // Significant digits after the leading zeros\n const significantPart = afterDot.slice(leadingZeros)\n const bn = new BigNumber(`0.${significantPart}`)\n const rounded = bn\n .sd(sigDigits)\n .toFixed()\n .replace(/^0\\./, '')\n .replace(/\\.?0+$/, '')\n\n // Format: \"0.0⁽ⁿ⁻¹⁾<digits>\" where n = total leading zeros\n const formatted = `0.0${toSuperscript(leadingZeros - 1)}${rounded}`\n return isNegative ? `-${formatted}` : formatted\n}\n\nconst formatSignificantDigits = (num: number, digits: number): string => {\n const bn = new BigNumber(num)\n\n if (bn.isNaN() || bn.isZero()) {\n return '0'\n }\n\n // Use toSignificantDigits (sd) to round to significant digits\n const rounded = bn.sd(digits || 3)\n\n // Convert to string and remove trailing zeros\n return rounded.toFixed().replace(/\\.?0+$/, '')\n}\n\nexport const formatNumberSI = (num?: number | string, digits = 2, useKSuffix = false): string | undefined => {\n if (num === undefined || num === null) return undefined\n let number = typeof num === 'string' ? parseFloat(num) : num\n\n if (isNaN(number)) {\n number = 0\n }\n\n // Handle negative numbers by formatting the absolute value and adding the sign back\n const isNegative = number < 0\n const absNumber = Math.abs(number)\n\n const suffixes = useKSuffix\n ? [\n { value: 1e12, symbol: 'T' },\n { value: 1e9, symbol: 'B' },\n { value: 1e6, symbol: 'M' },\n { value: 1e3, symbol: 'K' },\n { value: 1, symbol: '' },\n ]\n : [\n { value: 1e12, symbol: 'T' },\n { value: 1e9, symbol: 'B' },\n { value: 1e6, symbol: 'M' },\n { value: 1, symbol: '' },\n ]\n\n const suffix = suffixes.find(({ value }) => absNumber >= value)\n\n if (useKSuffix && absNumber >= 1e3 && suffix && suffix.symbol) {\n const formatted = `${localeFormat(absNumber / suffix.value, digits)}${suffix.symbol}`\n return isNegative ? `-${formatted}` : formatted\n }\n\n if (absNumber >= 1e6 && suffix) {\n const formatted = `${localeFormat(absNumber / suffix.value, 2)}${suffix.symbol}`\n return isNegative ? `-${formatted}` : formatted\n }\n\n if (absNumber >= 1000) {\n const formatted = localeFormat(Math.round(absNumber), 0)\n return isNegative ? `-${formatted}` : formatted\n }\n\n if (absNumber > 1) {\n const formatted = localeFormat(absNumber, digits)\n return isNegative ? `-${formatted}` : formatted\n }\n\n if (absNumber === 0) return '0'\n\n const formatted =\n absNumber < 0.00001 ? formatSmallNumber(absNumber, digits) : formatSignificantDigits(absNumber, digits)\n return isNegative ? `-${formatted}` : formatted\n}\n"],"names":[],"mappings":";;AAEA;AAEO,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,SAAS,GAAG,CAAC,KAAI;AAC5D,IAAA,MAAM,OAAO,GAAG;AACd,QAAA,qBAAqB,EAAE,SAAS;AAChC,QAAA,qBAAqB,EAAE,SAAS;KACjC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC;;IAEzD,OAAO,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;AACvC;AAEA,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAE7E,MAAM,aAAa,GAAG,CAAC,CAAS,KAC9B,MAAM,CAAC,CAAC;KACL,KAAK,CAAC,EAAE;AACR,KAAA,GAAG,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC1C,IAAI,CAAC,EAAE,CAAC;AAEb;;;;AAIG;AACH,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,SAAS,GAAG,CAAC,KAAY;IAC/D,IAAI,GAAG,KAAK,CAAC;AAAE,QAAA,OAAO,GAAG;AACzB,IAAA,MAAM,UAAU,GAAG,GAAG,GAAG,CAAC;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;AAGzB,IAAA,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC9C,IAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACxC,IAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC;AAE3D,IAAA,IAAI,YAAY,GAAG,CAAC,EAAE;;QAEpB,MAAM,MAAM,GAAG,uBAAuB,CAAC,GAAG,EAAE,SAAS,CAAC;QACtD,OAAO,UAAU,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,GAAG,MAAM;IAC3C;;IAGA,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;IACpD,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,CAAA,EAAA,EAAK,eAAe,CAAA,CAAE,CAAC;IAChD,MAAM,OAAO,GAAG;SACb,EAAE,CAAC,SAAS;AACZ,SAAA,OAAO;AACP,SAAA,OAAO,CAAC,MAAM,EAAE,EAAE;AAClB,SAAA,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;;AAGxB,IAAA,MAAM,SAAS,GAAG,CAAA,GAAA,EAAM,aAAa,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA,EAAG,OAAO,CAAA,CAAE;IACnE,OAAO,UAAU,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,GAAG,SAAS;AACjD,CAAC;AAED,MAAM,uBAAuB,GAAG,CAAC,GAAW,EAAE,MAAc,KAAY;AACtE,IAAA,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC;IAE7B,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;AAC7B,QAAA,OAAO,GAAG;IACZ;;IAGA,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC;;IAGlC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;AAChD,CAAC;AAEM,MAAM,cAAc,GAAG,CAAC,GAAqB,EAAE,MAAM,GAAG,CAAC,EAAE,UAAU,GAAG,KAAK,KAAwB;AAC1G,IAAA,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;AAAE,QAAA,OAAO,SAAS;AACvD,IAAA,IAAI,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG;AAE5D,IAAA,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;QACjB,MAAM,GAAG,CAAC;IACZ;;AAGA,IAAA,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC;IAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;IAElC,MAAM,QAAQ,GAAG;AACf,UAAE;AACE,YAAA,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AAC5B,YAAA,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;AAC3B,YAAA,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;AAC3B,YAAA,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;AAC3B,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;AACzB;AACH,UAAE;AACE,YAAA,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AAC5B,YAAA,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;AAC3B,YAAA,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;AAC3B,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;SACzB;AAEL,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,SAAS,IAAI,KAAK,CAAC;AAE/D,IAAA,IAAI,UAAU,IAAI,SAAS,IAAI,GAAG,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;AAC7D,QAAA,MAAM,SAAS,GAAG,CAAA,EAAG,YAAY,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA,EAAG,MAAM,CAAC,MAAM,EAAE;QACrF,OAAO,UAAU,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,GAAG,SAAS;IACjD;AAEA,IAAA,IAAI,SAAS,IAAI,GAAG,IAAI,MAAM,EAAE;AAC9B,QAAA,MAAM,SAAS,GAAG,CAAA,EAAG,YAAY,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA,EAAG,MAAM,CAAC,MAAM,EAAE;QAChF,OAAO,UAAU,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,GAAG,SAAS;IACjD;AAEA,IAAA,IAAI,SAAS,IAAI,IAAI,EAAE;AACrB,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACxD,OAAO,UAAU,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,GAAG,SAAS;IACjD;AAEA,IAAA,IAAI,SAAS,GAAG,CAAC,EAAE;QACjB,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC;QACjD,OAAO,UAAU,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,GAAG,SAAS;IACjD;IAEA,IAAI,SAAS,KAAK,CAAC;AAAE,QAAA,OAAO,GAAG;IAE/B,MAAM,SAAS,GACb,SAAS,GAAG,OAAO,GAAG,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,uBAAuB,CAAC,SAAS,EAAE,MAAM,CAAC;IACzG,OAAO,UAAU,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,GAAG,SAAS;AACjD;;;;"}
@@ -1,4 +1,3 @@
1
- import '../config/constants/tokens.js';
2
1
  import { WNATIVE } from '@ape.swap/apeswap-lists';
3
2
 
4
3
  const getNativeTicker = (chain) => {
@@ -1 +1 @@
1
- {"version":3,"file":"getNativeTicker.js","sources":["../../src/utils/getNativeTicker.ts"],"sourcesContent":["import { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { WNATIVE } from '../config/constants/tokens'\n\nconst getNativeTicker = (chain?: ChainId) => {\n if (!chain) return undefined\n return WNATIVE[chain]?.symbol.substring(1)\n}\n\nconst getTokenSymbol = (token: Token) => {\n const nativeSymbols = ['BNB', 'ETH', 'POL', 'IOTA']\n return nativeSymbols.includes(token?.symbol) ? `w${token?.symbol}` : token?.symbol\n}\n\nexport const getSymbol = (token?: Token | 'NATIVE', chainId?: ChainId) => {\n if (!token) return ''\n return token === 'NATIVE' ? getNativeTicker(chainId) : getTokenSymbol(token)\n}\n"],"names":[],"mappings":";;;AAGA,MAAM,eAAe,GAAG,CAAC,KAAe,KAAI;AAC1C,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,SAAS;IAC5B,OAAO,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,KAAY,KAAI;IACtC,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;IACnD,OAAO,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,KAAK,EAAE,MAAM,CAAA,CAAE,GAAG,KAAK,EAAE,MAAM;AACpF,CAAC;MAEY,SAAS,GAAG,CAAC,KAAwB,EAAE,OAAiB,KAAI;AACvE,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,EAAE;AACrB,IAAA,OAAO,KAAK,KAAK,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC;AAC9E;;;;"}
1
+ {"version":3,"file":"getNativeTicker.js","sources":["../../src/utils/getNativeTicker.ts"],"sourcesContent":["import { ChainId, Token, WNATIVE } from '@ape.swap/apeswap-lists'\n\nconst getNativeTicker = (chain?: ChainId) => {\n if (!chain) return undefined\n return WNATIVE[chain]?.symbol.substring(1)\n}\n\nconst getTokenSymbol = (token: Token) => {\n const nativeSymbols = ['BNB', 'ETH', 'POL', 'IOTA']\n return nativeSymbols.includes(token?.symbol) ? `w${token?.symbol}` : token?.symbol\n}\n\nexport const getSymbol = (token?: Token | 'NATIVE', chainId?: ChainId) => {\n if (!token) return ''\n return token === 'NATIVE' ? getNativeTicker(chainId) : getTokenSymbol(token)\n}\n"],"names":[],"mappings":";;AAEA,MAAM,eAAe,GAAG,CAAC,KAAe,KAAI;AAC1C,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,SAAS;IAC5B,OAAO,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,KAAY,KAAI;IACtC,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;IACnD,OAAO,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,KAAK,EAAE,MAAM,CAAA,CAAE,GAAG,KAAK,EAAE,MAAM;AACpF,CAAC;MAEY,SAAS,GAAG,CAAC,KAAwB,EAAE,OAAiB,KAAI;AACvE,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,EAAE;AACrB,IAAA,OAAO,KAAK,KAAK,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC;AAC9E;;;;"}
@@ -1,6 +1,4 @@
1
1
  import { SuiClient } from '@mysten/sui/client';
2
2
  export declare const getSuiClient: () => SuiClient;
3
- export declare const toAtomicUnits: (amount: string | number, decimals: number) => string;
4
- export declare const fromAtomicUnits: (amount: string | number, decimals: number) => number;
5
3
  export declare const readFreshTrueBondPrice: (marketObjectId?: string) => Promise<bigint>;
6
4
  export declare const verifySuiTxSuccess: (digest: string) => Promise<void>;
@@ -1,5 +1,4 @@
1
1
  import { SuiClient } from '@mysten/sui/client';
2
- import BigNumber from 'bignumber.js';
3
2
  import { PUBLIC_RPC_URLS } from '../config/constants/networks.js';
4
3
  import { ChainId } from '@ape.swap/apeswap-lists';
5
4
 
@@ -19,19 +18,18 @@ const getSuiClient = () => {
19
18
  // User inputs live in "whole tokens" (e.g. "1.5 SUI"). The Sui SDK
20
19
  // serialises numeric function arguments from strings, so we convert to
21
20
  // atomic units and return a stringified BigInt.
22
- const toAtomicUnits = (amount, decimals) => {
23
- if (amount === '' || amount == null)
24
- return '0';
25
- const bn = new BigNumber(amount).times(new BigNumber(10).pow(decimals));
26
- // Floor so we never over-spend what the user typed.
27
- return bn.integerValue(BigNumber.ROUND_FLOOR).toFixed(0);
28
- };
29
- // Atomic → human-readable.
30
- const fromAtomicUnits = (amount, decimals) => {
31
- if (amount === '' || amount == null)
32
- return 0;
33
- return new BigNumber(amount).div(new BigNumber(10).pow(decimals)).toNumber();
34
- };
21
+ // export const toAtomicUnits = (amount: string | number, decimals: number): string => {
22
+ // if (amount === '' || amount == null) return '0'
23
+ // const bn = new BigNumber(amount).times(new BigNumber(10).pow(decimals))
24
+ // // Floor so we never over-spend what the user typed.
25
+ // return bn.integerValue(BigNumber.ROUND_FLOOR).toFixed(0)
26
+ // }
27
+ //
28
+ // // Atomic → human-readable.
29
+ // export const fromAtomicUnits = (amount: string | number, decimals: number): number => {
30
+ // if (amount === '' || amount == null) return 0
31
+ // return new BigNumber(amount).div(new BigNumber(10).pow(decimals)).toNumber()
32
+ // }
35
33
  // ---------------------------------------------------------------------------
36
34
  // Fresh bond price reader — reads the BondMarket object on-chain and
37
35
  // computes the current true_price using the same bond_math formulas as
@@ -103,5 +101,5 @@ const verifySuiTxSuccess = async (digest) => {
103
101
  }
104
102
  };
105
103
 
106
- export { fromAtomicUnits, getSuiClient, readFreshTrueBondPrice, toAtomicUnits, verifySuiTxSuccess };
104
+ export { getSuiClient, readFreshTrueBondPrice, verifySuiTxSuccess };
107
105
  //# sourceMappingURL=suiHelpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"suiHelpers.js","sources":["../../src/utils/suiHelpers.ts"],"sourcesContent":["import { SuiClient } from '@mysten/sui/client'\nimport BigNumber from 'bignumber.js'\nimport { PUBLIC_RPC_URLS } from '../config/constants/networks'\nimport { ChainId } from '@ape.swap/apeswap-lists'\n\n// ---------------------------------------------------------------------------\n// Sui client — lazy singleton\n// ---------------------------------------------------------------------------\nlet _suiClient: SuiClient | undefined\n\nexport const getSuiClient = (): SuiClient => {\n if (_suiClient) return _suiClient\n _suiClient = new SuiClient({ url: PUBLIC_RPC_URLS?.[ChainId.SUI]?.[0]! })\n return _suiClient\n}\n\n// ---------------------------------------------------------------------------\n// Unit conversion\n// ---------------------------------------------------------------------------\n// User inputs live in \"whole tokens\" (e.g. \"1.5 SUI\"). The Sui SDK\n// serialises numeric function arguments from strings, so we convert to\n// atomic units and return a stringified BigInt.\nexport const toAtomicUnits = (amount: string | number, decimals: number): string => {\n if (amount === '' || amount == null) return '0'\n const bn = new BigNumber(amount).times(new BigNumber(10).pow(decimals))\n // Floor so we never over-spend what the user typed.\n return bn.integerValue(BigNumber.ROUND_FLOOR).toFixed(0)\n}\n\n// Atomic → human-readable.\nexport const fromAtomicUnits = (amount: string | number, decimals: number): number => {\n if (amount === '' || amount == null) return 0\n return new BigNumber(amount).div(new BigNumber(10).pow(decimals)).toNumber()\n}\n\n// ---------------------------------------------------------------------------\n// Fresh bond price reader — reads the BondMarket object on-chain and\n// computes the current true_price using the same bond_math formulas as\n// the Move contract. Returns the u64 value (scaled 1e8).\n// ---------------------------------------------------------------------------\n\nconst PRICE_DECIMALS = 100_000_000n // 1e8\nconst PERCENTAGE_BASE = 1_000_000n // 1e6\n\nconst pow10bi = (n: number): bigint => 10n ** BigInt(n)\n\nconst valueOfToken = (fromDec: number, toDec: number, amount: bigint): bigint => {\n if (toDec >= fromDec) return amount * pow10bi(toDec - fromDec)\n return amount / pow10bi(fromDec - toDec)\n}\n\nexport const readFreshTrueBondPrice = async (marketObjectId?: string): Promise<bigint> => {\n if (!marketObjectId) {\n throw new Error('marketObjectId is required')\n }\n\n const client = getSuiClient()\n const obj = await client.getObject({ id: marketObjectId, options: { showContent: true } })\n\n if (!obj.data?.content || obj.data.content.dataType !== 'moveObject') {\n throw new Error(`[Sui] Could not read BondMarket ${marketObjectId}`)\n }\n\n const f = obj.data.content.fields as Record<string, unknown>\n const terms =\n ((f.terms as Record<string, unknown>)?.fields as Record<string, unknown>) ?? (f.terms as Record<string, unknown>)\n\n const totalDebt = BigInt(String(f.total_debt ?? '0'))\n const payoutInitialSupply = BigInt(String(f.payout_token_initial_supply ?? '0'))\n const controlVariable = BigInt(String(terms.control_variable ?? '0'))\n const minimumPrice = BigInt(String(terms.minimum_price ?? '0'))\n const vestingTerm = BigInt(String(terms.vesting_term ?? '1'))\n const lastDecay = BigInt(String(f.last_decay ?? '0'))\n const feeInPrincipal = BigInt(String(f.fee_in_principal ?? '0'))\n const payoutDecimals = Number(f.payout_decimals ?? 9)\n const principalDecimals = Number(f.principal_decimals ?? 9)\n\n // Decay debt client-side (same as contract's decay_debt)\n const nowSeconds = BigInt(Math.floor(Date.now() / 1000))\n let currentDebt = totalDebt\n if (nowSeconds > lastDecay && vestingTerm > 0n) {\n const elapsed = nowSeconds - lastDecay\n const decay = (totalDebt * elapsed) / vestingTerm\n currentDebt = totalDebt > decay ? totalDebt - decay : 0n\n }\n\n // calculate_price — contract casts total_debt (u128) to u64 via `as u64`\n const currentDebtU64 = currentDebt & 0xffffffffffffffffn\n const currentDebtPayout = valueOfToken(principalDecimals, payoutDecimals, currentDebtU64)\n const payoutScale = pow10bi(payoutDecimals)\n const principalScale = pow10bi(principalDecimals)\n\n const debtRatio = payoutInitialSupply > 0n ? (currentDebtPayout * payoutScale) / payoutInitialSupply : 0n\n const basePrice = (controlVariable * debtRatio * principalScale) / PRICE_DECIMALS\n\n const price = basePrice < minimumPrice ? minimumPrice : basePrice\n\n // calculate_true_price (includes fee)\n const denominator = PERCENTAGE_BASE - feeInPrincipal\n const truePrice = denominator > 0n ? (price * PERCENTAGE_BASE) / denominator : price\n\n return truePrice\n}\n\n// ---------------------------------------------------------------------------\n// TX status verification — Sui returns digests for failed TXs too.\n// Call this after waitForTransaction to ensure the TX actually succeeded.\n// ---------------------------------------------------------------------------\n\nexport const verifySuiTxSuccess = async (digest: string): Promise<void> => {\n const client = getSuiClient()\n const txBlock = await client.getTransactionBlock({\n digest,\n options: { showEffects: true },\n })\n const status = txBlock.effects?.status\n if (status?.status !== 'success') {\n const errorMsg = status?.error ?? 'Transaction failed on-chain'\n throw new Error(`Transaction failed: ${errorMsg}`)\n }\n}\n"],"names":[],"mappings":";;;;;AAKA;AACA;AACA;AACA,IAAI,UAAiC;AAE9B,MAAM,YAAY,GAAG,MAAgB;AAC1C,IAAA,IAAI,UAAU;AAAE,QAAA,OAAO,UAAU;IACjC,UAAU,GAAG,IAAI,SAAS,CAAC,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,EAAE,CAAC;AACzE,IAAA,OAAO,UAAU;AACnB;AAEA;AACA;AACA;AACA;AACA;AACA;MACa,aAAa,GAAG,CAAC,MAAuB,EAAE,QAAgB,KAAY;AACjF,IAAA,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,IAAI,IAAI;AAAE,QAAA,OAAO,GAAG;IAC/C,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;;AAEvE,IAAA,OAAO,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1D;AAEA;MACa,eAAe,GAAG,CAAC,MAAuB,EAAE,QAAgB,KAAY;AACnF,IAAA,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,IAAI,IAAI;AAAE,QAAA,OAAO,CAAC;IAC7C,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;AAC9E;AAEA;AACA;AACA;AACA;AACA;AAEA,MAAM,cAAc,GAAG,UAAY,CAAA;AACnC,MAAM,eAAe,GAAG,QAAU,CAAA;AAElC,MAAM,OAAO,GAAG,CAAC,CAAS,KAAa,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC;AAEvD,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,KAAa,EAAE,MAAc,KAAY;IAC9E,IAAI,KAAK,IAAI,OAAO;QAAE,OAAO,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;IAC9D,OAAO,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;AAC1C,CAAC;MAEY,sBAAsB,GAAG,OAAO,cAAuB,KAAqB;IACvF,IAAI,CAAC,cAAc,EAAE;AACnB,QAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;IAC/C;AAEA,IAAA,MAAM,MAAM,GAAG,YAAY,EAAE;IAC7B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;AAE1F,IAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,YAAY,EAAE;AACpE,QAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,cAAc,CAAA,CAAE,CAAC;IACtE;IAEA,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAiC;IAC5D,MAAM,KAAK,GACP,CAAC,CAAC,KAAiC,EAAE,MAAkC,IAAK,CAAC,CAAC,KAAiC;AAEnH,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;AACrD,IAAA,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,2BAA2B,IAAI,GAAG,CAAC,CAAC;AAChF,IAAA,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAI,GAAG,CAAC,CAAC;AACrE,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,GAAG,CAAC,CAAC;AAC/D,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC;AAC7D,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;AACrD,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,IAAI,GAAG,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC;IACrD,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC;;AAG3D,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACxD,IAAI,WAAW,GAAG,SAAS;IAC3B,IAAI,UAAU,GAAG,SAAS,IAAI,WAAW,GAAG,EAAE,EAAE;AAC9C,QAAA,MAAM,OAAO,GAAG,UAAU,GAAG,SAAS;QACtC,MAAM,KAAK,GAAG,CAAC,SAAS,GAAG,OAAO,IAAI,WAAW;AACjD,QAAA,WAAW,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,EAAE;IAC1D;;AAGA,IAAA,MAAM,cAAc,GAAG,WAAW,GAAG,mBAAmB;IACxD,MAAM,iBAAiB,GAAG,YAAY,CAAC,iBAAiB,EAAE,cAAc,EAAE,cAAc,CAAC;AACzF,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;AAC3C,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAEjD,IAAA,MAAM,SAAS,GAAG,mBAAmB,GAAG,EAAE,GAAG,CAAC,iBAAiB,GAAG,WAAW,IAAI,mBAAmB,GAAG,EAAE;IACzG,MAAM,SAAS,GAAG,CAAC,eAAe,GAAG,SAAS,GAAG,cAAc,IAAI,cAAc;AAEjF,IAAA,MAAM,KAAK,GAAG,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS;;AAGjE,IAAA,MAAM,WAAW,GAAG,eAAe,GAAG,cAAc;AACpD,IAAA,MAAM,SAAS,GAAG,WAAW,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,eAAe,IAAI,WAAW,GAAG,KAAK;AAEpF,IAAA,OAAO,SAAS;AAClB;AAEA;AACA;AACA;AACA;MAEa,kBAAkB,GAAG,OAAO,MAAc,KAAmB;AACxE,IAAA,MAAM,MAAM,GAAG,YAAY,EAAE;AAC7B,IAAA,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC;QAC/C,MAAM;AACN,QAAA,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;AAC/B,KAAA,CAAC;AACF,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM;AACtC,IAAA,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS,EAAE;AAChC,QAAA,MAAM,QAAQ,GAAG,MAAM,EAAE,KAAK,IAAI,6BAA6B;AAC/D,QAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAA,CAAE,CAAC;IACpD;AACF;;;;"}
1
+ {"version":3,"file":"suiHelpers.js","sources":["../../src/utils/suiHelpers.ts"],"sourcesContent":["import { SuiClient } from '@mysten/sui/client'\nimport { PUBLIC_RPC_URLS } from '../config/constants/networks'\nimport { ChainId } from '@ape.swap/apeswap-lists'\n\n// ---------------------------------------------------------------------------\n// Sui client — lazy singleton\n// ---------------------------------------------------------------------------\nlet _suiClient: SuiClient | undefined\n\nexport const getSuiClient = (): SuiClient => {\n if (_suiClient) return _suiClient\n _suiClient = new SuiClient({ url: PUBLIC_RPC_URLS?.[ChainId.SUI]?.[0]! })\n return _suiClient\n}\n\n// ---------------------------------------------------------------------------\n// Unit conversion\n// ---------------------------------------------------------------------------\n// User inputs live in \"whole tokens\" (e.g. \"1.5 SUI\"). The Sui SDK\n// serialises numeric function arguments from strings, so we convert to\n// atomic units and return a stringified BigInt.\n// export const toAtomicUnits = (amount: string | number, decimals: number): string => {\n// if (amount === '' || amount == null) return '0'\n// const bn = new BigNumber(amount).times(new BigNumber(10).pow(decimals))\n// // Floor so we never over-spend what the user typed.\n// return bn.integerValue(BigNumber.ROUND_FLOOR).toFixed(0)\n// }\n//\n// // Atomic → human-readable.\n// export const fromAtomicUnits = (amount: string | number, decimals: number): number => {\n// if (amount === '' || amount == null) return 0\n// return new BigNumber(amount).div(new BigNumber(10).pow(decimals)).toNumber()\n// }\n\n// ---------------------------------------------------------------------------\n// Fresh bond price reader — reads the BondMarket object on-chain and\n// computes the current true_price using the same bond_math formulas as\n// the Move contract. Returns the u64 value (scaled 1e8).\n// ---------------------------------------------------------------------------\n\nconst PRICE_DECIMALS = 100_000_000n // 1e8\nconst PERCENTAGE_BASE = 1_000_000n // 1e6\n\nconst pow10bi = (n: number): bigint => 10n ** BigInt(n)\n\nconst valueOfToken = (fromDec: number, toDec: number, amount: bigint): bigint => {\n if (toDec >= fromDec) return amount * pow10bi(toDec - fromDec)\n return amount / pow10bi(fromDec - toDec)\n}\n\nexport const readFreshTrueBondPrice = async (marketObjectId?: string): Promise<bigint> => {\n if (!marketObjectId) {\n throw new Error('marketObjectId is required')\n }\n\n const client = getSuiClient()\n const obj = await client.getObject({ id: marketObjectId, options: { showContent: true } })\n\n if (!obj.data?.content || obj.data.content.dataType !== 'moveObject') {\n throw new Error(`[Sui] Could not read BondMarket ${marketObjectId}`)\n }\n\n const f = obj.data.content.fields as Record<string, unknown>\n const terms =\n ((f.terms as Record<string, unknown>)?.fields as Record<string, unknown>) ?? (f.terms as Record<string, unknown>)\n\n const totalDebt = BigInt(String(f.total_debt ?? '0'))\n const payoutInitialSupply = BigInt(String(f.payout_token_initial_supply ?? '0'))\n const controlVariable = BigInt(String(terms.control_variable ?? '0'))\n const minimumPrice = BigInt(String(terms.minimum_price ?? '0'))\n const vestingTerm = BigInt(String(terms.vesting_term ?? '1'))\n const lastDecay = BigInt(String(f.last_decay ?? '0'))\n const feeInPrincipal = BigInt(String(f.fee_in_principal ?? '0'))\n const payoutDecimals = Number(f.payout_decimals ?? 9)\n const principalDecimals = Number(f.principal_decimals ?? 9)\n\n // Decay debt client-side (same as contract's decay_debt)\n const nowSeconds = BigInt(Math.floor(Date.now() / 1000))\n let currentDebt = totalDebt\n if (nowSeconds > lastDecay && vestingTerm > 0n) {\n const elapsed = nowSeconds - lastDecay\n const decay = (totalDebt * elapsed) / vestingTerm\n currentDebt = totalDebt > decay ? totalDebt - decay : 0n\n }\n\n // calculate_price — contract casts total_debt (u128) to u64 via `as u64`\n const currentDebtU64 = currentDebt & 0xffffffffffffffffn\n const currentDebtPayout = valueOfToken(principalDecimals, payoutDecimals, currentDebtU64)\n const payoutScale = pow10bi(payoutDecimals)\n const principalScale = pow10bi(principalDecimals)\n\n const debtRatio = payoutInitialSupply > 0n ? (currentDebtPayout * payoutScale) / payoutInitialSupply : 0n\n const basePrice = (controlVariable * debtRatio * principalScale) / PRICE_DECIMALS\n\n const price = basePrice < minimumPrice ? minimumPrice : basePrice\n\n // calculate_true_price (includes fee)\n const denominator = PERCENTAGE_BASE - feeInPrincipal\n const truePrice = denominator > 0n ? (price * PERCENTAGE_BASE) / denominator : price\n\n return truePrice\n}\n\n// ---------------------------------------------------------------------------\n// TX status verification — Sui returns digests for failed TXs too.\n// Call this after waitForTransaction to ensure the TX actually succeeded.\n// ---------------------------------------------------------------------------\n\nexport const verifySuiTxSuccess = async (digest: string): Promise<void> => {\n const client = getSuiClient()\n const txBlock = await client.getTransactionBlock({\n digest,\n options: { showEffects: true },\n })\n const status = txBlock.effects?.status\n if (status?.status !== 'success') {\n const errorMsg = status?.error ?? 'Transaction failed on-chain'\n throw new Error(`Transaction failed: ${errorMsg}`)\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,13 +1,9 @@
1
1
  import React from 'react';
2
- import { BondsData } from '../../types/bonds';
3
- import { BaseBondConfig } from '@ape.swap/apeswap-lists';
4
2
  type SortableKeys = 'bonus' | 'arr' | 'terms' | 'tokensRemaining';
5
3
  type SortDirection = 'asc' | 'desc';
6
4
  export interface SortOptions {
7
5
  key: SortableKeys;
8
6
  direction: SortDirection;
9
7
  }
10
- export type GroupedByChain = Record<number, (BondsData | BaseBondConfig)[]>;
11
- export type GroupedBySymbol = Record<number, Record<string, (BondsData | BaseBondConfig)[]>>;
12
8
  declare const Bonds: () => React.JSX.Element;
13
9
  export default Bonds;
@@ -1 +1 @@
1
- {"version":3,"file":"Bonds.js","sources":["../../../src/views/Bonds/Bonds.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { BondsData } from '../../types/bonds'\nimport { useTopTags } from '../../hooks/useTopTags'\nimport { isBondSoldOut, isBondSupported, sortBonds } from './utils'\nimport useBondsData from '../../state/bonds/useBondsData'\nimport CheckURL from './components/CheckURL'\nimport PlaceholderMonkey from '../../components/PlaceholderMonkey'\nimport useFavoriteTokens from '../../state/favoriteTokens/useFavoriteTokens'\nimport useChainFilterOption from '../../state/chainFilterOption/useChainFilterOption'\nimport useBondsList from '../../state/bonds/useBondsList'\nimport { BaseBondConfig } from '@ape.swap/apeswap-lists'\nimport RecommendationCards from './components/RecommendationCards'\nimport BondsMenu from './components/BondsMenu/BondsMenu'\nimport { useSDKConfig } from '../../state/useSDKConfig'\nimport BuyAgainRow from './components/BuyAgainRow'\nimport LoadingSkeleton from './components/LoadingSkeleton/LoadingSkeleton'\nimport useHotBonds from '../../state/hotBonds/useHotBonds'\nimport useBondsListPreTGE from '../../state/bonds/useBondsListPreTGE'\nimport { MAINNET_CHAINS } from '../../config/constants/chains'\nimport ActiveBondRows from './components/BondRows/ActiveBondRows'\nimport SoldOutRows from './components/BondRows/SoldOutRows'\nimport Flex from '../../components/uikit-sdk/Flex'\nimport StarFilled from '../../components/uikit-sdk/Svg/Icons/StarFilled'\n\ntype SortableKeys = 'bonus' | 'arr' | 'terms' | 'tokensRemaining'\ntype SortDirection = 'asc' | 'desc'\n\nexport interface SortOptions {\n key: SortableKeys\n direction: SortDirection\n}\n\nexport type GroupedByChain = Record<number, (BondsData | BaseBondConfig)[]>\nexport type GroupedBySymbol = Record<number, Record<string, (BondsData | BaseBondConfig)[]>>\n\nconst Bonds = () => {\n // Fetch data\n useHotBonds()\n const SDKConfig = useSDKConfig()\n const { favTokens } = useFavoriteTokens()\n const { data: bondData } = useBondsData()\n const { data: allBonds } = useBondsList()\n const { data: allPreBonds } = useBondsListPreTGE()\n const { data: chainFilterOption, setChainFilterOption } = useChainFilterOption()\n const topTags = useTopTags()\n\n // State\n const [sortConfig, setSortConfig] = useState<SortOptions | undefined>({ key: 'bonus', direction: 'desc' })\n const [searchQuery, setSearchQuery] = useState('')\n const [filterOption, setFilterOption] = useState('ALL')\n\n // Static data\n const filterOptions = ['ALL', 'FAVORITES', ...topTags, 'SOLD OUT']\n const validatedChains = SDKConfig?.chains?.filter((chain) => MAINNET_CHAINS.includes(chain))\n\n const billsToRender: GroupedByChain | GroupedBySymbol = useMemo(() => {\n let bondsToUse\n\n if (filterOption === 'SOLD OUT') {\n if (!allBonds || !allPreBonds) return {}\n bondsToUse = [...allPreBonds, ...Object.values(allBonds).flat()]\n } else {\n bondsToUse = sortBonds(sortConfig, bondData)\n }\n\n const filteredBonds = bondsToUse?.filter((bill) => {\n // filter incompatible bonds\n if (!isBondSupported(SDKConfig.highestCompatibleVersion!, bill.version)) return false\n\n // filter onlyPartner Bonds\n if (bill.onlyPartner && SDKConfig.bondPartner !== bill.bondPartner) return false\n\n // filter searchQuery\n if (searchQuery) {\n const matchesSearch = [\n //@ts-ignore\n `${bill?.underlyingEarnToken?.symbol?.toUpperCase()}`,\n `${bill?.earnToken?.symbol.toUpperCase()}`,\n `${bill?.lpToken?.symbol.toUpperCase()}`,\n ].some((property) => property?.includes(searchQuery.toUpperCase()))\n if (!matchesSearch) return false\n }\n\n // filter tiers\n if (!SDKConfig?.useTiers && 'minTier' in bill) {\n if (bill.minTier !== null && bill.minTier !== undefined) return false\n }\n\n // filter bondPartner\n if (SDKConfig?.bondPartner && bill.bondPartner !== SDKConfig.bondPartner) return false\n\n // filter topTags\n if (topTags.includes(filterOption) && !bill?.tags?.includes(filterOption)) return false\n\n // filter chainFilterOption\n if (chainFilterOption && !chainFilterOption?.includes('All Chains')) {\n if (!chainFilterOption?.includes(bill?.chainId?.toString())) return false\n }\n\n // filter SOLD OUT\n if (filterOption === 'SOLD OUT' && !isBondSoldOut(bill as BondsData, SDKConfig.showLowValueBonds)) return false\n\n // filter not SOLD OUT\n if (filterOption !== 'SOLD OUT' && isBondSoldOut(bill as BondsData, SDKConfig.showLowValueBonds)) return false\n\n // filter FAVORITES\n if (filterOption === 'FAVORITES' && !favTokens.includes(bill?.earnToken?.symbol?.toLowerCase())) return false\n\n return true\n })\n\n if (filterOption === 'SOLD OUT') {\n return filteredBonds?.reduce<GroupedBySymbol>((acc, bond) => {\n const symbol = bond?.earnToken?.symbol\n const chainId = bond.chainId\n\n if (!acc[chainId]) acc[chainId] = {}\n\n if (!acc[chainId][symbol]) acc[chainId][symbol] = []\n\n acc[chainId][symbol].push(bond)\n return acc\n }, {})\n } else {\n return filteredBonds?.reduce<GroupedByChain>((acc, bond) => {\n const { chainId } = bond\n if (!acc[chainId]) acc[chainId] = []\n acc[chainId].push(bond)\n return acc\n }, {})\n }\n }, [\n allBonds,\n allPreBonds,\n sortConfig,\n bondData,\n filterOption,\n SDKConfig.highestCompatibleVersion,\n SDKConfig.bondPartner,\n SDKConfig?.useTiers,\n SDKConfig.showLowValueBonds,\n searchQuery,\n topTags,\n chainFilterOption,\n favTokens,\n ])\n\n // Handlers\n const handleSortOptions = useCallback(\n (key: SortableKeys) => {\n let direction: SortDirection = 'desc'\n if (sortConfig?.key === key && sortConfig?.direction === 'desc') {\n direction = 'asc'\n }\n setSortConfig({ key, direction })\n },\n [sortConfig?.key, sortConfig?.direction],\n )\n\n const handleChangeFilterOption = useCallback((newOption: string) => {\n setFilterOption(newOption)\n }, [])\n\n useEffect(() => {\n const hash = window.location.hash\n //@ts-ignore\n if (bondData?.length > 0 && hash) {\n const tryScroll = () => {\n const normalizedHash = decodeURIComponent(hash).replace(/\\s+/g, '')\n const element = document.querySelector(normalizedHash)\n if (element) {\n const y = element.getBoundingClientRect().top + window.scrollY - 70\n window.scrollTo({ top: y, behavior: 'smooth' })\n } else {\n setTimeout(tryScroll, 50)\n }\n }\n tryScroll()\n }\n }, [bondData?.length])\n\n return (\n <Flex className=\"bonds-container\">\n <CheckURL />\n <BondsMenu\n searchQuery={searchQuery}\n setSearchQuery={setSearchQuery}\n setChainFilterOption={setChainFilterOption}\n chainFilterOption={chainFilterOption ?? ['All Chains']}\n filterOptions={filterOptions}\n filterOption={filterOption}\n setFilterOption={handleChangeFilterOption}\n onSort={handleSortOptions}\n />\n {SDKConfig.useHotBonds && !SDKConfig.bondPartner && filterOption !== 'SOLD OUT' && <BuyAgainRow />}\n {Object.keys(billsToRender)?.length > 0 ? (\n <Flex className=\"bondrowsbychain\">\n {validatedChains?.map((chain) =>\n filterOption === 'SOLD OUT' ? (\n Object.entries(billsToRender[chain] ?? {}).map((groupedBonds) => (\n <SoldOutRows bonds={groupedBonds[1]} key={groupedBonds[0]} />\n ))\n ) : (\n <ActiveBondRows\n chain={chain}\n bonds={(billsToRender[chain] ?? []) as (BondsData | BaseBondConfig)[]}\n key={chain}\n hideTitles={searchQuery !== ''}\n showHotBonds={!searchQuery && SDKConfig.useHotBonds && SDKConfig?.hotBondChains?.includes(chain)}\n />\n ),\n )}\n </Flex>\n ) : searchQuery || !chainFilterOption.includes('All Chains') ? (\n <Flex className=\"placeholder-monkey-wrapper\">\n <PlaceholderMonkey text={'No results, change filters.'} />\n </Flex>\n ) : filterOption === 'FAVORITES' ? (\n <Flex\n sx={{\n width: '100%',\n height: '300px',\n background: 'white2',\n borderRadius: 'normal',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'column',\n mt: '10px',\n }}\n >\n <StarFilled width={75} height={75} />\n <Flex sx={{ mt: '10px' }}>{`You don't have any Favorite Bonds yet!`}</Flex>\n <Flex sx={{ fontSize: '12px', fontWeight: 400, color: 'textDisabledButton', mt: '10px' }}>\n {`Click on the 'star' or 'fire' icon to add Bonds to the list.`}\n </Flex>\n </Flex>\n ) : (\n <LoadingSkeleton />\n )}\n {SDKConfig.useHotBonds && <RecommendationCards />}\n <Flex sx={{ width: '100%', justifyContent: 'center', my: '15px' }} className=\"powered-by-apebond\">\n <img\n src=\"https://res.cloudinary.com/dswmrqgwy/image/upload/v1741643990/poweredbyapebondsdk_cxiouj.png\"\n alt=\"powered-by-apebond\"\n style={{ width: '200px', height: 'auto' }}\n />\n </Flex>\n </Flex>\n )\n}\n\nexport default Bonds\n"],"names":["_jsxs","_jsx","CheckURL"],"mappings":"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"}
1
+ {"version":3,"file":"Bonds.js","sources":["../../../src/views/Bonds/Bonds.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { BondsData } from '../../types/bonds'\nimport { useTopTags } from '../../hooks/useTopTags'\nimport { isBondSoldOut, isBondSupported, sortBonds } from './utils'\nimport useBondsData from '../../state/bonds/useBondsData'\nimport CheckURL from './components/CheckURL'\nimport PlaceholderMonkey from '../../components/PlaceholderMonkey'\nimport useFavoriteTokens from '../../state/favoriteTokens/useFavoriteTokens'\nimport useChainFilterOption from '../../state/chainFilterOption/useChainFilterOption'\nimport useBondsList from '../../state/bonds/useBondsList'\nimport { BaseBondConfig } from '@ape.swap/apeswap-lists'\nimport RecommendationCards from './components/RecommendationCards'\nimport BondsMenu from './components/BondsMenu/BondsMenu'\nimport { useSDKConfig } from '../../state/useSDKConfig'\nimport BuyAgainRow from './components/BuyAgainRow'\nimport LoadingSkeleton from './components/LoadingSkeleton/LoadingSkeleton'\nimport useHotBonds from '../../state/hotBonds/useHotBonds'\nimport useBondsListPreTGE from '../../state/bonds/useBondsListPreTGE'\nimport { MAINNET_CHAINS } from '../../config/constants/chains'\nimport ActiveBondRows from './components/BondRows/ActiveBondRows'\nimport SoldOutRows from './components/BondRows/SoldOutRows'\nimport Flex from '../../components/uikit-sdk/Flex'\nimport StarFilled from '../../components/uikit-sdk/Svg/Icons/StarFilled'\n\ntype SortableKeys = 'bonus' | 'arr' | 'terms' | 'tokensRemaining'\ntype SortDirection = 'asc' | 'desc'\n\nexport interface SortOptions {\n key: SortableKeys\n direction: SortDirection\n}\n\ntype GroupedByChain = Record<number, (BondsData | BaseBondConfig)[]>\ntype GroupedBySymbol = Record<number, Record<string, (BondsData | BaseBondConfig)[]>>\n\nconst Bonds = () => {\n // Fetch data\n useHotBonds()\n const SDKConfig = useSDKConfig()\n const { favTokens } = useFavoriteTokens()\n const { data: bondData } = useBondsData()\n const { data: allBonds } = useBondsList()\n const { data: allPreBonds } = useBondsListPreTGE()\n const { data: chainFilterOption, setChainFilterOption } = useChainFilterOption()\n const topTags = useTopTags()\n\n // State\n const [sortConfig, setSortConfig] = useState<SortOptions | undefined>({ key: 'bonus', direction: 'desc' })\n const [searchQuery, setSearchQuery] = useState('')\n const [filterOption, setFilterOption] = useState('ALL')\n\n // Static data\n const filterOptions = ['ALL', 'FAVORITES', ...topTags, 'SOLD OUT']\n const validatedChains = SDKConfig?.chains?.filter((chain) => MAINNET_CHAINS.includes(chain))\n\n const billsToRender: GroupedByChain | GroupedBySymbol = useMemo(() => {\n let bondsToUse\n\n if (filterOption === 'SOLD OUT') {\n if (!allBonds || !allPreBonds) return {}\n bondsToUse = [...allPreBonds, ...Object.values(allBonds).flat()]\n } else {\n bondsToUse = sortBonds(sortConfig, bondData)\n }\n\n const filteredBonds = bondsToUse?.filter((bill) => {\n // filter incompatible bonds\n if (!isBondSupported(SDKConfig.highestCompatibleVersion!, bill.version)) return false\n\n // filter onlyPartner Bonds\n if (bill.onlyPartner && SDKConfig.bondPartner !== bill.bondPartner) return false\n\n // filter searchQuery\n if (searchQuery) {\n const matchesSearch = [\n //@ts-ignore\n `${bill?.underlyingEarnToken?.symbol?.toUpperCase()}`,\n `${bill?.earnToken?.symbol.toUpperCase()}`,\n `${bill?.lpToken?.symbol.toUpperCase()}`,\n ].some((property) => property?.includes(searchQuery.toUpperCase()))\n if (!matchesSearch) return false\n }\n\n // filter tiers\n if (!SDKConfig?.useTiers && 'minTier' in bill) {\n if (bill.minTier !== null && bill.minTier !== undefined) return false\n }\n\n // filter bondPartner\n if (SDKConfig?.bondPartner && bill.bondPartner !== SDKConfig.bondPartner) return false\n\n // filter topTags\n if (topTags.includes(filterOption) && !bill?.tags?.includes(filterOption)) return false\n\n // filter chainFilterOption\n if (chainFilterOption && !chainFilterOption?.includes('All Chains')) {\n if (!chainFilterOption?.includes(bill?.chainId?.toString())) return false\n }\n\n // filter SOLD OUT\n if (filterOption === 'SOLD OUT' && !isBondSoldOut(bill as BondsData, SDKConfig.showLowValueBonds)) return false\n\n // filter not SOLD OUT\n if (filterOption !== 'SOLD OUT' && isBondSoldOut(bill as BondsData, SDKConfig.showLowValueBonds)) return false\n\n // filter FAVORITES\n if (filterOption === 'FAVORITES' && !favTokens.includes(bill?.earnToken?.symbol?.toLowerCase())) return false\n\n return true\n })\n\n if (filterOption === 'SOLD OUT') {\n return filteredBonds?.reduce<GroupedBySymbol>((acc, bond) => {\n const symbol = bond?.earnToken?.symbol\n const chainId = bond.chainId\n\n if (!acc[chainId]) acc[chainId] = {}\n\n if (!acc[chainId][symbol]) acc[chainId][symbol] = []\n\n acc[chainId][symbol].push(bond)\n return acc\n }, {})\n } else {\n return filteredBonds?.reduce<GroupedByChain>((acc, bond) => {\n const { chainId } = bond\n if (!acc[chainId]) acc[chainId] = []\n acc[chainId].push(bond)\n return acc\n }, {})\n }\n }, [\n allBonds,\n allPreBonds,\n sortConfig,\n bondData,\n filterOption,\n SDKConfig.highestCompatibleVersion,\n SDKConfig.bondPartner,\n SDKConfig?.useTiers,\n SDKConfig.showLowValueBonds,\n searchQuery,\n topTags,\n chainFilterOption,\n favTokens,\n ])\n\n // Handlers\n const handleSortOptions = useCallback(\n (key: SortableKeys) => {\n let direction: SortDirection = 'desc'\n if (sortConfig?.key === key && sortConfig?.direction === 'desc') {\n direction = 'asc'\n }\n setSortConfig({ key, direction })\n },\n [sortConfig?.key, sortConfig?.direction],\n )\n\n const handleChangeFilterOption = useCallback((newOption: string) => {\n setFilterOption(newOption)\n }, [])\n\n useEffect(() => {\n const hash = window.location.hash\n //@ts-ignore\n if (bondData?.length > 0 && hash) {\n const tryScroll = () => {\n const normalizedHash = decodeURIComponent(hash).replace(/\\s+/g, '')\n const element = document.querySelector(normalizedHash)\n if (element) {\n const y = element.getBoundingClientRect().top + window.scrollY - 70\n window.scrollTo({ top: y, behavior: 'smooth' })\n } else {\n setTimeout(tryScroll, 50)\n }\n }\n tryScroll()\n }\n }, [bondData?.length])\n\n return (\n <Flex className=\"bonds-container\">\n <CheckURL />\n <BondsMenu\n searchQuery={searchQuery}\n setSearchQuery={setSearchQuery}\n setChainFilterOption={setChainFilterOption}\n chainFilterOption={chainFilterOption ?? ['All Chains']}\n filterOptions={filterOptions}\n filterOption={filterOption}\n setFilterOption={handleChangeFilterOption}\n onSort={handleSortOptions}\n />\n {SDKConfig.useHotBonds && !SDKConfig.bondPartner && filterOption !== 'SOLD OUT' && <BuyAgainRow />}\n {Object.keys(billsToRender)?.length > 0 ? (\n <Flex className=\"bondrowsbychain\">\n {validatedChains?.map((chain) =>\n filterOption === 'SOLD OUT' ? (\n Object.entries(billsToRender[chain] ?? {}).map((groupedBonds) => (\n <SoldOutRows bonds={groupedBonds[1]} key={groupedBonds[0]} />\n ))\n ) : (\n <ActiveBondRows\n chain={chain}\n bonds={(billsToRender[chain] ?? []) as (BondsData | BaseBondConfig)[]}\n key={chain}\n hideTitles={searchQuery !== ''}\n showHotBonds={!searchQuery && SDKConfig.useHotBonds && SDKConfig?.hotBondChains?.includes(chain)}\n />\n ),\n )}\n </Flex>\n ) : searchQuery || !chainFilterOption.includes('All Chains') ? (\n <Flex className=\"placeholder-monkey-wrapper\">\n <PlaceholderMonkey text={'No results, change filters.'} />\n </Flex>\n ) : filterOption === 'FAVORITES' ? (\n <Flex\n sx={{\n width: '100%',\n height: '300px',\n background: 'white2',\n borderRadius: 'normal',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'column',\n mt: '10px',\n }}\n >\n <StarFilled width={75} height={75} />\n <Flex sx={{ mt: '10px' }}>{`You don't have any Favorite Bonds yet!`}</Flex>\n <Flex sx={{ fontSize: '12px', fontWeight: 400, color: 'textDisabledButton', mt: '10px' }}>\n {`Click on the 'star' or 'fire' icon to add Bonds to the list.`}\n </Flex>\n </Flex>\n ) : (\n <LoadingSkeleton />\n )}\n {SDKConfig.useHotBonds && <RecommendationCards />}\n <Flex sx={{ width: '100%', justifyContent: 'center', my: '15px' }} className=\"powered-by-apebond\">\n <img\n src=\"https://res.cloudinary.com/dswmrqgwy/image/upload/v1741643990/poweredbyapebondsdk_cxiouj.png\"\n alt=\"powered-by-apebond\"\n style={{ width: '200px', height: 'auto' }}\n />\n </Flex>\n </Flex>\n )\n}\n\nexport default Bonds\n"],"names":["_jsxs","_jsx","CheckURL"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAmCA,MAAM,KAAK,GAAG,MAAK;;AAEjB,IAAA,WAAW,EAAE;AACb,IAAA,MAAM,SAAS,GAAG,YAAY,EAAE;AAChC,IAAA,MAAM,EAAE,SAAS,EAAE,GAAG,iBAAiB,EAAE;IACzC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE;IACzC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE;IACzC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,kBAAkB,EAAE;IAClD,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,GAAG,oBAAoB,EAAE;AAChF,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE;;AAG5B,IAAA,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAA0B,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAC1G,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAClD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;AAGvD,IAAA,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,UAAU,CAAC;IAClE,MAAM,eAAe,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,KAAK,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAE5F,IAAA,MAAM,aAAa,GAAqC,OAAO,CAAC,MAAK;AACnE,QAAA,IAAI,UAAU;AAEd,QAAA,IAAI,YAAY,KAAK,UAAU,EAAE;AAC/B,YAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW;AAAE,gBAAA,OAAO,EAAE;AACxC,YAAA,UAAU,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAClE;aAAO;AACL,YAAA,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC9C;QAEA,MAAM,aAAa,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,KAAI;;YAEhD,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,wBAAyB,EAAE,IAAI,CAAC,OAAO,CAAC;AAAE,gBAAA,OAAO,KAAK;;YAGrF,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;AAAE,gBAAA,OAAO,KAAK;;YAGhF,IAAI,WAAW,EAAE;AACf,gBAAA,MAAM,aAAa,GAAG;;oBAEpB,CAAA,EAAG,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,WAAW,EAAE,CAAA,CAAE;oBACrD,CAAA,EAAG,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE,CAAA,CAAE;oBAC1C,CAAA,EAAG,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,EAAE,CAAA,CAAE;AACzC,iBAAA,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AACnE,gBAAA,IAAI,CAAC,aAAa;AAAE,oBAAA,OAAO,KAAK;YAClC;;YAGA,IAAI,CAAC,SAAS,EAAE,QAAQ,IAAI,SAAS,IAAI,IAAI,EAAE;gBAC7C,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;AAAE,oBAAA,OAAO,KAAK;YACvE;;YAGA,IAAI,SAAS,EAAE,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW;AAAE,gBAAA,OAAO,KAAK;;AAGtF,YAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;AAAE,gBAAA,OAAO,KAAK;;YAGvF,IAAI,iBAAiB,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE;gBACnE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAAE,oBAAA,OAAO,KAAK;YAC3E;;AAGA,YAAA,IAAI,YAAY,KAAK,UAAU,IAAI,CAAC,aAAa,CAAC,IAAiB,EAAE,SAAS,CAAC,iBAAiB,CAAC;AAAE,gBAAA,OAAO,KAAK;;YAG/G,IAAI,YAAY,KAAK,UAAU,IAAI,aAAa,CAAC,IAAiB,EAAE,SAAS,CAAC,iBAAiB,CAAC;AAAE,gBAAA,OAAO,KAAK;;AAG9G,YAAA,IAAI,YAAY,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAAE,gBAAA,OAAO,KAAK;AAE7G,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,YAAY,KAAK,UAAU,EAAE;YAC/B,OAAO,aAAa,EAAE,MAAM,CAAkB,CAAC,GAAG,EAAE,IAAI,KAAI;AAC1D,gBAAA,MAAM,MAAM,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM;AACtC,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;AAE5B,gBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AAAE,oBAAA,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE;AAEpC,gBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;oBAAE,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;gBAEpD,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,gBAAA,OAAO,GAAG;YACZ,CAAC,EAAE,EAAE,CAAC;QACR;aAAO;YACL,OAAO,aAAa,EAAE,MAAM,CAAiB,CAAC,GAAG,EAAE,IAAI,KAAI;AACzD,gBAAA,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI;AACxB,gBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AAAE,oBAAA,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE;gBACpC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,gBAAA,OAAO,GAAG;YACZ,CAAC,EAAE,EAAE,CAAC;QACR;AACF,IAAA,CAAC,EAAE;QACD,QAAQ;QACR,WAAW;QACX,UAAU;QACV,QAAQ;QACR,YAAY;AACZ,QAAA,SAAS,CAAC,wBAAwB;AAClC,QAAA,SAAS,CAAC,WAAW;AACrB,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,SAAS,CAAC,iBAAiB;QAC3B,WAAW;QACX,OAAO;QACP,iBAAiB;QACjB,SAAS;AACV,KAAA,CAAC;;AAGF,IAAA,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,GAAiB,KAAI;QACpB,IAAI,SAAS,GAAkB,MAAM;AACrC,QAAA,IAAI,UAAU,EAAE,GAAG,KAAK,GAAG,IAAI,UAAU,EAAE,SAAS,KAAK,MAAM,EAAE;YAC/D,SAAS,GAAG,KAAK;QACnB;AACA,QAAA,aAAa,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IACnC,CAAC,EACD,CAAC,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,CACzC;AAED,IAAA,MAAM,wBAAwB,GAAG,WAAW,CAAC,CAAC,SAAiB,KAAI;QACjE,eAAe,CAAC,SAAS,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC;IAEN,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI;;QAEjC,IAAI,QAAQ,EAAE,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE;YAChC,MAAM,SAAS,GAAG,MAAK;AACrB,gBAAA,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC;gBACtD,IAAI,OAAO,EAAE;AACX,oBAAA,MAAM,CAAC,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,GAAG,EAAE;AACnE,oBAAA,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;gBACjD;qBAAO;AACL,oBAAA,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC3B;AACF,YAAA,CAAC;AACD,YAAA,SAAS,EAAE;QACb;AACF,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEtB,QACEA,IAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAA,CAC/BC,GAAA,CAACC,QAAQ,EAAA,EAAA,CAAG,EACZD,GAAA,CAAC,SAAS,EAAA,EACR,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,oBAAoB,EAAE,oBAAoB,EAC1C,iBAAiB,EAAE,iBAAiB,IAAI,CAAC,YAAY,CAAC,EACtD,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,wBAAwB,EACzC,MAAM,EAAE,iBAAiB,EAAA,CACzB,EACD,SAAS,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,YAAY,KAAK,UAAU,IAAIA,GAAA,CAAC,WAAW,EAAA,EAAA,CAAG,EACjG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,CAAC,IACrCA,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAC9B,eAAe,EAAE,GAAG,CAAC,CAAC,KAAK,KAC1B,YAAY,KAAK,UAAU,IACzB,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,MAC1DA,GAAA,CAAC,WAAW,EAAA,EAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAA,EAAO,YAAY,CAAC,CAAC,CAAC,CAAI,CAC9D,CAAC,KAEFA,GAAA,CAAC,cAAc,EAAA,EACb,KAAK,EAAE,KAAK,EACZ,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,CAAmC,EAErE,UAAU,EAAE,WAAW,KAAK,EAAE,EAC9B,YAAY,EAAE,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,IAAI,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAA,EAF3F,KAAK,CAGV,CACH,CACF,EAAA,CACI,IACL,WAAW,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,IAC1DA,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAC1CA,GAAA,CAAC,iBAAiB,EAAA,EAAC,IAAI,EAAE,6BAA6B,EAAA,CAAI,EAAA,CACrD,IACL,YAAY,KAAK,WAAW,IAC9BD,IAAA,CAAC,IAAI,EAAA,EACH,EAAE,EAAE;AACF,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,MAAM,EAAE,OAAO;AACf,oBAAA,UAAU,EAAE,QAAQ;AACpB,oBAAA,YAAY,EAAE,QAAQ;AACtB,oBAAA,cAAc,EAAE,QAAQ;AACxB,oBAAA,UAAU,EAAE,QAAQ;AACpB,oBAAA,aAAa,EAAE,QAAQ;AACvB,oBAAA,EAAE,EAAE,MAAM;iBACX,EAAA,QAAA,EAAA,CAEDC,GAAA,CAAC,UAAU,EAAA,EAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAA,CAAI,EACrCA,GAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAA,QAAA,EAAG,CAAA,sCAAA,CAAwC,EAAA,CAAQ,EAC3EA,GAAA,CAAC,IAAI,IAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,EAAE,MAAM,EAAE,EAAA,QAAA,EACrF,CAAA,4DAAA,CAA8D,EAAA,CAC1D,CAAA,EAAA,CACF,KAEPA,GAAA,CAAC,eAAe,EAAA,EAAA,CAAG,CACpB,EACA,SAAS,CAAC,WAAW,IAAIA,GAAA,CAAC,mBAAmB,EAAA,EAAA,CAAG,EACjDA,GAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAC/FA,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAC,8FAA8F,EAClG,GAAG,EAAC,oBAAoB,EACxB,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAA,CACzC,EAAA,CACG,CAAA,EAAA,CACF;AAEX;;;;"}
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { BondsData } from '../../../../types/bonds';
3
3
  import { BaseBondConfig } from '@ape.swap/apeswap-lists';
4
- export interface ActiveBondRowsProps {
4
+ interface ActiveBondRowsProps {
5
5
  chain: number;
6
6
  bonds: (BondsData | BaseBondConfig)[];
7
7
  hideTitles: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ActiveBondRows.js","sources":["../../../../../src/views/Bonds/components/BondRows/ActiveBondRows.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport ChainTitle from './ChainTitle'\nimport BondRow from './BondRow'\nimport { Flex } from 'theme-ui'\nimport { BondsData } from '../../../../types/bonds'\nimport { BaseBondConfig, ChainId, MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport SwiperProvider from '../../../../contexts/SwiperProvider'\nimport HotBondCards from '../HotBondCards'\nimport ChainBanner from '../ChainBanner/ChainBanner'\nimport {\n getRemainingTokensString,\n getVestingTermsString,\n getVestingTermsTooltipString,\n remainingPercentage,\n} from '../../../../utils/displayHelpers'\nimport { getBalanceNumber } from '../../../../utils/getBalanceNumber'\nimport BigNumber from 'bignumber.js'\nimport { formatNumberSI } from '../../../../utils/formatNumber'\nimport { getTimePeriods } from '../../../../utils/getTimePeriods'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\n\n// Record<string, (BondsData | BaseBondConfig)[]>\n\nexport interface ActiveBondRowsProps {\n chain: number\n bonds: (BondsData | BaseBondConfig)[]\n hideTitles: boolean\n showHotBonds: boolean\n}\n\nconst ActiveBondRows: React.FC<ActiveBondRowsProps> = ({ chain, bonds, hideTitles, showHotBonds }) => {\n const { namingPreference } = useSDKConfig()\n const [isOpen, setIsOpen] = useState<boolean>(true)\n const key = chain\n\n return (\n <Flex className=\"bondrowswithtitle\" key={key}>\n <AnimatePresence initial={false}>\n <Flex onClick={() => setIsOpen(!isOpen)} sx={{ cursor: 'pointer' }}>\n <ChainTitle\n chain={chain}\n pt={'5px'}\n hideTitles={(bonds.length <= 0 && chain !== ChainId.SOL && chain !== ChainId.MONAD) || hideTitles}\n isOpen={isOpen}\n />\n </Flex>\n {isOpen && (bonds.length > 0 || chain === ChainId.SOL || chain === ChainId.MONAD) && (\n <motion.div\n initial={{ height: 0, overflow: 'hidden' }}\n animate={{ height: 'fit-content', overflow: 'hidden', transitionEnd: { overflow: 'visible' } }}\n exit={{ height: 0, overflow: 'hidden' }}\n sx={{\n position: 'relative',\n overflow: 'hidden',\n width: '100%',\n marginTop: '0px',\n }}\n key={key}\n className=\"bonds-card-container\"\n >\n {[\n ChainId.SOL,\n ChainId.MONAD,\n // ChainId.APTOS,\n // ChainId.SUI\n ].includes(chain) &&\n !hideTitles && <ChainBanner chainId={chain} />}\n {bonds?.map((bondFromMap, index) => {\n // PRE TGE ROWS\n\n if (bondFromMap.billType === 'fcfs') {\n const bond = bondFromMap as BondsData\n const totalPrincipalBilled =\n Math.round(\n getBalanceNumber(\n new BigNumber(bond?.totalPrincipalBilled ?? '0'),\n bond?.lpToken?.decimals?.[bond?.chainId] as number,\n ),\n ) / (bond.initPrice ?? 0)\n const raiseGoal =\n Math.round(\n getBalanceNumber(\n new BigNumber(bond?.totalRaise ?? '0'),\n bond?.lpToken?.decimals?.[bond?.chainId] as number,\n ),\n ) / (bond.initPrice ?? 0)\n\n const tokensRemaining = raiseGoal - totalPrincipalBilled\n const tokensRemainingUSD = tokensRemaining * (bond?.initPrice ?? 0)\n const percentageAvailable = 100 - Math.floor((totalPrincipalBilled * 100) / raiseGoal)\n const earnToken = bond?.earnToken?.symbol\n\n const baseBonus = bond?.trueBondPrices?.[0]?.bonus ?? 0\n const airdropBonus = bond?.airdropBonus ?? 0\n const bonus = baseBonus + airdropBonus\n const initialRelease = (bond?.initialRelease ?? 0) * 100\n\n const now = new Date().getTime()\n const saleFinishTime = (bond?.finishTime ?? 0) * 1000\n const saleHasFinished = now > saleFinishTime || bond.finalized\n\n return (\n <BondRow\n key={`${bond.contractAddress}-${bond.chainId}-${index}`}\n bondAddress={bond.contractAddress?.[bond.chainId] as string}\n bondChain={bond.chainId}\n marketingCampaign={bond.marketingCampaign as MarketingCampaign}\n payoutToken={bond.underlyingEarnToken || bond.earnToken}\n billType={bond.billType}\n tag={bond.tags?.[0]}\n bonus={\n bond.yieldBond\n ? `${bond.yieldData?.apr.toFixed()}% APR`\n : saleHasFinished\n ? undefined\n : `${bonus}%`\n }\n airdropTooltip={bond.airdropTooltip}\n percentageAvailable={percentageAvailable}\n remainingTokensString={\n saleHasFinished\n ? `0 ${earnToken} ($0) `\n : `${formatNumberSI(tokensRemaining, 0)} ${earnToken} ($${formatNumberSI(tokensRemainingUSD, 2)})`\n }\n vestingTermString={\n saleHasFinished\n ? '-'\n : bond.yieldBond\n ? `${\n getTimePeriods(\n (bond?.yieldData?.rewardDistributionEnd ?? 0) -\n parseInt(bond.startVestingTimestamp ?? '0'),\n true,\n ).days\n } D`\n : initialRelease === 100\n ? `0 D`\n : `${getTimePeriods(bond.vestingTerm).months} Mo`\n }\n vestingCliffString={\n bond.yieldBond\n ? `This is the duration over which the bonus yield will be distributed while your initial tokens remain staked.`\n : undefined\n }\n projectURL={bond.projectLink}\n twitterURL={bond.twitter}\n bondSoldOut={saleHasFinished}\n shortDescription={bond.shortDescription}\n />\n )\n } else {\n // POST TGE BONDS AKA NORMAL BONDS\n\n const bond = bondFromMap as BondsData\n const bondAddress = bond?.contractAddress?.[bond?.chainId] as string\n const remainingTokensString = getRemainingTokensString(bond)\n return (\n <BondRow\n key={`${bondAddress}-${bond.chainId}-${index}`}\n bondAddress={bondAddress}\n bondChain={bond.chainId}\n marketingCampaign={bond.marketingCampaign as MarketingCampaign}\n payoutToken={bond.earnToken}\n billType={bond.billType}\n tag={bond.highlightTag || bond.tags?.[0]}\n trueBondPrices={namingPreference === 'Bonus' ? bond.trueBondPrices : undefined}\n minTier={bond?.minTier}\n vestingTermString={getVestingTermsString(bond)}\n vestingCliffString={getVestingTermsTooltipString(bond)}\n percentageAvailable={remainingPercentage(bond)}\n remainingTokensString={remainingTokensString}\n projectURL={bond.projectLink}\n twitterURL={bond.twitter}\n bonus={\n namingPreference === 'Discount'\n ? `${bond?.trueBondPrices?.[0]?.discountWithFee?.toFixed(2)}%`\n : undefined\n }\n shortDescription={bond.shortDescription}\n cgId={bond.cgId}\n dexscreener={bond?.dexscreener}\n />\n )\n }\n })}\n {showHotBonds && (\n <SwiperProvider>\n <HotBondCards />\n </SwiperProvider>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </Flex>\n )\n}\n\nexport default ActiveBondRows\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"ActiveBondRows.js","sources":["../../../../../src/views/Bonds/components/BondRows/ActiveBondRows.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport ChainTitle from './ChainTitle'\nimport BondRow from './BondRow'\nimport { Flex } from 'theme-ui'\nimport { BondsData } from '../../../../types/bonds'\nimport { BaseBondConfig, ChainId, MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport SwiperProvider from '../../../../contexts/SwiperProvider'\nimport HotBondCards from '../HotBondCards'\nimport ChainBanner from '../ChainBanner/ChainBanner'\nimport {\n getRemainingTokensString,\n getVestingTermsString,\n getVestingTermsTooltipString,\n remainingPercentage,\n} from '../../../../utils/displayHelpers'\nimport { getBalanceNumber } from '../../../../utils/getBalanceNumber'\nimport BigNumber from 'bignumber.js'\nimport { formatNumberSI } from '../../../../utils/formatNumber'\nimport { getTimePeriods } from '../../../../utils/getTimePeriods'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\n\n// Record<string, (BondsData | BaseBondConfig)[]>\n\ninterface ActiveBondRowsProps {\n chain: number\n bonds: (BondsData | BaseBondConfig)[]\n hideTitles: boolean\n showHotBonds: boolean\n}\n\nconst ActiveBondRows: React.FC<ActiveBondRowsProps> = ({ chain, bonds, hideTitles, showHotBonds }) => {\n const { namingPreference } = useSDKConfig()\n const [isOpen, setIsOpen] = useState<boolean>(true)\n const key = chain\n\n return (\n <Flex className=\"bondrowswithtitle\" key={key}>\n <AnimatePresence initial={false}>\n <Flex onClick={() => setIsOpen(!isOpen)} sx={{ cursor: 'pointer' }}>\n <ChainTitle\n chain={chain}\n pt={'5px'}\n hideTitles={(bonds.length <= 0 && chain !== ChainId.SOL && chain !== ChainId.MONAD) || hideTitles}\n isOpen={isOpen}\n />\n </Flex>\n {isOpen && (bonds.length > 0 || chain === ChainId.SOL || chain === ChainId.MONAD) && (\n <motion.div\n initial={{ height: 0, overflow: 'hidden' }}\n animate={{ height: 'fit-content', overflow: 'hidden', transitionEnd: { overflow: 'visible' } }}\n exit={{ height: 0, overflow: 'hidden' }}\n sx={{\n position: 'relative',\n overflow: 'hidden',\n width: '100%',\n marginTop: '0px',\n }}\n key={key}\n className=\"bonds-card-container\"\n >\n {[\n ChainId.SOL,\n ChainId.MONAD,\n // ChainId.APTOS,\n // ChainId.SUI\n ].includes(chain) &&\n !hideTitles && <ChainBanner chainId={chain} />}\n {bonds?.map((bondFromMap, index) => {\n // PRE TGE ROWS\n\n if (bondFromMap.billType === 'fcfs') {\n const bond = bondFromMap as BondsData\n const totalPrincipalBilled =\n Math.round(\n getBalanceNumber(\n new BigNumber(bond?.totalPrincipalBilled ?? '0'),\n bond?.lpToken?.decimals?.[bond?.chainId] as number,\n ),\n ) / (bond.initPrice ?? 0)\n const raiseGoal =\n Math.round(\n getBalanceNumber(\n new BigNumber(bond?.totalRaise ?? '0'),\n bond?.lpToken?.decimals?.[bond?.chainId] as number,\n ),\n ) / (bond.initPrice ?? 0)\n\n const tokensRemaining = raiseGoal - totalPrincipalBilled\n const tokensRemainingUSD = tokensRemaining * (bond?.initPrice ?? 0)\n const percentageAvailable = 100 - Math.floor((totalPrincipalBilled * 100) / raiseGoal)\n const earnToken = bond?.earnToken?.symbol\n\n const baseBonus = bond?.trueBondPrices?.[0]?.bonus ?? 0\n const airdropBonus = bond?.airdropBonus ?? 0\n const bonus = baseBonus + airdropBonus\n const initialRelease = (bond?.initialRelease ?? 0) * 100\n\n const now = new Date().getTime()\n const saleFinishTime = (bond?.finishTime ?? 0) * 1000\n const saleHasFinished = now > saleFinishTime || bond.finalized\n\n return (\n <BondRow\n key={`${bond.contractAddress}-${bond.chainId}-${index}`}\n bondAddress={bond.contractAddress?.[bond.chainId] as string}\n bondChain={bond.chainId}\n marketingCampaign={bond.marketingCampaign as MarketingCampaign}\n payoutToken={bond.underlyingEarnToken || bond.earnToken}\n billType={bond.billType}\n tag={bond.tags?.[0]}\n bonus={\n bond.yieldBond\n ? `${bond.yieldData?.apr.toFixed()}% APR`\n : saleHasFinished\n ? undefined\n : `${bonus}%`\n }\n airdropTooltip={bond.airdropTooltip}\n percentageAvailable={percentageAvailable}\n remainingTokensString={\n saleHasFinished\n ? `0 ${earnToken} ($0) `\n : `${formatNumberSI(tokensRemaining, 0)} ${earnToken} ($${formatNumberSI(tokensRemainingUSD, 2)})`\n }\n vestingTermString={\n saleHasFinished\n ? '-'\n : bond.yieldBond\n ? `${\n getTimePeriods(\n (bond?.yieldData?.rewardDistributionEnd ?? 0) -\n parseInt(bond.startVestingTimestamp ?? '0'),\n true,\n ).days\n } D`\n : initialRelease === 100\n ? `0 D`\n : `${getTimePeriods(bond.vestingTerm).months} Mo`\n }\n vestingCliffString={\n bond.yieldBond\n ? `This is the duration over which the bonus yield will be distributed while your initial tokens remain staked.`\n : undefined\n }\n projectURL={bond.projectLink}\n twitterURL={bond.twitter}\n bondSoldOut={saleHasFinished}\n shortDescription={bond.shortDescription}\n />\n )\n } else {\n // POST TGE BONDS AKA NORMAL BONDS\n\n const bond = bondFromMap as BondsData\n const bondAddress = bond?.contractAddress?.[bond?.chainId] as string\n const remainingTokensString = getRemainingTokensString(bond)\n return (\n <BondRow\n key={`${bondAddress}-${bond.chainId}-${index}`}\n bondAddress={bondAddress}\n bondChain={bond.chainId}\n marketingCampaign={bond.marketingCampaign as MarketingCampaign}\n payoutToken={bond.earnToken}\n billType={bond.billType}\n tag={bond.highlightTag || bond.tags?.[0]}\n trueBondPrices={namingPreference === 'Bonus' ? bond.trueBondPrices : undefined}\n minTier={bond?.minTier}\n vestingTermString={getVestingTermsString(bond)}\n vestingCliffString={getVestingTermsTooltipString(bond)}\n percentageAvailable={remainingPercentage(bond)}\n remainingTokensString={remainingTokensString}\n projectURL={bond.projectLink}\n twitterURL={bond.twitter}\n bonus={\n namingPreference === 'Discount'\n ? `${bond?.trueBondPrices?.[0]?.discountWithFee?.toFixed(2)}%`\n : undefined\n }\n shortDescription={bond.shortDescription}\n cgId={bond.cgId}\n dexscreener={bond?.dexscreener}\n />\n )\n }\n })}\n {showHotBonds && (\n <SwiperProvider>\n <HotBondCards />\n </SwiperProvider>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </Flex>\n )\n}\n\nexport default ActiveBondRows\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { ChainId } from '@ape.swap/apeswap-lists';
3
- export interface SmallCardBond {
3
+ interface SmallCardBond {
4
4
  vestingTerm: number;
5
5
  payoutTokenName: string;
6
6
  contractAddress: string;
@@ -1 +1 @@
1
- {"version":3,"file":"SmallRecommendationCard.js","sources":["../../../../../src/views/Bonds/components/RecommendationCards/SmallRecommendationCard.tsx"],"sourcesContent":["import React from 'react'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { getTimePeriods } from '../../../../utils/getTimePeriods'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport TokenImage from '../../../../components/uikit-sdk/TokenImage'\nimport { styles } from './styles'\n\nexport interface SmallCardBond {\n vestingTerm: number\n payoutTokenName: string\n contractAddress: string\n bonus: number\n chainId: ChainId\n}\n\nconst SmallRecommendationCard = ({ recommendation }: { recommendation: SmallCardBond }) => {\n const vestingTime = getTimePeriods(recommendation.vestingTerm, true)\n\n return (\n <Flex\n sx={styles.smallCardContainer}\n onClick={() =>\n window.open(\n `${window.location.origin}/bonds?bondAddress=${recommendation.contractAddress}&bondChain=${recommendation.chainId}`,\n '_self',\n )\n }\n >\n <Flex sx={{ alignItems: 'center' }}>\n <TokenImage symbol={recommendation.payoutTokenName} size={32} chain={recommendation.chainId} />\n <Flex sx={{ mx: '10px', alignItems: 'center' }}>\n <Flex sx={{ fontSize: '14px', px: '6px' }}>{recommendation.payoutTokenName}</Flex>\n <Flex sx={styles.subTitle}>{vestingTime.days}D</Flex>\n </Flex>\n </Flex>\n <Flex sx={{ alignItems: 'center' }}>\n <Flex sx={styles.subTitle}>Bonus</Flex>\n <Flex sx={{ fontSize: '12px', color: recommendation.bonus > 0 ? 'success' : 'error', ml: '6px' }}>\n {recommendation.bonus.toFixed(2)}%\n </Flex>\n </Flex>\n </Flex>\n )\n}\n\nexport default SmallRecommendationCard\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAeA,MAAM,uBAAuB,GAAG,CAAC,EAAE,cAAc,EAAqC,KAAI;IACxF,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC;AAEpE,IAAA,QACEA,IAAA,CAAC,IAAI,IACH,EAAE,EAAE,MAAM,CAAC,kBAAkB,EAC7B,OAAO,EAAE,MACP,MAAM,CAAC,IAAI,CACT,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA,mBAAA,EAAsB,cAAc,CAAC,eAAe,CAAA,WAAA,EAAc,cAAc,CAAC,OAAO,EAAE,EACnH,OAAO,CACR,EAAA,QAAA,EAAA,CAGHA,IAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAA,QAAA,EAAA,CAChCC,GAAA,CAAC,UAAU,EAAA,EAAC,MAAM,EAAE,cAAc,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,EAAA,CAAI,EAC/FD,IAAA,CAAC,IAAI,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,aAC5CC,GAAA,CAAC,IAAI,IAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAA,QAAA,EAAG,cAAc,CAAC,eAAe,EAAA,CAAQ,EAClFD,IAAA,CAAC,IAAI,IAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,aAAG,WAAW,CAAC,IAAI,EAAA,GAAA,CAAA,EAAA,CAAS,CAAA,EAAA,CAChD,IACF,EACPA,IAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,aAChCC,GAAA,CAAC,IAAI,IAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAA,QAAA,EAAA,OAAA,EAAA,CAAc,EACvCD,KAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,aAC7F,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAC3B,CAAA,EAAA,CACF,CAAA,EAAA,CACF;AAEX;;;;"}
1
+ {"version":3,"file":"SmallRecommendationCard.js","sources":["../../../../../src/views/Bonds/components/RecommendationCards/SmallRecommendationCard.tsx"],"sourcesContent":["import React from 'react'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { getTimePeriods } from '../../../../utils/getTimePeriods'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport TokenImage from '../../../../components/uikit-sdk/TokenImage'\nimport { styles } from './styles'\n\ninterface SmallCardBond {\n vestingTerm: number\n payoutTokenName: string\n contractAddress: string\n bonus: number\n chainId: ChainId\n}\n\nconst SmallRecommendationCard = ({ recommendation }: { recommendation: SmallCardBond }) => {\n const vestingTime = getTimePeriods(recommendation.vestingTerm, true)\n\n return (\n <Flex\n sx={styles.smallCardContainer}\n onClick={() =>\n window.open(\n `${window.location.origin}/bonds?bondAddress=${recommendation.contractAddress}&bondChain=${recommendation.chainId}`,\n '_self',\n )\n }\n >\n <Flex sx={{ alignItems: 'center' }}>\n <TokenImage symbol={recommendation.payoutTokenName} size={32} chain={recommendation.chainId} />\n <Flex sx={{ mx: '10px', alignItems: 'center' }}>\n <Flex sx={{ fontSize: '14px', px: '6px' }}>{recommendation.payoutTokenName}</Flex>\n <Flex sx={styles.subTitle}>{vestingTime.days}D</Flex>\n </Flex>\n </Flex>\n <Flex sx={{ alignItems: 'center' }}>\n <Flex sx={styles.subTitle}>Bonus</Flex>\n <Flex sx={{ fontSize: '12px', color: recommendation.bonus > 0 ? 'success' : 'error', ml: '6px' }}>\n {recommendation.bonus.toFixed(2)}%\n </Flex>\n </Flex>\n </Flex>\n )\n}\n\nexport default SmallRecommendationCard\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAeA,MAAM,uBAAuB,GAAG,CAAC,EAAE,cAAc,EAAqC,KAAI;IACxF,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC;AAEpE,IAAA,QACEA,IAAA,CAAC,IAAI,IACH,EAAE,EAAE,MAAM,CAAC,kBAAkB,EAC7B,OAAO,EAAE,MACP,MAAM,CAAC,IAAI,CACT,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA,mBAAA,EAAsB,cAAc,CAAC,eAAe,CAAA,WAAA,EAAc,cAAc,CAAC,OAAO,EAAE,EACnH,OAAO,CACR,EAAA,QAAA,EAAA,CAGHA,IAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAA,QAAA,EAAA,CAChCC,GAAA,CAAC,UAAU,EAAA,EAAC,MAAM,EAAE,cAAc,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,EAAA,CAAI,EAC/FD,IAAA,CAAC,IAAI,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,aAC5CC,GAAA,CAAC,IAAI,IAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAA,QAAA,EAAG,cAAc,CAAC,eAAe,EAAA,CAAQ,EAClFD,IAAA,CAAC,IAAI,IAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,aAAG,WAAW,CAAC,IAAI,EAAA,GAAA,CAAA,EAAA,CAAS,CAAA,EAAA,CAChD,IACF,EACPA,IAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,aAChCC,GAAA,CAAC,IAAI,IAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAA,QAAA,EAAA,OAAA,EAAA,CAAc,EACvCD,KAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,aAC7F,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAC3B,CAAA,EAAA,CACF,CAAA,EAAA,CACF;AAEX;;;;"}
@@ -1,8 +1,6 @@
1
1
  import { BondsData } from '../../types/bonds';
2
2
  import { SortOptions } from './Bonds';
3
- import { BillsConfig } from '@ape.swap/apeswap-lists';
4
3
  export declare const isBondSoldOut: (bill: BondsData, showLowValueBonds?: boolean) => boolean;
5
4
  export declare const sortBonds: (sortConfig?: SortOptions, bonds?: BondsData[]) => BondsData[];
6
5
  export declare const getDiscountColor: (discount?: number) => string;
7
- export declare const calculateARR: (bond: BondsData | BillsConfig, useTiers: boolean) => string;
8
6
  export declare const isBondSupported: (SDKVersion: string, bondVersion: string) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../src/views/Bonds/utils.ts"],"sourcesContent":["import { BondsData } from '../../types/bonds'\nimport BigNumber from 'bignumber.js'\nimport { SortOptions } from './Bonds'\nimport { getTimePeriods } from '../../utils/getTimePeriods'\nimport { BillsConfig, LaunchBondTiers } from '@ape.swap/apeswap-lists'\nimport { TIERS_WEIGHT } from '../../state/tiers/useTierPoints'\nimport { remainingPercentage } from '../../utils/displayHelpers'\nimport { findHighestTrueBondPrice } from '../../utils/bondPriceHelpers'\n\nexport const isBondSoldOut = (bill: BondsData, showLowValueBonds?: boolean): boolean => {\n if (bill.soldOut) return true\n if (bill.hide) return true\n if (bill.billType === 'fcfs') {\n const now = new Date().getTime()\n const saleFinishTime = (bill?.finishTime ?? 0) * 1000\n const saleHasFinished = now > saleFinishTime || bill.finalized\n if (saleHasFinished) return true\n return false\n }\n const { tokensRemaining, payoutTokenPrice } = bill\n if (!tokensRemaining) return false\n if (showLowValueBonds) return false\n const thresholdToHide = new BigNumber(100).div(payoutTokenPrice ?? 0)\n\n if ((findHighestTrueBondPrice('0', bill?.trueBondPrices)?.bonusWithFee ?? 0) > 50) {\n if (bill.earnToken.symbol === 'sGOO') return false\n //if bonus is higher than 50% for regular bonds, hide them\n return true\n }\n if (new BigNumber(tokensRemaining)?.lte(thresholdToHide)) {\n // If there's less than 100 usd bond will be hidden\n return true\n } else return false\n}\n\nexport const sortBonds = (sortConfig?: SortOptions, bonds?: BondsData[]) => {\n const bondsToSort = bonds ?? []\n\n if (!sortConfig) {\n return bondsToSort\n }\n\n return [...bondsToSort].sort((a, b) => {\n let aValue: number\n let bValue: number\n\n if (sortConfig?.key === 'arr') {\n aValue = findHighestTrueBondPrice(TIERS_WEIGHT[LaunchBondTiers.Legend], a?.trueBondPrices)?.bonusWithFee ?? 0\n bValue = findHighestTrueBondPrice(TIERS_WEIGHT[LaunchBondTiers.Legend], b?.trueBondPrices)?.bonusWithFee ?? 0\n } else if (sortConfig.key === 'tokensRemaining') {\n aValue = remainingPercentage(a)\n bValue = remainingPercentage(b)\n } else if (sortConfig.key === 'terms') {\n aValue = getTimePeriods(a.vestingTerm, true).days\n bValue = getTimePeriods(b.vestingTerm, true).days\n } else {\n aValue = findHighestTrueBondPrice(TIERS_WEIGHT[LaunchBondTiers.Legend], a?.trueBondPrices)?.bonusWithFee ?? 0\n bValue = findHighestTrueBondPrice(TIERS_WEIGHT[LaunchBondTiers.Legend], b?.trueBondPrices)?.bonusWithFee ?? 0\n }\n\n if (aValue < bValue) {\n return sortConfig.direction === 'asc' ? -1 : 1\n }\n if (aValue > bValue) {\n return sortConfig.direction === 'asc' ? 1 : -1\n }\n return 0\n })\n}\n\nexport const getDiscountColor = (discount?: number): string => {\n if (!discount) return ''\n return discount < 0 ? 'discount-negative' : 'discount-positive'\n}\nexport const calculateARR = (bond: BondsData | BillsConfig, useTiers: boolean): string => {\n if (!('trueBondPrices' in bond)) return '-'\n const bonus = findHighestTrueBondPrice(\n useTiers ? TIERS_WEIGHT[LaunchBondTiers.Legend] : '0',\n bond?.trueBondPrices,\n )?.bonusWithFee\n const vestingTerm = 'vestingTerm' in bond ? bond?.vestingTerm : undefined\n if (!bonus) return '-'\n const discount = bonus ?? 0\n if (discount < 0) return '-'\n const vestingDays = getTimePeriods(vestingTerm, true).days\n return `${((discount * 365) / vestingDays).toFixed(2)}%`\n}\n\nexport const isBondSupported = (SDKVersion: string, bondVersion: string) => {\n // Split the versions into major, minor, and patch parts\n const [major1, minor1, patch1] = SDKVersion.split('.').map(Number) ?? []\n const [major2, minor2, patch2] = bondVersion?.split('.').map(Number) ?? []\n\n // Compare major versions\n if (major1 > major2) return true\n if (major1 < major2) return false\n\n // Compare minor versions\n if (minor1 > minor2) return true\n if (minor1 < minor2) return false\n\n // Compare patch versions\n if (patch1 >= patch2) return true\n\n // If none of the above conditions are met, version1 is less\n return false\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../src/views/Bonds/utils.ts"],"sourcesContent":["import { BondsData } from '../../types/bonds'\nimport BigNumber from 'bignumber.js'\nimport { SortOptions } from './Bonds'\nimport { getTimePeriods } from '../../utils/getTimePeriods'\nimport { LaunchBondTiers } from '@ape.swap/apeswap-lists'\nimport { TIERS_WEIGHT } from '../../state/tiers/useTierPoints'\nimport { remainingPercentage } from '../../utils/displayHelpers'\nimport { findHighestTrueBondPrice } from '../../utils/bondPriceHelpers'\n\nexport const isBondSoldOut = (bill: BondsData, showLowValueBonds?: boolean): boolean => {\n if (bill.soldOut) return true\n if (bill.hide) return true\n if (bill.billType === 'fcfs') {\n const now = new Date().getTime()\n const saleFinishTime = (bill?.finishTime ?? 0) * 1000\n const saleHasFinished = now > saleFinishTime || bill.finalized\n if (saleHasFinished) return true\n return false\n }\n const { tokensRemaining, payoutTokenPrice } = bill\n if (!tokensRemaining) return false\n if (showLowValueBonds) return false\n const thresholdToHide = new BigNumber(100).div(payoutTokenPrice ?? 0)\n\n if ((findHighestTrueBondPrice('0', bill?.trueBondPrices)?.bonusWithFee ?? 0) > 50) {\n if (bill.earnToken.symbol === 'sGOO') return false\n //if bonus is higher than 50% for regular bonds, hide them\n return true\n }\n if (new BigNumber(tokensRemaining)?.lte(thresholdToHide)) {\n // If there's less than 100 usd bond will be hidden\n return true\n } else return false\n}\n\nexport const sortBonds = (sortConfig?: SortOptions, bonds?: BondsData[]) => {\n const bondsToSort = bonds ?? []\n\n if (!sortConfig) {\n return bondsToSort\n }\n\n return [...bondsToSort].sort((a, b) => {\n let aValue: number\n let bValue: number\n\n if (sortConfig?.key === 'arr') {\n aValue = findHighestTrueBondPrice(TIERS_WEIGHT[LaunchBondTiers.Legend], a?.trueBondPrices)?.bonusWithFee ?? 0\n bValue = findHighestTrueBondPrice(TIERS_WEIGHT[LaunchBondTiers.Legend], b?.trueBondPrices)?.bonusWithFee ?? 0\n } else if (sortConfig.key === 'tokensRemaining') {\n aValue = remainingPercentage(a)\n bValue = remainingPercentage(b)\n } else if (sortConfig.key === 'terms') {\n aValue = getTimePeriods(a.vestingTerm, true).days\n bValue = getTimePeriods(b.vestingTerm, true).days\n } else {\n aValue = findHighestTrueBondPrice(TIERS_WEIGHT[LaunchBondTiers.Legend], a?.trueBondPrices)?.bonusWithFee ?? 0\n bValue = findHighestTrueBondPrice(TIERS_WEIGHT[LaunchBondTiers.Legend], b?.trueBondPrices)?.bonusWithFee ?? 0\n }\n\n if (aValue < bValue) {\n return sortConfig.direction === 'asc' ? -1 : 1\n }\n if (aValue > bValue) {\n return sortConfig.direction === 'asc' ? 1 : -1\n }\n return 0\n })\n}\n\nexport const getDiscountColor = (discount?: number): string => {\n if (!discount) return ''\n return discount < 0 ? 'discount-negative' : 'discount-positive'\n}\n\nexport const isBondSupported = (SDKVersion: string, bondVersion: string) => {\n // Split the versions into major, minor, and patch parts\n const [major1, minor1, patch1] = SDKVersion.split('.').map(Number) ?? []\n const [major2, minor2, patch2] = bondVersion?.split('.').map(Number) ?? []\n\n // Compare major versions\n if (major1 > major2) return true\n if (major1 < major2) return false\n\n // Compare minor versions\n if (minor1 > minor2) return true\n if (minor1 < minor2) return false\n\n // Compare patch versions\n if (patch1 >= patch2) return true\n\n // If none of the above conditions are met, version1 is less\n return false\n}\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ export interface PurchasedBondData {
3
3
  buyTxHash: string;
4
4
  lostProfit?: string;
5
5
  }
6
- export interface BuyBondProps {
6
+ interface BuyBondProps {
7
7
  onDismiss?: () => void;
8
8
  bondAddress?: string;
9
9
  bondChain?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"BuyBondModal.js","sources":["../../../src/views/BuyBond/BuyBondModal.tsx"],"sourcesContent":["import React from 'react'\nimport Modal from '../../components/uikit-sdk/Modal'\nimport BuyBond from './BuyComponent'\nimport BuyComponentSolana from './BuyComponentSolana'\nimport BuyComponentAptos from './BuyComponentAptos'\nimport BuyComponentSui from './BuyComponentSui'\nimport { ChainId } from '@ape.swap/apeswap-lists'\n\nexport interface PurchasedBondData {\n buyTxHash: string\n lostProfit?: string\n}\n\nexport interface BuyBondProps {\n onDismiss?: () => void // this is only the modal\n bondAddress?: string\n bondChain?: number\n handlePurchasedBond?: (data: PurchasedBondData) => void\n setBillId?: (id: string) => void\n isProjectView?: boolean\n}\n\nconst BuyBondModal: React.FC<BuyBondProps> = ({\n onDismiss,\n bondAddress,\n bondChain,\n handlePurchasedBond,\n setBillId,\n}) => {\n return (\n <Modal className=\"modal\" onDismiss={onDismiss} sx={{ width: '400px', maxWidth: '700px', mt: '-10px', p: '0px' }}>\n {bondChain === ChainId.SOL ? (\n <BuyComponentSolana\n onDismiss={onDismiss}\n bondAddress={bondAddress}\n bondChain={bondChain}\n setBillId={setBillId}\n />\n ) : bondChain === ChainId.APTOS ? (\n <BuyComponentAptos\n onDismiss={onDismiss}\n bondAddress={bondAddress}\n bondChain={bondChain}\n setBillId={setBillId}\n />\n ) : bondChain === ChainId.SUI ? (\n <BuyComponentSui onDismiss={onDismiss} bondAddress={bondAddress} bondChain={bondChain} setBillId={setBillId} />\n ) : (\n <BuyBond //evm\n onDismiss={onDismiss}\n bondAddress={bondAddress}\n bondChain={bondChain}\n handlePurchasedBond={handlePurchasedBond}\n />\n )}\n </Modal>\n )\n}\n\nexport default React.memo(BuyBondModal)\n"],"names":["_jsx"],"mappings":";;;;;;;;;AAsBA,MAAM,YAAY,GAA2B,CAAC,EAC5C,SAAS,EACT,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,SAAS,GACV,KAAI;AACH,IAAA,QACEA,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,OAAO,EAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAA,QAAA,EAC5G,SAAS,KAAK,OAAO,CAAC,GAAG,IACxBA,GAAA,CAAC,kBAAkB,EAAA,EACjB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EAAA,CACpB,IACA,SAAS,KAAK,OAAO,CAAC,KAAK,IAC7BA,GAAA,CAAC,iBAAiB,EAAA,EAChB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EAAA,CACpB,IACA,SAAS,KAAK,OAAO,CAAC,GAAG,IAC3BA,GAAA,CAAC,eAAe,EAAA,EAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAA,CAAI,KAE/GA,GAAA,CAAC,OAAO;AACN,UAAA,EAAA,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,mBAAmB,EAAE,mBAAmB,GACxC,CACH,EAAA,CACK;AAEZ,CAAC;AAED,qBAAe,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;;;;"}
1
+ {"version":3,"file":"BuyBondModal.js","sources":["../../../src/views/BuyBond/BuyBondModal.tsx"],"sourcesContent":["import React from 'react'\nimport Modal from '../../components/uikit-sdk/Modal'\nimport BuyBond from './BuyComponent'\nimport BuyComponentSolana from './BuyComponentSolana'\nimport BuyComponentAptos from './BuyComponentAptos'\nimport BuyComponentSui from './BuyComponentSui'\nimport { ChainId } from '@ape.swap/apeswap-lists'\n\nexport interface PurchasedBondData {\n buyTxHash: string\n lostProfit?: string\n}\n\ninterface BuyBondProps {\n onDismiss?: () => void // this is only the modal\n bondAddress?: string\n bondChain?: number\n handlePurchasedBond?: (data: PurchasedBondData) => void\n setBillId?: (id: string) => void\n isProjectView?: boolean\n}\n\nconst BuyBondModal: React.FC<BuyBondProps> = ({\n onDismiss,\n bondAddress,\n bondChain,\n handlePurchasedBond,\n setBillId,\n}) => {\n return (\n <Modal className=\"modal\" onDismiss={onDismiss} sx={{ width: '400px', maxWidth: '700px', mt: '-10px', p: '0px' }}>\n {bondChain === ChainId.SOL ? (\n <BuyComponentSolana\n onDismiss={onDismiss}\n bondAddress={bondAddress}\n bondChain={bondChain}\n setBillId={setBillId}\n />\n ) : bondChain === ChainId.APTOS ? (\n <BuyComponentAptos\n onDismiss={onDismiss}\n bondAddress={bondAddress}\n bondChain={bondChain}\n setBillId={setBillId}\n />\n ) : bondChain === ChainId.SUI ? (\n <BuyComponentSui onDismiss={onDismiss} bondAddress={bondAddress} bondChain={bondChain} setBillId={setBillId} />\n ) : (\n <BuyBond //evm\n onDismiss={onDismiss}\n bondAddress={bondAddress}\n bondChain={bondChain}\n handlePurchasedBond={handlePurchasedBond}\n />\n )}\n </Modal>\n )\n}\n\nexport default React.memo(BuyBondModal)\n"],"names":["_jsx"],"mappings":";;;;;;;;;AAsBA,MAAM,YAAY,GAA2B,CAAC,EAC5C,SAAS,EACT,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,SAAS,GACV,KAAI;AACH,IAAA,QACEA,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,OAAO,EAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAA,QAAA,EAC5G,SAAS,KAAK,OAAO,CAAC,GAAG,IACxBA,GAAA,CAAC,kBAAkB,EAAA,EACjB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EAAA,CACpB,IACA,SAAS,KAAK,OAAO,CAAC,KAAK,IAC7BA,GAAA,CAAC,iBAAiB,EAAA,EAChB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EAAA,CACpB,IACA,SAAS,KAAK,OAAO,CAAC,GAAG,IAC3BA,GAAA,CAAC,eAAe,EAAA,EAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAA,CAAI,KAE/GA,GAAA,CAAC,OAAO;AACN,UAAA,EAAA,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,mBAAmB,EAAE,mBAAmB,GACxC,CACH,EAAA,CACK;AAEZ,CAAC;AAED,qBAAe,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;;;;"}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- export interface BuyComponentAptosProps {
2
+ interface BuyComponentAptosProps {
3
3
  onDismiss?: () => void;
4
4
  bondAddress?: string;
5
5
  bondChain?: number;