@dodoex/widgets 3.14.1-react.9 → 3.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -674
- package/README.md +70 -70
- package/dist/cjs/locales/en-US.js +1 -1
- package/dist/cjs/locales/zh-CN.js +1 -1
- package/dist/helper-Dry2KYfh.js +1 -0
- package/dist/helper-iRd-4sp4.cjs +1 -0
- package/dist/index-BRTABuMK.cjs +12 -0
- package/dist/index-Ca_h9Yxg.js +34 -0
- package/dist/index-DDwPtr_I.js +12 -0
- package/dist/index-DHfQEIuw.cjs +78 -0
- package/dist/index-DsQIchnJ.js +78 -0
- package/dist/index-vyWzevj_.cjs +34 -0
- package/dist/index.cjs +1 -2
- package/dist/index.js +1 -1
- package/dist/locales/en-US.js +1 -1
- package/dist/locales/zh-CN.js +1 -1
- package/dist/types/components/Bridge/BridgeRouteShortCard.d.ts +2 -4
- package/dist/types/components/Bridge/BridgeSummaryDialog/index.d.ts +2 -2
- package/dist/types/components/Bridge/CompareRoute.d.ts +4 -0
- package/dist/types/components/Bridge/RouteVision.d.ts +7 -0
- package/dist/types/components/Bridge/RouteVisionModal.d.ts +5 -0
- package/dist/types/components/CardWidgets.d.ts +11 -2
- package/dist/types/components/ConnectWallet/NeedConnectButton.d.ts +1 -1
- package/dist/types/components/ErrorMessageDialog.d.ts +2 -1
- package/dist/types/components/HowItWorks.d.ts +5 -5
- package/dist/types/components/Message/index.d.ts +1 -1
- package/dist/types/components/SelectChain.d.ts +1 -2
- package/dist/types/components/SquaredGoBack.d.ts +5 -0
- package/dist/types/components/Swap/SwapOrderHistory/CrossChainOrderList.d.ts +4 -0
- package/dist/types/components/Swap/SwapOrderHistory/CrossOrderCard.d.ts +8 -0
- package/dist/types/components/Swap/SwapOrderHistory/RefundModal.d.ts +9 -0
- package/dist/types/components/Swap/SwapOrderHistory/SameChainOrderList.d.ts +3 -0
- package/dist/types/components/Swap/SwapOrderHistory/index.d.ts +6 -5
- package/dist/types/components/Swap/components/Dialog.d.ts +1 -1
- package/dist/types/components/Swap/components/FiatEntryAndGasRefuel.d.ts +1 -0
- package/dist/types/components/Swap/components/ReceiveAddressInputModal.d.ts +10 -0
- package/dist/types/components/Swap/components/ReviewDialog.d.ts +2 -1
- package/dist/types/components/Swap/components/RouteVisionModal.d.ts +7 -0
- package/dist/types/components/Swap/components/SettingsDialog/index.d.ts +2 -1
- package/dist/types/components/Swap/components/SwapSettingsDialog/SlippageSetting.d.ts +1 -2
- package/dist/types/components/Swap/components/SwapSettingsDialog/SlippageWarning.d.ts +1 -3
- package/dist/types/components/Swap/components/SwapSettingsDialog/SupplierSelect.d.ts +5 -0
- package/dist/types/components/Swap/components/SwapSettingsDialog/index.d.ts +3 -2
- package/dist/types/components/Swap/components/TokenCard/TokenCardSwap.d.ts +48 -0
- package/dist/types/components/Swap/components/TokenCard/TokenPickerDialog.d.ts +2 -0
- package/dist/types/components/Swap/components/TokenCard/WalletConnectBtn.d.ts +11 -0
- package/dist/types/components/Swap/components/TokenPairPriceWithToggle.d.ts +3 -2
- package/dist/types/components/Swap/index.d.ts +2 -4
- package/dist/types/components/TokenPicker/TokenItem.d.ts +3 -4
- package/dist/types/components/TokenPicker/index.d.ts +3 -3
- package/dist/types/components/Widget/index.d.ts +13 -15
- package/dist/types/components/WithExecutionDialog/index.d.ts +1 -2
- package/dist/types/constants/address.d.ts +6 -0
- package/dist/types/constants/api.d.ts +96 -4
- package/dist/types/constants/chainList.d.ts +10 -0
- package/dist/types/constants/chains.d.ts +17 -1
- package/dist/types/constants/sessionStorage.d.ts +1 -0
- package/dist/types/constants/swap.d.ts +1 -0
- package/dist/types/constants/tokenList.d.ts +8 -9
- package/dist/types/hooks/Bridge/createBridgeOrder.d.ts +4 -24
- package/dist/types/hooks/Bridge/useExecuteBridgeRoute.d.ts +1 -2
- package/dist/types/hooks/Bridge/useFeeList.d.ts +9 -0
- package/dist/types/hooks/Bridge/useFetchRoutePriceBridge.d.ts +138 -48
- package/dist/types/hooks/Bridge/useSendRoute.d.ts +1 -2
- package/dist/types/hooks/Bridge/useSwitchBridgeOrSwapSlippage.d.ts +4 -1
- package/dist/types/hooks/Bridge/utils.d.ts +6 -0
- package/dist/types/hooks/ConnectWallet/index.d.ts +0 -2
- package/dist/types/hooks/ConnectWallet/useBTCWalletStore.d.ts +1 -0
- package/dist/types/hooks/ConnectWallet/useSwitchChain.d.ts +1 -12
- package/dist/types/hooks/Submission/types.d.ts +29 -1
- package/dist/types/hooks/Submission/useExecution.d.ts +1 -1
- package/dist/types/hooks/Swap/useBridgeSlippage.d.ts +3 -0
- package/dist/types/hooks/Swap/useCrossSwapOrderList.d.ts +215 -0
- package/dist/types/hooks/Swap/useExecuteSwap.d.ts +2 -1
- package/dist/types/hooks/Swap/useFetchRoutePrice.d.ts +2 -4
- package/dist/types/hooks/Swap/useForecastSlippageList.d.ts +0 -6
- package/dist/types/hooks/Swap/usePrivacySwapStatus.d.ts +10 -0
- package/dist/types/hooks/Swap/useSlippageLimit.d.ts +2 -2
- package/dist/types/hooks/Swap/useSwapSettingStore.d.ts +3 -5
- package/dist/types/hooks/Swap/useSwapSlippage.d.ts +0 -6
- package/dist/types/hooks/Swap/useSwitchToSupplierChain.d.ts +13 -0
- package/dist/types/hooks/Swap/useTradeSwapOrderList.d.ts +34 -133
- package/dist/types/hooks/Token/type.d.ts +3 -2
- package/dist/types/hooks/Token/useInitTokenList.d.ts +2 -2
- package/dist/types/hooks/Token/useSelectChainList.d.ts +5 -5
- package/dist/types/hooks/Token/useTokenList.d.ts +4 -8
- package/dist/types/hooks/Token/useTokenListDefaultToken.d.ts +2 -2
- package/dist/types/hooks/Token/useTokenListFetchBalance.d.ts +1 -4
- package/dist/types/hooks/Token/useTokenStatus.d.ts +28 -2
- package/dist/types/hooks/contract/useFetchETHBalance.d.ts +2 -1
- package/dist/types/hooks/contract/useFetchMultiTokensForSingleChain.d.ts +20 -0
- package/dist/types/hooks/contract/useFetchTokens.d.ts +9 -4
- package/dist/types/hooks/useAddressValidation.d.ts +2 -0
- package/dist/types/hooks/useGlobalState.d.ts +2 -0
- package/dist/types/hooks/useGraphQLRequests.d.ts +0 -1
- package/dist/types/hooks/useMessageState.d.ts +2 -1
- package/dist/types/hooks/useRouteVisionData.d.ts +17 -1
- package/dist/types/hooks/useTokenState.d.ts +3 -18
- package/dist/types/index.d.ts +27 -35
- package/dist/types/router/types.d.ts +5 -0
- package/dist/types/utils/CaipNetworksUtil.d.ts +5 -0
- package/dist/types/utils/address.d.ts +1 -1
- package/dist/types/utils/btc.d.ts +42 -0
- package/dist/types/utils/constants.d.ts +2 -0
- package/dist/types/utils/index.d.ts +2 -2
- package/dist/types/utils/reown-types.d.ts +28 -0
- package/dist/types/utils/solana.d.ts +7 -0
- package/dist/types/utils/token.d.ts +1 -1
- package/dist/types/utils/ton.d.ts +3 -0
- package/dist/types/utils/wallet.d.ts +2 -0
- package/dist/types/utils/zetachain_btc_test.d.ts +5 -0
- package/dist/types/widgets/MiningWidget/MiningCreate/hooks/useCreateMining.d.ts +1 -1
- package/dist/types/widgets/MiningWidget/hooks/usePrevious.d.ts +1 -1
- package/dist/types/widgets/MiningWidget/hooks/useRewardListAmount.d.ts +1 -1
- package/dist/types/widgets/PoolWidget/AMMV2Create/Ratio.d.ts +1 -4
- package/dist/types/widgets/PoolWidget/AMMV2Create/Setting.d.ts +16 -0
- package/dist/types/widgets/PoolWidget/AMMV3/AddLiquidityV3.d.ts +2 -1
- package/dist/types/widgets/PoolWidget/AMMV3/components/LiquidityChartRangeInput/hooks.d.ts +3 -1
- package/dist/types/widgets/PoolWidget/AMMV3/components/LiquidityChartRangeInput/index.d.ts +3 -1
- package/dist/types/widgets/PoolWidget/AMMV3/components/LiquidityChartRangeInput/usePrevious.d.ts +1 -1
- package/dist/types/widgets/PoolWidget/AMMV3/components/RangeSetList.d.ts +4 -0
- package/dist/types/widgets/PoolWidget/AMMV3/components/TokenPairSelect.d.ts +3 -1
- package/dist/types/widgets/PoolWidget/AMMV3/hooks/usePoolTickData.d.ts +1 -1
- package/dist/types/widgets/PoolWidget/AMMV3/hooks/useV3DerivedMintInfo.d.ts +4 -1
- package/dist/types/widgets/PoolWidget/AMMV3/reducer.d.ts +4 -1
- package/dist/types/widgets/PoolWidget/PoolCreate/components/BaseInfoCardList.d.ts +1 -3
- package/dist/types/widgets/PoolWidget/PoolCreate/components/FeeRateCard.d.ts +1 -2
- package/dist/types/widgets/PoolWidget/PoolCreate/components/LqRatioSet.d.ts +1 -2
- package/dist/types/widgets/PoolWidget/PoolCreate/components/LqSettingsShow.d.ts +1 -3
- package/dist/types/widgets/PoolWidget/PoolCreate/components/PriceModeCard.d.ts +1 -3
- package/dist/types/widgets/PoolWidget/PoolCreate/components/VersionChartExample.d.ts +1 -2
- package/dist/types/widgets/PoolWidget/PoolCreate/components/widgets.d.ts +1 -2
- package/dist/types/widgets/PoolWidget/PoolCreate/hooks/useDefaultTokens.d.ts +2 -2
- package/dist/types/widgets/PoolWidget/PoolCreate/hooks/usePriceInit.d.ts +1 -2
- package/dist/types/widgets/PoolWidget/PoolCreate/hooks/useVersionList.d.ts +4 -4
- package/dist/types/widgets/PoolWidget/PoolCreate/index.d.ts +1 -3
- package/dist/types/widgets/PoolWidget/PoolCreate/operate-widgets/InitPriceSetting.d.ts +1 -2
- package/dist/types/widgets/PoolWidget/PoolCreate/operate-widgets/PriceModeSetting.d.ts +1 -2
- package/dist/types/widgets/PoolWidget/PoolCreate/operate-widgets/VersionSelect.d.ts +1 -2
- package/dist/types/widgets/PoolWidget/PoolCreate/utils.d.ts +1 -1
- package/dist/types/widgets/PoolWidget/PoolDetail/components/MoreDetail/ParametersTable.d.ts +1 -1
- package/dist/types/widgets/PoolWidget/PoolDetail/components/MoreDetail/index.d.ts +1 -2
- package/dist/types/widgets/PoolWidget/PoolDetail/components/Overview.d.ts +1 -2
- package/dist/types/widgets/PoolWidget/PoolDetail/components/TotalLiquidity.d.ts +1 -2
- package/dist/types/widgets/PoolWidget/PoolDetail/hooks/useLiquidityProviders.d.ts +0 -6
- package/dist/types/widgets/PoolWidget/PoolDetail/hooks/usePoolDashboard.d.ts +0 -6
- package/dist/types/widgets/PoolWidget/PoolDetail/hooks/usePoolDayData.d.ts +0 -6
- package/dist/types/widgets/PoolWidget/PoolDetail/hooks/usePoolSwapList.d.ts +0 -6
- package/dist/types/widgets/PoolWidget/PoolDetail/index.d.ts +1 -2
- package/dist/types/widgets/PoolWidget/PoolList/AddLiquidity.d.ts +7 -5
- package/dist/types/widgets/PoolWidget/PoolList/MyCreated.d.ts +2 -7
- package/dist/types/widgets/PoolWidget/PoolList/MyLiquidity.d.ts +7 -5
- package/dist/types/widgets/PoolWidget/PoolList/components/FilterGroup.d.ts +11 -0
- package/dist/types/widgets/PoolWidget/PoolList/components/GoPoolDetailBtn.d.ts +3 -1
- package/dist/types/widgets/PoolWidget/PoolList/components/SortButtonGroup.d.ts +11 -0
- package/dist/types/widgets/PoolWidget/PoolList/components/TableSortButton.d.ts +6 -0
- package/dist/types/widgets/PoolWidget/PoolList/components/tags.d.ts +11 -0
- package/dist/types/widgets/PoolWidget/PoolList/hooks/usePoolListTabs.d.ts +14 -6
- package/dist/types/widgets/PoolWidget/PoolList/index.d.ts +8 -7
- package/dist/types/widgets/PoolWidget/PoolModify/index.d.ts +1 -2
- package/dist/types/widgets/PoolWidget/PoolOperate/AddPoolOperate.d.ts +2 -6
- package/dist/types/widgets/PoolWidget/PoolOperate/PoolOperateInner.d.ts +2 -4
- package/dist/types/widgets/PoolWidget/PoolOperate/RemovePoolOperate.d.ts +2 -4
- package/dist/types/widgets/PoolWidget/PoolOperate/components/OperateBtn.d.ts +1 -1
- package/dist/types/widgets/PoolWidget/PoolOperate/components/Ratio.d.ts +1 -5
- package/dist/types/widgets/PoolWidget/PoolOperate/components/SlippageSetting.d.ts +1 -1
- package/dist/types/widgets/PoolWidget/PoolOperate/hooks/useRemoveLiquidityTokenStatus.d.ts +49 -2
- package/dist/types/widgets/PoolWidget/PoolOperate/index.d.ts +2 -6
- package/dist/types/widgets/PoolWidget/PoolOperate/types.d.ts +0 -12
- package/dist/types/widgets/PoolWidget/curve/Add.d.ts +5 -0
- package/dist/types/widgets/PoolWidget/curve/AddOrRemove.d.ts +7 -0
- package/dist/types/widgets/PoolWidget/curve/AllPools.d.ts +13 -0
- package/dist/types/widgets/PoolWidget/curve/CurvePoolDetail.d.ts +5 -0
- package/dist/types/widgets/PoolWidget/curve/OperateDialog.d.ts +7 -0
- package/dist/types/widgets/PoolWidget/curve/Remove.d.ts +5 -0
- package/dist/types/widgets/PoolWidget/curve/components/ApyTooltip.d.ts +7 -0
- package/dist/types/widgets/PoolWidget/curve/components/CoinReservePieChart.d.ts +6 -0
- package/dist/types/widgets/PoolWidget/curve/components/CoinsLogoList.d.ts +7 -0
- package/dist/types/widgets/PoolWidget/curve/components/FilterAddressTags.d.ts +7 -0
- package/dist/types/widgets/PoolWidget/curve/components/LiquidityProvidersTable.d.ts +6 -0
- package/dist/types/widgets/PoolWidget/curve/components/OperateButtonContainer.d.ts +3 -0
- package/dist/types/widgets/PoolWidget/curve/components/ParametersTable.d.ts +5 -0
- package/dist/types/widgets/PoolWidget/curve/components/PoolTitle.d.ts +5 -0
- package/dist/types/widgets/PoolWidget/curve/components/PoolTotalStats.d.ts +5 -0
- package/dist/types/widgets/PoolWidget/curve/components/SlippageBonus.d.ts +3 -0
- package/dist/types/widgets/PoolWidget/curve/components/SwapsTable.d.ts +6 -0
- package/dist/types/widgets/PoolWidget/curve/components/TokenListPoolItem.d.ts +5 -0
- package/dist/types/widgets/PoolWidget/curve/hooks/useLiquidityProviders.d.ts +166 -0
- package/dist/types/widgets/PoolWidget/curve/hooks/useLpTokenBalances.d.ts +11 -0
- package/dist/types/widgets/PoolWidget/curve/hooks/usePoolDetail.d.ts +10 -0
- package/dist/types/widgets/PoolWidget/curve/hooks/usePoolListFilterTokenAndPool.d.ts +9 -0
- package/dist/types/widgets/PoolWidget/curve/hooks/usePoolSwapList.d.ts +166 -0
- package/dist/types/widgets/PoolWidget/curve/types.d.ts +44 -0
- package/dist/types/widgets/PoolWidget/curve/utils.d.ts +4 -0
- package/dist/types/widgets/PoolWidget/hooks/contract/useModifyDppPool.d.ts +1 -1
- package/dist/types/widgets/PoolWidget/hooks/useAMMV2AddLiquidity.d.ts +1 -1
- package/dist/types/widgets/PoolWidget/hooks/useAMMV2RemoveLiquidity.d.ts +1 -1
- package/dist/types/widgets/PoolWidget/hooks/usePoolDetail.d.ts +0 -6
- package/dist/types/widgets/PoolWidget/hooks/useUniV2Pairs.d.ts +1 -1
- package/dist/types/widgets/PoolWidget/utils.d.ts +4 -0
- package/package.json +161 -161
- package/dist/28442382d977858a.svg +0 -9
- package/dist/8de9a184d4ef0a11.svg +0 -6
- package/dist/assets/bundle-BBymdwHN.css +0 -65
- package/dist/b3f16b2626f03378.svg +0 -10
- package/dist/ed726d76d93d4899.svg +0 -10
- package/dist/helper-Ds_8_78g.cjs +0 -2
- package/dist/helper-Ds_8_78g.cjs.map +0 -1
- package/dist/helper-l9rrGqkT.js +0 -1
- package/dist/index-B6OsCe_1.cjs +0 -13
- package/dist/index-B6OsCe_1.cjs.map +0 -1
- package/dist/index-Bcqk1fMQ.cjs +0 -15
- package/dist/index-Bcqk1fMQ.cjs.map +0 -1
- package/dist/index-Bp_1xqpK.js +0 -14
- package/dist/index-BrLsqpSG.js +0 -12
- package/dist/index-DyKuKZOu.cjs +0 -79
- package/dist/index-DyKuKZOu.cjs.map +0 -1
- package/dist/index-bVmd7uFj.js +0 -78
- package/dist/index.cjs.map +0 -1
- package/dist/types/components/ConnectWallet/ConnectWalletDialog.d.ts +0 -4
- package/dist/types/components/ConnectWallet/OpenConnectWalletInfo.d.ts +0 -2
- package/dist/types/components/SubmittedDialog.d.ts +0 -7
- package/dist/types/components/Swap/components/ConnectWallet/index.d.ts +0 -5
- package/dist/types/components/Swap/components/SwapPreviewInfoCard.d.ts +0 -7
- package/dist/types/components/SwitchChainDialog/index.d.ts +0 -6
- package/dist/types/components/TokenPicker/ImportToken.d.ts +0 -6
- package/dist/types/components/TokenPicker/TokenDetailInfo.d.ts +0 -6
- package/dist/types/hooks/ConnectWallet/Connectors/JsonRpcConnector.d.ts +0 -9
- package/dist/types/hooks/ConnectWallet/useWalletInfo.d.ts +0 -8
- package/dist/types/hooks/ConnectWallet/useWeb3Connectors.d.ts +0 -17
- package/dist/types/hooks/ConnectWallet/web3.d.ts +0 -10
- package/dist/types/hooks/Token/useFindTokenByAddress.test.d.ts +0 -1
- package/dist/types/hooks/Token/useSelectChainList.test.d.ts +0 -1
- package/dist/types/hooks/Token/useTokenList.test.d.ts +0 -1
- package/dist/types/hooks/Token/useTokenStatus.test.d.ts +0 -1
- package/dist/types/widgets/PoolWidget/PoolList/components/OnlyV3Toggle.d.ts +0 -7
- package/dist/types/widgets/PoolWidget/hooks/usePoolListMyLiquidity.d.ts +0 -15
- /package/dist/types/hooks/{Bridge/useFetchRoutePriceBridge.test.d.ts → useAddressValidation.test.d.ts} +0 -0
- /package/dist/types/{widgets/MiningWidget/hooks → hooks}/useRefetch.d.ts +0 -0
- /package/dist/types/{hooks/Chain/useChainList.test.d.ts → tests/1-get-account-state.d.ts} +0 -0
- /package/dist/types/{hooks/Swap/useFetchFiatPrice.test.d.ts → tests/1-send-ton.d.ts} +0 -0
- /package/dist/types/{hooks/Swap/useFetchRoutePrice.test.d.ts → utils/sui_test.d.ts} +0 -0
- /package/dist/types/{hooks/Swap/useMarginAmount.test.d.ts → utils/ton_test.d.ts} +0 -0
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
<svg width="54" height="54" viewBox="0 0 54 54" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
2
|
-
<rect width="54" height="54" fill="white"/>
|
|
3
|
-
<rect width="54" height="54" fill="url(#pattern0)"/>
|
|
4
|
-
<defs>
|
|
5
|
-
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
|
|
6
|
-
<use xlink:href="#image0_991_13609" transform="scale(0.0025)"/>
|
|
7
|
-
</pattern>
|
|
8
|
-
<image id="image0_991_13609" width="400" height="400" xlink:href="data:image/png;base64,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EAACQNAAGkADWhoAIAhHSzguR02knagfDZjRAAABIAAEDaABNKClAQCCcLSEQwRnJoLDjtjRZQ0AEAACQNAAGkADWhoAIAhHSzguR02knagfDZjRAAABIAAEDaABNKClAQCCcLSEQwRnJoLDjtjRZQ0AEAACQNAAGkADWhoAIAhHSzguR02knagfDZjRAAABIAAEDaABNKClAQCCcLSEQwRnJoLDjtjRZQ0AEAACQNAAGkADWhoAIAhHSzguR02knagfDZjRAAABIAAEDaABNKClAQCCcLSEQwRnJoLDjtjRZQ0AEAACQNAAGkADWhoAIAhHSzguR02knagfDZjRAAABIAAEDaABNKClAQCCcLSEQwRnJoLDjtjRZQ0AEAACQNAAGkADWhoAIAhHSzguR02knagfDZjRAAABIAAEDaABNKClAQCCcLSEQwRnJoLDjtjRZQ0AEAACQNAAGkADWhoAIAhHSzguR02knagfDZjRAAABIAAEDaABNKClAQCCcLSEQwRnJoLDjtjRZQ0AEAACQNAAGkADWhoAIAhHSzguR02knagfDZjRAAABIAAEDaABNKClAQCCcLSEQwRnJoLDjtjRZQ0AEAACQNAAGkADWhoAIAhHSzguR02knagfDZjRAAABIAAEDaABNKClAQCCcLSEQwRnJoLDjtjRZQ0AEAACQNAAGkADWhoAIAhHSzguR02knagfDZjRAAABIAAEDaABNKClAQCCcLSEQwRnJoLDjtjRZQ0AEAACQNAAGkADWhoAIAhHSzguR02knagfDZjRAAABIAAEDaABNKClAQCCcLSEQwRnJoLDjtjRZQ38L1C82lLQR69UAAAAAElFTkSuQmCC"/>
|
|
9
|
-
</defs>
|
|
10
|
-
</svg>
|
package/dist/helper-Ds_8_78g.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("@lingui/core"),t=require("bignumber.js"),i=require("./index-Bcqk1fMQ.cjs");function o(e){let t=e.toLowerCase();if(t&&/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(t)){if(4===t.length){let e="#";for(let i=1;i<4;i+=1)e+=t.slice(i,i+1).concat(t.slice(i,i+1));t=e}const e=[];for(let i=1;i<7;i+=2)e.push(parseInt(`0x${t.slice(i,i+2)}`));return e.join(",")}return t}function r({val:e,model:i}){let o=e;if(e.isNaN())return{side:"no-one",vert:new t(0),base:new t(0),quote:new t(0)};i.Q0.eq(0)&&e.lt(i.i)&&(o=i.i),i.B0.eq(0)&&e.gt(i.i)&&(o=i.i);const r=i.getPriceDepth(o),n=r.baseAmount,l=r.quoteAmount,{isBuy:s}=r;return{side:s?"ask":"bid",vert:s?n:l,base:n,quote:l}}function n(e,i=1){return new t(i).div(e/2)}exports.baseZoomMultiples=1,exports.beforePriceImpactEffect=function({currentBaseMinAndZoomMultiples:e,targetPrice:i,midPrice:o,width:r}){const{baseMin:n,zoomMultiples:l}=e,s=new t(Math.log10(n.div(o).toNumber())),u=s.plus(2*l),a=new t(o.multipliedBy(10**u.toNumber()));if(i.gte(n)&&i.lte(a)){return{isSkip:!0,targetX:new t(Math.log10(i.div(o).toNumber())).minus(s).div(2*l).multipliedBy(r).toNumber(),baseMin:new t(0),zoomMultiples:1}}const m=new t(o.multipliedBy(.1)),p=new t(o.multipliedBy(10));if(i.gte(m)&&i.lte(p)){return{isSkip:!1,targetX:new t(Math.log10(i.div(o).toNumber())).minus(-1).div(2).multipliedBy(r).toNumber(),baseMin:m,zoomMultiples:1}}return{isSkip:!1,targetX:-1,baseMin:new t(0),zoomMultiples:1}},exports.chartOffsetYBCToolTip=18,exports.chartT=function(t,i){switch(t){case"depth-chart.tips.buy":return e.i18n._({id:"Es4ccw",message:"Users pay {0} {1} and receive {2} {3}\nPrice {4} ({5}%)",values:{0:i.amountText,1:i.baseTokenSymbol,2:i.oppositeAmountText,3:i.quoteTokenSymbol,4:i.priceText,5:i.slippageText}});case"depth-chart.tips.mid-price":return e.i18n._({id:"cnbRVW",message:"Initial Price {0} {1} = {2} {3}",values:{0:i.amountText,1:i.baseTokenSymbol,2:i.oppositeAmountText,3:i.quoteTokenSymbol}});case"depth-chart.tips.sell":return e.i18n._({id:"Es4ccw",message:"Users pay {0} {1} and receive {2} {3}\nPrice {4} ({5}%)",values:{0:i.oppositeAmountText,1:i.quoteTokenSymbol,2:i.amountText,3:i.baseTokenSymbol,4:i.priceText,5:i.slippageText}});case"pool.chart.buy-amount":return e.i18n._({id:"NjQ1e3",message:"Users sell {0} amount: ",values:{0:i.symbol}});case"pool.chart.price-impact":return e.i18n._({id:"I0LXan",message:"Price Impact: {0}",values:{0:i.amount}});case"pool.chart.sell-amount":return e.i18n._({id:"WJ94b8",message:"Users buy {0} amount: ",values:{0:i.symbol}});case"pool.create.disabled-token-amount":return e.i18n._({id:"5QDjef",message:"The token amount is calculated by initial price."});case"pool.create.set-pool.emulator.title":return e.i18n._({id:"FQfStS",message:"Emulator"});case"pool.create.set-pool.emulator.title.question":return e.i18n._({id:"9D2g7k",message:"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only."});case"pool.chart.liquidity-chart-tip":return e.i18n._({id:"GhrVog",message:"The area of the chart indicates the buy/sell volume of {0} that can be carried by the market when the current price changes to the hover price. ",values:{0:i.baseTokenSymbol}});case"pool.chart.liquidity-chart-buy":return e.i18n._({id:"TvH4Ym",message:"Bought {0} {1}, price in the pool decreased to {2}",values:{0:i.amount,1:i.symbol,2:i.price}});case"pool.chart.liquidity-chart-sell":return e.i18n._({id:"0O1wzf",message:"Traders sold {0} {1}, price in the pool increased to {2}",values:{0:i.amount,1:i.symbol,2:i.price}});default:throw new Error(`Unknown key ${t}`)}},exports.colorRgb=o,exports.computeBaseAfterZoom=function({midPrice:e,zoomMultiples:t}){return e.multipliedBy(10**-t)},exports.computeBaseMinByDistance=function({dragDistance:e,prevBaseMin:i,chartWidth:o,zoomMultiples:r}){const l=n(o,r);return e>0?i.multipliedBy(1-l.multipliedBy(e).toNumber()):i.multipliedBy(10**l.multipliedBy(new t(e).abs()).plus(0).toNumber())},exports.computeBaseVert=function({midPrice:e,q:i,q0:o,pmmModel:r}){let n=t.maximum(i,o,r.B.multipliedBy(e));return n.isNaN()&&(n=new t(10)),n.eq(0)&&(n=new t(1)),{buyBaseVert:n.multipliedBy(1.2),sellBaseVert:n.div(e).multipliedBy(1.2)}},exports.computeTargetXByTargetPrice=function({type:e,targetPrice:i,midPrice:o,width:r}){if("sell"===e){return{zoomMultiples:new t(Math.log10(i.div(o).toNumber())).minus(0).div(3/4).abs(),targetX:r/2*(3/4)+r/2}}const n=new t(Math.log10(i.div(o).toNumber()));return{zoomMultiples:new t(0).minus(n).div(3/4).abs(),targetX:r/2*(1/4)}},exports.computeXPortion=n,exports.computeZoomMultiplesWhenZoom=function({prevZoomMultiples:e,zoomIn:t}){return!t&&e<=.1?e:t?e+.1:e-.1},exports.evalPoint=r,exports.labelPadding=12,exports.updateTooltip=function({tooltip:e,x:l,chartWidth:s,chartHeight:u,buyBaseVert:a,sellBaseVert:m,pmmModel:p,midPrice:c,baseTokenSymbol:d,quoteTokenSymbol:h,t:b,baseMinAndZoomMultiples:f,isHover:g,color:y,leftColor:x,rightColor:T}){const{zoomMultiples:v,baseMin:w}=f,B=n(s,v),M=a.div(u),k=m.div(u),N=2*v,q=w.multipliedBy(10**B.multipliedBy(l).toNumber());let S=new t(Math.log(c.div(w).toNumber())/Math.log(10));S=t.minimum(N,S),S=t.maximum(0,S);const P=S.div(B),A=r({val:q,model:p});if(A.vert.isNaN())return;const X=q.lt(c);let O=u-A.vert.div(M).toNumber();X||(O=u-A.vert.div(k).toNumber());const _=i.formatShortNumber(q),z=i.formatShortNumber(A.vert),$=q.minus(c).abs().div(c).multipliedBy(100).toFixed(2),D=P.toNumber(),V=e.findOne("#toolTipVertLine"),L=e.findOne("#toolTipHoriLine"),W=e.findOne("#joinCircle"),H=e.findOne("#toolTip"),Z=e.findOne("#priceTextLabel"),j=e.findOne("#slippageTextLabel");if(!H)return;H.x(l),H.y(O-5-6);const I=H.getText(),U=H.getTag();let Y="ask"===A.side?i.formatShortNumber(A.quote):i.formatShortNumber(A.base);const C=p.k.lte(0);C&&(Y=z);const E=i.formatShortNumber(c),F={amountText:z,baseTokenSymbol:d,oppositeAmountText:Y,quoteTokenSymbol:h,priceText:C?E:_,slippageText:`${X?"-":"+"}${$}`};if(P.minus(4).lte(l)&&P.plus(2).gte(l)&&g)I.text(b("depth-chart.tips.mid-price",{amountText:1,baseTokenSymbol:d,oppositeAmountText:E,quoteTokenSymbol:h})),H.x(D),H.y(u/2),null==V||V.hide(),null==L||L.hide(),null==W||W.hide(),null==Z||Z.hide(),null==j||j.hide();else{I.text(X?b("depth-chart.tips.buy",{amountText:Y,baseTokenSymbol:d,oppositeAmountText:z,quoteTokenSymbol:h,priceText:C?E:_,slippageText:`${X?"-":"+"}${$}`}):b("depth-chart.tips.sell",F));const e=y||(X?"#55f6db":"#ff4f73"),t=X?x||"#55f6db":T||"#ff4f73";I.fill(e),H.width()/2>l?(U.pointerDirection("left"),U.pointerHeight(15),U.pointerWidth(8),H.offsetX(-11),H.offsetY(-11)):H.width()/2+l>s?(U.pointerDirection("right"),U.pointerHeight(15),U.pointerWidth(8),H.offsetX(11),H.offsetY(-11)):(U.pointerDirection("down"),U.pointerHeight(8),U.pointerWidth(15),H.offsetX(0),H.offsetY(0)),null==V||V.points([l,u,l,O]),null==V||V.stroke(t),null==L||L.points(X?[l,O,D,O]:[D,O,l,O]),null==L||L.stroke(t),null==W||W.x(l),null==W||W.y(O),null==W||W.fill(X?x||"rgb(86, 246, 218)":T||"#FF5072"),null==W||W.stroke(X?x?`rgba(${o(x)}, 0.4)`:"rgba(86, 246, 218, 0.3)":T?`rgba(${o(T)}, 0.4)`:"rgba(255, 80, 114, 0.3)"),Z&&(Z.x(l),Z.y(u),Z.offsetX(Z.width()/2),Z.x()-Z.width()/2<0?Z.x(Z.width()/2):Z.x()+Z.width()/2>s?Z.x(s-Z.width()/2):Z.x(l));const i=null==Z?void 0:Z.findOne("#priceTextLabel-text");i&&(i.fill(e),i.text(_)),j&&(j.x(X?l+(D-l)/2:l-(l-D)/2),j.y(O),j.offsetY(j.height()/2),j.offsetX(j.width()/2));const r=null==j?void 0:j.findOne("#slippageTextLabel-text");r&&(r.fill(e),r.text(`${X?"-":"+"}${$}%`)),null==V||V.show(),null==L||L.show(),null==W||W.show(),null==Z||Z.show(),null==j||j.show()}e.show()};
|
|
2
|
-
//# sourceMappingURL=helper-Ds_8_78g.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helper-Ds_8_78g.cjs","sources":["../src/components/chart/depth-chart/helper.ts","../src/components/chart/utils.ts","../src/components/chart/i18n.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\r\nimport Konva from 'konva';\r\nimport { formatShortNumber } from '../../../utils/formatter';\r\nimport { PMMModel } from '@dodoex/api';\r\n\r\nexport function colorRgb(str: string) {\r\n let sColor = str.toLowerCase();\r\n // Regular expression for hexadecimal color values\r\n const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;\r\n // If it is a hexadecimal color\r\n if (sColor && reg.test(sColor)) {\r\n if (sColor.length === 4) {\r\n let sColorNew = '#';\r\n for (let i = 1; i < 4; i += 1) {\r\n sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));\r\n }\r\n sColor = sColorNew;\r\n }\r\n // Handle six-bit color values\r\n const sColorChange = [];\r\n for (let i = 1; i < 7; i += 2) {\r\n sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`));\r\n }\r\n return sColorChange.join(',');\r\n }\r\n return sColor;\r\n}\r\n\r\nexport type EvaluatedPoint = {\r\n side: 'bid' | 'ask' | 'no-one';\r\n vert: BigNumber;\r\n base: BigNumber;\r\n quote: BigNumber;\r\n};\r\n\r\nexport type BaseMinAndZoomMultiples = {\r\n baseMin: BigNumber;\r\n zoomMultiples: number;\r\n /** Price impact point active display hover */\r\n targetMarginPriceX: number;\r\n};\r\n\r\nexport function evalPoint({\r\n val,\r\n model,\r\n}: // midPrice,\r\n{\r\n val: BigNumber;\r\n model: PMMModel;\r\n midPrice: BigNumber;\r\n}): EvaluatedPoint {\r\n let v = val;\r\n if (val.isNaN()) {\r\n return {\r\n side: 'no-one',\r\n vert: new BigNumber(0),\r\n base: new BigNumber(0),\r\n quote: new BigNumber(0),\r\n };\r\n }\r\n // If Q0=0, the minimum value of the abscissa must be greater than or equal to i. If the abscissa input is less than i, the vertical axis value when the abscissa is i is returned.\r\n // If B0=0, the maximum value of the abscissa must be less than or equal to i. If the abscissa input is greater than i, the vertical axis value when the abscissa is i is returned.\r\n if (model.Q0.eq(0) && val.lt(model.i)) {\r\n v = model.i;\r\n }\r\n if (model.B0.eq(0) && val.gt(model.i)) {\r\n v = model.i;\r\n }\r\n\r\n const resp = model.getPriceDepth(v);\r\n const base = resp.baseAmount;\r\n const quote = resp.quoteAmount;\r\n const { isBuy } = resp;\r\n\r\n return {\r\n side: isBuy ? 'ask' : 'bid',\r\n // vert: isBuy ? base.multipliedBy(midPrice) : quote,\r\n vert: isBuy ? base : quote,\r\n base,\r\n quote,\r\n };\r\n}\r\n\r\n/**\r\n * Returns two vertical coordinates, buyBaseVert on the left and sellBaseVert on the right.\r\n * @param param0\r\n */\r\nexport function computeBaseVert({\r\n midPrice,\r\n q,\r\n q0,\r\n pmmModel,\r\n}: {\r\n midPrice: BigNumber;\r\n q: number;\r\n q0: number;\r\n pmmModel: PMMModel;\r\n}) {\r\n let baseVert = BigNumber.maximum(q, q0, pmmModel.B.multipliedBy(midPrice));\r\n // Special handling to avoid exceptions\r\n if (baseVert.isNaN()) {\r\n baseVert = new BigNumber(10);\r\n }\r\n if (baseVert.eq(0)) {\r\n baseVert = new BigNumber(1);\r\n }\r\n return {\r\n buyBaseVert: baseVert.multipliedBy(1.2),\r\n sellBaseVert: baseVert.div(midPrice).multipliedBy(1.2),\r\n };\r\n}\r\n\r\n/**\r\n * // 1000/800 The price represented by one pixel\r\n // Maximum value on the right side of the middle price = middle price * 10 = middle price * 10^1\r\n // Calculate the x-axis coordinate (price): middle price*10^(xPortion*x)+middle price; x is the number of equal parts that divide the right half into 50 parts\r\n * @param chartWidth icon width\r\n * @param zoomMultiples magnification factors\r\n * @returns\r\n */\r\nexport function computeXPortion(chartWidth: number, zoomMultiples = 1) {\r\n return new BigNumber(zoomMultiples).div(chartWidth / 2);\r\n}\r\n\r\nexport function updateTooltip({\r\n tooltip,\r\n x,\r\n chartWidth,\r\n chartHeight,\r\n buyBaseVert,\r\n sellBaseVert,\r\n pmmModel,\r\n midPrice,\r\n baseTokenSymbol,\r\n quoteTokenSymbol,\r\n t,\r\n baseMinAndZoomMultiples,\r\n isHover,\r\n color,\r\n leftColor,\r\n rightColor,\r\n}: {\r\n x: number;\r\n tooltip: Konva.Layer;\r\n chartWidth: number;\r\n chartHeight: number;\r\n buyBaseVert: BigNumber;\r\n sellBaseVert: BigNumber;\r\n pmmModel: PMMModel;\r\n midPrice: BigNumber;\r\n baseTokenSymbol: string;\r\n quoteTokenSymbol: string;\r\n t: any;\r\n baseMinAndZoomMultiples: BaseMinAndZoomMultiples;\r\n // The middle price is only displayed when hovering\r\n isHover?: boolean;\r\n // text color\r\n color?: string;\r\n // main color of base\r\n leftColor?: string;\r\n // main color of quote\r\n rightColor?: string;\r\n}) {\r\n const { zoomMultiples, baseMin } = baseMinAndZoomMultiples;\r\n const xPortion = computeXPortion(chartWidth, zoomMultiples);\r\n const buyYPortion = buyBaseVert.div(chartHeight);\r\n const sellYPortion = sellBaseVert.div(chartHeight);\r\n\r\n const multiplesNum = zoomMultiples * 2;\r\n\r\n const price = baseMin.multipliedBy(10 ** xPortion.multipliedBy(x).toNumber());\r\n let midPriceN = new BigNumber(\r\n Math.log(midPrice.div(baseMin).toNumber()) / Math.log(10),\r\n );\r\n midPriceN = BigNumber.minimum(multiplesNum, midPriceN);\r\n midPriceN = BigNumber.maximum(0, midPriceN);\r\n const xMidPrice = midPriceN.div(xPortion);\r\n const result = evalPoint({ val: price, model: pmmModel, midPrice });\r\n if (result.vert.isNaN()) {\r\n return;\r\n }\r\n\r\n const isQuote = price.lt(midPrice);\r\n\r\n let yy = chartHeight - result.vert.div(buyYPortion).toNumber();\r\n if (!isQuote) {\r\n yy = chartHeight - result.vert.div(sellYPortion).toNumber();\r\n }\r\n\r\n const priceText = formatShortNumber(price);\r\n const amountText = formatShortNumber(result.vert);\r\n const slippageText = price\r\n .minus(midPrice)\r\n .abs()\r\n .div(midPrice)\r\n .multipliedBy(100)\r\n .toFixed(2);\r\n const xMidPriceText = xMidPrice.toNumber();\r\n\r\n const toolTipVertLine = tooltip.findOne<Konva.Line>('#toolTipVertLine');\r\n const toolTipHoriLine = tooltip.findOne<Konva.Line>('#toolTipHoriLine');\r\n const joinCircle = tooltip.findOne<Konva.Line>('#joinCircle');\r\n const tooltipLabel = tooltip.findOne<Konva.Label>('#toolTip');\r\n const priceTextLabel = tooltip.findOne<Konva.Label>('#priceTextLabel');\r\n const slippageTextLabel = tooltip.findOne<Konva.Label>('#slippageTextLabel');\r\n\r\n if (!tooltipLabel) {\r\n return;\r\n }\r\n\r\n tooltipLabel.x(x);\r\n // yy + radius of intersection circle + border of intersection circle\r\n tooltipLabel.y(yy - 5 - 6);\r\n const toolTipText = tooltipLabel.getText();\r\n const toolTipTag = tooltipLabel.getTag();\r\n let oppositeAmountText =\r\n result.side === 'ask'\r\n ? formatShortNumber(result.quote)\r\n : formatShortNumber(result.base);\r\n const isZeroK = pmmModel.k.lte(0);\r\n if (isZeroK) {\r\n oppositeAmountText = amountText;\r\n }\r\n const midPriceText = formatShortNumber(midPrice);\r\n const tipTextParams = {\r\n amountText,\r\n baseTokenSymbol,\r\n oppositeAmountText,\r\n quoteTokenSymbol,\r\n priceText: isZeroK ? midPriceText : priceText,\r\n slippageText: `${isQuote ? '-' : '+'}${slippageText}`,\r\n };\r\n if (xMidPrice.minus(4).lte(x) && xMidPrice.plus(2).gte(x) && isHover) {\r\n // midPrice hover\r\n toolTipText.text(\r\n t('depth-chart.tips.mid-price', {\r\n amountText: 1,\r\n baseTokenSymbol,\r\n oppositeAmountText: midPriceText,\r\n quoteTokenSymbol,\r\n }),\r\n );\r\n tooltipLabel.x(xMidPriceText);\r\n tooltipLabel.y(chartHeight / 2);\r\n\r\n toolTipVertLine?.hide();\r\n toolTipHoriLine?.hide();\r\n joinCircle?.hide();\r\n priceTextLabel?.hide();\r\n slippageTextLabel?.hide();\r\n } else {\r\n toolTipText.text(\r\n isQuote\r\n ? t('depth-chart.tips.buy', {\r\n amountText: oppositeAmountText,\r\n baseTokenSymbol,\r\n oppositeAmountText: amountText,\r\n quoteTokenSymbol,\r\n priceText: isZeroK ? midPriceText : priceText,\r\n slippageText: `${isQuote ? '-' : '+'}${slippageText}`,\r\n })\r\n : t('depth-chart.tips.sell', tipTextParams),\r\n );\r\n const textColor = color || (isQuote ? '#55f6db' : '#ff4f73');\r\n const lineColor = isQuote\r\n ? leftColor || '#55f6db'\r\n : rightColor || '#ff4f73';\r\n toolTipText.fill(textColor);\r\n\r\n if (tooltipLabel.width() / 2 > x) {\r\n toolTipTag.pointerDirection('left');\r\n toolTipTag.pointerHeight(15);\r\n toolTipTag.pointerWidth(8);\r\n tooltipLabel.offsetX(-(5 + 6));\r\n tooltipLabel.offsetY(-(5 + 6));\r\n } else if (tooltipLabel.width() / 2 + x > chartWidth) {\r\n toolTipTag.pointerDirection('right');\r\n toolTipTag.pointerHeight(15);\r\n toolTipTag.pointerWidth(8);\r\n tooltipLabel.offsetX(5 + 6);\r\n tooltipLabel.offsetY(-(5 + 6));\r\n } else {\r\n // @ts-ignore\r\n toolTipTag.pointerDirection('down');\r\n toolTipTag.pointerHeight(8);\r\n toolTipTag.pointerWidth(15);\r\n tooltipLabel.offsetX(0);\r\n tooltipLabel.offsetY(0);\r\n }\r\n\r\n toolTipVertLine?.points([x, chartHeight, x, yy]);\r\n toolTipVertLine?.stroke(lineColor);\r\n\r\n toolTipHoriLine?.points(\r\n isQuote ? [x, yy, xMidPriceText, yy] : [xMidPriceText, yy, x, yy],\r\n );\r\n toolTipHoriLine?.stroke(lineColor);\r\n\r\n joinCircle?.x(x);\r\n joinCircle?.y(yy);\r\n joinCircle?.fill(\r\n isQuote ? leftColor || 'rgb(86, 246, 218)' : rightColor || '#FF5072',\r\n );\r\n joinCircle?.stroke(\r\n // eslint-disable-next-line no-nested-ternary\r\n isQuote\r\n ? leftColor\r\n ? `rgba(${colorRgb(leftColor)}, 0.4)`\r\n : 'rgba(86, 246, 218, 0.3)'\r\n : rightColor\r\n ? `rgba(${colorRgb(rightColor)}, 0.4)`\r\n : 'rgba(255, 80, 114, 0.3)',\r\n );\r\n\r\n if (priceTextLabel) {\r\n priceTextLabel.x(x);\r\n priceTextLabel.y(chartHeight);\r\n priceTextLabel.offsetX(priceTextLabel.width() / 2);\r\n if (priceTextLabel.x() - priceTextLabel.width() / 2 < 0) {\r\n priceTextLabel.x(priceTextLabel.width() / 2);\r\n } else if (priceTextLabel.x() + priceTextLabel.width() / 2 > chartWidth) {\r\n priceTextLabel.x(chartWidth - priceTextLabel.width() / 2);\r\n } else {\r\n priceTextLabel.x(x);\r\n }\r\n }\r\n\r\n const priceTextLabelText = priceTextLabel?.findOne<Konva.Text>(\r\n '#priceTextLabel-text',\r\n );\r\n if (priceTextLabelText) {\r\n priceTextLabelText.fill(textColor);\r\n priceTextLabelText.text(priceText);\r\n }\r\n\r\n if (slippageTextLabel) {\r\n slippageTextLabel.x(\r\n isQuote ? x + (xMidPriceText - x) / 2 : x - (x - xMidPriceText) / 2,\r\n );\r\n slippageTextLabel.y(yy);\r\n slippageTextLabel.offsetY(slippageTextLabel.height() / 2);\r\n slippageTextLabel.offsetX(slippageTextLabel.width() / 2);\r\n }\r\n const slippageTextLabelText = slippageTextLabel?.findOne<Konva.Text>(\r\n '#slippageTextLabel-text',\r\n );\r\n if (slippageTextLabelText) {\r\n slippageTextLabelText.fill(textColor);\r\n slippageTextLabelText.text(`${isQuote ? '-' : '+'}${slippageText}%`);\r\n }\r\n\r\n toolTipVertLine?.show();\r\n toolTipHoriLine?.show();\r\n joinCircle?.show();\r\n priceTextLabel?.show();\r\n slippageTextLabel?.show();\r\n }\r\n\r\n tooltip.show();\r\n}\r\n\r\n/**\r\n * Calculate the minimum value on the left by pulling distance or button click\r\n */\r\nexport function computeBaseMinByDistance({\r\n dragDistance,\r\n prevBaseMin,\r\n chartWidth,\r\n zoomMultiples,\r\n}: {\r\n dragDistance: number;\r\n prevBaseMin: BigNumber;\r\n chartWidth: number;\r\n zoomMultiples: number;\r\n}) {\r\n const xPortion = computeXPortion(chartWidth, zoomMultiples);\r\n if (dragDistance > 0) {\r\n return prevBaseMin.multipliedBy(\r\n 10 ** 0 - xPortion.multipliedBy(dragDistance).toNumber(),\r\n );\r\n }\r\n return prevBaseMin.multipliedBy(\r\n 10 **\r\n xPortion\r\n .multipliedBy(new BigNumber(dragDistance).abs())\r\n .plus(0)\r\n .toNumber(),\r\n );\r\n}\r\n\r\nexport const baseZoomMultiples = 1;\r\nexport function computeZoomMultiplesWhenZoom({\r\n prevZoomMultiples,\r\n zoomIn,\r\n}: {\r\n prevZoomMultiples: number;\r\n zoomIn: boolean;\r\n}) {\r\n if (!zoomIn) {\r\n if (prevZoomMultiples <= baseZoomMultiples * 0.1) {\r\n return prevZoomMultiples;\r\n }\r\n // The reduction ratio cannot exceed 0.001\r\n // if (prevZoomMultiples <= baseZoomMultiples * 0.1) {\r\n // if (prevZoomMultiples <= baseZoomMultiples * 0.01) {\r\n // if (prevZoomMultiples === baseZoomMultiples * 0.001) {\r\n // return prevZoomMultiples;\r\n // }\r\n // return prevZoomMultiples - baseZoomMultiples * 0.001;\r\n // }\r\n // return prevZoomMultiples - baseZoomMultiples * 0.01;\r\n // }\r\n }\r\n return zoomIn\r\n ? prevZoomMultiples + baseZoomMultiples * 0.1\r\n : prevZoomMultiples - baseZoomMultiples * 0.1;\r\n}\r\n\r\n/**\r\n * Given a price target corresponding to the abscissa, calculate the abscissa of the point\r\n * The buying impact point is at the left 1/4 position\r\n * The selling impact point is 3/4 on the right\r\n *\r\n * Returns a coordinate point, baseMin and zoomMultiples\r\n *\r\n * Take the initial state as the starting point, that is, midPrice * 10 ^ -1 as the starting point of the horizontal axis, and it is a left-right symmetrical state, that is, the logarithm of the horizontal axis is from -1 -> 0 -> 1\r\n *\r\n * type === 'sell'\r\n * targetPrice = midPrice * 10 ^ n\r\n * n = Math.log10(targetPrice / midPrice)\r\n * n = maxN * (3 / 4)\r\n *\r\n * If the new price is within the existing range, the zoom factor will not be adjusted (the price impact will not change the shape of the graph after graph scaling or translation)\r\n * If it is not within the current interval, check whether it is midPrice * 10 ^-1 and midPrice * 10^1. If you still do not adjust the zoom factor, hit the specified point directly, otherwise you need to adjust the zoom factor (avoid inputting extremely small values) The value cannot be scaled to the specified range, resulting in stuck)\r\n */\r\nexport function computeTargetXByTargetPrice({\r\n type,\r\n targetPrice,\r\n midPrice,\r\n width,\r\n}: {\r\n type: 'buy' | 'sell';\r\n targetPrice: BigNumber;\r\n midPrice: BigNumber;\r\n width: number;\r\n}) {\r\n if (type === 'sell') {\r\n const n = new BigNumber(Math.log10(targetPrice.div(midPrice).toNumber()));\r\n const maxN = n\r\n .minus(0)\r\n .div(3 / 4)\r\n .abs();\r\n const zoomMultiples = maxN;\r\n\r\n return {\r\n zoomMultiples,\r\n targetX: (width / 2) * (3 / 4) + width / 2,\r\n };\r\n }\r\n\r\n const n = new BigNumber(Math.log10(targetPrice.div(midPrice).toNumber()));\r\n const maxN = new BigNumber(0)\r\n .minus(n)\r\n .div(3 / 4)\r\n .abs();\r\n const zoomMultiples = maxN;\r\n\r\n return {\r\n zoomMultiples,\r\n targetX: (width / 2) * (1 / 4),\r\n };\r\n}\r\n\r\n/**\r\n * If the new price is within the existing range, the zoom factor will not be adjusted (the price impact will not change the shape of the graph after graph scaling or translation)\r\n * If it is not within the current interval, check whether it is midPrice * 10 ^-1 and midPrice * 10^1. If it is within the range, adjust the zoom factor to 1, and then impact to the specified point, otherwise you need to adjust the zoom factor ( Avoid entering extremely small values that may result in inability to scale to the specified range and cause stucks)\r\n *\r\n * Returns an abscissa and a flag indicating whether to skip\r\n */\r\nexport function beforePriceImpactEffect({\r\n currentBaseMinAndZoomMultiples,\r\n targetPrice,\r\n midPrice,\r\n width,\r\n}: {\r\n currentBaseMinAndZoomMultiples: BaseMinAndZoomMultiples;\r\n targetPrice: BigNumber;\r\n midPrice: BigNumber;\r\n width: number;\r\n}) {\r\n const { baseMin, zoomMultiples } = currentBaseMinAndZoomMultiples;\r\n const minN = new BigNumber(Math.log10(baseMin.div(midPrice).toNumber()));\r\n const maxN = minN.plus(zoomMultiples * 2);\r\n // price maximum\r\n const baseMax = new BigNumber(midPrice.multipliedBy(10 ** maxN.toNumber()));\r\n\r\n if (targetPrice.gte(baseMin) && targetPrice.lte(baseMax)) {\r\n const n = new BigNumber(Math.log10(targetPrice.div(midPrice).toNumber()));\r\n const targetX = n\r\n .minus(minN)\r\n .div(zoomMultiples * 2)\r\n .multipliedBy(width)\r\n .toNumber();\r\n return {\r\n isSkip: true,\r\n targetX,\r\n baseMin: new BigNumber(0),\r\n zoomMultiples: baseZoomMultiples,\r\n };\r\n }\r\n\r\n // 是否在 midPrice 范围内\r\n const defaultBaseMin = new BigNumber(\r\n midPrice.multipliedBy(10 ** -baseZoomMultiples),\r\n );\r\n const defaultBaseMax = new BigNumber(\r\n midPrice.multipliedBy(10 ** baseZoomMultiples),\r\n );\r\n if (targetPrice.gte(defaultBaseMin) && targetPrice.lte(defaultBaseMax)) {\r\n const n = new BigNumber(Math.log10(targetPrice.div(midPrice).toNumber()));\r\n const targetX = n\r\n .minus(-baseZoomMultiples)\r\n .div(baseZoomMultiples * 2)\r\n .multipliedBy(width)\r\n .toNumber();\r\n return {\r\n isSkip: false,\r\n targetX,\r\n baseMin: defaultBaseMin,\r\n zoomMultiples: baseZoomMultiples,\r\n };\r\n }\r\n\r\n return {\r\n isSkip: false,\r\n targetX: -1,\r\n baseMin: new BigNumber(0),\r\n zoomMultiples: baseZoomMultiples,\r\n };\r\n}\r\n\r\n/**\r\n * Recalculate baseMin after the zoom factor changes\r\n */\r\nexport function computeBaseAfterZoom({\r\n midPrice,\r\n zoomMultiples,\r\n}: {\r\n midPrice: BigNumber;\r\n zoomMultiples: number;\r\n}) {\r\n return midPrice.multipliedBy(10 ** -zoomMultiples);\r\n}\r\n","export const labelPadding = 12;\n// The distance between toolTip and the top of the column\nexport const toolTipMarginBottom = 6;\n\n// Since toolTip exceeds part of the drawing area, additional padding is required\nexport const chartOffsetYBCToolTip = labelPadding + toolTipMarginBottom;\n","import { t } from '@lingui/macro';\n\n// \\{\\{([A-Za-z]+)\\}\\} to ${params.$1}\nexport function chartT(key: string, params: any) {\n switch (key) {\n case 'depth-chart.tips.buy':\n return t`Users pay ${params.amountText} ${params.baseTokenSymbol} and receive ${params.oppositeAmountText} ${params.quoteTokenSymbol}\\nPrice ${params.priceText} (${params.slippageText}%)`;\n case 'depth-chart.tips.mid-price':\n return t`Initial Price ${params.amountText} ${params.baseTokenSymbol} = ${params.oppositeAmountText} ${params.quoteTokenSymbol}`;\n case 'depth-chart.tips.sell':\n return t`Users pay ${params.oppositeAmountText} ${params.quoteTokenSymbol} and receive ${params.amountText} ${params.baseTokenSymbol}\\nPrice ${params.priceText} (${params.slippageText}%)`;\n case 'pool.chart.buy-amount':\n return t`Users sell ${params.symbol} amount: `;\n case 'pool.chart.price-impact':\n return t`Price Impact: ${params.amount}`;\n case 'pool.chart.sell-amount':\n return t`Users buy ${params.symbol} amount: `;\n case 'pool.create.disabled-token-amount':\n return t`The token amount is calculated by initial price.`;\n case 'pool.create.set-pool.emulator.title':\n return t`Emulator`;\n case 'pool.create.set-pool.emulator.title.question':\n return t`The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only.`;\n\n // liquidity-chart\n case 'pool.chart.liquidity-chart-tip':\n return t`The area of the chart indicates the buy/sell volume of ${params.baseTokenSymbol} that can be carried by the market when the current price changes to the hover price. `;\n case 'pool.chart.liquidity-chart-buy':\n return t`Bought ${params.amount} ${params.symbol}, price in the pool decreased to ${params.price}`;\n case 'pool.chart.liquidity-chart-sell':\n return t`Traders sold ${params.amount} ${params.symbol}, price in the pool increased to ${params.price}`;\n default:\n throw new Error(`Unknown key ${key}`);\n }\n}\n"],"names":["colorRgb","str","sColor","toLowerCase","test","length","sColorNew","i","slice","concat","sColorChange","push","parseInt","join","evalPoint","val","model","v","isNaN","side","vert","BigNumber","base","quote","Q0","eq","lt","B0","gt","resp","getPriceDepth","baseAmount","quoteAmount","isBuy","computeXPortion","chartWidth","zoomMultiples","div","currentBaseMinAndZoomMultiples","targetPrice","midPrice","width","baseMin","minN","Math","log10","toNumber","maxN","plus","baseMax","multipliedBy","gte","lte","isSkip","targetX","minus","defaultBaseMin","defaultBaseMax","baseZoomMultiples","labelPadding","key","params","_i18n","_","id","message","values","0","amountText","1","baseTokenSymbol","2","oppositeAmountText","3","quoteTokenSymbol","4","priceText","5","slippageText","symbol","amount","price","Error","dragDistance","prevBaseMin","xPortion","abs","q","q0","pmmModel","baseVert","maximum","B","buyBaseVert","sellBaseVert","type","n","prevZoomMultiples","zoomIn","tooltip","x","chartHeight","t","baseMinAndZoomMultiples","isHover","color","leftColor","rightColor","buyYPortion","sellYPortion","multiplesNum","midPriceN","log","minimum","xMidPrice","result","isQuote","yy","formatShortNumber","toFixed","xMidPriceText","toolTipVertLine","findOne","toolTipHoriLine","joinCircle","tooltipLabel","priceTextLabel","slippageTextLabel","y","toolTipText","getText","toolTipTag","getTag","isZeroK","k","midPriceText","tipTextParams","text","hide","textColor","lineColor","fill","pointerDirection","pointerHeight","pointerWidth","offsetX","offsetY","points","stroke","priceTextLabelText","height","slippageTextLabelText","show"],"mappings":"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"}
|
package/dist/helper-l9rrGqkT.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i18n as e}from"@lingui/core";import t from"bignumber.js";import{f as i}from"./index-Bp_1xqpK.js";function o(t,i){switch(t){case"depth-chart.tips.buy":return e._({id:"Es4ccw",message:"Users pay {0} {1} and receive {2} {3}\nPrice {4} ({5}%)",values:{0:i.amountText,1:i.baseTokenSymbol,2:i.oppositeAmountText,3:i.quoteTokenSymbol,4:i.priceText,5:i.slippageText}});case"depth-chart.tips.mid-price":return e._({id:"cnbRVW",message:"Initial Price {0} {1} = {2} {3}",values:{0:i.amountText,1:i.baseTokenSymbol,2:i.oppositeAmountText,3:i.quoteTokenSymbol}});case"depth-chart.tips.sell":return e._({id:"Es4ccw",message:"Users pay {0} {1} and receive {2} {3}\nPrice {4} ({5}%)",values:{0:i.oppositeAmountText,1:i.quoteTokenSymbol,2:i.amountText,3:i.baseTokenSymbol,4:i.priceText,5:i.slippageText}});case"pool.chart.buy-amount":return e._({id:"NjQ1e3",message:"Users sell {0} amount: ",values:{0:i.symbol}});case"pool.chart.price-impact":return e._({id:"I0LXan",message:"Price Impact: {0}",values:{0:i.amount}});case"pool.chart.sell-amount":return e._({id:"WJ94b8",message:"Users buy {0} amount: ",values:{0:i.symbol}});case"pool.create.disabled-token-amount":return e._({id:"5QDjef",message:"The token amount is calculated by initial price."});case"pool.create.set-pool.emulator.title":return e._({id:"FQfStS",message:"Emulator"});case"pool.create.set-pool.emulator.title.question":return e._({id:"9D2g7k",message:"The liquidity of DODO is continuous, which is different from the discrete liquidity of UniV3. The ticks shown in the illustration are for demonstration purposes only."});case"pool.chart.liquidity-chart-tip":return e._({id:"GhrVog",message:"The area of the chart indicates the buy/sell volume of {0} that can be carried by the market when the current price changes to the hover price. ",values:{0:i.baseTokenSymbol}});case"pool.chart.liquidity-chart-buy":return e._({id:"TvH4Ym",message:"Bought {0} {1}, price in the pool decreased to {2}",values:{0:i.amount,1:i.symbol,2:i.price}});case"pool.chart.liquidity-chart-sell":return e._({id:"0O1wzf",message:"Traders sold {0} {1}, price in the pool increased to {2}",values:{0:i.amount,1:i.symbol,2:i.price}});default:throw new Error(`Unknown key ${t}`)}}const l=12,n=18;function s(e){let t=e.toLowerCase();if(t&&/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(t)){if(4===t.length){let e="#";for(let i=1;i<4;i+=1)e+=t.slice(i,i+1).concat(t.slice(i,i+1));t=e}const e=[];for(let i=1;i<7;i+=2)e.push(parseInt(`0x${t.slice(i,i+2)}`));return e.join(",")}return t}function r({val:e,model:i}){let o=e;if(e.isNaN())return{side:"no-one",vert:new t(0),base:new t(0),quote:new t(0)};i.Q0.eq(0)&&e.lt(i.i)&&(o=i.i),i.B0.eq(0)&&e.gt(i.i)&&(o=i.i);const l=i.getPriceDepth(o),n=l.baseAmount,s=l.quoteAmount,{isBuy:r}=l;return{side:r?"ask":"bid",vert:r?n:s,base:n,quote:s}}function a({midPrice:e,q:i,q0:o,pmmModel:l}){let n=t.maximum(i,o,l.B.multipliedBy(e));return n.isNaN()&&(n=new t(10)),n.eq(0)&&(n=new t(1)),{buyBaseVert:n.multipliedBy(1.2),sellBaseVert:n.div(e).multipliedBy(1.2)}}function u(e,i=1){return new t(i).div(e/2)}function m({tooltip:e,x:o,chartWidth:l,chartHeight:n,buyBaseVert:a,sellBaseVert:m,pmmModel:p,midPrice:c,baseTokenSymbol:d,quoteTokenSymbol:h,t:b,baseMinAndZoomMultiples:f,isHover:g,color:y,leftColor:T,rightColor:x}){const{zoomMultiples:w,baseMin:v}=f,k=u(l,w),M=a.div(n),B=m.div(n),q=2*w,N=v.multipliedBy(10**k.multipliedBy(o).toNumber());let S=new t(Math.log(c.div(v).toNumber())/Math.log(10));S=t.minimum(q,S),S=t.maximum(0,S);const A=S.div(k),P=r({val:N,model:p});if(P.vert.isNaN())return;const _=N.lt(c);let z=n-P.vert.div(M).toNumber();_||(z=n-P.vert.div(B).toNumber());const O=i(N),X=i(P.vert),$=N.minus(c).abs().div(c).multipliedBy(100).toFixed(2),D=A.toNumber(),L=e.findOne("#toolTipVertLine"),V=e.findOne("#toolTipHoriLine"),j=e.findOne("#joinCircle"),H=e.findOne("#toolTip"),W=e.findOne("#priceTextLabel"),U=e.findOne("#slippageTextLabel");if(!H)return;H.x(o),H.y(z-5-6);const I=H.getText(),Y=H.getTag();let C="ask"===P.side?i(P.quote):i(P.base);const E=p.k.lte(0);E&&(C=X);const F=i(c),Q={amountText:X,baseTokenSymbol:d,oppositeAmountText:C,quoteTokenSymbol:h,priceText:E?F:O,slippageText:`${_?"-":"+"}${$}`};if(A.minus(4).lte(o)&&A.plus(2).gte(o)&&g)I.text(b("depth-chart.tips.mid-price",{amountText:1,baseTokenSymbol:d,oppositeAmountText:F,quoteTokenSymbol:h})),H.x(D),H.y(n/2),null==L||L.hide(),null==V||V.hide(),null==j||j.hide(),null==W||W.hide(),null==U||U.hide();else{I.text(_?b("depth-chart.tips.buy",{amountText:C,baseTokenSymbol:d,oppositeAmountText:X,quoteTokenSymbol:h,priceText:E?F:O,slippageText:`${_?"-":"+"}${$}`}):b("depth-chart.tips.sell",Q));const e=y||(_?"#55f6db":"#ff4f73"),t=_?T||"#55f6db":x||"#ff4f73";I.fill(e),H.width()/2>o?(Y.pointerDirection("left"),Y.pointerHeight(15),Y.pointerWidth(8),H.offsetX(-11),H.offsetY(-11)):H.width()/2+o>l?(Y.pointerDirection("right"),Y.pointerHeight(15),Y.pointerWidth(8),H.offsetX(11),H.offsetY(-11)):(Y.pointerDirection("down"),Y.pointerHeight(8),Y.pointerWidth(15),H.offsetX(0),H.offsetY(0)),null==L||L.points([o,n,o,z]),null==L||L.stroke(t),null==V||V.points(_?[o,z,D,z]:[D,z,o,z]),null==V||V.stroke(t),null==j||j.x(o),null==j||j.y(z),null==j||j.fill(_?T||"rgb(86, 246, 218)":x||"#FF5072"),null==j||j.stroke(_?T?`rgba(${s(T)}, 0.4)`:"rgba(86, 246, 218, 0.3)":x?`rgba(${s(x)}, 0.4)`:"rgba(255, 80, 114, 0.3)"),W&&(W.x(o),W.y(n),W.offsetX(W.width()/2),W.x()-W.width()/2<0?W.x(W.width()/2):W.x()+W.width()/2>l?W.x(l-W.width()/2):W.x(o));const i=null==W?void 0:W.findOne("#priceTextLabel-text");i&&(i.fill(e),i.text(O)),U&&(U.x(_?o+(D-o)/2:o-(o-D)/2),U.y(z),U.offsetY(U.height()/2),U.offsetX(U.width()/2));const r=null==U?void 0:U.findOne("#slippageTextLabel-text");r&&(r.fill(e),r.text(`${_?"-":"+"}${$}%`)),null==L||L.show(),null==V||V.show(),null==j||j.show(),null==W||W.show(),null==U||U.show()}e.show()}function p({dragDistance:e,prevBaseMin:i,chartWidth:o,zoomMultiples:l}){const n=u(o,l);return e>0?i.multipliedBy(1-n.multipliedBy(e).toNumber()):i.multipliedBy(10**n.multipliedBy(new t(e).abs()).plus(0).toNumber())}const c=1;function d({prevZoomMultiples:e,zoomIn:t}){return!t&&e<=.1?e:t?e+.1:e-.1}function h({type:e,targetPrice:i,midPrice:o,width:l}){if("sell"===e){return{zoomMultiples:new t(Math.log10(i.div(o).toNumber())).minus(0).div(3/4).abs(),targetX:l/2*(3/4)+l/2}}const n=new t(Math.log10(i.div(o).toNumber()));return{zoomMultiples:new t(0).minus(n).div(3/4).abs(),targetX:l/2*(1/4)}}function b({currentBaseMinAndZoomMultiples:e,targetPrice:i,midPrice:o,width:l}){const{baseMin:n,zoomMultiples:s}=e,r=new t(Math.log10(n.div(o).toNumber())),a=r.plus(2*s),u=new t(o.multipliedBy(10**a.toNumber()));if(i.gte(n)&&i.lte(u)){return{isSkip:!0,targetX:new t(Math.log10(i.div(o).toNumber())).minus(r).div(2*s).multipliedBy(l).toNumber(),baseMin:new t(0),zoomMultiples:1}}const m=new t(o.multipliedBy(.1)),p=new t(o.multipliedBy(10));if(i.gte(m)&&i.lte(p)){return{isSkip:!1,targetX:new t(Math.log10(i.div(o).toNumber())).minus(-1).div(2).multipliedBy(l).toNumber(),baseMin:m,zoomMultiples:1}}return{isSkip:!1,targetX:-1,baseMin:new t(0),zoomMultiples:1}}function f({midPrice:e,zoomMultiples:t}){return e.multipliedBy(10**-t)}export{a,p as b,u as c,d,r as e,f,n as g,o as h,c as i,b as j,h as k,l,s as m,m as u};
|
package/dist/index-B6OsCe_1.cjs
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("@emotion/styled"),t=require("lodash"),i=require("react"),r=require("./helper-Ds_8_78g.cjs"),n=require("react-konva"),o=require("./index-Bcqk1fMQ.cjs"),a=require("bignumber.js"),l=require("react/jsx-runtime"),s=require("@dodoex/api");require("@lingui/core"),require("@dodoex/components"),require("@dodoex/dodo-contract-request"),require("@babel/runtime/helpers/interopRequireDefault"),require("@babel/runtime/helpers/defineProperty"),require("@lingui/react"),require("identicon.js"),require("zustand"),require("zustand/middleware"),require("@web3-react/core"),require("@web3-react/eip1193"),require("@web3-react/walletconnect-v2"),require("@web3-react/metamask"),require("@web3-react/types"),require("@tanstack/react-query"),require("@ethersproject/bignumber"),require("react-dom"),require("react-window"),require("dayjs"),require("dayjs/plugin/utc"),require("dayjs/plugin/duration"),require("dayjs/plugin/localizedFormat"),require("react-transition-group"),require("react-is"),require("@dodoex/contract-request"),require("axios"),require("recharts"),require("react-dom/client"),require("jsbi"),require("tiny-invariant"),require("@uniswap/sdk-core"),require("@uniswap/v2-sdk"),require("react-infinite-scroller"),require("d3"),require("rmc-date-picker"),require("rmc-date-picker/assets/index.css"),require("react-datetime/css/react-datetime.css");const u=e.div`
|
|
2
|
-
height: 100%;
|
|
3
|
-
position: relative;
|
|
4
|
-
`,d=e.div`
|
|
5
|
-
text-align: center;
|
|
6
|
-
margin-top: 17.1px;
|
|
7
|
-
margin-bottom: 88.41px;
|
|
8
|
-
color: #606066;
|
|
9
|
-
font-size: 12px;
|
|
10
|
-
line-height: 17px;
|
|
11
|
-
font-weight: 400;
|
|
12
|
-
`;function g({maxHeight:e,gridAreaHeight:t,value:i}){const r=new a(t).minus(36),n=r.div(e);return r.minus(i.multipliedBy(n)).plus(36).toNumber()}function c({targetPrice:e,areaPoints:t,isLeft:i}){for(let r=0;r<t.length;r++){const n=t[r],o=r<t.length-1?t[r+1]:null;if(!o)return{targetAreaStatPoint:n,targetAreaStatPoints:t};if(i){if(e.lte(n.middlePrice)&&e.gte(o.middlePrice))return{targetAreaStatPoint:n,targetAreaStatPoints:t.slice(0,r+1)}}else if(e.gte(n.middlePrice)&&e.lte(o.middlePrice))return{targetAreaStatPoint:n,targetAreaStatPoints:t.slice(0,r+1)}}return{targetAreaStatPoint:null,targetAreaStatPoints:[]}}function h({x:e,width:t,minXLN10:i,maxXLN10:r}){const n=new a(e).div(t).multipliedBy(r.minus(i)).plus(i);return new a(10**n.toNumber())}function m({width:e,targetLN10:t,minXLN10:i,maxXLN10:r}){return t.minus(i).div(r.minus(i)).multipliedBy(e).toNumber()}function p({target:e}){return new a(Math.log10(e.toNumber()))}const f="rgba(38, 39, 41, 0.3)";function x({width:e,height:u,params:d,baseTokenSymbol:x,quoteTokenSymbol:L,colorMap:b}){const{maxLeftHeight:w,maxRightHeight:A,leftStatAreaPoints:y,rightStatAreaPoints:N,minXLN10:q,maxXLN10:P}=function({params:e}){return i.useMemo(()=>{const t=new a(e.b),i=new a(e.q);let r=new a(e.b0);const n=new a(e.q0),o=new a(e.i),l=new a(e.k),{R:u}=e;1===u&&r.eq(t)&&(r=s.solveQuadraticFunctionForTarget(t,i.minus(n),new a(1).div(o),l));const d=new s.PMMState({i:o,K:l,B:t,Q:i,B0:r,Q0:n,R:u,mtFeeRate:new a(0),lpFeeRate:new a(0)}),g=new s.PMMHelper,c=new a(d.B),h=[],m=[];let p=new a(0),f=new a(0);const x=g.GetMidPrice(d),L=i.gt(0)?t.div(i):new a(1);for(let e=0;e<=250;e++){let t=c.multipliedBy(e/100).multipliedBy(x.multipliedBy(L).multipliedBy(4));0===e&&(t=c.multipliedBy(1e-11));const i=null==g?void 0:g.QuerySellBase(t,d);if(!i.isNaN()&&i.gt(0)){const e=i.div(t);h.push({giveAmount:t,getAmount:i,price:e});continue}h.push({giveAmount:t,getAmount:new a(0),price:new a(0)})}for(let e=0;e<=250;e++){let t=c.multipliedBy(e/100).multipliedBy(x.multipliedBy(4));0===e&&(t=c.multipliedBy(1e-11));const i=null==g?void 0:g.QuerySellQuote(t,d);if(!i.isNaN()&&i.gt(0)){const e=t.dividedBy(i);m.push({giveAmount:t,getAmount:i,price:e});continue}m.push({giveAmount:t,getAmount:new a(0),price:new a(0)})}if(h.length<2&&m.length<2)return{leftStatAreaPoints:[],rightStatAreaPoints:[],maxLeftHeight:new a(10).multipliedBy(1.2),maxRightHeight:new a(10).multipliedBy(1.2),middlePriceLN10:new a(0),minXLN10:new a(-1),maxXLN10:new a(1)};const b=[];for(let e=1;e<h.length;e++){const t=h[e],{giveAmount:i,getAmount:r,price:n}=t,o=h[e-1];if(!n.isNaN()&&n.gt(0)&&o){const t=n.minus(o.price).abs(),l=i.minus(o.giveAmount).abs(),s=r.minus(o.getAmount).abs().multipliedBy(l);1===e&&b.push({area:r,price:n,middlePrice:n.plus(t.div(1.1)),rectangleHeight:s.plus(s.multipliedBy(.03))}),b.push({area:r,price:n,middlePrice:n.plus(t.div(2)),rectangleHeight:s}),p=a.max(s,p)}}const w=[];for(let e=1;e<m.length;e++){const t=m[e],{giveAmount:i,getAmount:r,price:n}=t,o=m[e-1],l=o.price,s=o.giveAmount,u=o.getAmount;if(!n.isNaN()&&n.gt(0)&&o){const t=n.minus(l).abs(),o=i.minus(s).abs(),d=r.minus(u).abs().multipliedBy(o);1===e&&w.push({area:r,price:n,middlePrice:n.minus(t.div(1.1)),rectangleHeight:d.plus(d.multipliedBy(.03))}),w.push({area:r,price:n,middlePrice:n.minus(t.div(2)),rectangleHeight:d}),f=a.max(d,f)}}const A=h.length>0?h[h.length-1]:m[0],y=m.length>0?m[0]:h[0],N=m.length>0?m[m.length-1]:h[0],q=A.price,P=N.price,v=y.price,S=new a(Math.log10(v.toNumber()));let j=q.gt(0)?new a(Math.log10(q.toNumber())):new a(-Math.log10(P.toNumber())),H=P.gt(0)?new a(Math.log10(P.toNumber())):new a(-Math.log10(q.toNumber()));const k=a.max(S.minus(j).abs(),H.minus(S).abs());return j=S.minus(k),H=S.plus(k),{leftStatAreaPoints:b,rightStatAreaPoints:w,maxLeftHeight:p.multipliedBy(1.2),maxRightHeight:f.multipliedBy(1.2),minXLN10:j,maxXLN10:H,middlePriceLN10:S}},[e])}({params:d}),v=u-30.13,S=i.useRef(null),j=t.merge({grid:"#2A2A2D",midPriceLine:"#313335",leftBg:[0,f,1,"#31645d"],leftLine:"#55f6db",leftColor:"",rightBg:[0,f,1,"#67303d"],rightLine:"#ff4f73",rightColor:"",tooltipBg:"#121212",tooltipColor:void 0,textColor:"#606066"},b),H=t=>{var i;const{current:n}=S,a=t.target;if(a&&n){const t=null===(i=a.getStage())||void 0===i?void 0:i.getPointerPosition();if(t){const{x:i}=t,a=e/2;if(Math.abs(i-a)<=2)return;if(i<=2||e-i<=2)return;const l=h({x:i,width:e,minXLN10:q,maxXLN10:P});let s=null,u=[];const d=i<a;if(d){const e=c({areaPoints:y,targetPrice:l,isLeft:d});s=e.targetAreaStatPoint,u=e.targetAreaStatPoints}else{const e=c({areaPoints:N,targetPrice:l,isLeft:d});s=e.targetAreaStatPoint,u=e.targetAreaStatPoints}if(s){const t=p({target:s.middlePrice}),a=m({minXLN10:q,maxXLN10:P,width:e,targetLN10:t}),l=g({maxHeight:d?w:A,gridAreaHeight:v,value:s.rectangleHeight}),c=n.findOne("#tooltip"),h=n.findOne("#toolTipVertLine"),f=n.findOne("#joinCircle"),b=n.findOne("#tooltip-Text"),y=n.findOne("#tooltip-tag"),N=n.findOne("#priceTextLabel"),S=null==N?void 0:N.findOne("#priceTextLabel-text"),H=n.findOne("#area");null==c||c.position({x:a,y:l-5-6}),null==b||b.fill(j.tooltipColor||(d?"#00FAD9":"#FF5072")),null==b||b.text(d?r.chartT("pool.chart.liquidity-chart-buy",{amount:o.formatShortNumber(s.area),symbol:x,price:o.formatShortNumber(s.price)}):r.chartT("pool.chart.liquidity-chart-sell",{amount:o.formatShortNumber(s.area),symbol:L,price:o.formatShortNumber(s.price)})),c&&y&&(c.width()/2>i?(y.pointerDirection("left"),y.pointerHeight(15),y.pointerWidth(8),c.offsetX(-11),c.offsetY(-11)):c.width()/2+i>e?(y.pointerDirection("right"),y.pointerHeight(15),y.pointerWidth(8),c.offsetX(11),c.offsetY(-11)):(y.pointerDirection("down"),y.pointerHeight(8),y.pointerWidth(15),c.offsetX(0),c.offsetY(0))),null==h||h.points([a,v,a,l]),null==h||h.stroke(d?"#55f6db":"#ff4f73");let k=d?"rgb(86, 246, 218)":"#FF5072",X=d?"rgba(86, 246, 218, 0.3)":"rgba(255, 80, 114, 0.3)";j.leftLine&&j.rightLine&&(k=d?j.leftLine:j.rightLine,X=d?`rgba(${r.colorRgb(j.leftLine)}, 0.4)`:`rgba(${r.colorRgb(j.rightLine)}, 0.4)`),f&&(f.x(a),f.y(l),f.fill(k),f.stroke(X)),N&&(N.x(a),N.y(v+8.08+1),N.offsetX(N.width()/2),N.x()-N.width()/2<0?N.x(N.width()/2):N.x()+N.width()/2>e?N.x(e-N.width()/2):N.x(i)),S&&(S.fill(j.tooltipColor||(d?"#00FAD9":"#FF5072")),S.text(o.formatShortNumber(s.price)));const M=[];for(const t of u){const{middlePrice:i,rectangleHeight:r}=t,n=p({target:i}),o=m({minXLN10:q,maxXLN10:P,width:e,targetLN10:n}),a=g({maxHeight:d?w:A,gridAreaHeight:v,value:r});M.push(o,a+1)}const B=M.slice(),[C,F]=B;d?(B.push(a,l),B.push(a,v),B.push(C,v),B.push(C,F)):(B.unshift(C,v),B.unshift(a,v),B.unshift(a,l)),H&&(H.points(B),H.fill(d?j.leftLine||"#2c5b56":j.rightLine||"#7b3a48")),n.show()}}}},k=function({gridAreaHeight:e,gridAreaWidth:t,horizontalLineCount:r,verticalLineCount:o,color:a="#2A2A2D"}){return i.useMemo(()=>{const i=[],s=e/(r+1),u=[],d=t/(o+1);for(let e=0;e<r;e++){const r=s*(e+1);i.push([0,r,t,r])}for(let t=0;t<o;t++){const i=d*(t+1);u.push([i,0,i,e])}return l.jsxs(l.Fragment,{children:[i.map((e,t)=>l.jsx(n.Line,{points:e,stroke:a,strokeWidth:1,lineCap:"round",lineJoin:"round",tension:1,listening:!1},t)),u.map((e,t)=>l.jsx(n.Line,{points:e,stroke:a,strokeWidth:1,lineCap:"round",lineJoin:"round",tension:1,listening:!1},t))]})},[e,t,r,o,a])}({gridAreaHeight:v,gridAreaWidth:e,horizontalLineCount:9,verticalLineCount:7,color:j.grid}),X=function({minXLN10:e,maxXLN10:t,labelCount:r,gridAreaHeight:a,gridAreaWidth:s,color:u="#606066"}){return i.useMemo(()=>{const i=s/(r+1),d=[],g=[];for(let n=0;n<r;n++){const r=i/2+i*n;d.push({x:r,y:a+10.08+1,text:o.formatShortNumber(h({x:i*(n+1),width:s,minXLN10:e,maxXLN10:t}))});const l=i*(n+1);g.push([l,a+1,l,a+4+1])}return l.jsxs(l.Fragment,{children:[d.map((e,t)=>l.jsx(n.Text,{x:e.x,y:e.y,text:e.text,fontSize:14,fontFamily:"Manrope",fill:u,width:i,padding:0,align:"center",verticalAlign:"bottom",listening:!1},t)),g.map((e,t)=>l.jsx(n.Line,{points:e,stroke:u,strokeWidth:1,lineCap:"butt",lineJoin:"miter",tension:1,listening:!1},t))]})},[e,t,a,s,r])}({gridAreaHeight:v,gridAreaWidth:e,labelCount:7,minXLN10:q,maxXLN10:P,color:j.textColor}),M=function({gridAreaHeight:e,gridAreaWidth:t,color:r="#606066"}){return i.useMemo(()=>{const i=t/2;return l.jsx(n.Line,{points:[i,0,i,e-1],stroke:r,strokeWidth:1,lineCap:"round",lineJoin:"round",tension:1,listening:!1})},[e,t,r])}({gridAreaHeight:v,gridAreaWidth:e,color:j.midPriceLine}),{leftLine:B,rightLine:C}=function({leftStatAreaPoints:e,rightStatAreaPoints:t,minXLN10:r,maxXLN10:o,maxLeftHeight:a,maxRightHeight:s,gridAreaWidth:u,gridAreaHeight:d,colorMap:c}){return{leftLine:i.useMemo(()=>{if(e.length<1)return l.jsx(l.Fragment,{});const t=[];let i=d;for(const n of e){const{middlePrice:e,rectangleHeight:l}=n,s=p({target:e}),c=m({minXLN10:r,maxXLN10:o,width:u,targetLN10:s}),h=g({maxHeight:a,gridAreaHeight:d,value:l});t.push(c,h),h<i&&(i=h)}const s=t.slice(),[h,f]=s,x=s[s.length-1],L=s[s.length-2];return s.push(L,x),s.push(L,d),s.push(h,d),s.push(h,f),l.jsxs(l.Fragment,{children:[l.jsx(n.Line,{points:s,closed:!0,listening:!1,lineCap:"round",lineJoin:"round",fillLinearGradientStartPoint:{x:0,y:d},fillLinearGradientEndPoint:{x:0,y:i},fillLinearGradientColorStops:c.leftBg}),l.jsx(n.Line,{points:t,stroke:c.leftLine,strokeWidth:2,lineCap:"round",lineJoin:"round",listening:!1})]})},[e,u,r,o,d,a]),rightLine:i.useMemo(()=>{if(t.length<1)return l.jsx(l.Fragment,{});const e=[];let i=d;for(const n of t){const{middlePrice:t,rectangleHeight:a}=n,l=p({target:t}),c=m({minXLN10:r,maxXLN10:o,width:u,targetLN10:l}),h=g({maxHeight:s,gridAreaHeight:d,value:a});e.push(c,h),h<i&&(i=h)}const a=e.slice(),[h]=a;return a.unshift(h,d),a.unshift(u,d),l.jsxs(l.Fragment,{children:[l.jsx(n.Line,{points:a,closed:!0,listening:!1,lineCap:"round",lineJoin:"round",fillLinearGradientStartPoint:{x:0,y:d},fillLinearGradientEndPoint:{x:0,y:i},fillLinearGradientColorStops:c.rightBg}),l.jsx(n.Line,{points:e,stroke:c.rightLine,strokeWidth:2,lineCap:"round",lineJoin:"round",listening:!1})]})},[t,u,r,o,d,s])}}({leftStatAreaPoints:y,rightStatAreaPoints:N,minXLN10:q,maxXLN10:P,maxLeftHeight:w,maxRightHeight:A,gridAreaWidth:e,gridAreaHeight:v,colorMap:j});return l.jsxs(n.Stage,{width:e,height:u,onMouseMove:H,onMouseOver:H,onMouseEnter:H,onMouseOut:()=>{const{current:e}=S;e&&e.hide()},children:[l.jsxs(n.Layer,{children:[l.jsx(n.Rect,{x:0,y:0,width:e,height:v,stroke:j.grid,strokeWidth:1}),k,X,B,C,M]}),l.jsxs(n.Layer,{ref:S,visible:!1,children:[l.jsx(n.Line,{points:[],closed:!0,listening:!1,lineCap:"round",lineJoin:"round",id:"area"}),l.jsx(n.Line,{points:[],strokeWidth:1,stroke:"#ff4f73",lineJoin:"round",lineCap:"round",dash:[4,6],id:"toolTipVertLine"}),l.jsx(n.Circle,{x:0,y:0,radius:5,fill:"#FF5072",stroke:"rgba(255, 80, 114, 0.3)",strokeWidth:12,id:"joinCircle"}),l.jsxs(n.Label,{listening:!1,x:0,y:0,id:"priceTextLabel",children:[l.jsx(n.Tag,{fill:j.tooltipBg,id:"priceTextLabel-tag"}),l.jsx(n.Text,{text:"-",fontSize:14,fontFamily:"Manrope",padding:2,fill:"#FF5072",id:"priceTextLabel-text"})]}),l.jsxs(n.Label,{listening:!1,id:"tooltip",children:[l.jsx(n.Tag,{fill:j.tooltipBg,pointerDirection:"down",pointerWidth:15,pointerHeight:8,cornerRadius:8,lineJoin:"round",id:"tooltip-tag"}),l.jsx(n.Text,{text:"",fontFamily:"Manrope",fontSize:12,lineHeight:17/12,padding:r.labelPadding,fill:"#FF5072",id:"tooltip-Text"})]})]})]})}exports.default=({width:e=834,height:t=462,baseTokenSymbol:i,quoteTokenSymbol:n,pmmModel:o,pmmParams:a,midPrice:s,notShowTipText:g,colorMap:c})=>l.jsxs(u,{children:[void 0!==a&&void 0!==s&&void 0!==o&&void 0!==s&&l.jsx(x,{width:e,height:t,params:a,midPrice:s,pmmModel:o,baseTokenSymbol:i,quoteTokenSymbol:n,colorMap:c}),g?"":l.jsxs(d,{children:["* ",r.chartT("pool.chart.liquidity-chart-tip",{baseTokenSymbol:i})]})]});
|
|
13
|
-
//# sourceMappingURL=index-B6OsCe_1.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-B6OsCe_1.cjs","sources":["../src/components/chart/liquidity-chart/index.styled.tsx","../src/components/chart/liquidity-chart/helper.ts","../src/components/chart/liquidity-chart/LiquidityChartKonva.tsx","../src/components/chart/liquidity-chart/usePoints.ts","../src/components/chart/liquidity-chart/useGridLine.tsx","../src/components/chart/liquidity-chart/useHorizontalLabel.tsx","../src/components/chart/liquidity-chart/useMiddleLine.tsx","../src/components/chart/liquidity-chart/useLiquidityLine.tsx","../src/components/chart/liquidity-chart/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\r\n\r\nexport const Container = styled.div`\r\n height: 100%;\r\n position: relative;\r\n`;\r\nexport const TipWrapper = styled.div`\r\n text-align: center;\r\n margin-top: 17.1px;\r\n margin-bottom: 88.41px;\r\n color: #606066;\r\n font-size: 12px;\r\n line-height: 17px;\r\n font-weight: 400;\r\n`;\r\n","import BigNumber from 'bignumber.js';\r\nimport { StatAreaPoint } from './usePoints';\r\n\r\n// The space reserved at the top\r\nconst topEmptyHeight = 36;\r\n\r\nexport function computePointYByHeight({\r\n maxHeight,\r\n gridAreaHeight,\r\n value,\r\n}: {\r\n maxHeight: BigNumber;\r\n gridAreaHeight: number;\r\n value: BigNumber;\r\n}) {\r\n const height = new BigNumber(gridAreaHeight).minus(topEmptyHeight);\r\n const onePXY = height.div(maxHeight);\r\n const y = height.minus(value.multipliedBy(onePXY)).plus(topEmptyHeight);\r\n return y.toNumber();\r\n}\r\n\r\nexport function computeHeightByPointY({\r\n maxY,\r\n gridAreaHeight,\r\n y,\r\n}: {\r\n maxY: BigNumber;\r\n gridAreaHeight: number;\r\n y: number;\r\n}) {\r\n const height = new BigNumber(gridAreaHeight).minus(topEmptyHeight);\r\n const onePXY = height.div(maxY);\r\n const h = height.minus(new BigNumber(y).minus(topEmptyHeight)).div(onePXY);\r\n return h;\r\n}\r\n\r\n/**\r\n * Obtain the closest data point from the data point collection through the coordinate point x and a series of point data subsets from the point to the center line.\r\n */\r\nexport function getStatAreaPointByX({\r\n targetPrice,\r\n areaPoints,\r\n isLeft,\r\n}: {\r\n targetPrice: BigNumber;\r\n areaPoints: StatAreaPoint[];\r\n isLeft: boolean;\r\n}): {\r\n targetAreaStatPoint: StatAreaPoint | null;\r\n targetAreaStatPoints: StatAreaPoint[];\r\n} {\r\n for (let index = 0; index < areaPoints.length; index++) {\r\n const point = areaPoints[index];\r\n\r\n const nextPoint =\r\n index < areaPoints.length - 1 ? areaPoints[index + 1] : null;\r\n\r\n if (!nextPoint) {\r\n return { targetAreaStatPoint: point, targetAreaStatPoints: areaPoints };\r\n }\r\n\r\n if (isLeft) {\r\n if (\r\n targetPrice.lte(point.middlePrice) &&\r\n targetPrice.gte(nextPoint.middlePrice)\r\n ) {\r\n return {\r\n targetAreaStatPoint: point,\r\n targetAreaStatPoints: areaPoints.slice(0, index + 1),\r\n };\r\n }\r\n } else if (\r\n targetPrice.gte(point.middlePrice) &&\r\n targetPrice.lte(nextPoint.middlePrice)\r\n ) {\r\n return {\r\n targetAreaStatPoint: point,\r\n targetAreaStatPoints: areaPoints.slice(0, index + 1),\r\n };\r\n }\r\n }\r\n\r\n return { targetAreaStatPoint: null, targetAreaStatPoints: [] };\r\n}\r\n\r\n/**\r\n * Given a pixel's x-coordinate, width, logarithm of the minimum value of the abscissa, and logarithm of the maximum value of the abscissa, calculate the logarithmic coordinate corresponding to the point\r\n */\r\nexport function computeTargetPrice({\r\n x,\r\n width,\r\n minXLN10,\r\n maxXLN10,\r\n}: {\r\n x: number;\r\n width: number;\r\n minXLN10: BigNumber;\r\n maxXLN10: BigNumber;\r\n}) {\r\n const xLN10 = new BigNumber(x)\r\n .div(width)\r\n .multipliedBy(maxXLN10.minus(minXLN10));\r\n const power = xLN10.plus(minXLN10);\r\n return new BigNumber(10 ** power.toNumber());\r\n}\r\n\r\n/**\r\n * Given the logarithm of a coordinate, the width, the logarithm of the minimum value of the abscissa, and the logarithm of the maximum value of the abscissa, calculate the x coordinate corresponding to the point\r\n */\r\nexport function computeTargetX({\r\n width,\r\n targetLN10,\r\n minXLN10,\r\n maxXLN10,\r\n}: {\r\n width: number;\r\n targetLN10: BigNumber;\r\n minXLN10: BigNumber;\r\n maxXLN10: BigNumber;\r\n}) {\r\n return targetLN10\r\n .minus(minXLN10)\r\n .div(maxXLN10.minus(minXLN10))\r\n .multipliedBy(width)\r\n .toNumber();\r\n}\r\n\r\n/**\r\n * Calculate logarithm\r\n */\r\nexport function computeTargetLN({ target }: { target: BigNumber }) {\r\n return new BigNumber(Math.log10(target.toNumber()));\r\n}\r\n","import { PMMModel, PmmModelParams } from '@dodoex/api';\r\nimport BigNumber from 'bignumber.js';\r\nimport Konva from 'konva';\r\nimport { KonvaEventObject } from 'konva/lib/Node';\r\nimport { merge } from 'lodash';\r\nimport { useRef } from 'react';\r\nimport { chartT as t } from '../i18n';\r\nimport {\r\n Circle,\r\n Label,\r\n Layer,\r\n Line,\r\n Rect,\r\n Stage,\r\n Tag,\r\n Text,\r\n} from 'react-konva';\r\nimport { formatShortNumber } from '../../../utils/formatter';\r\nimport { colorRgb } from '../depth-chart/helper';\r\nimport { labelPadding } from '../utils';\r\nimport {\r\n computePointYByHeight,\r\n computeTargetLN,\r\n computeTargetPrice,\r\n computeTargetX,\r\n getStatAreaPointByX,\r\n} from './helper';\r\nimport { useGridLine } from './useGridLine';\r\nimport { useHorizontalLabel } from './useHorizontalLabel';\r\nimport { useLiquidityLine } from './useLiquidityLine';\r\nimport { useMiddleLine } from './useMiddleLine';\r\nimport { StatAreaPoint, usePoints } from './usePoints';\r\n\r\nexport const bgColor = 'rgba(38, 39, 41, 0.3)';\r\n\r\nexport interface ColorMap {\r\n grid?: string;\r\n midPriceLine?: string;\r\n leftBg?: (string | number)[];\r\n leftLine?: string;\r\n leftColor?: string;\r\n rightBg?: (string | number)[];\r\n rightLine?: string;\r\n rightColor?: string;\r\n tooltipBg?: string;\r\n tooltipColor?: string;\r\n textColor?: string;\r\n}\r\n\r\nexport type Props = {\r\n width: number;\r\n height: number;\r\n params: PmmModelParams;\r\n midPrice: BigNumber;\r\n pmmModel: PMMModel;\r\n baseTokenSymbol: string;\r\n quoteTokenSymbol: string;\r\n colorMap?: ColorMap;\r\n};\r\n\r\nexport function LiquidityChartKonva({\r\n width,\r\n height,\r\n params,\r\n baseTokenSymbol,\r\n quoteTokenSymbol,\r\n colorMap,\r\n}: Props) {\r\n const {\r\n maxLeftHeight,\r\n maxRightHeight,\r\n leftStatAreaPoints,\r\n rightStatAreaPoints,\r\n minXLN10,\r\n maxXLN10,\r\n } = usePoints({\r\n params,\r\n });\r\n\r\n const xAxisLabelHeight = 30.13;\r\n const gridAreaHeight = height - xAxisLabelHeight;\r\n const horizontalLineCount = 9;\r\n // The number of vertical grid lines or the number of horizontal axis scales\r\n const verticalLineCount = 7;\r\n\r\n const tooltipRef = useRef<Konva.Layer>(null);\r\n\r\n const colorMapRes = merge(\r\n {\r\n grid: '#2A2A2D',\r\n midPriceLine: '#313335',\r\n leftBg: [0, bgColor, 1, '#31645d'],\r\n leftLine: '#55f6db',\r\n leftColor: '',\r\n rightBg: [0, bgColor, 1, '#67303d'],\r\n rightLine: '#ff4f73',\r\n rightColor: '',\r\n tooltipBg: '#121212',\r\n tooltipColor: undefined,\r\n textColor: '#606066',\r\n },\r\n colorMap,\r\n );\r\n\r\n const handleMouseover = (evt: KonvaEventObject<MouseEvent>) => {\r\n const { current: tooltip } = tooltipRef;\r\n const node = evt.target;\r\n if (node && tooltip) {\r\n // update tooltip\r\n const mousePos = node.getStage()?.getPointerPosition();\r\n if (mousePos) {\r\n const { x } = mousePos;\r\n const middleX = width / 2;\r\n if (Math.abs(x - middleX) <= 2) {\r\n return;\r\n }\r\n if (x <= 2 || width - x <= 2) {\r\n return;\r\n }\r\n const targetPrice = computeTargetPrice({\r\n x,\r\n width,\r\n minXLN10,\r\n maxXLN10,\r\n });\r\n\r\n let targetAreaStatPoint: StatAreaPoint | null = null;\r\n let targetAreaStatPoints: Array<StatAreaPoint> = [];\r\n const isLeft = x < middleX;\r\n if (isLeft) {\r\n const result = getStatAreaPointByX({\r\n areaPoints: leftStatAreaPoints,\r\n targetPrice,\r\n isLeft,\r\n });\r\n targetAreaStatPoint = result.targetAreaStatPoint;\r\n targetAreaStatPoints = result.targetAreaStatPoints;\r\n } else {\r\n const result = getStatAreaPointByX({\r\n areaPoints: rightStatAreaPoints,\r\n targetPrice,\r\n isLeft,\r\n });\r\n targetAreaStatPoint = result.targetAreaStatPoint;\r\n targetAreaStatPoints = result.targetAreaStatPoints;\r\n }\r\n if (targetAreaStatPoint) {\r\n const targetLN10 = computeTargetLN({\r\n target: targetAreaStatPoint.middlePrice,\r\n });\r\n const targetAreaPointX = computeTargetX({\r\n minXLN10,\r\n maxXLN10,\r\n width,\r\n targetLN10,\r\n });\r\n const targetAreaPointY = computePointYByHeight({\r\n maxHeight: isLeft ? maxLeftHeight : maxRightHeight,\r\n gridAreaHeight,\r\n value: targetAreaStatPoint.rectangleHeight,\r\n });\r\n const tooltipLabel = tooltip.findOne<Konva.Label>('#tooltip');\r\n const toolTipVertLine =\r\n tooltip.findOne<Konva.Line>('#toolTipVertLine');\r\n const joinCircle = tooltip.findOne<Konva.Line>('#joinCircle');\r\n const tooltipText = tooltip.findOne<Konva.Text>('#tooltip-Text');\r\n const tooltipTag = tooltip.findOne<Konva.Tag>('#tooltip-tag');\r\n const priceTextLabel =\r\n tooltip.findOne<Konva.Label>('#priceTextLabel');\r\n const priceTextLabelText = priceTextLabel?.findOne<Konva.Text>(\r\n '#priceTextLabel-text',\r\n );\r\n const area = tooltip.findOne<Konva.Line>('#area');\r\n\r\n tooltipLabel?.position({\r\n x: targetAreaPointX,\r\n y: targetAreaPointY - 5 - 6,\r\n });\r\n\r\n tooltipText?.fill(\r\n colorMapRes.tooltipColor || (isLeft ? '#00FAD9' : '#FF5072'),\r\n );\r\n tooltipText?.text(\r\n isLeft\r\n ? t('pool.chart.liquidity-chart-buy', {\r\n amount: formatShortNumber(targetAreaStatPoint.area),\r\n symbol: baseTokenSymbol,\r\n price: formatShortNumber(targetAreaStatPoint.price),\r\n })\r\n : t('pool.chart.liquidity-chart-sell', {\r\n amount: formatShortNumber(targetAreaStatPoint.area),\r\n symbol: quoteTokenSymbol,\r\n price: formatShortNumber(targetAreaStatPoint.price),\r\n }),\r\n );\r\n\r\n if (tooltipLabel && tooltipTag) {\r\n if (tooltipLabel.width() / 2 > x) {\r\n tooltipTag.pointerDirection('left');\r\n tooltipTag.pointerHeight(15);\r\n tooltipTag.pointerWidth(8);\r\n tooltipLabel.offsetX(-(5 + 6));\r\n tooltipLabel.offsetY(-(5 + 6));\r\n } else if (tooltipLabel.width() / 2 + x > width) {\r\n tooltipTag.pointerDirection('right');\r\n tooltipTag.pointerHeight(15);\r\n tooltipTag.pointerWidth(8);\r\n tooltipLabel.offsetX(5 + 6);\r\n tooltipLabel.offsetY(-(5 + 6));\r\n } else {\r\n // @ts-ignore\r\n tooltipTag.pointerDirection('down');\r\n tooltipTag.pointerHeight(8);\r\n tooltipTag.pointerWidth(15);\r\n tooltipLabel.offsetX(0);\r\n tooltipLabel.offsetY(0);\r\n }\r\n }\r\n\r\n toolTipVertLine?.points([\r\n targetAreaPointX,\r\n gridAreaHeight,\r\n targetAreaPointX,\r\n targetAreaPointY,\r\n ]);\r\n toolTipVertLine?.stroke(isLeft ? '#55f6db' : '#ff4f73');\r\n\r\n let joinFill = isLeft ? 'rgb(86, 246, 218)' : '#FF5072';\r\n let joinStroke = isLeft\r\n ? 'rgba(86, 246, 218, 0.3)'\r\n : 'rgba(255, 80, 114, 0.3)';\r\n if (colorMapRes.leftLine && colorMapRes.rightLine) {\r\n joinFill = isLeft ? colorMapRes.leftLine : colorMapRes.rightLine;\r\n joinStroke = isLeft\r\n ? `rgba(${colorRgb(colorMapRes.leftLine)}, 0.4)`\r\n : `rgba(${colorRgb(colorMapRes.rightLine)}, 0.4)`;\r\n }\r\n if (joinCircle) {\r\n joinCircle.x(targetAreaPointX);\r\n joinCircle.y(targetAreaPointY);\r\n joinCircle.fill(joinFill);\r\n joinCircle.stroke(joinStroke);\r\n }\r\n\r\n if (priceTextLabel) {\r\n priceTextLabel.x(targetAreaPointX);\r\n priceTextLabel.y(gridAreaHeight + 8.08 + 1);\r\n priceTextLabel.offsetX(priceTextLabel.width() / 2);\r\n if (priceTextLabel.x() - priceTextLabel.width() / 2 < 0) {\r\n priceTextLabel.x(priceTextLabel.width() / 2);\r\n } else if (\r\n priceTextLabel.x() + priceTextLabel.width() / 2 >\r\n width\r\n ) {\r\n priceTextLabel.x(width - priceTextLabel.width() / 2);\r\n } else {\r\n priceTextLabel.x(x);\r\n }\r\n }\r\n\r\n if (priceTextLabelText) {\r\n priceTextLabelText.fill(\r\n colorMapRes.tooltipColor || (isLeft ? '#00FAD9' : '#FF5072'),\r\n );\r\n priceTextLabelText.text(\r\n formatShortNumber(targetAreaStatPoint.price),\r\n );\r\n }\r\n\r\n // Gradient colored dots\r\n const points: Array<number> = [];\r\n for (const statPoint of targetAreaStatPoints) {\r\n const { middlePrice, rectangleHeight } = statPoint;\r\n const targetLN10Gradient = computeTargetLN({ target: middlePrice });\r\n const xGradient = computeTargetX({\r\n minXLN10,\r\n maxXLN10,\r\n width,\r\n targetLN10: targetLN10Gradient,\r\n });\r\n const y = computePointYByHeight({\r\n maxHeight: isLeft ? maxLeftHeight : maxRightHeight,\r\n gridAreaHeight,\r\n value: rectangleHeight,\r\n });\r\n points.push(xGradient, y + 1);\r\n }\r\n const linearGradientPoints = points.slice();\r\n const [firstPointX, firstPointY] = linearGradientPoints;\r\n if (isLeft) {\r\n linearGradientPoints.push(targetAreaPointX, targetAreaPointY);\r\n linearGradientPoints.push(targetAreaPointX, gridAreaHeight);\r\n linearGradientPoints.push(firstPointX, gridAreaHeight);\r\n linearGradientPoints.push(firstPointX, firstPointY);\r\n } else {\r\n linearGradientPoints.unshift(firstPointX, gridAreaHeight);\r\n linearGradientPoints.unshift(targetAreaPointX, gridAreaHeight);\r\n linearGradientPoints.unshift(targetAreaPointX, targetAreaPointY);\r\n }\r\n if (area) {\r\n area.points(linearGradientPoints);\r\n area.fill(\r\n isLeft\r\n ? colorMapRes.leftLine || '#2c5b56'\r\n : colorMapRes.rightLine || '#7b3a48',\r\n );\r\n }\r\n\r\n tooltip.show();\r\n }\r\n }\r\n }\r\n };\r\n\r\n const handleMouseOut = () => {\r\n const { current: tooltip } = tooltipRef;\r\n if (tooltip) {\r\n tooltip.hide();\r\n }\r\n };\r\n\r\n const gridLine = useGridLine({\r\n gridAreaHeight,\r\n gridAreaWidth: width,\r\n horizontalLineCount,\r\n verticalLineCount,\r\n color: colorMapRes.grid,\r\n });\r\n const horizontalLabel = useHorizontalLabel({\r\n gridAreaHeight,\r\n gridAreaWidth: width,\r\n labelCount: verticalLineCount,\r\n minXLN10,\r\n maxXLN10,\r\n color: colorMapRes.textColor,\r\n });\r\n const middleLine = useMiddleLine({\r\n gridAreaHeight,\r\n gridAreaWidth: width,\r\n color: colorMapRes.midPriceLine,\r\n });\r\n const { leftLine, rightLine } = useLiquidityLine({\r\n leftStatAreaPoints,\r\n rightStatAreaPoints,\r\n minXLN10,\r\n maxXLN10,\r\n maxLeftHeight,\r\n maxRightHeight,\r\n gridAreaWidth: width,\r\n gridAreaHeight,\r\n colorMap: colorMapRes,\r\n });\r\n\r\n return (\r\n <Stage\r\n width={width}\r\n height={height}\r\n onMouseMove={handleMouseover}\r\n onMouseOver={handleMouseover}\r\n onMouseEnter={handleMouseover}\r\n onMouseOut={handleMouseOut}\r\n >\r\n <Layer>\r\n <Rect\r\n x={0}\r\n y={0}\r\n width={width}\r\n height={gridAreaHeight}\r\n stroke={colorMapRes.grid}\r\n strokeWidth={1}\r\n />\r\n\r\n {gridLine}\r\n\r\n {horizontalLabel}\r\n\r\n {leftLine}\r\n\r\n {rightLine}\r\n\r\n {middleLine}\r\n </Layer>\r\n\r\n <Layer ref={tooltipRef} visible={false}>\r\n <Line\r\n points={[]}\r\n closed\r\n listening={false}\r\n lineCap=\"round\"\r\n lineJoin=\"round\"\r\n id=\"area\"\r\n />\r\n\r\n <Line\r\n points={[]}\r\n strokeWidth={1}\r\n stroke=\"#ff4f73\"\r\n lineJoin=\"round\"\r\n lineCap=\"round\"\r\n dash={[4, 6]}\r\n id=\"toolTipVertLine\"\r\n />\r\n <Circle\r\n x={0}\r\n y={0}\r\n radius={5}\r\n fill=\"#FF5072\"\r\n stroke=\"rgba(255, 80, 114, 0.3)\"\r\n strokeWidth={12}\r\n id=\"joinCircle\"\r\n />\r\n <Label listening={false} x={0} y={0} id=\"priceTextLabel\">\r\n <Tag fill={colorMapRes.tooltipBg} id=\"priceTextLabel-tag\" />\r\n <Text\r\n text=\"-\"\r\n fontSize={14}\r\n fontFamily=\"Manrope\"\r\n padding={2}\r\n fill=\"#FF5072\"\r\n id=\"priceTextLabel-text\"\r\n />\r\n </Label>\r\n\r\n <Label listening={false} id=\"tooltip\">\r\n <Tag\r\n fill={colorMapRes.tooltipBg}\r\n pointerDirection=\"down\"\r\n pointerWidth={15}\r\n pointerHeight={8}\r\n cornerRadius={8}\r\n lineJoin=\"round\"\r\n id=\"tooltip-tag\"\r\n />\r\n <Text\r\n text=\"\"\r\n fontFamily=\"Manrope\"\r\n fontSize={12}\r\n lineHeight={17 / 12}\r\n // width={210}\r\n padding={labelPadding}\r\n fill=\"#FF5072\"\r\n id=\"tooltip-Text\"\r\n />\r\n </Label>\r\n </Layer>\r\n </Stage>\r\n );\r\n}\r\n","import {\r\n PMMHelper,\r\n PmmModelParams,\r\n PMMState as PMMStateFromSDK,\r\n solveQuadraticFunctionForTarget,\r\n} from '@dodoex/api';\r\n\r\nimport BigNumber from 'bignumber.js';\r\nimport { useMemo } from 'react';\r\n\r\n/**\r\n * data point\r\n */\r\n\r\nexport type StatPoint = {\r\n giveAmount: BigNumber;\r\n getAmount: BigNumber;\r\n price: BigNumber;\r\n};\r\n\r\n/**\r\n * Drawing method:\r\n Substitute the minimum value to get the height of the center point, which is the bottom edge of the area chart. Substitute the maximum value to get the vertex of the area chart. The length of the bottom edge from the vertex is the price range.\r\n\r\n Divide the total area into one hundred equal parts. Calculate each part on the basis of the previous part. Substitute the new area into the formula to get a new price. The difference from the previous price is the width of the rectangle. The area is divided by The width is the height of the rectangle, which is the ordinate.\r\n\r\n First, calculate a series of points as a point set based on the rectangular accumulation method.\r\n\r\n When the mouse hovers, the abscissa is the price. Find the closest price in the point set. Use this price as the end point and the center line as the starting point to get a subset of the point set. You can draw a line by combining the center line and the abscissa. The area of the trapezoid can be drawn.\r\n\r\n Update: Taking Δl as the ordinate, Δl = (the difference between the quantity passed in from the previous point and the next point) * (the difference between the quantity obtained from the previous point and the next point)\r\n */\r\nexport type StatAreaPoint = {\r\n area: BigNumber;\r\n price: BigNumber;\r\n // The midpoint between the current price and the previous price is used as the abscissa\r\n middlePrice: BigNumber;\r\n rectangleHeight: BigNumber;\r\n};\r\n\r\nexport function usePoints({ params }: { params: PmmModelParams }) {\r\n return useMemo(() => {\r\n const b = new BigNumber(params.b);\r\n const q = new BigNumber(params.q);\r\n let b0 = new BigNumber(params.b0);\r\n const q0 = new BigNumber(params.q0);\r\n const i = new BigNumber(params.i);\r\n const K = new BigNumber(params.k);\r\n const { R } = params;\r\n\r\n // When created, b0 is equal to b, and a b0 needs to be calculated.\r\n if (R === 1 && b0.eq(b)) {\r\n b0 = solveQuadraticFunctionForTarget(\r\n b,\r\n q.minus(q0),\r\n new BigNumber(1).div(i),\r\n K,\r\n );\r\n }\r\n\r\n const pmmState = new PMMStateFromSDK({\r\n i,\r\n K,\r\n B: b,\r\n Q: q,\r\n B0: b0,\r\n Q0: q0,\r\n R,\r\n mtFeeRate: new BigNumber(0),\r\n lpFeeRate: new BigNumber(0),\r\n });\r\n\r\n const pmm = new PMMHelper();\r\n const B = new BigNumber(pmmState.B);\r\n // const Q = new BigNumber(pmmState.Q);\r\n\r\n // A collection of data points, mapped into points on the graph through equal width and height proportions\r\n const leftStatPoints: StatPoint[] = [];\r\n const rightStatPoints: StatPoint[] = [];\r\n let maxLeftHeight = new BigNumber(0);\r\n let maxRightHeight = new BigNumber(0);\r\n\r\n const midPrice = pmm.GetMidPrice(pmmState);\r\n const portion = q.gt(0) ? b.div(q) : new BigNumber(1);\r\n // console.log('v2 midPrice', midPrice.toString(), portion.toString());\r\n\r\n for (let index = 0; index <= 250; index++) {\r\n let giveAmount = B.multipliedBy(index / 100).multipliedBy(\r\n midPrice.multipliedBy(portion).multipliedBy(4),\r\n );\r\n // let giveAmount = B.multipliedBy(index / 100).multipliedBy(4);\r\n // let giveAmount = B.multipliedBy(index / 100);\r\n if (index === 0) {\r\n giveAmount = B.multipliedBy(1 / 100000000000);\r\n }\r\n // sellBase needs to pass in the number of quotes and gets the number of bases\r\n const getAmount = pmm?.QuerySellBase(giveAmount, pmmState);\r\n // console.log('v2 QuerySellBase', giveAmount.toString(), getAmount.toString());\r\n\r\n if (!getAmount.isNaN() && getAmount.gt(0)) {\r\n // Price on the left\r\n const price = getAmount.div(giveAmount);\r\n leftStatPoints.push({\r\n giveAmount,\r\n getAmount,\r\n price,\r\n });\r\n continue;\r\n }\r\n leftStatPoints.push({\r\n giveAmount,\r\n getAmount: new BigNumber(0),\r\n price: new BigNumber(0),\r\n });\r\n }\r\n\r\n for (let index = 0; index <= 250; index++) {\r\n let giveAmount = B.multipliedBy(index / 100).multipliedBy(\r\n midPrice.multipliedBy(4),\r\n );\r\n // let giveAmount = B.multipliedBy(index / 100);\r\n if (index === 0) {\r\n giveAmount = B.multipliedBy(1 / 100000000000);\r\n }\r\n // sellQuote needs to pass in the number of bases and get the number of quotes\r\n const getAmount = pmm?.QuerySellQuote(giveAmount, pmmState);\r\n // console.log('v2 QuerySellQuote', giveAmount.toString(), getAmount.toString());\r\n\r\n if (!getAmount.isNaN() && getAmount.gt(0)) {\r\n // Price on the right\r\n const price = giveAmount.dividedBy(getAmount);\r\n rightStatPoints.push({\r\n giveAmount,\r\n getAmount,\r\n price,\r\n });\r\n continue;\r\n }\r\n rightStatPoints.push({\r\n giveAmount,\r\n getAmount: new BigNumber(0),\r\n price: new BigNumber(0),\r\n });\r\n }\r\n\r\n if (leftStatPoints.length < 2 && rightStatPoints.length < 2) {\r\n return {\r\n leftStatAreaPoints: [],\r\n rightStatAreaPoints: [],\r\n maxLeftHeight: new BigNumber(10).multipliedBy(1.2),\r\n maxRightHeight: new BigNumber(10).multipliedBy(1.2),\r\n middlePriceLN10: new BigNumber(0),\r\n minXLN10: new BigNumber(-1),\r\n maxXLN10: new BigNumber(1),\r\n };\r\n }\r\n\r\n // The data points are divided into two groups on the left and right, and the width and height corresponding to the area are calculated.\r\n const leftStatAreaPoints: StatAreaPoint[] = [];\r\n for (let index = 1; index < leftStatPoints.length; index++) {\r\n const statPoint = leftStatPoints[index];\r\n const { giveAmount, getAmount, price } = statPoint;\r\n\r\n const lastStatPoint = leftStatPoints[index - 1];\r\n\r\n if (!price.isNaN() && price.gt(0) && lastStatPoint) {\r\n const priceChange = price.minus(lastStatPoint.price).abs();\r\n const giveAmountChange = giveAmount\r\n .minus(lastStatPoint.giveAmount)\r\n .abs();\r\n const getAmountChange = getAmount.minus(lastStatPoint.getAmount).abs();\r\n const leftRectangleHeight =\r\n getAmountChange.multipliedBy(giveAmountChange);\r\n\r\n if (index === 1) {\r\n leftStatAreaPoints.push({\r\n area: getAmount,\r\n price,\r\n middlePrice: price.plus(priceChange.div(1.1)),\r\n rectangleHeight: leftRectangleHeight.plus(\r\n leftRectangleHeight.multipliedBy(0.03),\r\n ),\r\n });\r\n }\r\n leftStatAreaPoints.push({\r\n area: getAmount,\r\n price,\r\n middlePrice: price.plus(priceChange.div(2)),\r\n rectangleHeight: leftRectangleHeight,\r\n });\r\n\r\n maxLeftHeight = BigNumber.max(leftRectangleHeight, maxLeftHeight);\r\n }\r\n }\r\n\r\n const rightStatAreaPoints: StatAreaPoint[] = [];\r\n for (let index = 1; index < rightStatPoints.length; index++) {\r\n const statPoint = rightStatPoints[index];\r\n const { giveAmount, getAmount, price } = statPoint;\r\n\r\n const lastStatPoint = rightStatPoints[index - 1];\r\n const lastPrice = lastStatPoint.price;\r\n const lastGiveAmount = lastStatPoint.giveAmount;\r\n const lastGetAmount = lastStatPoint.getAmount;\r\n\r\n if (!price.isNaN() && price.gt(0) && lastStatPoint) {\r\n const priceChange = price.minus(lastPrice).abs();\r\n const giveAmountChange = giveAmount.minus(lastGiveAmount).abs();\r\n const getAmountChange = getAmount.minus(lastGetAmount).abs();\r\n const rightRectangleHeight =\r\n getAmountChange.multipliedBy(giveAmountChange);\r\n\r\n if (index === 1) {\r\n rightStatAreaPoints.push({\r\n area: getAmount,\r\n price,\r\n middlePrice: price.minus(priceChange.div(1.1)),\r\n rectangleHeight: rightRectangleHeight.plus(\r\n rightRectangleHeight.multipliedBy(0.03),\r\n ),\r\n });\r\n }\r\n\r\n rightStatAreaPoints.push({\r\n area: getAmount,\r\n price,\r\n middlePrice: price.minus(priceChange.div(2)),\r\n rectangleHeight: rightRectangleHeight,\r\n });\r\n\r\n maxRightHeight = BigNumber.max(rightRectangleHeight, maxRightHeight);\r\n }\r\n }\r\n\r\n // Intuitively, the data points on the left are distributed from the middle to the left, and the data points on the right are distributed from the middle to the right.\r\n // Left starting point\r\n const leftStartStatPoint =\r\n leftStatPoints.length > 0\r\n ? leftStatPoints[leftStatPoints.length - 1]\r\n : rightStatPoints[0];\r\n // midpoint\r\n const middleStatPoint =\r\n rightStatPoints.length > 0 ? rightStatPoints[0] : leftStatPoints[0];\r\n // Right end point\r\n const rightEndStatPoint =\r\n rightStatPoints.length > 0\r\n ? rightStatPoints[rightStatPoints.length - 1]\r\n : leftStatPoints[0];\r\n\r\n const minX = leftStartStatPoint.price;\r\n const maxX = rightEndStatPoint.price;\r\n const middlePrice = middleStatPoint.price;\r\n const middlePriceLN10 = new BigNumber(Math.log10(middlePrice.toNumber()));\r\n // Center the graphic\r\n let minXLN10 = minX.gt(0)\r\n ? new BigNumber(Math.log10(minX.toNumber()))\r\n : new BigNumber(-Math.log10(maxX.toNumber()));\r\n let maxXLN10 = maxX.gt(0)\r\n ? new BigNumber(Math.log10(maxX.toNumber()))\r\n : new BigNumber(-Math.log10(minX.toNumber()));\r\n const rangeLN10 = BigNumber.max(\r\n middlePriceLN10.minus(minXLN10).abs(),\r\n maxXLN10.minus(middlePriceLN10).abs(),\r\n );\r\n minXLN10 = middlePriceLN10.minus(rangeLN10);\r\n maxXLN10 = middlePriceLN10.plus(rangeLN10);\r\n // console.log('v2 price', {\r\n // // middlePrice: middlePrice.toString(),\r\n // minX: minX.toString(),\r\n // // maxX: maxX.toString(),\r\n // middlePriceLN10: middlePriceLN10.toString(),\r\n // minXLN10: minXLN10.toString(),\r\n // maxXLN10: maxXLN10.toString(),\r\n // });\r\n\r\n return {\r\n leftStatAreaPoints,\r\n rightStatAreaPoints,\r\n maxLeftHeight: maxLeftHeight.multipliedBy(1.2),\r\n maxRightHeight: maxRightHeight.multipliedBy(1.2),\r\n minXLN10,\r\n maxXLN10,\r\n middlePriceLN10,\r\n };\r\n }, [params]);\r\n}\r\n","import { useMemo } from 'react';\r\nimport { Line } from 'react-konva';\r\n\r\nexport function useGridLine({\r\n gridAreaHeight,\r\n gridAreaWidth,\r\n horizontalLineCount,\r\n verticalLineCount,\r\n color = '#2A2A2D',\r\n}: {\r\n gridAreaHeight: number;\r\n gridAreaWidth: number;\r\n horizontalLineCount: number;\r\n verticalLineCount: number;\r\n color?: string;\r\n}) {\r\n return useMemo(() => {\r\n const horizontalGridLines: Array<Array<number>> = [];\r\n const horizontalGridPerBlockHeight =\r\n gridAreaHeight / (horizontalLineCount + 1);\r\n const verticalGridLines: Array<Array<number>> = [];\r\n const verticalGridPerBlockHeight = gridAreaWidth / (verticalLineCount + 1);\r\n for (let index = 0; index < horizontalLineCount; index++) {\r\n const y = horizontalGridPerBlockHeight * (index + 1);\r\n horizontalGridLines.push([0, y, gridAreaWidth, y]);\r\n }\r\n for (let index = 0; index < verticalLineCount; index++) {\r\n const x = verticalGridPerBlockHeight * (index + 1);\r\n verticalGridLines.push([x, 0, x, gridAreaHeight]);\r\n }\r\n return (\r\n <>\r\n {horizontalGridLines.map((points, index) => (\r\n <Line\r\n key={index}\r\n points={points}\r\n stroke={color}\r\n strokeWidth={1}\r\n lineCap=\"round\"\r\n lineJoin=\"round\"\r\n tension={1}\r\n listening={false}\r\n />\r\n ))}\r\n {verticalGridLines.map((points, index) => (\r\n <Line\r\n key={index}\r\n points={points}\r\n stroke={color}\r\n strokeWidth={1}\r\n lineCap=\"round\"\r\n lineJoin=\"round\"\r\n tension={1}\r\n listening={false}\r\n />\r\n ))}\r\n </>\r\n );\r\n }, [\r\n gridAreaHeight,\r\n gridAreaWidth,\r\n horizontalLineCount,\r\n verticalLineCount,\r\n color,\r\n ]);\r\n}\r\n","import BigNumber from 'bignumber.js';\r\nimport { useMemo } from 'react';\r\nimport { Line, Text } from 'react-konva';\r\nimport { formatShortNumber } from '../../../utils/formatter';\r\nimport { computeTargetPrice } from './helper';\r\n\r\nexport function useHorizontalLabel({\r\n minXLN10,\r\n maxXLN10,\r\n labelCount,\r\n gridAreaHeight,\r\n gridAreaWidth,\r\n color = '#606066',\r\n}: {\r\n minXLN10: BigNumber;\r\n maxXLN10: BigNumber;\r\n labelCount: number;\r\n gridAreaHeight: number;\r\n gridAreaWidth: number;\r\n color?: string;\r\n}) {\r\n return useMemo(() => {\r\n const labelWidth = gridAreaWidth / (labelCount + 1);\r\n const labelTextList: Array<{\r\n x: number;\r\n y: number;\r\n text: string;\r\n }> = [];\r\n const labelLines: Array<Array<number>> = [];\r\n for (let index = 0; index < labelCount; index++) {\r\n const x = labelWidth / 2 + labelWidth * index;\r\n labelTextList.push({\r\n x,\r\n y: gridAreaHeight + 10.08 + 1,\r\n text: formatShortNumber(\r\n computeTargetPrice({\r\n x: labelWidth * (index + 1),\r\n width: gridAreaWidth,\r\n minXLN10,\r\n maxXLN10,\r\n }),\r\n ),\r\n });\r\n\r\n const lineX = labelWidth * (index + 1);\r\n labelLines.push([\r\n lineX,\r\n gridAreaHeight + 1,\r\n lineX,\r\n gridAreaHeight + 4 + 1,\r\n ]);\r\n }\r\n return (\r\n <>\r\n {labelTextList.map((labelText, index) => (\r\n <Text\r\n key={index}\r\n x={labelText.x}\r\n y={labelText.y}\r\n text={labelText.text}\r\n fontSize={14}\r\n fontFamily=\"Manrope\"\r\n fill={color}\r\n width={labelWidth}\r\n padding={0}\r\n align=\"center\"\r\n verticalAlign=\"bottom\"\r\n listening={false}\r\n />\r\n ))}\r\n\r\n {labelLines.map((points, index) => (\r\n <Line\r\n key={index}\r\n points={points}\r\n stroke={color}\r\n strokeWidth={1}\r\n lineCap=\"butt\"\r\n lineJoin=\"miter\"\r\n tension={1}\r\n listening={false}\r\n />\r\n ))}\r\n </>\r\n );\r\n }, [minXLN10, maxXLN10, gridAreaHeight, gridAreaWidth, labelCount]);\r\n}\r\n","import { useMemo } from 'react';\r\nimport { Line } from 'react-konva';\r\n\r\nexport function useMiddleLine({\r\n gridAreaHeight,\r\n gridAreaWidth,\r\n color = '#606066',\r\n}: {\r\n gridAreaHeight: number;\r\n gridAreaWidth: number;\r\n color?: string;\r\n}) {\r\n return useMemo(() => {\r\n const topPointX = gridAreaWidth / 2;\r\n return (\r\n <Line\r\n points={[topPointX, 0, topPointX, gridAreaHeight - 1]}\r\n stroke={color}\r\n strokeWidth={1}\r\n lineCap=\"round\"\r\n lineJoin=\"round\"\r\n tension={1}\r\n listening={false}\r\n />\r\n );\r\n }, [gridAreaHeight, gridAreaWidth, color]);\r\n}\r\n","import BigNumber from 'bignumber.js';\r\nimport { useMemo } from 'react';\r\nimport { Line } from 'react-konva';\r\nimport {\r\n computePointYByHeight,\r\n computeTargetLN,\r\n computeTargetX,\r\n} from './helper';\r\nimport { ColorMap } from './LiquidityChartKonva';\r\nimport { StatAreaPoint } from './usePoints';\r\n\r\nexport function useLiquidityLine({\r\n leftStatAreaPoints,\r\n rightStatAreaPoints,\r\n minXLN10,\r\n maxXLN10,\r\n maxLeftHeight,\r\n maxRightHeight,\r\n gridAreaWidth,\r\n gridAreaHeight,\r\n colorMap,\r\n}: {\r\n leftStatAreaPoints: Array<StatAreaPoint>;\r\n rightStatAreaPoints: Array<StatAreaPoint>;\r\n minXLN10: BigNumber;\r\n maxXLN10: BigNumber;\r\n maxLeftHeight: BigNumber;\r\n maxRightHeight: BigNumber;\r\n gridAreaWidth: number;\r\n gridAreaHeight: number;\r\n colorMap: ColorMap;\r\n}) {\r\n const leftLine = useMemo(() => {\r\n if (leftStatAreaPoints.length < 1) {\r\n return <></>;\r\n }\r\n const points: Array<number> = [];\r\n let minPointY = gridAreaHeight;\r\n for (const statPoint of leftStatAreaPoints) {\r\n const { middlePrice, rectangleHeight } = statPoint;\r\n const targetLN10 = computeTargetLN({ target: middlePrice });\r\n const x = computeTargetX({\r\n minXLN10,\r\n maxXLN10,\r\n width: gridAreaWidth,\r\n targetLN10,\r\n });\r\n const y = computePointYByHeight({\r\n maxHeight: maxLeftHeight,\r\n gridAreaHeight,\r\n value: rectangleHeight,\r\n });\r\n points.push(x, y);\r\n if (y < minPointY) {\r\n minPointY = y;\r\n }\r\n }\r\n\r\n // Gradient color points: from center to left\r\n const linearGradientPoints = points.slice();\r\n const [rightEndPointX, rightEndPointY] = linearGradientPoints;\r\n const leftStartPointY =\r\n linearGradientPoints[linearGradientPoints.length - 1];\r\n const leftStartPointX =\r\n linearGradientPoints[linearGradientPoints.length - 2];\r\n linearGradientPoints.push(leftStartPointX, leftStartPointY);\r\n linearGradientPoints.push(leftStartPointX, gridAreaHeight);\r\n linearGradientPoints.push(rightEndPointX, gridAreaHeight);\r\n linearGradientPoints.push(rightEndPointX, rightEndPointY);\r\n return (\r\n <>\r\n <Line\r\n points={linearGradientPoints}\r\n closed\r\n listening={false}\r\n lineCap=\"round\"\r\n lineJoin=\"round\"\r\n fillLinearGradientStartPoint={{ x: 0, y: gridAreaHeight }}\r\n fillLinearGradientEndPoint={{ x: 0, y: minPointY }}\r\n fillLinearGradientColorStops={colorMap.leftBg}\r\n />\r\n <Line\r\n points={points}\r\n stroke={colorMap.leftLine}\r\n strokeWidth={2}\r\n lineCap=\"round\"\r\n lineJoin=\"round\"\r\n listening={false}\r\n />\r\n </>\r\n );\r\n }, [\r\n leftStatAreaPoints,\r\n gridAreaWidth,\r\n minXLN10,\r\n maxXLN10,\r\n gridAreaHeight,\r\n maxLeftHeight,\r\n ]);\r\n\r\n const rightLine = useMemo(() => {\r\n if (rightStatAreaPoints.length < 1) {\r\n return <></>;\r\n }\r\n const points: Array<number> = [];\r\n let minPointY = gridAreaHeight;\r\n for (const statPoint of rightStatAreaPoints) {\r\n const { middlePrice, rectangleHeight } = statPoint;\r\n const targetLN10 = computeTargetLN({ target: middlePrice });\r\n const x = computeTargetX({\r\n minXLN10,\r\n maxXLN10,\r\n width: gridAreaWidth,\r\n targetLN10,\r\n });\r\n const y = computePointYByHeight({\r\n maxHeight: maxRightHeight,\r\n gridAreaHeight,\r\n value: rectangleHeight,\r\n });\r\n points.push(x, y);\r\n if (y < minPointY) {\r\n minPointY = y;\r\n }\r\n }\r\n // Gradient colored dots\r\n const linearGradientPoints = points.slice();\r\n const [firstPointX] = linearGradientPoints;\r\n linearGradientPoints.unshift(firstPointX, gridAreaHeight);\r\n linearGradientPoints.unshift(gridAreaWidth, gridAreaHeight);\r\n return (\r\n <>\r\n <Line\r\n points={linearGradientPoints}\r\n closed\r\n listening={false}\r\n lineCap=\"round\"\r\n lineJoin=\"round\"\r\n fillLinearGradientStartPoint={{ x: 0, y: gridAreaHeight }}\r\n fillLinearGradientEndPoint={{ x: 0, y: minPointY }}\r\n fillLinearGradientColorStops={colorMap.rightBg}\r\n />\r\n <Line\r\n points={points}\r\n stroke={colorMap.rightLine}\r\n strokeWidth={2}\r\n lineCap=\"round\"\r\n lineJoin=\"round\"\r\n listening={false}\r\n />\r\n </>\r\n );\r\n }, [\r\n rightStatAreaPoints,\r\n gridAreaWidth,\r\n minXLN10,\r\n maxXLN10,\r\n gridAreaHeight,\r\n maxRightHeight,\r\n ]);\r\n\r\n return {\r\n leftLine,\r\n rightLine,\r\n };\r\n}\r\n","import { PMMModel, PmmModelParams } from '@dodoex/api';\r\nimport BigNumber from 'bignumber.js';\r\nimport { Container, TipWrapper } from './index.styled';\r\nimport { ColorMap, LiquidityChartKonva } from './LiquidityChartKonva';\r\nimport { chartT as t } from '../i18n';\r\n\r\ntype Props = {\r\n width?: number;\r\n height?: number;\r\n baseTokenSymbol: string;\r\n quoteTokenSymbol: string;\r\n pmmModel?: PMMModel;\r\n pmmParams?: PmmModelParams;\r\n midPrice?: BigNumber;\r\n notShowTipText?: boolean;\r\n colorMap?: ColorMap;\r\n};\r\n\r\nconst LiquidityChart: React.FC<Props> = ({\r\n width = 834,\r\n height = 462,\r\n baseTokenSymbol,\r\n quoteTokenSymbol,\r\n pmmModel,\r\n pmmParams,\r\n midPrice,\r\n notShowTipText,\r\n colorMap,\r\n}: Props) => {\r\n return (\r\n <Container>\r\n {pmmParams !== undefined &&\r\n midPrice !== undefined &&\r\n pmmModel !== undefined &&\r\n midPrice !== undefined && (\r\n <LiquidityChartKonva\r\n width={width}\r\n height={height}\r\n params={pmmParams}\r\n midPrice={midPrice}\r\n pmmModel={pmmModel}\r\n baseTokenSymbol={baseTokenSymbol}\r\n quoteTokenSymbol={quoteTokenSymbol}\r\n colorMap={colorMap}\r\n />\r\n )}\r\n\r\n {!notShowTipText ? (\r\n <TipWrapper>\r\n * \r\n {t('pool.chart.liquidity-chart-tip', {\r\n baseTokenSymbol,\r\n })}\r\n </TipWrapper>\r\n ) : (\r\n ''\r\n )}\r\n </Container>\r\n );\r\n};\r\n\r\nexport default LiquidityChart;\r\n"],"names":["Container","styled","div","TipWrapper","computePointYByHeight","maxHeight","gridAreaHeight","value","height","BigNumber","minus","onePXY","multipliedBy","plus","toNumber","getStatAreaPointByX","targetPrice","areaPoints","isLeft","index","length","point","nextPoint","targetAreaStatPoint","targetAreaStatPoints","lte","middlePrice","gte","slice","computeTargetPrice","x","width","minXLN10","maxXLN10","power","computeTargetX","targetLN10","computeTargetLN","target","Math","log10","bgColor","LiquidityChartKonva","params","baseTokenSymbol","quoteTokenSymbol","colorMap","maxLeftHeight","maxRightHeight","leftStatAreaPoints","rightStatAreaPoints","useMemo","b","q","b0","q0","i","K","k","R","eq","solveQuadraticFunctionForTarget","pmmState","PMMStateFromSDK","B","Q","B0","Q0","mtFeeRate","lpFeeRate","pmm","PMMHelper","leftStatPoints","rightStatPoints","midPrice","GetMidPrice","portion","gt","giveAmount","getAmount","QuerySellBase","isNaN","price","push","QuerySellQuote","dividedBy","middlePriceLN10","statPoint","lastStatPoint","priceChange","abs","giveAmountChange","leftRectangleHeight","area","rectangleHeight","max","lastPrice","lastGiveAmount","lastGetAmount","rightRectangleHeight","leftStartStatPoint","middleStatPoint","rightEndStatPoint","minX","maxX","rangeLN10","usePoints","tooltipRef","useRef","colorMapRes","merge","grid","midPriceLine","leftBg","leftLine","leftColor","rightBg","rightLine","rightColor","tooltipBg","tooltipColor","undefined","textColor","handleMouseover","evt","current","tooltip","node","mousePos","_a","getStage","getPointerPosition","middleX","result","targetAreaPointX","targetAreaPointY","tooltipLabel","findOne","toolTipVertLine","joinCircle","tooltipText","tooltipTag","priceTextLabel","priceTextLabelText","position","y","fill","text","t","amount","formatShortNumber","symbol","pointerDirection","pointerHeight","pointerWidth","offsetX","offsetY","points","stroke","joinFill","joinStroke","colorRgb","targetLN10Gradient","xGradient","linearGradientPoints","firstPointX","firstPointY","unshift","show","gridLine","gridAreaWidth","horizontalLineCount","verticalLineCount","color","horizontalGridLines","horizontalGridPerBlockHeight","verticalGridLines","verticalGridPerBlockHeight","_jsxs","_Fragment","children","map","_jsx","Line","strokeWidth","lineCap","lineJoin","tension","listening","useGridLine","horizontalLabel","labelCount","labelWidth","labelTextList","labelLines","lineX","labelText","Text","fontSize","fontFamily","padding","align","verticalAlign","useHorizontalLabel","middleLine","topPointX","useMiddleLine","minPointY","rightEndPointX","rightEndPointY","leftStartPointY","leftStartPointX","closed","fillLinearGradientStartPoint","fillLinearGradientEndPoint","fillLinearGradientColorStops","useLiquidityLine","Stage","onMouseMove","onMouseOver","onMouseEnter","onMouseOut","handleMouseOut","hide","Layer","Rect","ref","visible","id","dash","Circle","radius","Label","Tag","cornerRadius","lineHeight","labelPadding","LiquidityChart","pmmModel","pmmParams","notShowTipText"],"mappings":"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"}
|