@dodoex/widgets 3.14.1-react.4 → 3.14.1-react.6

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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-Btu6is6Z.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 *&nbsp;\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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"}