Merge remote-tracking branch 'origin/main' into max/switch-market-mobile
|
@ -0,0 +1,50 @@
|
|||
# GitHub SAST (static application security testing) tool that scans code for security bugs and unsafe coding practices
|
||||
|
||||
name: 'CodeQL Scan'
|
||||
|
||||
# Events that triggers CodeQL to run
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
# Option to configure as a scheduled action to monitor for drift in code
|
||||
# schedule:
|
||||
# - cron: '0 6 * * 1'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: CodeQL Analysis
|
||||
runs-on: ubuntu-latest
|
||||
# Skip any PR created by dependabot to avoid permission issues (if used)
|
||||
if: (github.actor != 'dependabot[bot]')
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# Add more languages if relevnt to the project
|
||||
language: ['javascript']
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Initialises the CodeQL tools for scanning (sorry Americans)
|
||||
- name: Initialise CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
|
||||
# Run the analysis and upload results to the security tab
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
|
@ -0,0 +1,40 @@
|
|||
# Trivy configured to scan for vulnerable dependencies in the project software composition
|
||||
|
||||
name: Trivy Scan
|
||||
|
||||
# Events that triggers Trivy to run
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Trivy Vulnerability Scanner
|
||||
runs-on: ubuntu-latest
|
||||
# Skip any PR created by dependabot to avoid permission issues (if used)
|
||||
if: (github.actor != 'dependabot[bot]')
|
||||
steps:
|
||||
# Checking out the repo to scan
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Run Trivy with the following args
|
||||
- name: Run Trivy
|
||||
uses: aquasecurity/trivy-action@master
|
||||
with:
|
||||
scan-type: 'fs' # Filesystem mode
|
||||
ignore-unfixed: true # Ignore vulnerabilities with no available fix
|
||||
format: 'template' # Template output mode
|
||||
template: '@/contrib/sarif.tpl' # SARIF template to be compatible with GitHub security tab
|
||||
output: 'trivy-results.sarif' # Output file name
|
||||
severity: 'CRITICAL' # Report error only on critical vulnerabilities. Warn on lower severities
|
||||
exit-code: '1' # Fail the job if a critical vulnerability with fix available is found
|
||||
|
||||
# Generate the output as SARIF and upload to the security tab
|
||||
- name: Upload Trivy results
|
||||
uses: github/codeql-action/upload-sarif@v1
|
||||
if: always() # Upload even if the job has failed due to a vulnerability
|
||||
with:
|
||||
sarif_file: 'trivy-results.sarif'
|
|
@ -100,9 +100,16 @@ const BalancesTable = ({ showZeroBalances = false }) => {
|
|||
const spotMarkets = Object.values(markets).filter(
|
||||
(mkt) => mkt instanceof Market
|
||||
) as Market[]
|
||||
await mangoClient.settleAll(mangoGroup, mangoAccount, spotMarkets, wallet)
|
||||
const txids = await mangoClient.settleAll(
|
||||
mangoGroup,
|
||||
mangoAccount,
|
||||
spotMarkets,
|
||||
wallet
|
||||
)
|
||||
|
||||
notify({ title: t('settle-success') })
|
||||
for (const txid of txids) {
|
||||
notify({ title: t('settle-success'), txid })
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('Error settling all:', e)
|
||||
if (e.message === 'No unsettled funds') {
|
||||
|
|
|
@ -16,6 +16,7 @@ interface ChartProps {
|
|||
type: string
|
||||
labelFormat: (x) => ReactNode
|
||||
tickFormat?: (x) => any
|
||||
showAll?: boolean
|
||||
}
|
||||
|
||||
const Chart: FunctionComponent<ChartProps> = ({
|
||||
|
@ -29,6 +30,7 @@ const Chart: FunctionComponent<ChartProps> = ({
|
|||
type,
|
||||
hideRangeFilters,
|
||||
yAxisWidth,
|
||||
showAll = false,
|
||||
}) => {
|
||||
const [mouseData, setMouseData] = useState<string | null>(null)
|
||||
const [daysToShow, setDaysToShow] = useState(daysRange || 30)
|
||||
|
@ -119,6 +121,16 @@ const Chart: FunctionComponent<ChartProps> = ({
|
|||
>
|
||||
30D
|
||||
</button>
|
||||
{showAll ? (
|
||||
<button
|
||||
className={`default-transition font-bold ml-3 text-th-fgd-1 text-xs hover:text-th-primary focus:outline-none ${
|
||||
daysToShow === 1000 && 'text-th-primary'
|
||||
}`}
|
||||
onClick={() => setDaysToShow(1000)}
|
||||
>
|
||||
All
|
||||
</button>
|
||||
) : null}
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
|
@ -138,15 +150,15 @@ const Chart: FunctionComponent<ChartProps> = ({
|
|||
/>
|
||||
<defs>
|
||||
<linearGradient id="gradientArea" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0%" stopColor="#FF9C24" stopOpacity={0.5} />
|
||||
<stop offset="100%" stopColor="#FF9C24" stopOpacity={0} />
|
||||
<stop offset="0%" stopColor="#ffba24" stopOpacity={1} />
|
||||
<stop offset="100%" stopColor="#ffba24" stopOpacity={0} />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<Area
|
||||
isAnimationActive={false}
|
||||
type="monotone"
|
||||
dataKey={yAxis}
|
||||
stroke="#FF9C24"
|
||||
stroke="#ffba24"
|
||||
fill="url(#gradientArea)"
|
||||
/>
|
||||
<XAxis
|
||||
|
@ -157,7 +169,9 @@ const Chart: FunctionComponent<ChartProps> = ({
|
|||
minTickGap={20}
|
||||
tick={{
|
||||
fill:
|
||||
theme === 'Light' ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.6)',
|
||||
theme === 'Light'
|
||||
? 'rgba(0,0,0,0.4)'
|
||||
: 'rgba(255,255,255,0.35)',
|
||||
fontSize: 10,
|
||||
}}
|
||||
tickLine={false}
|
||||
|
@ -168,9 +182,12 @@ const Chart: FunctionComponent<ChartProps> = ({
|
|||
axisLine={false}
|
||||
hide={data.length > 0 ? false : true}
|
||||
dx={-10}
|
||||
domain={['dataMin', 'dataMax']}
|
||||
tick={{
|
||||
fill:
|
||||
theme === 'Light' ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.6)',
|
||||
theme === 'Light'
|
||||
? 'rgba(0,0,0,0.4)'
|
||||
: 'rgba(255,255,255,0.35)',
|
||||
fontSize: 10,
|
||||
}}
|
||||
tickLine={false}
|
||||
|
@ -207,8 +224,8 @@ const Chart: FunctionComponent<ChartProps> = ({
|
|||
/>
|
||||
<defs>
|
||||
<linearGradient id="gradientBar" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0%" stopColor="#FF9C24" stopOpacity={1} />
|
||||
<stop offset="100%" stopColor="#FF9C24" stopOpacity={0.5} />
|
||||
<stop offset="0%" stopColor="#ffba24" stopOpacity={1} />
|
||||
<stop offset="100%" stopColor="#ffba24" stopOpacity={0.5} />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<Bar
|
||||
|
@ -225,7 +242,9 @@ const Chart: FunctionComponent<ChartProps> = ({
|
|||
minTickGap={20}
|
||||
tick={{
|
||||
fill:
|
||||
theme === 'Light' ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.6)',
|
||||
theme === 'Light'
|
||||
? 'rgba(0,0,0,0.4)'
|
||||
: 'rgba(255,255,255,0.35)',
|
||||
fontSize: 10,
|
||||
}}
|
||||
tickLine={false}
|
||||
|
@ -239,7 +258,9 @@ const Chart: FunctionComponent<ChartProps> = ({
|
|||
dx={-10}
|
||||
tick={{
|
||||
fill:
|
||||
theme === 'Light' ? 'rgba(0,0,0,0.4)' : 'rgba(255,255,255,0.6)',
|
||||
theme === 'Light'
|
||||
? 'rgba(0,0,0,0.4)'
|
||||
: 'rgba(255,255,255,0.35)',
|
||||
fontSize: 10,
|
||||
}}
|
||||
tickLine={false}
|
||||
|
|
|
@ -18,7 +18,7 @@ const DayHighLow = ({ high, low, latest }) => {
|
|||
{t('daily-range')}
|
||||
</div>
|
||||
<div className="flex items-center font-semibold">
|
||||
<div className="pr-2 text-th-fgd-1 md:text-xs">
|
||||
<div className="pr-2 text-th-fgd-2 md:text-xs">
|
||||
{low ? formatUsdValue(low) : <MarketDataLoader />}
|
||||
</div>
|
||||
<div className="h-1.5 flex rounded bg-th-bkg-3 w-16 sm:w-20">
|
||||
|
@ -29,7 +29,7 @@ const DayHighLow = ({ high, low, latest }) => {
|
|||
className="flex rounded bg-th-primary"
|
||||
></div>
|
||||
</div>
|
||||
<div className="pl-2 text-th-fgd-1 md:text-xs">
|
||||
<div className="pl-2 text-th-fgd-2 md:text-xs">
|
||||
{high ? formatUsdValue(high) : <MarketDataLoader />}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -88,6 +88,7 @@ const DepositModal: FunctionComponent<DepositModalProps> = ({
|
|||
txid: err?.txid,
|
||||
type: 'error',
|
||||
})
|
||||
onClose()
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
import { useState } from 'react'
|
||||
// import useLocalStorageState from '../hooks/useLocalStorageState'
|
||||
|
||||
import { XIcon } from '@heroicons/react/solid'
|
||||
|
||||
// const GLOBAL_NOTIFICATION_KEY = 'globalNotification-0.1'
|
||||
|
||||
const GlobalNotification = () => {
|
||||
const [show, setShow] = useState(true)
|
||||
|
||||
if (show) {
|
||||
return (
|
||||
<div className="flex items-center bg-th-bkg-4 text-th-fgd-1">
|
||||
<div className="w-full text-center p-2.5">
|
||||
<span>
|
||||
The Solana network is currently experiencing degraded performance
|
||||
resulting in some transactions timing out.
|
||||
</span>
|
||||
<a
|
||||
href="https://status.solana.com"
|
||||
className="ml-2"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
https://status.solana.com
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<button
|
||||
className="text-th-fgd-1 mr-4 hover:text-th-primary"
|
||||
onClick={() => setShow(false)}
|
||||
>
|
||||
<XIcon className="w-5 h-5" />
|
||||
</button>
|
||||
</div>
|
||||
)
|
||||
} else {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
export default GlobalNotification
|
|
@ -41,7 +41,7 @@ const Input = ({
|
|||
onChange={onChange}
|
||||
className={`${className} bg-th-bkg-1 pb-px px-2 flex-1 rounded-md h-10 text-th-fgd-1 w-full
|
||||
border ${
|
||||
error ? 'border-th-red' : 'border-th-fgd-4'
|
||||
error ? 'border-th-red' : 'border-th-bkg-4'
|
||||
} default-transition hover:border-th-primary
|
||||
focus:border-th-primary focus:outline-none
|
||||
${
|
||||
|
|
|
@ -69,7 +69,6 @@ const MarketDetails = () => {
|
|||
const [perpStats, setPerpStats] = useState([])
|
||||
const [perpVolume, setPerpVolume] = useState(0)
|
||||
const change = ohlcv ? ((ohlcv.c[0] - ohlcv.o[0]) / ohlcv.o[0]) * 100 : ''
|
||||
// const volume = ohlcv ? ohlcv.v[0] : '--'
|
||||
|
||||
const fetchPerpStats = useCallback(async () => {
|
||||
const urlParams = new URLSearchParams({ mangoGroup: groupConfig.name })
|
||||
|
@ -84,7 +83,7 @@ const MarketDetails = () => {
|
|||
const parsedPerpVolume = await perpVolume.json()
|
||||
setPerpVolume(parsedPerpVolume?.data?.volume)
|
||||
setPerpStats(parsedPerpStats)
|
||||
}, [selectedMarketName])
|
||||
}, [selectedMarketName, marketConfig, groupConfig.name])
|
||||
|
||||
useInterval(() => {
|
||||
if (isPerpMarket) {
|
||||
|
@ -179,7 +178,7 @@ const MarketDetails = () => {
|
|||
<div className="text-th-fgd-3 tiny-text pb-0.5">
|
||||
{t('oracle-price')}
|
||||
</div>
|
||||
<div className="font-semibold text-th-fgd-1 md:text-xs">
|
||||
<div className="font-semibold text-th-fgd-2 md:text-xs">
|
||||
{oraclePrice && selectedMarket
|
||||
? oraclePrice.toFixed(getDecimalCount(selectedMarket.tickSize))
|
||||
: '--'}
|
||||
|
@ -196,7 +195,7 @@ const MarketDetails = () => {
|
|||
? `text-th-green`
|
||||
: change < 0
|
||||
? `text-th-red`
|
||||
: `text-th-fgd-1`
|
||||
: `text-th-fgd-2`
|
||||
}`}
|
||||
>
|
||||
{change.toFixed(2) + '%'}
|
||||
|
@ -210,7 +209,7 @@ const MarketDetails = () => {
|
|||
<div className="text-th-fgd-3 tiny-text pb-0.5">
|
||||
{t('daily-volume')}
|
||||
</div>
|
||||
<div className="font-semibold text-th-fgd-1 md:text-xs">
|
||||
<div className="font-semibold text-th-fgd-2 md:text-xs">
|
||||
{perpVolume ? (
|
||||
usdFormatter(perpVolume, 0)
|
||||
) : (
|
||||
|
@ -225,7 +224,7 @@ const MarketDetails = () => {
|
|||
<div className="text-th-fgd-3 tiny-text pb-0.5">
|
||||
{t('average-funding')}
|
||||
</div>
|
||||
<div className="font-semibold text-th-fgd-1 md:text-xs">
|
||||
<div className="font-semibold text-th-fgd-2 md:text-xs">
|
||||
{selectedMarket ? (
|
||||
`${funding1hStr}% (${fundingAprStr}% APR)`
|
||||
) : (
|
||||
|
@ -237,7 +236,7 @@ const MarketDetails = () => {
|
|||
<div className="text-th-fgd-3 tiny-text pb-0.5">
|
||||
{t('open-interest')}
|
||||
</div>
|
||||
<div className="font-semibold text-th-fgd-1 md:text-xs">
|
||||
<div className="font-semibold text-th-fgd-2 md:text-xs">
|
||||
{selectedMarket ? (
|
||||
`${parseOpenInterest(
|
||||
selectedMarket as PerpMarket
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
import { useEffect, useState } from 'react'
|
||||
import Modal from './Modal'
|
||||
import { useTranslation } from 'next-i18next'
|
||||
import Button from './Button'
|
||||
import ButtonGroup from './ButtonGroup'
|
||||
import Input from './Input'
|
||||
import { LinkButton } from './Button'
|
||||
|
||||
const slippagePresets = ['0.1', '0.5', '1', '2']
|
||||
|
||||
const SwapSettingsModal = ({
|
||||
isOpen,
|
||||
onClose,
|
||||
slippage,
|
||||
setSlippage,
|
||||
}: {
|
||||
isOpen: boolean
|
||||
onClose?: () => void
|
||||
slippage: number
|
||||
setSlippage: (x) => void
|
||||
}) => {
|
||||
const { t } = useTranslation('common')
|
||||
const [tempSlippage, setTempSlippage] = useState(slippage)
|
||||
const [inputValue, setInputValue] = useState(
|
||||
tempSlippage ? tempSlippage.toString() : ''
|
||||
)
|
||||
const [showCustomSlippageForm, setShowCustomSlippageForm] = useState(false)
|
||||
|
||||
const handleSetTempSlippage = (s) => {
|
||||
setTempSlippage(s)
|
||||
setInputValue('')
|
||||
}
|
||||
|
||||
const handleSave = () => {
|
||||
setSlippage(inputValue ? parseFloat(inputValue) : tempSlippage)
|
||||
onClose()
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
if (!slippagePresets.includes(tempSlippage.toString())) {
|
||||
setShowCustomSlippageForm(true)
|
||||
}
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<Modal isOpen={isOpen} onClose={onClose} hideClose>
|
||||
<Modal.Header>
|
||||
<h2 className="font-bold text-th-fgd-1 text-lg">Slippage Settings</h2>
|
||||
</Modal.Header>
|
||||
<div className="flex justify-between mb-2">
|
||||
<div className="text-th-fgd-1 text-xs">Slippage</div>
|
||||
<LinkButton
|
||||
className="font-normal text-th-fgd-3 text-xs"
|
||||
onClick={() => setShowCustomSlippageForm(!showCustomSlippageForm)}
|
||||
>
|
||||
{showCustomSlippageForm ? t('presets') : t('custom')}
|
||||
</LinkButton>
|
||||
</div>
|
||||
{showCustomSlippageForm ? (
|
||||
<Input
|
||||
type="text"
|
||||
className="w-full bg-th-bkg-1 focus:outline-none rounded"
|
||||
placeholder="0.00"
|
||||
value={inputValue}
|
||||
onChange={(e) => setInputValue(e.target.value)}
|
||||
suffix="%"
|
||||
/>
|
||||
) : (
|
||||
<ButtonGroup
|
||||
activeValue={tempSlippage.toString()}
|
||||
className="h-10"
|
||||
onChange={(v) => handleSetTempSlippage(v)}
|
||||
unit="%"
|
||||
values={slippagePresets}
|
||||
/>
|
||||
)}
|
||||
<Button className="mt-6 w-full" onClick={handleSave}>
|
||||
Save
|
||||
</Button>
|
||||
</Modal>
|
||||
)
|
||||
}
|
||||
|
||||
export default SwapSettingsModal
|
|
@ -0,0 +1,708 @@
|
|||
import { FunctionComponent, useEffect, useMemo, useState } from 'react'
|
||||
import { EyeOffIcon } from '@heroicons/react/outline'
|
||||
import { ChevronDownIcon } from '@heroicons/react/solid'
|
||||
import { Disclosure } from '@headlessui/react'
|
||||
import dayjs from 'dayjs'
|
||||
import relativeTime from 'dayjs/plugin/relativeTime'
|
||||
import { AreaChart, Area, XAxis, YAxis, Tooltip } from 'recharts'
|
||||
import useDimensions from 'react-cool-dimensions'
|
||||
import { IconButton } from './Button'
|
||||
import { LineChartIcon } from './icons'
|
||||
|
||||
dayjs.extend(relativeTime)
|
||||
|
||||
interface SwapTokenInfoProps {
|
||||
inputTokenId?: string
|
||||
outputTokenId?: string
|
||||
}
|
||||
|
||||
export const numberFormatter = Intl.NumberFormat('en', {
|
||||
minimumFractionDigits: 1,
|
||||
maximumFractionDigits: 5,
|
||||
})
|
||||
|
||||
const SwapTokenInfo: FunctionComponent<SwapTokenInfoProps> = ({
|
||||
inputTokenId,
|
||||
outputTokenId,
|
||||
}) => {
|
||||
const [chartData, setChartData] = useState([])
|
||||
const [hideChart, setHideChart] = useState(false)
|
||||
const [baseTokenId, setBaseTokenId] = useState('mango-markets')
|
||||
const [quoteTokenId, setQuoteTokenId] = useState('usd-coin')
|
||||
const [inputTokenInfo, setInputTokenInfo] = useState(null)
|
||||
const [outputTokenInfo, setOutputTokenInfo] = useState(null)
|
||||
const [mouseData, setMouseData] = useState<string | null>(null)
|
||||
const [daysToShow, setDaysToShow] = useState(1)
|
||||
const { observe, width, height } = useDimensions()
|
||||
|
||||
const handleMouseMove = (coords) => {
|
||||
if (coords.activePayload) {
|
||||
setMouseData(coords.activePayload[0].payload)
|
||||
}
|
||||
}
|
||||
|
||||
const handleMouseLeave = () => {
|
||||
setMouseData(null)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
if (['usd-coin', 'tether'].includes(inputTokenId)) {
|
||||
setBaseTokenId(outputTokenId)
|
||||
setQuoteTokenId(inputTokenId)
|
||||
} else {
|
||||
setBaseTokenId(inputTokenId)
|
||||
setQuoteTokenId(outputTokenId)
|
||||
}
|
||||
}, [inputTokenId, outputTokenId])
|
||||
|
||||
// Use ohlc data
|
||||
|
||||
const getChartData = async () => {
|
||||
const inputResponse = await fetch(
|
||||
`https://api.coingecko.com/api/v3/coins/${baseTokenId}/ohlc?vs_currency=usd&days=${daysToShow}`
|
||||
)
|
||||
const outputResponse = await fetch(
|
||||
`https://api.coingecko.com/api/v3/coins/${quoteTokenId}/ohlc?vs_currency=usd&days=${daysToShow}`
|
||||
)
|
||||
const inputData = await inputResponse.json()
|
||||
const outputData = await outputResponse.json()
|
||||
|
||||
const data = inputData.concat(outputData)
|
||||
|
||||
const formattedData = data.reduce((a, c) => {
|
||||
const found = a.find((price) => price.time === c[0])
|
||||
if (found) {
|
||||
found.price = found.inputPrice / c[4]
|
||||
} else {
|
||||
a.push({ time: c[0], inputPrice: c[4] })
|
||||
}
|
||||
return a
|
||||
}, [])
|
||||
formattedData[formattedData.length - 1].time = Date.now()
|
||||
setChartData(formattedData.filter((d) => d.price))
|
||||
}
|
||||
|
||||
// Alternative chart data. Needs a timestamp tolerance to get data points for each asset
|
||||
|
||||
// const getChartData = async () => {
|
||||
// const now = Date.now() / 1000
|
||||
// const inputResponse = await fetch(
|
||||
// `https://api.coingecko.com/api/v3/coins/${inputTokenId}/market_chart/range?vs_currency=usd&from=${
|
||||
// now - 1 * 86400
|
||||
// }&to=${now}`
|
||||
// )
|
||||
|
||||
// const outputResponse = await fetch(
|
||||
// `https://api.coingecko.com/api/v3/coins/${outputTokenId}/market_chart/range?vs_currency=usd&from=${
|
||||
// now - 1 * 86400
|
||||
// }&to=${now}`
|
||||
// )
|
||||
// const inputData = await inputResponse.json()
|
||||
// const outputData = await outputResponse.json()
|
||||
|
||||
// const data = inputData?.prices.concat(outputData?.prices)
|
||||
|
||||
// const formattedData = data.reduce((a, c) => {
|
||||
// const found = a.find(
|
||||
// (price) => c[0] >= price.time - 120000 && c[0] <= price.time + 120000
|
||||
// )
|
||||
// if (found) {
|
||||
// found.price = found.inputPrice / c[1]
|
||||
// } else {
|
||||
// a.push({ time: c[0], inputPrice: c[1] })
|
||||
// }
|
||||
// return a
|
||||
// }, [])
|
||||
// setChartData(formattedData.filter((d) => d.price))
|
||||
// }
|
||||
|
||||
const getInputTokenInfo = async () => {
|
||||
const response = await fetch(
|
||||
`https://api.coingecko.com/api/v3/coins/${baseTokenId}?localization=false&tickers=false&developer_data=false&sparkline=false
|
||||
`
|
||||
)
|
||||
const data = await response.json()
|
||||
setInputTokenInfo(data)
|
||||
}
|
||||
|
||||
const getOutputTokenInfo = async () => {
|
||||
const response = await fetch(
|
||||
`https://api.coingecko.com/api/v3/coins/${quoteTokenId}?localization=false&tickers=false&developer_data=false&sparkline=false
|
||||
`
|
||||
)
|
||||
const data = await response.json()
|
||||
setOutputTokenInfo(data)
|
||||
}
|
||||
|
||||
useMemo(() => {
|
||||
if (baseTokenId && quoteTokenId) {
|
||||
getChartData()
|
||||
}
|
||||
}, [daysToShow, baseTokenId, quoteTokenId])
|
||||
|
||||
useMemo(() => {
|
||||
if (baseTokenId) {
|
||||
getInputTokenInfo()
|
||||
}
|
||||
if (quoteTokenId) {
|
||||
getOutputTokenInfo()
|
||||
}
|
||||
}, [baseTokenId, quoteTokenId])
|
||||
|
||||
const chartChange = chartData.length
|
||||
? ((chartData[chartData.length - 1]['price'] - chartData[0]['price']) /
|
||||
chartData[0]['price']) *
|
||||
100
|
||||
: 0
|
||||
|
||||
return (
|
||||
<div>
|
||||
{chartData.length && baseTokenId && quoteTokenId ? (
|
||||
<div className="py-6">
|
||||
<div className="flex items-start justify-between">
|
||||
<div>
|
||||
{inputTokenInfo && outputTokenInfo ? (
|
||||
<div className="text-th-fgd-3 text-sm">{`${inputTokenInfo?.symbol?.toUpperCase()}/${outputTokenInfo?.symbol?.toUpperCase()}`}</div>
|
||||
) : null}
|
||||
{mouseData ? (
|
||||
<>
|
||||
<div className="font-bold text-lg text-th-fgd-1">
|
||||
{numberFormatter.format(mouseData['price'])}
|
||||
<span
|
||||
className={`ml-2 text-xs ${
|
||||
chartChange >= 0 ? 'text-th-green' : 'text-th-red'
|
||||
}`}
|
||||
>
|
||||
{chartChange.toFixed(2)}%
|
||||
</span>
|
||||
</div>
|
||||
<div className="text-xs font-normal text-th-fgd-3">
|
||||
{dayjs(mouseData['time']).format('DD MMM YY, h:mma')}
|
||||
</div>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<div className="font-bold text-lg text-th-fgd-1">
|
||||
{numberFormatter.format(
|
||||
chartData[chartData.length - 1]['price']
|
||||
)}
|
||||
<span
|
||||
className={`ml-2 text-xs ${
|
||||
chartChange >= 0 ? 'text-th-green' : 'text-th-red'
|
||||
}`}
|
||||
>
|
||||
{chartChange.toFixed(2)}%
|
||||
</span>
|
||||
</div>
|
||||
<div className="text-xs font-normal text-th-fgd-3">
|
||||
{dayjs(chartData[chartData.length - 1]['time']).format(
|
||||
'DD MMM YY, h:mma'
|
||||
)}
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
<IconButton onClick={() => setHideChart(!hideChart)}>
|
||||
{hideChart ? (
|
||||
<LineChartIcon className="w-4 h-4" />
|
||||
) : (
|
||||
<EyeOffIcon className="w-4 h-4" />
|
||||
)}
|
||||
</IconButton>
|
||||
</div>
|
||||
{!hideChart ? (
|
||||
<div className="h-52 mt-4 w-full" ref={observe}>
|
||||
<AreaChart
|
||||
width={width}
|
||||
height={height}
|
||||
data={chartData}
|
||||
onMouseMove={handleMouseMove}
|
||||
onMouseLeave={handleMouseLeave}
|
||||
>
|
||||
<Tooltip
|
||||
cursor={{
|
||||
strokeOpacity: 0,
|
||||
}}
|
||||
content={<></>}
|
||||
/>
|
||||
<defs>
|
||||
<linearGradient id="gradientArea" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0%" stopColor="#ffba24" stopOpacity={0.9} />
|
||||
<stop offset="90%" stopColor="#ffba24" stopOpacity={0} />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<Area
|
||||
isAnimationActive={true}
|
||||
type="monotone"
|
||||
dataKey="price"
|
||||
stroke="#ffba24"
|
||||
fill="url(#gradientArea)"
|
||||
/>
|
||||
<XAxis dataKey="time" hide />
|
||||
<YAxis
|
||||
dataKey="price"
|
||||
type="number"
|
||||
domain={['dataMin', 'dataMax']}
|
||||
hide
|
||||
/>
|
||||
</AreaChart>
|
||||
<div className="flex justify-end">
|
||||
<button
|
||||
className={`default-transition font-bold px-3 py-2 text-th-fgd-1 text-xs hover:text-th-primary focus:outline-none ${
|
||||
daysToShow === 1 && 'text-th-primary'
|
||||
}`}
|
||||
onClick={() => setDaysToShow(1)}
|
||||
>
|
||||
24H
|
||||
</button>
|
||||
<button
|
||||
className={`default-transition font-bold px-3 py-2 text-th-fgd-1 text-xs hover:text-th-primary focus:outline-none ${
|
||||
daysToShow === 7 && 'text-th-primary'
|
||||
}`}
|
||||
onClick={() => setDaysToShow(7)}
|
||||
>
|
||||
7D
|
||||
</button>
|
||||
<button
|
||||
className={`default-transition font-bold px-3 py-2 text-th-fgd-1 text-xs hover:text-th-primary focus:outline-none ${
|
||||
daysToShow === 30 && 'text-th-primary'
|
||||
}`}
|
||||
onClick={() => setDaysToShow(30)}
|
||||
>
|
||||
30D
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
) : (
|
||||
<div className="bg-th-bkg-3 mt-4 md:mt-0 p-4 rounded-md text-center text-th-fgd-3">
|
||||
<LineChartIcon className="h-6 mx-auto text-th-primary w-6" />
|
||||
Chart not available
|
||||
</div>
|
||||
)}
|
||||
|
||||
{inputTokenInfo && inputTokenId ? (
|
||||
<div className="w-full">
|
||||
<Disclosure>
|
||||
{({ open }) => (
|
||||
<>
|
||||
<Disclosure.Button
|
||||
className={`border border-th-bkg-4 default-transition flex items-center justify-between mt-6 p-3 rounded-md w-full hover:bg-th-bkg-2 ${
|
||||
open
|
||||
? 'border-b-transparent rounded-b-none'
|
||||
: 'transform rotate-360'
|
||||
}`}
|
||||
>
|
||||
<div className="flex items-center">
|
||||
{inputTokenInfo.image?.small ? (
|
||||
<img
|
||||
src={inputTokenInfo.image?.small}
|
||||
width="32"
|
||||
height="32"
|
||||
alt={inputTokenInfo.name}
|
||||
/>
|
||||
) : null}
|
||||
<div className="ml-2.5 text-left">
|
||||
<h2 className="font-bold text-base text-th-fgd-1">
|
||||
{inputTokenInfo?.symbol?.toUpperCase()}
|
||||
</h2>
|
||||
<div className="font-normal text-th-fgd-3 text-xs">
|
||||
{inputTokenInfo.name}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center">
|
||||
<div className="flex items-center space-x-3">
|
||||
{inputTokenInfo.market_data?.current_price?.usd ? (
|
||||
<div className="font-normal text-th-fgd-1">
|
||||
$
|
||||
{numberFormatter.format(
|
||||
inputTokenInfo.market_data.current_price.usd
|
||||
)}
|
||||
</div>
|
||||
) : null}
|
||||
{inputTokenInfo.market_data
|
||||
?.price_change_percentage_24h ? (
|
||||
<div
|
||||
className={`font-normal text-th-fgd-1 ${
|
||||
inputTokenInfo.market_data
|
||||
.price_change_percentage_24h >= 0
|
||||
? 'text-th-green'
|
||||
: 'text-th-red'
|
||||
}`}
|
||||
>
|
||||
{inputTokenInfo.market_data.price_change_percentage_24h.toFixed(
|
||||
2
|
||||
)}
|
||||
%
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
<ChevronDownIcon
|
||||
className={`default-transition h-6 ml-2 w-6 text-th-fgd-3 ${
|
||||
open ? 'transform rotate-180' : 'transform rotate-360'
|
||||
}`}
|
||||
/>
|
||||
</div>
|
||||
</Disclosure.Button>
|
||||
<Disclosure.Panel>
|
||||
<div className="border border-th-bkg-4 border-t-0 grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-2 xl:grid-cols-3 grid-flow-row p-3 rounded-b-md">
|
||||
{inputTokenInfo.market_cap_rank ? (
|
||||
<div className="border border-th-bkg-4 m-1 p-3 rounded-md">
|
||||
<div className="text-th-fgd-3 text-xs">
|
||||
Market Cap Rank
|
||||
</div>
|
||||
<div className="font-bold text-th-fgd-1 text-lg">
|
||||
#{inputTokenInfo.market_cap_rank}
|
||||
</div>
|
||||
</div>
|
||||
) : null}
|
||||
{inputTokenInfo.market_data?.market_cap ? (
|
||||
<div className="border border-th-bkg-4 m-1 p-3 rounded-md">
|
||||
<div className="text-th-fgd-3 text-xs">Market Cap</div>
|
||||
<div className="font-bold text-th-fgd-1 text-lg">
|
||||
$
|
||||
{numberFormatter.format(
|
||||
inputTokenInfo.market_data?.market_cap?.usd
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
) : null}
|
||||
{inputTokenInfo.market_data.total_volume?.usd ? (
|
||||
<div className="border border-th-bkg-4 m-1 p-3 rounded-md">
|
||||
<div className="text-th-fgd-3 text-xs">24h Volume</div>
|
||||
<div className="font-bold text-th-fgd-1 text-lg">
|
||||
$
|
||||
{numberFormatter.format(
|
||||
inputTokenInfo.market_data.total_volume?.usd
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
) : null}
|
||||
{inputTokenInfo.market_data?.circulating_supply ? (
|
||||
<div className="border border-th-bkg-4 m-1 p-3 rounded-md">
|
||||
<div className="text-th-fgd-3 text-xs">
|
||||
Token Supply
|
||||
</div>
|
||||
<div className="font-bold text-th-fgd-1 text-lg">
|
||||
{numberFormatter.format(
|
||||
inputTokenInfo.market_data.circulating_supply
|
||||
)}
|
||||
</div>
|
||||
{inputTokenInfo.market_data?.max_supply ? (
|
||||
<div className="text-th-fgd-2 text-xs">
|
||||
Max Supply:{' '}
|
||||
{numberFormatter.format(
|
||||
inputTokenInfo.market_data.max_supply
|
||||
)}
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
) : null}
|
||||
{inputTokenInfo.market_data?.ath?.usd ? (
|
||||
<div className="border border-th-bkg-4 m-1 p-3 rounded-md">
|
||||
<div className="text-th-fgd-3 text-xs">
|
||||
All-Time High
|
||||
</div>
|
||||
<div className="flex">
|
||||
<div className="font-bold text-th-fgd-1 text-lg">
|
||||
$
|
||||
{numberFormatter.format(
|
||||
inputTokenInfo.market_data.ath.usd
|
||||
)}
|
||||
</div>
|
||||
{inputTokenInfo.market_data?.ath_change_percentage
|
||||
?.usd ? (
|
||||
<div
|
||||
className={`ml-1.5 mt-2 text-xs ${
|
||||
inputTokenInfo.market_data
|
||||
?.ath_change_percentage?.usd >= 0
|
||||
? 'text-th-green'
|
||||
: 'text-th-red'
|
||||
}`}
|
||||
>
|
||||
{(inputTokenInfo.market_data?.ath_change_percentage?.usd).toFixed(
|
||||
2
|
||||
)}
|
||||
%
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
{inputTokenInfo.market_data?.ath_date?.usd ? (
|
||||
<div className="text-th-fgd-2 text-xs">
|
||||
{dayjs(
|
||||
inputTokenInfo.market_data.ath_date.usd
|
||||
).fromNow()}
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
) : null}
|
||||
{inputTokenInfo.market_data?.atl?.usd ? (
|
||||
<div className="border border-th-bkg-4 m-1 p-3 rounded-md">
|
||||
<div className="text-th-fgd-3 text-xs">
|
||||
All-Time Low
|
||||
</div>
|
||||
<div className="flex">
|
||||
<div className="font-bold text-th-fgd-1 text-lg">
|
||||
$
|
||||
{numberFormatter.format(
|
||||
inputTokenInfo.market_data.atl.usd
|
||||
)}
|
||||
</div>
|
||||
{inputTokenInfo.market_data?.atl_change_percentage
|
||||
?.usd ? (
|
||||
<div
|
||||
className={`ml-1.5 mt-2 text-xs ${
|
||||
inputTokenInfo.market_data
|
||||
?.atl_change_percentage?.usd >= 0
|
||||
? 'text-th-green'
|
||||
: 'text-th-red'
|
||||
}`}
|
||||
>
|
||||
{(inputTokenInfo.market_data?.atl_change_percentage?.usd).toLocaleString(
|
||||
undefined,
|
||||
{
|
||||
minimumFractionDigits: 0,
|
||||
maximumFractionDigits: 2,
|
||||
}
|
||||
)}
|
||||
%
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
{inputTokenInfo.market_data?.atl_date?.usd ? (
|
||||
<div className="text-th-fgd-2 text-xs">
|
||||
{dayjs(
|
||||
inputTokenInfo.market_data.atl_date.usd
|
||||
).fromNow()}
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
</Disclosure.Panel>
|
||||
</>
|
||||
)}
|
||||
</Disclosure>
|
||||
</div>
|
||||
) : (
|
||||
<div className="bg-th-bkg-3 mt-3 p-4 rounded-md text-center text-th-fgd-3">
|
||||
Input token information is not available.
|
||||
</div>
|
||||
)}
|
||||
|
||||
{outputTokenInfo && outputTokenId ? (
|
||||
<div className="w-full">
|
||||
<Disclosure>
|
||||
{({ open }) => (
|
||||
<>
|
||||
<Disclosure.Button
|
||||
className={`border border-th-bkg-4 default-transition flex items-center justify-between mt-3 p-3 rounded-md w-full hover:bg-th-bkg-2 ${
|
||||
open
|
||||
? 'border-b-transparent rounded-b-none'
|
||||
: 'transform rotate-360'
|
||||
}`}
|
||||
>
|
||||
<div className="flex items-center">
|
||||
{outputTokenInfo.image?.small ? (
|
||||
<img
|
||||
src={outputTokenInfo.image?.small}
|
||||
width="32"
|
||||
height="32"
|
||||
alt={outputTokenInfo.name}
|
||||
/>
|
||||
) : null}
|
||||
<div className="ml-2.5 text-left">
|
||||
<h2 className="font-bold text-base text-th-fgd-1">
|
||||
{outputTokenInfo?.symbol?.toUpperCase()}
|
||||
</h2>
|
||||
<div className="font-normal text-th-fgd-3 text-xs">
|
||||
{outputTokenInfo.name}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center">
|
||||
<div className="flex items-center space-x-3">
|
||||
{outputTokenInfo.market_data?.current_price?.usd ? (
|
||||
<div className="font-normal text-th-fgd-1">
|
||||
$
|
||||
{numberFormatter.format(
|
||||
outputTokenInfo.market_data.current_price.usd
|
||||
)}
|
||||
</div>
|
||||
) : null}
|
||||
{outputTokenInfo.market_data
|
||||
?.price_change_percentage_24h ? (
|
||||
<div
|
||||
className={`font-normal text-th-fgd-1 ${
|
||||
outputTokenInfo.market_data
|
||||
.price_change_percentage_24h >= 0
|
||||
? 'text-th-green'
|
||||
: 'text-th-red'
|
||||
}`}
|
||||
>
|
||||
{outputTokenInfo.market_data.price_change_percentage_24h.toFixed(
|
||||
2
|
||||
)}
|
||||
%
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
<ChevronDownIcon
|
||||
className={`default-transition h-6 ml-2 w-6 text-th-fgd-3 ${
|
||||
open ? 'transform rotate-180' : 'transform rotate-360'
|
||||
}`}
|
||||
/>
|
||||
</div>
|
||||
</Disclosure.Button>
|
||||
<Disclosure.Panel>
|
||||
<div className="border border-th-bkg-4 border-t-0 grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-2 xl:grid-cols-3 grid-flow-row p-3 rounded-b-md">
|
||||
{outputTokenInfo.market_cap_rank ? (
|
||||
<div className="border border-th-bkg-4 m-1 p-3 rounded-md">
|
||||
<div className="text-th-fgd-3 text-xs">
|
||||
Market Cap Rank
|
||||
</div>
|
||||
<div className="font-bold text-th-fgd-1 text-lg">
|
||||
#{outputTokenInfo.market_cap_rank}
|
||||
</div>
|
||||
</div>
|
||||
) : null}
|
||||
{outputTokenInfo.market_data?.market_cap ? (
|
||||
<div className="border border-th-bkg-4 m-1 p-3 rounded-md">
|
||||
<div className="text-th-fgd-3 text-xs">Market Cap</div>
|
||||
<div className="font-bold text-th-fgd-1 text-lg">
|
||||
$
|
||||
{numberFormatter.format(
|
||||
outputTokenInfo.market_data?.market_cap?.usd
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
) : null}
|
||||
{outputTokenInfo.market_data.total_volume?.usd ? (
|
||||
<div className="border border-th-bkg-4 m-1 p-3 rounded-md">
|
||||
<div className="text-th-fgd-3 text-xs">24h Volume</div>
|
||||
<div className="font-bold text-th-fgd-1 text-lg">
|
||||
$
|
||||
{numberFormatter.format(
|
||||
outputTokenInfo.market_data.total_volume?.usd
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
) : null}
|
||||
{outputTokenInfo.market_data?.circulating_supply ? (
|
||||
<div className="border border-th-bkg-4 m-1 p-3 rounded-md">
|
||||
<div className="text-th-fgd-3 text-xs">
|
||||
Token Supply
|
||||
</div>
|
||||
<div className="font-bold text-th-fgd-1 text-lg">
|
||||
{numberFormatter.format(
|
||||
outputTokenInfo.market_data.circulating_supply
|
||||
)}
|
||||
</div>
|
||||
{outputTokenInfo.market_data?.max_supply ? (
|
||||
<div className="text-th-fgd-2 text-xs">
|
||||
Max Supply:{' '}
|
||||
{numberFormatter.format(
|
||||
outputTokenInfo.market_data.max_supply
|
||||
)}
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
) : null}
|
||||
{outputTokenInfo.market_data?.ath?.usd ? (
|
||||
<div className="border border-th-bkg-4 m-1 p-3 rounded-md">
|
||||
<div className="text-th-fgd-3 text-xs">
|
||||
All-Time High
|
||||
</div>
|
||||
<div className="flex">
|
||||
<div className="font-bold text-th-fgd-1 text-lg">
|
||||
$
|
||||
{numberFormatter.format(
|
||||
outputTokenInfo.market_data.ath.usd
|
||||
)}
|
||||
</div>
|
||||
{outputTokenInfo.market_data?.ath_change_percentage
|
||||
?.usd ? (
|
||||
<div
|
||||
className={`ml-1.5 mt-2 text-xs ${
|
||||
outputTokenInfo.market_data
|
||||
?.ath_change_percentage?.usd >= 0
|
||||
? 'text-th-green'
|
||||
: 'text-th-red'
|
||||
}`}
|
||||
>
|
||||
{(outputTokenInfo.market_data?.ath_change_percentage?.usd).toFixed(
|
||||
2
|
||||
)}
|
||||
%
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
{outputTokenInfo.market_data?.ath_date?.usd ? (
|
||||
<div className="text-th-fgd-2 text-xs">
|
||||
{dayjs(
|
||||
outputTokenInfo.market_data.ath_date.usd
|
||||
).fromNow()}
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
) : null}
|
||||
{outputTokenInfo.market_data?.atl?.usd ? (
|
||||
<div className="border border-th-bkg-4 m-1 p-3 rounded-md">
|
||||
<div className="text-th-fgd-3 text-xs">
|
||||
All-Time Low
|
||||
</div>
|
||||
<div className="flex">
|
||||
<div className="font-bold text-th-fgd-1 text-lg">
|
||||
$
|
||||
{numberFormatter.format(
|
||||
outputTokenInfo.market_data.atl.usd
|
||||
)}
|
||||
</div>
|
||||
{outputTokenInfo.market_data?.atl_change_percentage
|
||||
?.usd ? (
|
||||
<div
|
||||
className={`ml-1.5 mt-2 text-xs ${
|
||||
outputTokenInfo.market_data
|
||||
?.atl_change_percentage?.usd >= 0
|
||||
? 'text-th-green'
|
||||
: 'text-th-red'
|
||||
}`}
|
||||
>
|
||||
{(outputTokenInfo.market_data?.atl_change_percentage?.usd).toLocaleString(
|
||||
undefined,
|
||||
{
|
||||
minimumFractionDigits: 0,
|
||||
maximumFractionDigits: 2,
|
||||
}
|
||||
)}
|
||||
%
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
{outputTokenInfo.market_data?.atl_date?.usd ? (
|
||||
<div className="text-th-fgd-2 text-xs">
|
||||
{dayjs(
|
||||
outputTokenInfo.market_data.atl_date.usd
|
||||
).fromNow()}
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
</Disclosure.Panel>
|
||||
</>
|
||||
)}
|
||||
</Disclosure>
|
||||
</div>
|
||||
) : (
|
||||
<div className="bg-th-bkg-3 mt-3 p-4 rounded-md text-center text-th-fgd-3">
|
||||
Output token information is not available.
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default SwapTokenInfo
|
|
@ -43,9 +43,9 @@ class ItemRenderer extends PureComponent<ItemRendererProps> {
|
|||
|
||||
return (
|
||||
<div style={this.props.style}>
|
||||
<div
|
||||
<button
|
||||
key={tokenInfo?.address}
|
||||
className="flex justify-between items-center py-4 hover:bg-th-bkg-4 cursor-pointer px-6"
|
||||
className="flex font-normal justify-between items-center py-4 hover:bg-th-bkg-4 cursor-pointer px-6 rounded-none w-full focus:outline-none focus:bg-th-bkg-3"
|
||||
onClick={() => this.props.data.onSubmit(tokenInfo)}
|
||||
>
|
||||
<div className="flex items-center">
|
||||
|
@ -56,15 +56,15 @@ class ItemRenderer extends PureComponent<ItemRendererProps> {
|
|||
alt={tokenInfo?.symbol}
|
||||
/>
|
||||
<div className="ml-4">
|
||||
<div className="text-th-fgd-2">
|
||||
<div className="text-left text-th-fgd-2">
|
||||
{tokenInfo?.symbol || 'unknown'}
|
||||
</div>
|
||||
<div className="text-th-fgd-4">
|
||||
<div className="text-left text-th-fgd-4">
|
||||
{tokenInfo?.name || 'unknown'}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
|
|
@ -14,6 +14,12 @@ import { DEFAULT_MARKET_KEY, initialMarket } from './SettingsModal'
|
|||
import { useTranslation } from 'next-i18next'
|
||||
import Settings from './Settings'
|
||||
|
||||
const StyledNewLabel = ({ children, ...props }) => (
|
||||
<div style={{ fontSize: '0.5rem', marginLeft: '1px' }} {...props}>
|
||||
{children}
|
||||
</div>
|
||||
)
|
||||
|
||||
const TopBar = () => {
|
||||
const { t } = useTranslation('common')
|
||||
const mangoAccount = useMangoStore((s) => s.selectedMangoAccount.current)
|
||||
|
@ -52,6 +58,18 @@ const TopBar = () => {
|
|||
<MenuItem href="/swap">{t('swap')}</MenuItem>
|
||||
<MenuItem href="/account">{t('account')}</MenuItem>
|
||||
<MenuItem href="/borrow">{t('borrow')}</MenuItem>
|
||||
<div className="relative">
|
||||
<MenuItem href="/risk-calculator">
|
||||
{t('calculator')}
|
||||
<div>
|
||||
<div className="absolute flex items-center justify-center h-4 px-1.5 bg-gradient-to-br from-red-500 to-yellow-500 rounded-full -right-5 -top-3">
|
||||
<StyledNewLabel className="text-white uppercase">
|
||||
new
|
||||
</StyledNewLabel>
|
||||
</div>
|
||||
</div>
|
||||
</MenuItem>
|
||||
</div>
|
||||
<MenuItem href="/stats">{t('stats')}</MenuItem>
|
||||
<MenuItem href="https://docs.mango.markets/" newWindow>
|
||||
{t('learn')}
|
||||
|
|
|
@ -216,6 +216,70 @@ export const BtcMonoIcon = ({ className }) => {
|
|||
)
|
||||
}
|
||||
|
||||
export const BnbMonoIcon = ({ className }) => {
|
||||
return (
|
||||
<svg
|
||||
className={`${className}`}
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 32 32"
|
||||
fill="currentColor"
|
||||
>
|
||||
<path d="M9.7856 13.4464L16 7.232L22.2176 13.4496L25.8336 9.8336L16 0L6.1696 9.8304L9.7856 13.4464ZM0 16L3.616 12.384L7.232 16L3.616 19.616L0 16ZM9.7856 18.5536L16 24.768L22.2176 18.5504L25.8336 22.1648L16 32L6.1696 22.1696L6.1648 22.1648L9.7856 18.5536ZM24.768 16L28.384 12.384L32 16L28.384 19.616L24.768 16ZM19.6672 15.9968H19.6704V16L16 19.6704L12.3344 16.0064L12.328 16L12.3344 15.9952L12.976 15.352L13.288 15.04L16 12.3296L19.6688 15.9984L19.6672 15.9968Z" />
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export const DotMonoIcon = ({ className }) => {
|
||||
return (
|
||||
<svg
|
||||
className={`${className}`}
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 32 32"
|
||||
fill="currentColor"
|
||||
>
|
||||
<g clipPath="url(#a)">
|
||||
<path d="M16 0C9.309 0 3.84 5.433 3.84 12.152c0 1.35.225 2.669.643 3.955.29.868 1.255 1.35 2.156 1.06.868-.289 1.35-1.253 1.061-2.153a8.555 8.555 0 0 1-.482-3.119c.128-4.533 3.796-8.262 8.331-8.487 5.051-.257 9.233 3.761 9.233 8.745 0 4.661-3.667 8.487-8.267 8.744 0 0-1.705.097-2.542.225-.418.065-.74.129-.965.161-.096.032-.193-.064-.16-.16l.289-1.415 1.576-7.266c.193-.9-.386-1.8-1.287-1.993a1.686 1.686 0 0 0-1.994 1.286S7.636 29.417 7.604 29.61c-.193.9.386 1.8 1.286 1.993.901.193 1.802-.386 1.995-1.286.032-.193.547-2.54.547-2.54a4.272 4.272 0 0 1 3.603-3.343c.386-.065 1.898-.161 1.898-.161 6.273-.482 11.227-5.723 11.227-12.12C28.16 5.433 22.69 0 16 0Z" />
|
||||
<path d="M16.871 27.97c-1.093-.225-2.187.45-2.412 1.576-.226 1.093.45 2.186 1.576 2.41 1.094.226 2.188-.45 2.413-1.574.225-1.126-.45-2.187-1.577-2.412Z" />
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="a">
|
||||
<path d="M0 0h32v32H0z" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export const LunaMonoIcon = ({ className }) => {
|
||||
return (
|
||||
<svg
|
||||
className={`${className}`}
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 32 32"
|
||||
fill="currentColor"
|
||||
>
|
||||
<path d="M10.723 1.10707C13.9499 -0.079287 17.582 -0.0819955 20.8695 0.893094C25.1491 2.19863 28.7619 5.37309 30.6495 9.35741C31.1704 10.4923 31.6691 11.676 31.7188 12.9382C29.313 11.5676 26.6758 10.6792 24.0331 9.86934C19.8058 8.37149 15.3801 7.33139 11.3789 5.27287C10.4474 4.72574 9.25971 4.16506 9.00619 3.02475C8.90423 2.03882 9.96518 1.48898 10.723 1.10707V1.10707ZM0.981561 10.6955C1.91575 8.20356 3.44792 5.89043 5.52848 4.1759C6.05758 8.45275 7.90942 12.586 10.9683 15.6955C14.6361 19.4415 19.8609 21.7411 25.1767 21.6544C27.2876 21.7194 29.3516 21.24 31.4101 20.8526C29.3847 28.0466 21.3628 32.8219 13.9306 31.6734C9.44435 31.11 5.30251 28.499 2.80308 24.8126C-0.0160072 20.7389 -0.72698 15.3298 0.981561 10.6955Z" />
|
||||
<path
|
||||
opacity="0.6"
|
||||
d="M23.7886 9.77734C26.4721 10.595 29.096 11.4462 31.5389 12.83L31.704 12.9147C31.9306 14.5802 32.0957 16.2785 31.7935 17.9467C30.5651 17.438 29.5689 16.5438 28.5279 15.7534C26.5244 14.1235 24.5329 12.3043 23.7886 9.77734Z"
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export const AvaxMonoIcon = ({ className }) => {
|
||||
return (
|
||||
<svg
|
||||
className={`${className}`}
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 32 32"
|
||||
fill="currentColor"
|
||||
>
|
||||
<path d="M23.9664 19.2367C24.7488 17.8852 26.0113 17.8852 26.7938 19.2367L31.6661 27.7899C32.4485 29.1413 31.8083 30.2438 30.2435 30.2438H20.4278C18.8807 30.2438 18.2405 29.1413 19.0052 27.7899L23.9664 19.2367V19.2367ZM14.5419 2.77042C15.3243 1.41898 16.569 1.41898 17.3514 2.77042L18.4362 4.72645L20.9968 9.22534C21.6192 10.5057 21.6192 12.0171 20.9968 13.2974L12.408 28.1811C11.6256 29.3903 10.3275 30.1549 8.88714 30.2438H1.7565C0.191672 30.2438 -0.448485 29.1591 0.333929 27.7899L14.5419 2.77042Z" />
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export const CopeMonoIcon = ({ className }) => {
|
||||
return (
|
||||
<svg
|
||||
|
@ -669,70 +733,6 @@ export const MsolMonoIcon = ({ className }) => {
|
|||
)
|
||||
}
|
||||
|
||||
export const BnbMonoIcon = ({ className }) => {
|
||||
return (
|
||||
<svg
|
||||
className={`${className}`}
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 32 32"
|
||||
fill="currentColor"
|
||||
>
|
||||
<path d="M9.7856 13.4464L16 7.232L22.2176 13.4496L25.8336 9.8336L16 0L6.1696 9.8304L9.7856 13.4464ZM0 16L3.616 12.384L7.232 16L3.616 19.616L0 16ZM9.7856 18.5536L16 24.768L22.2176 18.5504L25.8336 22.1648L16 32L6.1696 22.1696L6.1648 22.1648L9.7856 18.5536ZM24.768 16L28.384 12.384L32 16L28.384 19.616L24.768 16ZM19.6672 15.9968H19.6704V16L16 19.6704L12.3344 16.0064L12.328 16L12.3344 15.9952L12.976 15.352L13.288 15.04L16 12.3296L19.6688 15.9984L19.6672 15.9968Z" />
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export const DotMonoIcon = ({ className }) => {
|
||||
return (
|
||||
<svg
|
||||
className={`${className}`}
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 32 32"
|
||||
fill="currentColor"
|
||||
>
|
||||
<g clipPath="url(#a)">
|
||||
<path d="M16 0C9.309 0 3.84 5.433 3.84 12.152c0 1.35.225 2.669.643 3.955.29.868 1.255 1.35 2.156 1.06.868-.289 1.35-1.253 1.061-2.153a8.555 8.555 0 0 1-.482-3.119c.128-4.533 3.796-8.262 8.331-8.487 5.051-.257 9.233 3.761 9.233 8.745 0 4.661-3.667 8.487-8.267 8.744 0 0-1.705.097-2.542.225-.418.065-.74.129-.965.161-.096.032-.193-.064-.16-.16l.289-1.415 1.576-7.266c.193-.9-.386-1.8-1.287-1.993a1.686 1.686 0 0 0-1.994 1.286S7.636 29.417 7.604 29.61c-.193.9.386 1.8 1.286 1.993.901.193 1.802-.386 1.995-1.286.032-.193.547-2.54.547-2.54a4.272 4.272 0 0 1 3.603-3.343c.386-.065 1.898-.161 1.898-.161 6.273-.482 11.227-5.723 11.227-12.12C28.16 5.433 22.69 0 16 0Z" />
|
||||
<path d="M16.871 27.97c-1.093-.225-2.187.45-2.412 1.576-.226 1.093.45 2.186 1.576 2.41 1.094.226 2.188-.45 2.413-1.574.225-1.126-.45-2.187-1.577-2.412Z" />
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="a">
|
||||
<path d="M0 0h32v32H0z" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export const LunaMonoIcon = ({ className }) => {
|
||||
return (
|
||||
<svg
|
||||
className={`${className}`}
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 32 32"
|
||||
fill="currentColor"
|
||||
>
|
||||
<path d="M10.723 1.10707C13.9499 -0.079287 17.582 -0.0819955 20.8695 0.893094C25.1491 2.19863 28.7619 5.37309 30.6495 9.35741C31.1704 10.4923 31.6691 11.676 31.7188 12.9382C29.313 11.5676 26.6758 10.6792 24.0331 9.86934C19.8058 8.37149 15.3801 7.33139 11.3789 5.27287C10.4474 4.72574 9.25971 4.16506 9.00619 3.02475C8.90423 2.03882 9.96518 1.48898 10.723 1.10707V1.10707ZM0.981561 10.6955C1.91575 8.20356 3.44792 5.89043 5.52848 4.1759C6.05758 8.45275 7.90942 12.586 10.9683 15.6955C14.6361 19.4415 19.8609 21.7411 25.1767 21.6544C27.2876 21.7194 29.3516 21.24 31.4101 20.8526C29.3847 28.0466 21.3628 32.8219 13.9306 31.6734C9.44435 31.11 5.30251 28.499 2.80308 24.8126C-0.0160072 20.7389 -0.72698 15.3298 0.981561 10.6955Z" />
|
||||
<path
|
||||
opacity="0.6"
|
||||
d="M23.7886 9.77734C26.4721 10.595 29.096 11.4462 31.5389 12.83L31.704 12.9147C31.9306 14.5802 32.0957 16.2785 31.7935 17.9467C30.5651 17.438 29.5689 16.5438 28.5279 15.7534C26.5244 14.1235 24.5329 12.3043 23.7886 9.77734Z"
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export const AvaxMonoIcon = ({ className }) => {
|
||||
return (
|
||||
<svg
|
||||
className={`${className}`}
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 32 32"
|
||||
fill="currentColor"
|
||||
>
|
||||
<path d="M23.9664 19.2367C24.7488 17.8852 26.0113 17.8852 26.7938 19.2367L31.6661 27.7899C32.4485 29.1413 31.8083 30.2438 30.2435 30.2438H20.4278C18.8807 30.2438 18.2405 29.1413 19.0052 27.7899L23.9664 19.2367V19.2367ZM14.5419 2.77042C15.3243 1.41898 16.569 1.41898 17.3514 2.77042L18.4362 4.72645L20.9968 9.22534C21.6192 10.5057 21.6192 12.0171 20.9968 13.2974L12.408 28.1811C11.6256 29.3903 10.3275 30.1549 8.88714 30.2438H1.7565C0.191672 30.2438 -0.448485 29.1591 0.333929 27.7899L14.5419 2.77042Z" />
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export const CumulativeSizeIcon = ({ className }) => {
|
||||
return (
|
||||
<svg
|
||||
|
@ -801,6 +801,25 @@ export const TradeIcon = ({ className }) => {
|
|||
)
|
||||
}
|
||||
|
||||
export const LineChartIcon = ({ className }) => {
|
||||
return (
|
||||
<svg
|
||||
className={`${className}`}
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="32"
|
||||
height="32"
|
||||
viewBox="0 0 32 32"
|
||||
fill="currentColor"
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M2.766 24.073a1.5 1.5 0 0 1 .098-2.12l9.875-8.999a1.5 1.5 0 0 1 1.99-.028l3.493 3.008 8.892-8.105a1.5 1.5 0 1 1 2.021 2.217l-9.875 9a1.5 1.5 0 0 1-1.989.028l-3.493-3.007-8.893 8.104a1.5 1.5 0 0 1-2.119-.098Z"
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export const CandlesIcon = ({ className }) => {
|
||||
return (
|
||||
<svg
|
||||
|
@ -824,3 +843,42 @@ export const CandlesIcon = ({ className }) => {
|
|||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export const CalculatorIcon = ({ className }) => {
|
||||
return (
|
||||
<svg
|
||||
className={`${className}`}
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="currentColor"
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3M19 19H5V5H19V19M6.2 7.7H11.2V9.2H6.2V7.7M13 15.8H18V17.3H13V15.8M13 13.2H18V14.7H13V13.2M8 18H9.5V16H11.5V14.5H9.5V12.5H8V14.5H6V16H8V18M14.1 10.9L15.5 9.5L16.9 10.9L18 9.9L16.6 8.5L18 7.1L16.9 6L15.5 7.4L14.1 6L13 7.1L14.4 8.5L13 9.9L14.1 10.9Z"
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export const AnchorIcon = ({ className }) => {
|
||||
return (
|
||||
<svg
|
||||
className={`${className}`}
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="currentColor"
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M17,15l1.55,1.55c-0.96,1.69-3.33,3.04-5.55,3.37V11h3V9h-3V7.82C14.16,7.4,15,6.3,15,5c0-1.65-1.35-3-3-3S9,3.35,9,5 c0,1.3,0.84,2.4,2,2.82V9H8v2h3v8.92c-2.22-0.33-4.59-1.68-5.55-3.37L7,15l-4-3v3c0,3.88,4.92,7,9,7s9-3.12,9-7v-3L17,15z M12,4 c0.55,0,1,0.45,1,1s-0.45,1-1,1s-1-0.45-1-1S11.45,4,12,4z"
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
import { useEffect } from 'react'
|
||||
import Link from 'next/link'
|
||||
import { useRouter } from 'next/router'
|
||||
import { ChartBarIcon, CurrencyDollarIcon } from '@heroicons/react/solid'
|
||||
import {
|
||||
ChartBarIcon,
|
||||
CurrencyDollarIcon,
|
||||
CalculatorIcon,
|
||||
} from '@heroicons/react/solid'
|
||||
import { BtcMonoIcon, TradeIcon } from '../icons'
|
||||
import useMangoGroupConfig from '../../hooks/useMangoGroupConfig'
|
||||
import { useTranslation } from 'next-i18next'
|
||||
|
||||
const StyledBarItemLabel = ({ children, ...props }) => (
|
||||
|
@ -15,22 +17,6 @@ const StyledBarItemLabel = ({ children, ...props }) => (
|
|||
const BottomBar = () => {
|
||||
const { t } = useTranslation('common')
|
||||
const { asPath } = useRouter()
|
||||
const groupConfig = useMangoGroupConfig()
|
||||
|
||||
useEffect(() => {
|
||||
const markets = []
|
||||
const allMarkets = [...groupConfig.spotMarkets, ...groupConfig.perpMarkets]
|
||||
allMarkets.forEach((market) => {
|
||||
const base = market.name.slice(0, -5)
|
||||
const found = markets.find((b) => b.baseAsset === base)
|
||||
if (!found) {
|
||||
markets.push({ baseAsset: base, markets: [market] })
|
||||
} else {
|
||||
found.markets.push(market)
|
||||
}
|
||||
})
|
||||
setSortedMarkets(markets)
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<>
|
||||
|
@ -43,7 +29,7 @@ const BottomBar = () => {
|
|||
<div
|
||||
className={`${
|
||||
asPath === '/select' ? 'text-th-primary' : 'text-th-fgd-3'
|
||||
} col-span-1 cursor-pointer default-transition flex flex-col items-center hover:text-th-primary`}
|
||||
} col-span-1 cursor-pointer default-transition flex flex-col items-center text-th-fgd-3 hover:text-th-primary`}
|
||||
>
|
||||
<BtcMonoIcon className="h-4 mb-1 w-4" />
|
||||
<StyledBarItemLabel>{t('markets')}</StyledBarItemLabel>
|
||||
|
@ -87,6 +73,18 @@ const BottomBar = () => {
|
|||
<StyledBarItemLabel>{t('stats')}</StyledBarItemLabel>
|
||||
</div>
|
||||
</Link>
|
||||
<Link href="/risk-calculator">
|
||||
<div
|
||||
className={`${
|
||||
asPath === '/risk-calculator'
|
||||
? 'text-th-primary'
|
||||
: 'text-th-fgd-3'
|
||||
} col-span-1 cursor-pointer default-transition flex flex-col items-center hover:text-th-primary`}
|
||||
>
|
||||
<CalculatorIcon className="h-4 mb-1 w-4" />
|
||||
<StyledBarItemLabel>{t('calculator')}</StyledBarItemLabel>
|
||||
</div>
|
||||
</Link>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
|
|
|
@ -43,6 +43,7 @@ const MobileMenu = () => {
|
|||
<MenuItem href="/account">{t('account')}</MenuItem>
|
||||
<MenuItem href="/borrow">{t('borrow')}</MenuItem>
|
||||
<MenuItem href="/stats">{t('stats')}</MenuItem>
|
||||
<MenuItem href="/risk-calculator">{t('calculator')}</MenuItem>
|
||||
<MenuItem href="https://docs.mango.markets/">{t('learn')}</MenuItem>
|
||||
</div>
|
||||
</Transition>
|
||||
|
|
|
@ -64,7 +64,7 @@ export default function StatsAssets({ latestStats, stats }) {
|
|||
</div>
|
||||
<div className="grid grid-flow-col grid-cols-1 grid-rows-4 md:grid-cols-2 md:grid-rows-2 gap-2 sm:gap-4">
|
||||
<div
|
||||
className="border border-th-bkg-4 relative md:mb-0 p-4 rounded-md"
|
||||
className="border border-th-bkg-3 relative md:mb-0 p-4 rounded-md"
|
||||
style={{ height: '330px' }}
|
||||
>
|
||||
<Chart
|
||||
|
@ -79,7 +79,7 @@ export default function StatsAssets({ latestStats, stats }) {
|
|||
/>
|
||||
</div>
|
||||
<div
|
||||
className="border border-th-bkg-4 relative p-4 rounded-md"
|
||||
className="border border-th-bkg-3 relative p-4 rounded-md"
|
||||
style={{ height: '330px' }}
|
||||
>
|
||||
<Chart
|
||||
|
@ -95,7 +95,7 @@ export default function StatsAssets({ latestStats, stats }) {
|
|||
/>
|
||||
</div>
|
||||
<div
|
||||
className="border border-th-bkg-4 relative md:mb-0 p-4 rounded-md"
|
||||
className="border border-th-bkg-3 relative md:mb-0 p-4 rounded-md"
|
||||
style={{ height: '330px' }}
|
||||
>
|
||||
<Chart
|
||||
|
@ -110,7 +110,7 @@ export default function StatsAssets({ latestStats, stats }) {
|
|||
/>
|
||||
</div>
|
||||
<div
|
||||
className="border border-th-bkg-4 relative p-4 rounded-md"
|
||||
className="border border-th-bkg-3 relative p-4 rounded-md"
|
||||
style={{ height: '330px' }}
|
||||
>
|
||||
<Chart
|
||||
|
|
|
@ -151,7 +151,7 @@ export default function StatsPerps({ perpStats }) {
|
|||
</div>
|
||||
<div className="grid grid-flow-row grid-cols-1 grid-rows-2 md:grid-cols-2 md:grid-rows-2 gap-2 sm:gap-4">
|
||||
<div
|
||||
className="border border-th-bkg-4 relative p-4 rounded-md"
|
||||
className="border border-th-bkg-3 relative p-4 rounded-md"
|
||||
style={{ height: '330px' }}
|
||||
>
|
||||
<Chart
|
||||
|
@ -167,7 +167,7 @@ export default function StatsPerps({ perpStats }) {
|
|||
/>
|
||||
</div>
|
||||
<div
|
||||
className="border border-th-bkg-4 relative p-4 rounded-md"
|
||||
className="border border-th-bkg-3 relative p-4 rounded-md"
|
||||
style={{ height: '330px' }}
|
||||
>
|
||||
<Chart
|
||||
|
@ -187,7 +187,7 @@ export default function StatsPerps({ perpStats }) {
|
|||
type="area"
|
||||
/>
|
||||
</div>
|
||||
<div className="border border-th-bkg-4 relative p-4 rounded-md">
|
||||
<div className="border border-th-bkg-3 relative p-4 rounded-md">
|
||||
<div className="text-lg">{t('liquidity-mining')}</div>
|
||||
<div className="flex justify-between mt-4">
|
||||
<div>{t('depth-rewarded')}</div>
|
||||
|
|
|
@ -117,7 +117,7 @@ export default function StatsTotals({ latestStats, stats }) {
|
|||
<>
|
||||
<div className="grid grid-flow-col grid-cols-1 grid-rows-2 md:grid-cols-2 md:grid-rows-1 gap-2 sm:gap-4 pb-8">
|
||||
<div
|
||||
className="border border-th-bkg-4 h-56 relative md:mb-0 p-4 rounded-md"
|
||||
className="border border-th-bkg-3 h-56 relative md:mb-0 p-4 rounded-md"
|
||||
style={{ height: '330px' }}
|
||||
>
|
||||
<Chart
|
||||
|
@ -133,7 +133,7 @@ export default function StatsTotals({ latestStats, stats }) {
|
|||
/>
|
||||
</div>
|
||||
<div
|
||||
className="border border-th-bkg-4 relative p-4 rounded-md"
|
||||
className="border border-th-bkg-3 relative p-4 rounded-md"
|
||||
style={{ height: '330px' }}
|
||||
>
|
||||
<Chart
|
||||
|
|
|
@ -22,7 +22,6 @@ import TradeType from './TradeType'
|
|||
import Input from '../Input'
|
||||
import { Market } from '@project-serum/serum'
|
||||
import Big from 'big.js'
|
||||
import Loading from '../Loading'
|
||||
import Tooltip from '../Tooltip'
|
||||
import OrderSideTabs from './OrderSideTabs'
|
||||
import { ElementTitle } from '../styles'
|
||||
|
@ -110,7 +109,6 @@ export default function AdvancedTradeForm({
|
|||
|
||||
const [postOnly, setPostOnly] = useState(false)
|
||||
const [ioc, setIoc] = useState(false)
|
||||
const [submitting, setSubmitting] = useState(false)
|
||||
|
||||
const orderBookRef = useRef(useMangoStore.getState().selectedMarket.orderBook)
|
||||
const orderbook = orderBookRef.current
|
||||
|
@ -547,7 +545,6 @@ export default function AdvancedTradeForm({
|
|||
const wallet = useMangoStore.getState().wallet.current
|
||||
|
||||
if (!wallet || !mangoGroup || !mangoAccount || !market) return
|
||||
setSubmitting(true)
|
||||
|
||||
try {
|
||||
const orderPrice = calculateTradePrice(
|
||||
|
@ -662,7 +659,6 @@ export default function AdvancedTradeForm({
|
|||
} finally {
|
||||
actions.reloadMangoAccount()
|
||||
actions.loadMarketFills()
|
||||
setSubmitting(false)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -688,7 +684,6 @@ export default function AdvancedTradeForm({
|
|||
(!price && isLimitOrder) ||
|
||||
!baseSize ||
|
||||
!connected ||
|
||||
submitting ||
|
||||
!mangoAccount ||
|
||||
sizeTooLarge ||
|
||||
editMaxSlippage
|
||||
|
@ -967,25 +962,21 @@ export default function AdvancedTradeForm({
|
|||
: 'border border-th-bkg-4'
|
||||
} hover:text-th-fgd-1 flex-grow`}
|
||||
>
|
||||
{submitting ? (
|
||||
<div className="w-full">
|
||||
<Loading className="mx-auto" />
|
||||
</div>
|
||||
) : sizeTooLarge ? (
|
||||
t('too-large')
|
||||
) : side === 'buy' ? (
|
||||
`${
|
||||
baseSize > 0 ? `${t('buy')} ` + baseSize : `${t('buy')} `
|
||||
} ${
|
||||
isPerpMarket ? marketConfig.name : marketConfig.baseSymbol
|
||||
}`
|
||||
) : (
|
||||
`${
|
||||
baseSize > 0 ? `${t('sell')} ` + baseSize : `${t('sell')} `
|
||||
} ${
|
||||
isPerpMarket ? marketConfig.name : marketConfig.baseSymbol
|
||||
}`
|
||||
)}
|
||||
{sizeTooLarge
|
||||
? t('too-large')
|
||||
: side === 'buy'
|
||||
? `${
|
||||
baseSize > 0 ? `${t('buy')} ` + baseSize : `${t('buy')} `
|
||||
} ${
|
||||
isPerpMarket ? marketConfig.name : marketConfig.baseSymbol
|
||||
}`
|
||||
: `${
|
||||
baseSize > 0
|
||||
? `${t('sell')} ` + baseSize
|
||||
: `${t('sell')} `
|
||||
} ${
|
||||
isPerpMarket ? marketConfig.name : marketConfig.baseSymbol
|
||||
}`}
|
||||
</Button>
|
||||
) : (
|
||||
<div className="flex-grow">
|
||||
|
|
|
@ -24,7 +24,7 @@ const TradeType = ({
|
|||
{({ open }) => (
|
||||
<>
|
||||
<Listbox.Button
|
||||
className={`font-normal w-full bg-th-bkg-1 border border-th-fgd-4 px-2 h-10 hover:border-th-primary rounded-md focus:outline-none focus:border-th-primary`}
|
||||
className={`font-normal w-full bg-th-bkg-1 border border-th-bkg-4 px-2 h-10 hover:border-th-primary rounded-md focus:outline-none focus:border-th-primary`}
|
||||
>
|
||||
<div className={`flex items-center justify-between space-x-4`}>
|
||||
<span>{t(value.toLowerCase().replaceAll(' ', '-'))}</span>
|
||||
|
|
|
@ -27,10 +27,10 @@
|
|||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"@blockworks-foundation/mango-client": "latest",
|
||||
"@blockworks-foundation/mango-client": "^3.2.21",
|
||||
"@headlessui/react": "^1.2.0",
|
||||
"@heroicons/react": "^1.0.0",
|
||||
"@jup-ag/react-hook": "latest",
|
||||
"@jup-ag/react-hook": "^1.0.0-beta.4",
|
||||
"@project-serum/serum": "0.13.55",
|
||||
"@project-serum/sol-wallet-adapter": "0.2.0",
|
||||
"@solana/web3.js": "^1.31.0",
|
||||
|
@ -49,6 +49,7 @@
|
|||
"next-i18next": "^8.9.0",
|
||||
"next-themes": "^0.0.14",
|
||||
"postcss-preset-env": "^6.7.0",
|
||||
"rc-slider": "^9.7.5",
|
||||
"react": "^17.0.2",
|
||||
"react-cool-dimensions": "^2.0.1",
|
||||
"react-dom": "^17.0.2",
|
||||
|
|
|
@ -15,6 +15,7 @@ import { ViewportProvider } from '../hooks/useViewport'
|
|||
import BottomBar from '../components/mobile/BottomBar'
|
||||
import { appWithTranslation } from 'next-i18next'
|
||||
import ErrorBoundary from '../components/ErrorBoundary'
|
||||
import GlobalNotification from '../components/GlobalNotification'
|
||||
|
||||
const MangoStoreUpdater = () => {
|
||||
useHydrateStore()
|
||||
|
@ -96,6 +97,7 @@ function App({ Component, pageProps }) {
|
|||
<ViewportProvider>
|
||||
<div className="bg-th-bkg-1 min-h-screen">
|
||||
<ErrorBoundary>
|
||||
<GlobalNotification />
|
||||
<Component {...pageProps} />
|
||||
</ErrorBoundary>
|
||||
</div>
|
||||
|
|
|
@ -52,13 +52,31 @@ export default function Swap() {
|
|||
<div className={`bg-th-bkg-1 text-th-fgd-1 transition-all`}>
|
||||
<TopBar />
|
||||
<PageBodyContainer>
|
||||
{wallet ? (
|
||||
<JupiterForm />
|
||||
) : (
|
||||
<div className="bg-th-bkg-2 overflow-none p-4 sm:p-6 rounded-lg">
|
||||
test
|
||||
<div className="grid grid-cols-12">
|
||||
<div className="col-span-12 lg:col-span-10 lg:col-start-2 pt-8 pb-3 sm:pb-4 md:pt-10">
|
||||
<div className="flex flex-col items-start md:flex-row md:items-end md:justify-between mb-1">
|
||||
<h1
|
||||
className={`mb-1.5 md:mb-0 text-th-fgd-1 text-2xl font-semibold`}
|
||||
>
|
||||
Swap
|
||||
</h1>
|
||||
<div className="flex flex-col md:items-end">
|
||||
<p className="mb-0 text-xs">
|
||||
Swap between 100s of tokens at the best rates.
|
||||
</p>
|
||||
<a
|
||||
className="mb-0 text-th-fgd-2 text-xs"
|
||||
href="https://jup.ag/swap/USDC-MNGO"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Powered by Jupiter
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
{wallet ? <JupiterForm /> : null}
|
||||
</PageBodyContainer>
|
||||
</div>
|
||||
</JupiterProvider>
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
<svg width="22" height="22" viewBox="0 0 20 20" fill="inherit"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M15.4892 10.8813L15.4042 11.9374L15.2546 12.9863L15.0407 14.0236L15.0325 14.0532L15.0226 14.0824L15.0111 14.1107L14.9978 14.1386L14.9828 14.1653L14.966 14.191L14.9479 14.2158L14.9282 14.2393L14.9072 14.2614L14.8848 14.2823L14.861 14.3018L14.8362 14.3196L14.8104 14.336L14.289 14.6212L13.7511 14.8732L13.1987 15.091L12.634 15.274L12.0592 15.421L11.4764 15.5319L10.8879 15.6061L10.3064 15.6411L10.296 15.6432H9.99958H9.70309L9.69284 15.6411L9.1112 15.6061L8.52274 15.5319L7.9401 15.421L7.3651 15.274L6.80057 15.091L6.24801 14.8732L5.71013 14.6212L5.1887 14.336L5.16305 14.3196L5.13808 14.3018L5.11433 14.2823L5.0921 14.2614L5.07091 14.2393L5.05125 14.2158L5.0331 14.191L5.01635 14.1653L5.00132 14.1386L4.98799 14.1107L4.97653 14.0824L4.96659 14.0532L4.95839 14.0236L4.74452 12.9863L4.59491 11.9374L4.50994 10.8813L4.49014 9.82182L4.53542 8.76315L4.6457 7.70946L4.82062 6.66465L4.82727 6.636L4.83547 6.60755L4.8425 6.58797L4.84541 6.57968L4.85701 6.55258L4.87034 6.52627L5.06201 6.1951L5.27453 5.87736L5.5072 5.57425L5.75888 5.28711L5.86538 5.18041L6.0285 5.01705L6.31504 4.76544L6.61696 4.5329L6.93342 4.32088L7.26286 4.13003L7.6038 3.96126L7.95495 3.81537L8.31465 3.69275L8.68173 3.59396L9.05411 3.51958L9.43074 3.4696L9.80963 3.4448H9.99958H10.1895L10.5684 3.4696L10.945 3.51958L11.3176 3.59396L11.6845 3.69275L12.0443 3.81537L12.3953 3.96126L12.7363 4.13003L13.0657 4.32088L13.3822 4.5329L13.6841 4.76544L13.9706 5.01705L14.1337 5.18041L14.2402 5.28711L14.4919 5.57425L14.7246 5.87736L14.9371 6.1951L15.129 6.52627L15.1421 6.55258L15.1537 6.57968L15.1568 6.58797L15.1636 6.60755L15.172 6.636L15.1787 6.66465L15.3534 7.70946L15.4639 8.76315L15.509 9.82182L15.4892 10.8813ZM17.6321 8.78296L17.623 8.69223L17.609 8.60267L17.5899 8.51384L17.5657 8.42661L17.5365 8.34125L17.5025 8.25803L17.4639 8.1771L17.4208 8.09906L17.3734 8.02393L17.3216 7.95223L17.2658 7.88419L17.2065 7.82001L17.1435 7.76003L17.0771 7.70429L17.0079 7.65314L16.9097 7.58992L16.8844 7.57128L16.8605 7.55108L16.8376 7.5292L16.8159 7.50592L16.7957 7.48133L16.7769 7.45517L16.7598 7.42788L16.7441 7.39943L16.73 7.37004L16.7177 7.33987L16.7071 7.30893L16.6319 7.08924L16.5437 6.8755L16.4426 6.6685L16.3296 6.46897L16.2048 6.27793L16.0689 6.09611L15.922 5.92446L15.7654 5.76378L15.5996 5.61423L15.5782 5.59519L15.5577 5.57484L15.5384 5.55331L15.5204 5.53062L15.5034 5.5068L15.4876 5.482L15.4732 5.45623L15.2635 5.08357L15.0318 4.72624L14.78 4.38565L14.5087 4.06312L14.2187 3.76021L13.9118 3.47785L13.589 3.21741L13.2515 2.98004L12.9009 2.76631L12.5384 2.57756L12.1656 2.4142L11.7839 2.27714L11.395 2.16683L11.0004 2.08361L10.6017 2.02787L10.2005 2H9.99958H9.79865L9.3974 2.02787L8.99871 2.08361L8.60411 2.16683L8.21518 2.27714L7.83373 2.4142L7.4607 2.57756L7.09823 2.76631L6.74759 2.98004L6.41008 3.21741L6.08729 3.47785L5.78042 3.76021L5.49062 4.06312L5.21931 4.38565L4.96728 4.72624L4.73579 5.08357L4.52587 5.45623L4.5115 5.482L4.49575 5.5068L4.47885 5.53062L4.46071 5.55331L4.44156 5.57484L4.42124 5.59519L4.39967 5.61423L4.23368 5.76378L4.07708 5.92446L3.93055 6.09611L3.79445 6.27793L3.66949 6.46897L3.55648 6.6685L3.45541 6.8755L3.36736 7.08924L3.29199 7.30893L3.28153 7.33987L3.26907 7.37004L3.25505 7.39943L3.2395 7.42788L3.22222 7.45517L3.20359 7.48133L3.18324 7.50592L3.1617 7.5292L3.13878 7.55108L3.11468 7.57128L3.08954 7.58992L2.99125 7.65314L2.922 7.70429L2.85566 7.76003L2.79258 7.82001L2.73344 7.88419L2.67752 7.95223L2.6259 8.02393L2.57836 8.09906L2.53529 8.1771L2.49665 8.25803L2.46279 8.34125L2.43353 8.42661L2.40926 8.51384L2.39011 8.60267L2.37609 8.69223L2.36705 8.78296L2.36328 8.87385L2.36449 8.96498L2.53595 13.1229L2.54042 13.1862L2.54845 13.2493L2.55991 13.3117L2.57476 13.373L2.59308 13.4334L2.61496 13.4924L2.63992 13.55L2.66811 13.6056L2.69941 13.6594L2.76557 13.759L2.83704 13.8541L2.9138 13.9443L2.99551 14.0292L3.08169 14.1086L3.17212 14.1822L3.29182 14.2678L3.31591 14.2873L3.33901 14.3087L3.36072 14.3314L3.38104 14.3556L3.40001 14.3809L3.41781 14.4076L3.43353 14.4355L3.44807 14.4644L3.46088 14.4939L3.59477 14.8651L3.73614 15.197C3.84129 15.4096 6.2085 17.3697 6.2085 17.3697C6.2085 17.3697 7.43743 18 9.99958 18C12.5617 18 13.7906 17.3697 13.7906 17.3697C13.7906 17.3697 16.1578 15.4096 16.263 15.197L16.4045 14.8651L16.5384 14.4939L16.551 14.4644L16.5656 14.4355L16.5815 14.4076L16.5991 14.3809L16.6181 14.3556L16.6386 14.3314L16.6603 14.3087L16.6832 14.2873L16.7073 14.2678L16.827 14.1822L16.9174 14.1086L17.0036 14.0292L17.0853 13.9443L17.1621 13.8541L17.2335 13.759L17.2997 13.6594L17.331 13.6056L17.3592 13.55L17.3842 13.4924L17.406 13.4334L17.4244 13.373L17.4392 13.3117L17.4508 13.2493L17.4589 13.1862L17.4632 13.1229L17.6346 8.96498L17.636 8.87385L17.6321 8.78296Z" fill="inherit"></path>
|
||||
<path d="M12.8063 10.8231H12.0833C11.9929 10.8231 11.9195 10.9058 11.9195 11.0074V11.5677C11.9195 11.6698 11.8834 11.7678 11.8192 11.8401L11.7731 11.8918C11.7089 11.964 11.6217 12.0044 11.5309 12.0044H8.4687C8.37792 12.0044 8.2907 11.964 8.22644 11.8918L8.18043 11.8401C8.11617 11.7678 8.08009 11.6698 8.08009 11.5677V11.0074C8.08009 10.9058 8.00672 10.8231 7.91611 10.8231H7.19327C7.10284 10.8231 7.0293 10.9058 7.0293 11.0074V11.8201C7.0293 11.922 7.10284 12.0044 7.19327 12.0044H7.73763C7.82841 12.0044 7.91559 12.045 7.97989 12.1172C8.04418 12.1895 8.08009 12.2875 8.08009 12.3896V12.9841C8.08009 13.095 8.16076 13.1857 8.25944 13.1857H8.25992H11.7397H11.74C11.8388 13.1857 11.9195 13.095 11.9195 12.9841V12.3896C11.9195 12.2875 11.9554 12.1895 12.0197 12.1172C12.084 12.045 12.1712 12.0044 12.262 12.0044H12.8063C12.8967 12.0044 12.9703 11.922 12.9703 11.8201V11.0074C12.9703 10.9058 12.8967 10.8231 12.8063 10.8231Z" fill="inherit"></path>
|
||||
</svg>
|
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 8.8 KiB |
|
@ -0,0 +1,14 @@
|
|||
<svg width="28" height="29" viewBox="0 0 28 29" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M12.7467 13.3046L2.14771 6.95663C1.64935 6.65797 1.20735 6.23292 0.850421 5.70912C0.493498 5.18532 0.229639 4.57447 0.075988 3.91627L0 3.59082L0.00762822 3.59643L10.5726 9.83175C11.1291 10.1602 11.6157 10.6454 11.9932 11.2485C12.3708 11.8516 12.6288 12.5558 12.7467 13.3045L12.7467 13.3046Z"
|
||||
fill="#23C1AA" />
|
||||
<path
|
||||
d="M10.9431 23.9546L5.27751 20.6482C4.81463 20.3781 4.40328 19.9898 4.07059 19.5086C3.7379 19.0275 3.49143 18.4646 3.34743 17.8571C3.31062 17.7018 3.27333 17.5444 3.23557 17.385L3.27493 17.4074V17.4093L11.2532 22.0644C11.3895 22.1439 11.5409 22.1751 11.6906 22.1545C11.8404 22.1338 11.9825 22.0622 12.1013 21.9476C12.2201 21.833 12.3109 21.6798 12.3635 21.5052C12.4161 21.3306 12.4286 21.1413 12.3995 20.9584C12.2914 20.2802 12.0567 19.6425 11.714 19.0965C11.3714 18.5504 10.9303 18.111 10.426 17.8133L3.66015 13.8195C3.20483 13.5505 2.79989 13.1669 2.47124 12.6932C2.14259 12.2195 1.89746 11.6662 1.75153 11.0686C1.70416 10.8748 1.66054 10.6943 1.625 10.5439L1.65526 10.5608L10.7433 15.9259C11.5644 16.4106 12.2826 17.1261 12.8405 18.0151C13.3984 18.9041 13.7807 19.9422 13.9568 21.0465C14.0334 21.5273 14.0008 22.025 13.8624 22.4842C13.7241 22.9435 13.4854 23.3462 13.1731 23.6476C12.8607 23.949 12.4869 24.1373 12.0932 24.1915C11.6995 24.2457 11.3014 24.1637 10.9431 23.9546Z"
|
||||
fill="#23C1AA" />
|
||||
<path
|
||||
d="M15.2534 13.3046L25.8524 6.95663C26.3508 6.65796 26.7928 6.23292 27.1497 5.70912C27.5066 5.18531 27.7705 4.57447 27.9241 3.91627C27.9503 3.80429 27.9756 3.69581 28.0001 3.59082L27.9925 3.59643L17.4275 9.83175C16.871 10.1602 16.3844 10.6454 16.0069 11.2485C15.6293 11.8516 15.3713 12.5558 15.2534 13.3045V13.3046Z"
|
||||
fill="#23C1AA" />
|
||||
<path
|
||||
d="M17.0556 23.9546L22.7212 20.6482C23.1841 20.3781 23.5955 19.9898 23.9282 19.5087C24.2609 19.0275 24.5073 18.4646 24.6513 17.8571C24.6881 17.7018 24.7254 17.5444 24.7632 17.385L24.7238 17.4074V17.4093L16.7455 22.0644C16.6093 22.1439 16.4578 22.1751 16.3081 22.1545C16.1584 22.1339 16.0162 22.0622 15.8974 21.9476C15.7786 21.833 15.6879 21.6798 15.6352 21.5052C15.5826 21.3306 15.5701 21.1413 15.5993 20.9584C15.7073 20.2801 15.9421 19.6425 16.2847 19.0964C16.6273 18.5504 17.0684 18.1109 17.5727 17.8133L24.3386 13.8194C24.7939 13.5504 25.1989 13.1668 25.5275 12.6932C25.8561 12.2195 26.1013 11.6662 26.2472 11.0686C26.2946 10.8748 26.3382 10.6943 26.3737 10.5439L26.3435 10.5608L17.2554 15.9259C16.4343 16.4106 15.7162 17.1261 15.1582 18.0151C14.6003 18.9042 14.2181 19.9422 14.042 21.0465C13.9653 21.5273 13.9979 22.025 14.1363 22.4842C14.2746 22.9435 14.5133 23.3462 14.8256 23.6476C15.138 23.949 15.5118 24.1373 15.9055 24.1915C16.2992 24.2457 16.6974 24.1637 17.0556 23.9546Z"
|
||||
fill="#23C1AA" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
|
@ -0,0 +1,29 @@
|
|||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12Z"
|
||||
fill="#FFD15C" />
|
||||
<path
|
||||
d="M6.18774 16.9173C6.29129 16.847 6.38794 16.7416 6.43605 16.5921C6.48952 16.4259 6.45798 16.2797 6.43294 16.1987C6.43212 16.196 6.43124 16.1933 6.43037 16.1906L6.45032 16.0741C6.50543 16.1051 6.56885 16.1468 6.64117 16.1976C6.65861 16.2099 6.683 16.2273 6.70836 16.2453C6.74166 16.2691 6.77676 16.2942 6.80015 16.3105C6.84034 16.3384 6.89741 16.3774 6.95788 16.4095C8.55811 17.4041 9.8815 17.8141 10.9326 17.7633C12.0194 17.7108 12.7815 17.1641 13.1746 16.3663C13.5545 15.5951 13.5678 14.6395 13.3015 13.7543C13.0335 12.8634 12.4699 11.9975 11.6298 11.3983C10.2142 10.3886 8.91702 8.8534 8.26109 7.548C7.92799 6.88502 7.79547 6.35035 7.83046 6.00123C7.8467 5.83875 7.8965 5.74046 7.95604 5.6772C8.01563 5.6139 8.1242 5.54408 8.33337 5.50964C8.77641 5.43665 9.28883 5.27709 9.80885 5.11517C10.0107 5.0523 10.2137 4.98908 10.4143 4.93043C11.1638 4.71126 11.9573 4.52713 12.7914 4.5287C14.409 4.53174 16.3075 5.23407 18.3064 8.15576C20.8742 11.909 19.4644 16.103 16.5063 18.3063C15.0311 19.4051 13.1904 19.9884 11.299 19.7666C9.59596 19.567 7.81225 18.7099 6.18774 16.9173ZM6.48559 15.9459C6.48559 15.946 6.48504 15.9471 6.48373 15.949C6.48487 15.9468 6.48553 15.9459 6.48559 15.9459ZM6.3248 16.0192C6.32475 16.0191 6.32639 16.0193 6.32994 16.0202C6.32666 16.0198 6.32491 16.0194 6.3248 16.0192Z"
|
||||
fill="white" stroke="black" stroke-width="1.65708" />
|
||||
<path
|
||||
d="M7.65771 5.70135C7.65771 5.70135 12.2449 4.47986 13.2493 4.47986C14.2536 4.47986 18.2668 6.42868 19.438 9.99003C21.0984 15.0387 16.5822 18.3491 16.0722 18.0246C20.9309 14.0073 12.9778 6.58165 9.06918 7.13993C8.58059 7.20975 8.85203 7.62852 8.85203 7.62852L8.74346 8.71426L7.92915 7.35708L7.65771 5.70135Z"
|
||||
fill="black" />
|
||||
<path
|
||||
d="M18.7697 8.47131C20.2182 11.0214 19.9172 9.56137 19.5956 12.4765C20.1907 11.5138 21.1212 12.2346 21.5055 12.6027C21.5744 12.6687 21.688 12.6278 21.6848 12.5325C21.6702 12.1001 21.5463 11.1657 20.8305 10.1633C19.849 8.78878 18.7697 8.47131 18.7697 8.47131Z"
|
||||
fill="black" />
|
||||
<path
|
||||
d="M19.5956 12.4765C19.651 12.3396 19.7375 12.126 19.7375 12.126M19.5956 12.4765C19.9172 9.56137 20.2182 11.0214 18.7697 8.47131C18.7697 8.47131 19.849 8.78878 20.8305 10.1633C21.5463 11.1657 21.6702 12.1001 21.6848 12.5325C21.688 12.6278 21.5744 12.6687 21.5055 12.6027C21.1212 12.2346 20.1907 11.5138 19.5956 12.4765Z"
|
||||
stroke="black" stroke-width="0.0930942" />
|
||||
<path
|
||||
d="M7.1151 12.0876C6.50389 13.1224 5.24989 13.0448 5.2739 14.279C6.39395 16.7675 6.40057 16.589 6.40057 16.589C8.47534 15.4235 7.62271 12.8499 7.31486 12.093C7.28004 12.0074 7.16206 12.0081 7.1151 12.0876Z"
|
||||
fill="black" />
|
||||
<path
|
||||
d="M2.41197 14.3755C3.60365 14.531 4.31453 13.495 5.27229 14.2737C6.5437 16.6884 6.39894 16.5838 6.39894 16.5838C4.20318 17.5011 2.70012 15.2448 2.2932 14.5362C2.2472 14.4561 2.32038 14.3636 2.41197 14.3755Z"
|
||||
fill="black" />
|
||||
<path
|
||||
d="M12.4078 12.8402C12.4078 12.8402 13.6022 14.0618 12.9779 14.2517C12.1994 13.7726 10.8044 14.1449 10.1206 14.3755C9.95228 14.4323 9.78724 14.2829 9.84792 14.1159C10.0804 13.4761 10.6546 12.2918 11.7564 12.1345C12.4078 11.9715 12.4078 12.8402 12.4078 12.8402Z"
|
||||
fill="black" />
|
||||
<path
|
||||
d="M13.1407 6.86845C13.005 6.67847 12.7336 6.16272 13.575 6.16272C14.4165 6.16272 15.7022 7.1155 15.9636 7.46796C15.8822 7.68276 15.3394 7.73081 15.0679 7.70993C14.7965 7.68904 14.335 7.64438 13.9822 7.46796C13.6293 7.29154 13.2764 7.05848 13.1407 6.86845Z"
|
||||
fill="white" />
|
||||
</svg>
|
After Width: | Height: | Size: 3.7 KiB |
|
@ -0,0 +1,143 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" width="96px" height="96px" viewBox="0 0 96 96" enable-background="new 0 0 96 96" xml:space="preserve">
|
||||
<image id="image0" width="96" height="96" x="0" y="0" href="data:image/png;base64,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
|
||||
MyswMzowMN7DNQAAAAAASUVORK5CYII=" />
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
|
@ -0,0 +1,10 @@
|
|||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_750_11804)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.4978 1.2635C17.4978 0.791609 17.1152 0.409067 16.6434 0.409067L3.79532 0.409058C3.23389 0.409058 2.74264 0.49049 2.32156 0.653358C1.9005 0.828752 1.54959 1.06053 1.26888 1.34868C0.976468 1.64936 0.760084 1.98763 0.619726 2.36347C0.479368 2.75185 0.409187 3.15276 0.409187 3.56619V5.53564C0.409187 6.47942 1.17427 7.2445 2.11805 7.2445H12.3712L7.24465 3.82678H16.6434C17.1152 3.82678 17.4978 3.44423 17.4978 2.97235V1.2635ZM0.40918 16.6432C0.40918 17.1151 0.791721 17.4977 1.26361 17.4977H14.1117C14.6731 17.4977 15.1644 17.4162 15.5854 17.2534C16.0065 17.078 16.3573 16.8462 16.6381 16.558C16.9305 16.2573 17.1469 15.9191 17.2873 15.5432C17.4276 15.1548 17.4978 14.754 17.4978 14.3405V12.371C17.4978 11.4273 16.7327 10.6622 15.789 10.6622H5.53575L10.6623 14.0799H1.26361C0.791721 14.0799 0.40918 14.4625 0.40918 14.9344V16.6432Z" fill="#6966FB" />
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_750_11804">
|
||||
<rect width="17.1818" height="18" fill="white" transform="translate(0.40918)" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
|
@ -1,13 +1,20 @@
|
|||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M29.5024 23.9982L29.5017 8.01513L15.7537 0.015625L15.7541 16.0047L2.00928 24.001L15.758 31.9997L29.4937 24.009L29.5024 24.0141V24.0038L29.5072 24.001L29.5024 23.9982V23.9982Z" fill="#64C557"/>
|
||||
<path d="M2.01389 8.01455L15.7615 0.0146484L15.7607 16.0133L2.0127 24.0132L2.01349 8.01455H2.01389Z" fill="#118AB2"/>
|
||||
<path d="M15.7631 0L29.5118 7.99871L24.9294 10.6649L11.1807 2.66624L15.7631 0Z" fill="#00F8B7"/>
|
||||
<path d="M24.919 10.6605V15.9934L11.1714 7.99351V2.66064L24.919 10.6605Z" fill="#09BD8E"/>
|
||||
<path d="M11.161 8.00098L24.9098 15.9997L20.3274 18.6659L6.57861 10.6672L11.1614 8.00098H11.161Z" fill="#FFE3A3"/>
|
||||
<path d="M20.3818 18.6937V24.0266L6.63379 16.0267V10.6938L20.3814 18.6937H20.3818Z" fill="#FFBB1D"/>
|
||||
<path d="M6.59247 16.002L20.3412 24.0007L15.758 26.6669L2.00928 18.6682L6.59247 16.002V16.002Z" fill="#FF965E"/>
|
||||
<path d="M15.748 26.6628V31.9957L2 23.9954V18.6621L15.748 26.6624V26.6628Z" fill="#D94C00"/>
|
||||
<path d="M24.9251 10.6618L29.5075 7.99512L29.5071 23.9937L24.9243 26.6604L24.9251 10.6618Z" fill="#06D6A0"/>
|
||||
<path d="M20.3325 18.6627L24.9153 15.9961V26.6618L20.3325 29.3285V18.6627Z" fill="#FFD166"/>
|
||||
<path d="M15.7402 26.6642L20.323 23.9976V29.3308L15.7402 31.9971V26.6642Z" fill="#F3722C"/>
|
||||
<svg width="14" height="16" viewBox="0 0 14 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1545_16102)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.6499 11.8551L13.6496 4.14636L6.96731 0.288025L6.9676 7.99986L0.287109 11.8565L6.96969 15.7143L13.6458 11.8602L13.6499 11.8625V11.8579L13.6522 11.8565L13.6499 11.8551Z" fill="#64C557"/>
|
||||
<path d="M0.28935 4.14629L6.97162 0.287964L6.97133 8.00414L0.289062 11.8625L0.28935 4.14629Z" fill="#118AB2"/>
|
||||
<path d="M6.97265 0.280518L13.6552 4.13836L11.4277 5.42431L4.74512 1.56647L6.97265 0.280518Z" fill="#00F8B7"/>
|
||||
<path d="M11.4225 5.422L11.4226 7.99406L4.74032 4.13572L4.74023 1.56366L11.4225 5.422Z" fill="#09BD8E"/>
|
||||
<path d="M4.73632 4.13965L11.4189 7.99749L9.19137 9.28344L2.50879 5.4256L4.73632 4.13965Z" fill="#FFE3A3"/>
|
||||
<path d="M9.21741 9.29679L9.21749 11.8689L2.53524 8.01048L2.53516 5.43842L9.21741 9.29679Z" fill="#FFBB1D"/>
|
||||
<path d="M2.51464 7.99847L9.19718 11.8563L6.96969 13.1423L0.287109 9.28442L2.51464 7.99847Z" fill="#FF965E"/>
|
||||
<path d="M6.96548 13.14L6.96556 15.7121L0.283301 11.8537L0.283203 9.28162L6.96548 13.14Z" fill="#D94C00"/>
|
||||
<path d="M11.4261 5.42281L13.6535 4.13666L13.6532 11.8529L11.4258 13.139L11.4261 5.42281Z" fill="#06D6A0"/>
|
||||
<path d="M9.19357 9.28184L11.421 7.99573L11.4208 13.1399L9.19336 14.426L9.19357 9.28184Z" fill="#FFD166"/>
|
||||
<path d="M6.96106 13.1407L9.18847 11.8546L9.18838 14.4267L6.96094 15.7128L6.96106 13.1407Z" fill="#F3722C"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1545_16102">
|
||||
<rect width="13.5385" height="16" fill="white" transform="translate(0.230469)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.6 KiB |
|
@ -46,6 +46,7 @@
|
|||
"borrows": "Borrows",
|
||||
"break-even": "Break-even Price",
|
||||
"buy": "Buy",
|
||||
"calculator": "Calculator",
|
||||
"cancel": "Cancel",
|
||||
"cancel-error": "Error cancelling order",
|
||||
"cancel-success": "Successfully cancelled order",
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
"ata-deposit-details": "{{cost}} SOL for {{count}} ATA Account",
|
||||
"ata-deposit-details_plural": "{{cost}} SOL for {{count}} ATA Accounts",
|
||||
"bal": "Bal:",
|
||||
"best-swap": "Best Swap",
|
||||
"fees-paid-to": "Fees paid to {{feeRecipient}}",
|
||||
"from": "from",
|
||||
"get-started": "Before you get started...",
|
||||
|
@ -11,13 +12,17 @@
|
|||
"jupiter-error": "Error in Jupiter – Try changing your input",
|
||||
"minimum-received": "Minimum Received",
|
||||
"need-ata-account": "You need to have an Associated Token Account.",
|
||||
"other-routes": "{{numberOfRoutes}} other routes",
|
||||
"pay": "Pay",
|
||||
"price-impact": "Price Impact",
|
||||
"price-info": "Price Info",
|
||||
"rate": "Rate",
|
||||
"receive": "Receive",
|
||||
"routes-found": "{{numberOfRoutes}} routes found!",
|
||||
"routes-found": "{{numberOfRoutes}} routes found",
|
||||
"serum-details": "{{cost}} SOL for {{count}} Serum OpenOrders Account",
|
||||
"serum-details_plural": "{{cost}} SOL for {{count}} Serum OpenOrders Accounts",
|
||||
"serum-requires-openorders": "Serum requires an OpenOrders account for each token. You can close the account and recover the SOL later.",
|
||||
"swap-details": "Swap Details",
|
||||
"swap-fee": "Swap Fee",
|
||||
"swap-in-wallet": "Swaps interact directly with your connected wallet, not your Mango Account.",
|
||||
"swap-successful": "Swap Successful",
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
"borrows": "Préstamos",
|
||||
"break-even": "Precio de equilibrio",
|
||||
"buy": "Comprar",
|
||||
"calculator": "Calculadora",
|
||||
"cancel": "Cancelar",
|
||||
"cancel-error": "Error al cancelar el pedido",
|
||||
"cancel-success": "Pedido cancelado con éxito",
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
"ata-deposit-details": "{{cost}} SOL for {{count}} ATA Account",
|
||||
"ata-deposit-details_plural": "{{cost}} SOL for {{count}} ATA Accounts",
|
||||
"bal": "Bal:",
|
||||
"best-swap": "Best Swap",
|
||||
"fees-paid-to": "Fees paid to {{feeRecipient}}",
|
||||
"from": "from",
|
||||
"get-started": "Before you get started...",
|
||||
|
@ -11,13 +12,17 @@
|
|||
"jupiter-error": "Error in Jupiter – try changing your input",
|
||||
"minimum-received": "Minimum Received",
|
||||
"need-ata-account": "You need to have an Associated Token Account.",
|
||||
"other-routes": "{{numberOfRoutes}} other routes",
|
||||
"pay": "Pay",
|
||||
"price-impact": "Price Impact",
|
||||
"price-info": "Price Info",
|
||||
"rate": "Rate",
|
||||
"receive": "Receive",
|
||||
"routes-found": "{{numberOfRoutes}} routes found!",
|
||||
"routes-found": "{{numberOfRoutes}} routes found",
|
||||
"serum-details": "{{cost}} SOL for {{count}} Serum OpenOrders Account",
|
||||
"serum-details_plural": "{{cost}} SOL for {{count}} Serum OpenOrders Accounts",
|
||||
"serum-requires-openorders": "Serum requires an OpenOrders account for each token. You can close the account and recover the SOL later.",
|
||||
"swap-details": "Swap Details",
|
||||
"swap-fee": "Swap Fee",
|
||||
"swap-in-wallet": "Swaps interact directly with your connected wallet, not your Mango Account.",
|
||||
"swap-successful": "Swap Successful",
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
"borrows": "借贷",
|
||||
"break-even": "保本价格",
|
||||
"buy": "买入",
|
||||
"calculator": "计算器",
|
||||
"cancel": "取消",
|
||||
"cancel-error": "取消掛单出错",
|
||||
"cancel-success": "已取消掛单",
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
"ata-deposit-details": "{{cost}} SOL为 {{count}} ATA帐户",
|
||||
"ata-deposit-details_plural": "{{cost}} SOL为 {{count}} ATA帐户",
|
||||
"bal": "余额:",
|
||||
"best-swap": "Best Swap",
|
||||
"fees-paid-to": "费用缴给{{feeRecipient}}",
|
||||
"from": "从",
|
||||
"get-started": "开始前...",
|
||||
|
@ -11,13 +12,17 @@
|
|||
"jupiter-error": "Jupiter出错,请更改输入",
|
||||
"minimum-received": "最好获得",
|
||||
"need-ata-account": "您必有一个关联币种帐户(ATA)。",
|
||||
"other-routes": "{{numberOfRoutes}} other routes",
|
||||
"pay": "付出",
|
||||
"price-impact": "Price Impact",
|
||||
"price-info": "价格细节",
|
||||
"rate": "Rate",
|
||||
"receive": "收到",
|
||||
"routes-found": "找到{{numberOfRoutes}}条路线!",
|
||||
"routes-found": "找到{{numberOfRoutes}}条路线",
|
||||
"serum-details": "{{cost}} SOL为 {{count}} Serum OpenOrders帐户",
|
||||
"serum-details_plural": "{{cost}} SOL为 {{count}} Serum OpenOrders帐户",
|
||||
"serum-requires-openorders": "Serum要求每个币种有一个OpenOrders帐户。以后可以关闭帐户二恢复SOL押金。",
|
||||
"swap-details": "Swap Details",
|
||||
"swap-fee": "换币费用",
|
||||
"swap-in-wallet": "换币会在您被连结的钱包中进行而不在您的Mango帐户中。",
|
||||
"swap-successful": "交易成功",
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
"borrows": "借貸",
|
||||
"break-even": "保本價格",
|
||||
"buy": "買入",
|
||||
"calculator": "計算器",
|
||||
"cancel": "取消",
|
||||
"cancel-error": "取消掛單出錯",
|
||||
"cancel-success": "已取消掛單",
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
"ata-deposit-details": "{{cost}} SOL為 {{count}} ATA帳戶",
|
||||
"ata-deposit-details_plural": "{{cost}} SOL為 {{count}} ATA帳戶",
|
||||
"bal": "餘額:",
|
||||
"best-swap": "Best Swap",
|
||||
"fees-paid-to": "費用繳給{{feeRecipient}}",
|
||||
"from": "從",
|
||||
"get-started": "開始前...",
|
||||
|
@ -11,13 +12,17 @@
|
|||
"jupiter-error": "Jupiter出錯,請更改輸入",
|
||||
"minimum-received": "最好獲得",
|
||||
"need-ata-account": "您必有一個關聯幣種帳戶(ATA)。",
|
||||
"other-routes": "{{numberOfRoutes}} other routes",
|
||||
"pay": "付出",
|
||||
"price-impact": "Price Impact",
|
||||
"price-info": "價格細節",
|
||||
"rate": "Rate",
|
||||
"receive": "收到",
|
||||
"routes-found": "找到{{numberOfRoutes}}條路線!",
|
||||
"routes-found": "找到{{numberOfRoutes}}條路線",
|
||||
"serum-details": "{{cost}} SOL為 {{count}} Serum OpenOrders帳戶",
|
||||
"serum-details_plural": "{{cost}} SOL為 {{count}} Serum OpenOrders帳戶",
|
||||
"serum-requires-openorders": "Serum要求每個幣種有一個OpenOrders帳戶。以後可以關閉帳戶二恢復SOL押金。",
|
||||
"swap-details": "Swap Details",
|
||||
"swap-fee": "換幣費用",
|
||||
"swap-in-wallet": "換幣會在您被連結的錢包中進行而不在您的Mango帳戶中。",
|
||||
"swap-successful": "換幣成功",
|
||||
|
|
|
@ -77,6 +77,10 @@ export const programId = new PublicKey(defaultMangoGroupIds.mangoProgramId)
|
|||
export const serumProgramId = new PublicKey(defaultMangoGroupIds.serumProgramId)
|
||||
const mangoGroupPk = new PublicKey(defaultMangoGroupIds.publicKey)
|
||||
|
||||
// Used to retry loading the MangoGroup and MangoAccount if an rpc node error occurs
|
||||
// let mangoGroupRetryAttempt = 0
|
||||
// let mangoAccountRetryAttempt = 0
|
||||
|
||||
export const INITIAL_STATE = {
|
||||
WALLET: {
|
||||
providerUrl: null,
|
||||
|
@ -333,6 +337,7 @@ const useMangoStore = create<MangoStore>((set, get) => {
|
|||
const mangoGroup = get().selectedMangoGroup.current
|
||||
const mangoClient = get().connection.client
|
||||
const wallet = get().wallet.current
|
||||
// const actions = get().actions
|
||||
const walletPk = wallet?.publicKey
|
||||
|
||||
if (!walletPk) return
|
||||
|
@ -365,6 +370,11 @@ const useMangoStore = create<MangoStore>((set, get) => {
|
|||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
// if (mangoAccountRetryAttempt < 2) {
|
||||
// actions.fetchAllMangoAccounts()
|
||||
// mangoAccountRetryAttempt++
|
||||
// }
|
||||
// mangoAccountRetryAttempt = 0
|
||||
notify({
|
||||
type: 'error',
|
||||
title: 'Unable to load mango account',
|
||||
|
@ -379,6 +389,7 @@ const useMangoStore = create<MangoStore>((set, get) => {
|
|||
const selectedMarketConfig = get().selectedMarket.config
|
||||
const mangoClient = get().connection.client
|
||||
const connection = get().connection.current
|
||||
// const actions = get().actions
|
||||
|
||||
return mangoClient
|
||||
.getMangoGroup(mangoGroupPk)
|
||||
|
@ -459,8 +470,13 @@ const useMangoStore = create<MangoStore>((set, get) => {
|
|||
})
|
||||
})
|
||||
.catch((err) => {
|
||||
// if (mangoGroupRetryAttempt < 2) {
|
||||
// actions.fetchMangoGroup()
|
||||
// mangoGroupRetryAttempt++
|
||||
// }
|
||||
// mangoGroupRetryAttempt = 0
|
||||
notify({
|
||||
title: 'Could not get mango group',
|
||||
title: 'Failed to load mango group. Please refresh',
|
||||
description: `${err}`,
|
||||
type: 'error',
|
||||
})
|
||||
|
|
|
@ -87,6 +87,10 @@ button {
|
|||
@apply font-semibold rounded-md tracking-wider;
|
||||
}
|
||||
|
||||
button.transition-none {
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.default-transition {
|
||||
@apply transition-all duration-300;
|
||||
}
|
||||
|
@ -161,14 +165,13 @@ input[type='number'] {
|
|||
/* Scrollbars */
|
||||
|
||||
body::-webkit-scrollbar {
|
||||
width: 12px;
|
||||
height: 8px;
|
||||
background-color: var(--bkg-4);
|
||||
width: 8px;
|
||||
background-color: var(--bkg-1);
|
||||
}
|
||||
|
||||
body::-webkit-scrollbar-thumb {
|
||||
border-radius: 4px;
|
||||
background-color: var(--bkg-2);
|
||||
background-color: var(--bkg-4);
|
||||
}
|
||||
|
||||
body::-webkit-scrollbar-track {
|
||||
|
|
|
@ -51,9 +51,9 @@ module.exports = {
|
|||
'bkg-2': '#1B1B1F',
|
||||
'bkg-3': '#27272B',
|
||||
'bkg-4': '#38383D',
|
||||
'fgd-1': '#F7F7F7',
|
||||
'fgd-2': '#E7E7E7',
|
||||
'fgd-3': '#DADADA',
|
||||
'fgd-1': '#E1E1E1',
|
||||
'fgd-2': '#D1D1D1',
|
||||
'fgd-3': '#B3B3B3',
|
||||
'fgd-4': '#878787',
|
||||
},
|
||||
'mango-theme': {
|
||||
|
@ -68,7 +68,7 @@ module.exports = {
|
|||
'bkg-2': '#1D1832',
|
||||
'bkg-3': '#2A2440',
|
||||
'bkg-4': '#37324D',
|
||||
'fgd-1': '#F0EDFF',
|
||||
'fgd-1': '#E5E3EC',
|
||||
'fgd-2': '#E5E3EC',
|
||||
'fgd-3': '#C1BED3',
|
||||
'fgd-4': '#706C81',
|
||||
|
|
|
@ -177,6 +177,7 @@ export const perpContractPrecision = {
|
|||
ADA: 0,
|
||||
BNB: 3,
|
||||
AVAX: 2,
|
||||
LUNA: 2,
|
||||
}
|
||||
|
||||
const tokenPricePrecision = {
|
||||
|
|
297
yarn.lock
|
@ -945,7 +945,7 @@
|
|||
dependencies:
|
||||
regenerator-runtime "^0.13.4"
|
||||
|
||||
"@babel/runtime@^7.0.0":
|
||||
"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.1", "@babel/runtime@^7.11.1":
|
||||
version "7.16.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.5.tgz#7f3e34bf8bdbbadf03fbb7b1ea0d929569c9487a"
|
||||
integrity sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA==
|
||||
|
@ -1011,10 +1011,10 @@
|
|||
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
||||
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
|
||||
|
||||
"@blockworks-foundation/mango-client@latest":
|
||||
version "3.2.20"
|
||||
resolved "https://registry.yarnpkg.com/@blockworks-foundation/mango-client/-/mango-client-3.2.20.tgz#a7db2908de094c7110b37ca8ef0e380a44760f81"
|
||||
integrity sha512-OCrR2xLJ/1KHD4tRPQeGL8iXXqtSzRTOYqFHk9LFbbJemcXiO+uPXvNr+egCU/T/JeMvJZjrzgWV8gsJy4I/lQ==
|
||||
"@blockworks-foundation/mango-client@^3.2.21":
|
||||
version "3.2.22"
|
||||
resolved "https://registry.yarnpkg.com/@blockworks-foundation/mango-client/-/mango-client-3.2.22.tgz#039fee0f8bd8ab413cdadaec2cd6341b814443c7"
|
||||
integrity sha512-EyiDYc9bkdqIV3y4wFL5E37R4W7tvxXec+Cjiz2l6cf6pDy+fPtZx+FGhl8urncGEZ5N7GRKQNoWPubJXlHKRQ==
|
||||
dependencies:
|
||||
"@project-serum/anchor" "^0.16.2"
|
||||
"@project-serum/serum" "0.13.55"
|
||||
|
@ -1347,43 +1347,43 @@
|
|||
"@types/yargs" "^16.0.0"
|
||||
chalk "^4.0.0"
|
||||
|
||||
"@jup-ag/core@1.0.0-beta.0":
|
||||
version "1.0.0-beta.0"
|
||||
resolved "https://registry.yarnpkg.com/@jup-ag/core/-/core-1.0.0-beta.0.tgz#0149a7097ec59d5401fe4b1b7057814589aade5b"
|
||||
integrity sha512-1hAEVCO/jI/aQjiXCIPy+fvsrEwrnOEDdnB8V0CSM9q2hWItTLGboR8t23xdkbfYoMoxN/WAE186izQX2nezZQ==
|
||||
"@jup-ag/core@1.0.0-beta.4":
|
||||
version "1.0.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/@jup-ag/core/-/core-1.0.0-beta.4.tgz#aa76c449d6da4b2ef8bf2832983b9f42a1ea83f9"
|
||||
integrity sha512-gvqpcW5R6kUCcPJseD8Bc4SyngdePwAab/ykGOOBBTZFP3cFaYccju2DpU/+AoQML7CK+3+Y5JIB2nTVuNFNVA==
|
||||
dependencies:
|
||||
"@jup-ag/math" "1.0.0-beta.0"
|
||||
"@jup-ag/math" "1.0.0-beta.4"
|
||||
"@mercurial-finance/stable-swap-n-pool" "0.2.0"
|
||||
"@project-serum/anchor" "0.17.1-beta.1"
|
||||
"@project-serum/serum" "~0.13.60"
|
||||
"@saberhq/stableswap-sdk" "~1.6.2"
|
||||
"@saberhq/token-utils" "~1.6.2"
|
||||
"@solana/buffer-layout" "~3.0.0"
|
||||
"@solana/spl-token" "^0.1.5"
|
||||
"@solana/web3.js" "~1.30.2"
|
||||
"@project-serum/anchor" "0.19.1-beta.1"
|
||||
"@project-serum/serum" "~0.13.61"
|
||||
"@saberhq/stableswap-sdk" "~1.12.6"
|
||||
"@saberhq/token-utils" "~1.12.6"
|
||||
"@solana/buffer-layout" "3.0.0"
|
||||
"@solana/spl-token" "~0.1.8"
|
||||
"@solana/web3.js" "~1.31.0"
|
||||
bn.js "~5.2.0"
|
||||
cross-fetch "3.1.4"
|
||||
decimal.js "~10.3.1"
|
||||
jsbi "~4.1.0"
|
||||
promise-retry "~2.0.1"
|
||||
|
||||
"@jup-ag/math@1.0.0-beta.0":
|
||||
version "1.0.0-beta.0"
|
||||
resolved "https://registry.yarnpkg.com/@jup-ag/math/-/math-1.0.0-beta.0.tgz#b89912edcca90a25aa43747140bfe64506d9c4f4"
|
||||
integrity sha512-C4r5EUnwYT4QGkqyCuKrGENDPYuZs6cJF4JP9Jx2Q1i0jJK+FIct+lOmskJ2dKJG4Khvx9NLlWH3RzNGokROgA==
|
||||
"@jup-ag/math@1.0.0-beta.4":
|
||||
version "1.0.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/@jup-ag/math/-/math-1.0.0-beta.4.tgz#10b19500349e767591c8484a62bb3d8b4fc4fcbe"
|
||||
integrity sha512-03s/N4YvG59iuO7kFriI1i1PhiCCLAqKQU21mUvM7of5FiszxZ2BPHgktOEozlH9/Sn5F8e2MAhck7bcB3MbbA==
|
||||
dependencies:
|
||||
"@solana/spl-token-registry" "^0.2.229"
|
||||
"@solana/web3.js" "~1.30.2"
|
||||
"@solana/spl-token-registry" "~0.2.1105"
|
||||
"@solana/web3.js" "~1.31.0"
|
||||
builder-pattern "~1.3.0"
|
||||
decimal.js "~10.3.1"
|
||||
jsbi "~4.1.0"
|
||||
|
||||
"@jup-ag/react-hook@latest":
|
||||
version "1.0.0-beta.0"
|
||||
resolved "https://registry.yarnpkg.com/@jup-ag/react-hook/-/react-hook-1.0.0-beta.0.tgz#3f28ad1f38786c9a43baa79bc3dba625111839ea"
|
||||
integrity sha512-0llUvxceYfNx5vD6Hx3Eed5S1PWWWQ76kZydSbFLh20CnkV51+oA2iK/04XPDdizSvt4ZhUn3zokQnB8VP56WQ==
|
||||
"@jup-ag/react-hook@^1.0.0-beta.4":
|
||||
version "1.0.0-beta.4"
|
||||
resolved "https://registry.yarnpkg.com/@jup-ag/react-hook/-/react-hook-1.0.0-beta.4.tgz#de22f543af80db04044327dee8d76e50a2de20fc"
|
||||
integrity sha512-HeBd5e2QcxrdeKe9INg+kwUZcefO6GEKEy967NOtwVDY3OGLbrBNBcalAeITnF+QRGJecHHmnV0AkSDnOEzwIQ==
|
||||
dependencies:
|
||||
"@jup-ag/core" "1.0.0-beta.0"
|
||||
"@jup-ag/core" "1.0.0-beta.4"
|
||||
|
||||
"@mercurial-finance/stable-swap-n-pool@0.2.0":
|
||||
version "0.2.0"
|
||||
|
@ -1569,17 +1569,17 @@
|
|||
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.9.2.tgz#adea7b6953cbb34651766b0548468e743c6a2353"
|
||||
integrity sha512-VZMYa7+fXHdwIq1TDhSXoVmSPEGM/aa+6Aiq3nVVJ9bXr24zScr+NlKFKC3iPljA7ho/GAZr+d2jOf5GIRC30Q==
|
||||
|
||||
"@project-serum/anchor@0.17.1-beta.1":
|
||||
version "0.17.1-beta.1"
|
||||
resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.17.1-beta.1.tgz#0532b4534c6a86e67e8530040c717979240f1dbe"
|
||||
integrity sha512-W23rI48nNm6sM+3L6jUh4kSWh5cLJWwJHiohB2AnnG+9jYs/NSgCcope8dP0g2DeHITCo5E/VpZpZc4Fulqqpg==
|
||||
"@project-serum/anchor@0.19.1-beta.1":
|
||||
version "0.19.1-beta.1"
|
||||
resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.19.1-beta.1.tgz#516b78432acabd8563831c3b9df4628ca34dba28"
|
||||
integrity sha512-TzkgS5a4WUDJotmur9/pQhqeqa5W14h++ppF+oGZVoR0EkcLbW7SKpx/z80XhsHCIhWz9/1hBAkbKElXdKUUiw==
|
||||
dependencies:
|
||||
"@project-serum/borsh" "^0.2.2"
|
||||
"@solana/web3.js" "^1.17.0"
|
||||
base64-js "^1.5.1"
|
||||
bn.js "^5.1.2"
|
||||
bs58 "^4.0.1"
|
||||
buffer-layout "^1.2.0"
|
||||
buffer-layout "^1.2.2"
|
||||
camelcase "^5.3.1"
|
||||
crypto-hash "^1.3.0"
|
||||
eventemitter3 "^4.0.7"
|
||||
|
@ -1648,7 +1648,7 @@
|
|||
bn.js "^5.1.2"
|
||||
buffer-layout "^1.2.0"
|
||||
|
||||
"@project-serum/serum@~0.13.60":
|
||||
"@project-serum/serum@~0.13.61":
|
||||
version "0.13.61"
|
||||
resolved "https://registry.yarnpkg.com/@project-serum/serum/-/serum-0.13.61.tgz#1f0e6dfa7786a71e4317593911e9915d8b2a06e6"
|
||||
integrity sha512-aebaRGQ0/K7a5kJ9UXO59BAQFJILVu5jbGobU8GD2CTSy6SPceprB6/pgZmZLQIabhXWUHaZRF/wXIClgWataA==
|
||||
|
@ -1675,10 +1675,10 @@
|
|||
bs58 "^4.0.1"
|
||||
eventemitter3 "^4.0.7"
|
||||
|
||||
"@saberhq/solana-contrib@^1.11.3", "@saberhq/solana-contrib@^1.6.2":
|
||||
version "1.11.3"
|
||||
resolved "https://registry.yarnpkg.com/@saberhq/solana-contrib/-/solana-contrib-1.11.3.tgz#40d4fc64e728dc3135e1df555e78881b6f6428a2"
|
||||
integrity sha512-crh3GdPk9yY3ieWQfFOGh1SIoW6mGvCcyKu4XDGT3hfSXKpYY+1XNVIKVgpHc+gIoscZZKOeHIw8elDCm9qkeg==
|
||||
"@saberhq/solana-contrib@^1.12.20":
|
||||
version "1.12.20"
|
||||
resolved "https://registry.yarnpkg.com/@saberhq/solana-contrib/-/solana-contrib-1.12.20.tgz#9ee1b281f9d9b6ecaf33f321dec1eb252eb4b548"
|
||||
integrity sha512-3pDWYIui62dFN7M+QvD5NpgH3KkANKwOGzIJo0MQqlw459CGjFnqC/dMNxE3F1tIeIWb1DzklamJoG8vGIRYhA==
|
||||
dependencies:
|
||||
"@types/promise-retry" "^1.1.3"
|
||||
"@types/retry" "^0.12.1"
|
||||
|
@ -1687,44 +1687,29 @@
|
|||
tiny-invariant "^1.2.0"
|
||||
tslib "^2.3.1"
|
||||
|
||||
"@saberhq/stableswap-sdk@~1.6.2":
|
||||
version "1.6.2"
|
||||
resolved "https://registry.yarnpkg.com/@saberhq/stableswap-sdk/-/stableswap-sdk-1.6.2.tgz#2a9263b35b24fa6143badf25ab6118313955e5d8"
|
||||
integrity sha512-VmiFZZOokxGxK19dwdIWaC/lstd0fDxGekp/D5QMBq7XfuNcXT9z7gxs/wUYinaAZK3igv32r4lvsdPHeP3PaA==
|
||||
"@saberhq/stableswap-sdk@~1.12.6":
|
||||
version "1.12.20"
|
||||
resolved "https://registry.yarnpkg.com/@saberhq/stableswap-sdk/-/stableswap-sdk-1.12.20.tgz#0a17330a26671a8a30fb64e938cc6575def95851"
|
||||
integrity sha512-EPG2QJl5aHeCppwsAOVNOWNu7JptjAqYUlH77A4ToCtgeplsND3YUawRhF95QW47zalRxZOeTta2B2aJ2HlgCA==
|
||||
dependencies:
|
||||
"@saberhq/solana-contrib" "^1.6.2"
|
||||
"@saberhq/token-utils" "^1.6.2"
|
||||
"@solana/buffer-layout" "^3.0.0"
|
||||
"@types/yargs" "^17.0.5"
|
||||
b58 "^4.0.3"
|
||||
"@saberhq/solana-contrib" "^1.12.20"
|
||||
"@saberhq/token-utils" "^1.12.20"
|
||||
"@solana/buffer-layout" "^4.0.0"
|
||||
lodash.mapvalues "^4.6.0"
|
||||
tslib "^2.3.1"
|
||||
yargs "^17.2.1"
|
||||
|
||||
"@saberhq/token-utils@^1.6.2":
|
||||
version "1.11.3"
|
||||
resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.11.3.tgz#b6b283f0ee3aae5db7cf1df67724e4218ca1ff81"
|
||||
integrity sha512-/GRnNQlm0GYKJOZxrNwWxWAak+bDtyFEMlWVO/oloPKjjAW037IPPoxl+O0AWYOShEy7JooEDsg1nnbzAa6hYQ==
|
||||
"@saberhq/token-utils@^1.12.20", "@saberhq/token-utils@~1.12.6":
|
||||
version "1.12.20"
|
||||
resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.12.20.tgz#2987a95914d354a21bace755c59dad74f10746dd"
|
||||
integrity sha512-2EvqCvI3QlCGwK4ZtDa4ktG//4DwBUnULHAESRKp5QxMzVy1oIBkHQIIgYal5tDIpdtqSo/eBoTXBItpfqhJmQ==
|
||||
dependencies:
|
||||
"@saberhq/solana-contrib" "^1.11.3"
|
||||
"@saberhq/solana-contrib" "^1.12.20"
|
||||
"@solana/buffer-layout" "^4.0.0"
|
||||
"@solana/spl-token" "^0.1.8"
|
||||
"@ubeswap/token-math" "^4.4.1"
|
||||
tiny-invariant "^1.2.0"
|
||||
tslib "^2.3.1"
|
||||
|
||||
"@saberhq/token-utils@~1.6.2":
|
||||
version "1.6.2"
|
||||
resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.6.2.tgz#b40a2131934b57ce4897015b28415a6e7b377f32"
|
||||
integrity sha512-GX3GpkKiLNWwO9C0MkRmR6jF4Cf0O2f62dEMg3dleQynkFDwDYqaKyosW9AhfXj8DNDdBmz+ARXrrJDpvL0tkw==
|
||||
dependencies:
|
||||
"@saberhq/solana-contrib" "^1.6.2"
|
||||
"@solana/buffer-layout" "^3.0.0"
|
||||
"@solana/spl-token" "^0.1.8"
|
||||
"@ubeswap/token-math" "^4.2.0"
|
||||
tiny-invariant "^1.1.0"
|
||||
tslib "^2.3.1"
|
||||
|
||||
"@sinonjs/commons@^1.7.0":
|
||||
version "1.8.3"
|
||||
resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d"
|
||||
|
@ -1739,21 +1724,21 @@
|
|||
dependencies:
|
||||
"@sinonjs/commons" "^1.7.0"
|
||||
|
||||
"@solana/buffer-layout@3.0.0", "@solana/buffer-layout@^3.0.0", "@solana/buffer-layout@^4.0.0", "@solana/buffer-layout@~3.0.0":
|
||||
"@solana/buffer-layout@3.0.0", "@solana/buffer-layout@^3.0.0", "@solana/buffer-layout@^4.0.0":
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-3.0.0.tgz#b9353caeb9a1589cb77a1b145bcb1a9a93114326"
|
||||
integrity sha512-MVdgAKKL39tEs0l8je0hKaXLQFb7Rdfb0Xg2LjFZd8Lfdazkg6xiS98uAZrEKvaoF3i4M95ei9RydkGIDMeo3w==
|
||||
dependencies:
|
||||
buffer "~6.0.3"
|
||||
|
||||
"@solana/spl-token-registry@^0.2.229":
|
||||
version "0.2.819"
|
||||
resolved "https://registry.yarnpkg.com/@solana/spl-token-registry/-/spl-token-registry-0.2.819.tgz#1bf967e60a98eb55161d95fed2b91aef4cf61745"
|
||||
integrity sha512-gPXH4L692NoWzfJSe45S6rVD6ImMcirc9KrD+XuE1pYRM9bl6pD7czfmlEw+SwvPb76Sm26M0ikemVhmI6+ORg==
|
||||
"@solana/spl-token-registry@~0.2.1105":
|
||||
version "0.2.1342"
|
||||
resolved "https://registry.yarnpkg.com/@solana/spl-token-registry/-/spl-token-registry-0.2.1342.tgz#4bd02a0389f4340a7801016106c2ef28da9ddc57"
|
||||
integrity sha512-tvoSuM+PMaxHZVbk+RDdjONosd/ahzX5sZhuO4o6sAKrDaKeMj7A4LnxxPnryrS903eFBsy8s1KfgHCDqjEYKA==
|
||||
dependencies:
|
||||
cross-fetch "3.0.6"
|
||||
|
||||
"@solana/spl-token@^0.1.5", "@solana/spl-token@^0.1.6", "@solana/spl-token@^0.1.8":
|
||||
"@solana/spl-token@^0.1.6", "@solana/spl-token@^0.1.8", "@solana/spl-token@~0.1.8":
|
||||
version "0.1.8"
|
||||
resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.1.8.tgz#f06e746341ef8d04165e21fc7f555492a2a0faa6"
|
||||
integrity sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==
|
||||
|
@ -1785,7 +1770,7 @@
|
|||
superstruct "^0.14.2"
|
||||
tweetnacl "^1.0.0"
|
||||
|
||||
"@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.31.0":
|
||||
"@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.31.0", "@solana/web3.js@~1.31.0":
|
||||
version "1.31.0"
|
||||
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.31.0.tgz#7a313d4c1a90b77f27ddbfe845a10d6883e06452"
|
||||
integrity sha512-7nHHx1JNFnrt15e9y8m38I/EJCbaB+bFC3KZVM1+QhybCikFxGMtGA5r7PDC3GEL1R2RZA8yKoLkDKo3vzzqnw==
|
||||
|
@ -1805,26 +1790,6 @@
|
|||
superstruct "^0.14.2"
|
||||
tweetnacl "^1.0.0"
|
||||
|
||||
"@solana/web3.js@~1.30.2":
|
||||
version "1.30.2"
|
||||
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.30.2.tgz#e85da75e0825dc64f53eb64a1ff0115b27bec135"
|
||||
integrity sha512-hznCj+rkfvM5taRP3Z+l5lumB7IQnDrB4l55Wpsg4kDU9Zds8pE5YOH5Z9bbF/pUzZJKQjyBjnY/6kScBm3Ugg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.12.5"
|
||||
"@ethersproject/sha2" "^5.5.0"
|
||||
"@solana/buffer-layout" "^3.0.0"
|
||||
bn.js "^5.0.0"
|
||||
borsh "^0.4.0"
|
||||
bs58 "^4.0.1"
|
||||
buffer "6.0.1"
|
||||
cross-fetch "^3.1.4"
|
||||
jayson "^3.4.4"
|
||||
js-sha3 "^0.8.0"
|
||||
rpc-websockets "^7.4.2"
|
||||
secp256k1 "^4.0.2"
|
||||
superstruct "^0.14.2"
|
||||
tweetnacl "^1.0.0"
|
||||
|
||||
"@svgr/babel-plugin-add-jsx-attribute@^5.4.0":
|
||||
version "5.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906"
|
||||
|
@ -2107,14 +2072,14 @@
|
|||
integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==
|
||||
|
||||
"@types/node@*":
|
||||
version "17.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.5.tgz#57ca67ec4e57ad9e4ef5a6bab48a15387a1c83e0"
|
||||
integrity sha512-w3mrvNXLeDYV1GKTZorGJQivK6XLCoGwpnyJFbJVK/aTBQUxOCaa/GlFAAN3OTDFcb7h5tiFG+YXCO2By+riZw==
|
||||
version "17.0.8"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.8.tgz#50d680c8a8a78fe30abe6906453b21ad8ab0ad7b"
|
||||
integrity sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==
|
||||
|
||||
"@types/node@^12.12.54":
|
||||
version "12.20.39"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.39.tgz#ef3cb119eaba80e9f1012c78b9384a7489a18bf6"
|
||||
integrity sha512-U7PMwkDmc3bnL0e4U8oA0POpi1vfsYDc+DEUS2+rPxm9NlLcW1dBa5JcRhO633PoPUcCSWMNXrMsqhmAVEo+IQ==
|
||||
version "12.20.41"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.41.tgz#81d7734c5257da9f04354bd9084a6ebbdd5198a5"
|
||||
integrity sha512-f6xOqucbDirG7LOzedpvzjP3UTmHttRou3Mosx3vL9wr9AIQGhcPgVnqa8ihpZYnxyM1rxeNCvTyukPKZtq10Q==
|
||||
|
||||
"@types/node@^14.14.25":
|
||||
version "14.17.3"
|
||||
|
@ -2227,13 +2192,6 @@
|
|||
dependencies:
|
||||
"@types/yargs-parser" "*"
|
||||
|
||||
"@types/yargs@^17.0.5":
|
||||
version "17.0.7"
|
||||
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.7.tgz#44a484c634761da4391477515a98772b82b5060f"
|
||||
integrity sha512-OvLKmpKdea1aWtqHv9bxVVcMoT6syAeK+198dfETIFkAevYRGwqh4H+KFxfjUETZuUuE5sQCAFwdOdoHUdo8eg==
|
||||
dependencies:
|
||||
"@types/yargs-parser" "*"
|
||||
|
||||
"@typescript-eslint/eslint-plugin@^4.33.0":
|
||||
version "4.33.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276"
|
||||
|
@ -2304,7 +2262,7 @@
|
|||
"@typescript-eslint/types" "4.33.0"
|
||||
eslint-visitor-keys "^2.0.0"
|
||||
|
||||
"@ubeswap/token-math@^4.2.0", "@ubeswap/token-math@^4.4.1":
|
||||
"@ubeswap/token-math@^4.4.1":
|
||||
version "4.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@ubeswap/token-math/-/token-math-4.4.1.tgz#bb1aa0547691aed6c14d1a80db4538b6e74a502e"
|
||||
integrity sha512-856auygzQ8chxOt2dNGk5Tp/TWl8Fgs2U6pTHkclFn8RcV7htpd/DaTYDCITQneLTAIfAkm1UopIkwHDaMMx4g==
|
||||
|
@ -2645,13 +2603,6 @@ available-typed-arrays@^1.0.2:
|
|||
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz#9e0ae84ecff20caae6a94a1c3bc39b955649b7a9"
|
||||
integrity sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==
|
||||
|
||||
b58@^4.0.3:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/b58/-/b58-4.0.3.tgz#852a28d804b4a5a60685f9b51706315145a48c36"
|
||||
integrity sha512-VDtdiomm0ywbL8YzgevOZ9pcx6LuOZ3d9qYTPDcYUPf7dRYNA8wvK6epYy0FKMWIM5uaDwd3kWt1x+1S9scB1Q==
|
||||
dependencies:
|
||||
base-x "^3.0.2"
|
||||
|
||||
babel-jest@^26.6.3:
|
||||
version "26.6.3"
|
||||
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056"
|
||||
|
@ -2807,16 +2758,11 @@ bl@^4.0.3:
|
|||
inherits "^2.0.4"
|
||||
readable-stream "^3.4.0"
|
||||
|
||||
bn.js@5.1.3, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9, bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@~5.2.0:
|
||||
bn.js@5.1.3, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9, bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@~5.2.0:
|
||||
version "5.1.3"
|
||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b"
|
||||
integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==
|
||||
|
||||
bn.js@^5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
|
||||
integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
|
||||
|
||||
boolbase@^1.0.0, boolbase@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
|
||||
|
@ -2969,7 +2915,7 @@ buffer-layout@^1.2.0:
|
|||
resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.1.tgz#17b6db7abea303cab35eebd77919b89de026297d"
|
||||
integrity sha512-RUTGEYG1vX0Zp1dStQFl8yeU/LEBPXVtHwzzDbPWkE5zq+Prt9fkFLKNiwmaeHg6BBiRMcQAgj4cynazO6eekw==
|
||||
|
||||
buffer-layout@^1.2.1:
|
||||
buffer-layout@^1.2.1, buffer-layout@^1.2.2:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5"
|
||||
integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==
|
||||
|
@ -3012,9 +2958,9 @@ buffer@^5.5.0:
|
|||
ieee754 "^1.1.13"
|
||||
|
||||
bufferutil@^4.0.1:
|
||||
version "4.0.5"
|
||||
resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028"
|
||||
integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==
|
||||
version "4.0.6"
|
||||
resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433"
|
||||
integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==
|
||||
dependencies:
|
||||
node-gyp-build "^4.3.0"
|
||||
|
||||
|
@ -3204,7 +3150,7 @@ classnames@2.2.6:
|
|||
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
|
||||
integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
|
||||
|
||||
classnames@2.3.1, classnames@^2.2.5:
|
||||
classnames@2.3.1, classnames@2.x, classnames@^2.2.1, classnames@^2.2.5, classnames@^2.2.6:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
|
||||
integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
|
||||
|
@ -4018,6 +3964,11 @@ dom-accessibility-api@^0.5.6:
|
|||
resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.6.tgz#3f5d43b52c7a3bd68b5fb63fa47b4e4c1fdf65a9"
|
||||
integrity sha512-DplGLZd8L1lN64jlT27N9TVSESFR5STaEJvX+thCby7fuCHonfPpAlodYc3vuUYbDuDec5w8AMP7oCM5TWFsqw==
|
||||
|
||||
dom-align@^1.7.0:
|
||||
version "1.12.2"
|
||||
resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.12.2.tgz#0f8164ebd0c9c21b0c790310493cd855892acd4b"
|
||||
integrity sha512-pHuazgqrsTFrGU2WLDdXxCFabkdQDx72ddkraZNih1KsMcN5qsRSTR9O4VJRlwTPCPb5COYg3LOfiMHHcPInHg==
|
||||
|
||||
dom-helpers@^3.4.0:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8"
|
||||
|
@ -4086,7 +4037,7 @@ electron-to-chromium@^1.3.723:
|
|||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09"
|
||||
integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==
|
||||
|
||||
elliptic@^6.5.2, elliptic@^6.5.3:
|
||||
elliptic@^6.5.3, elliptic@^6.5.4:
|
||||
version "6.5.4"
|
||||
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
|
||||
integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
|
||||
|
@ -8130,6 +8081,66 @@ raw-body@2.4.1:
|
|||
iconv-lite "0.4.24"
|
||||
unpipe "1.0.0"
|
||||
|
||||
rc-align@^4.0.0:
|
||||
version "4.0.11"
|
||||
resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-4.0.11.tgz#8198c62db266bc1b8ef05e56c13275bf72628a5e"
|
||||
integrity sha512-n9mQfIYQbbNTbefyQnRHZPWuTEwG1rY4a9yKlIWHSTbgwI+XUMGRYd0uJ5pE2UbrNX0WvnMBA1zJ3Lrecpra/A==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "2.x"
|
||||
dom-align "^1.7.0"
|
||||
lodash "^4.17.21"
|
||||
rc-util "^5.3.0"
|
||||
resize-observer-polyfill "^1.5.1"
|
||||
|
||||
rc-motion@^2.0.0:
|
||||
version "2.4.4"
|
||||
resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.4.4.tgz#e995d5fa24fc93065c24f714857cf2677d655bb0"
|
||||
integrity sha512-ms7n1+/TZQBS0Ydd2Q5P4+wJTSOrhIrwNxLXCZpR7Fa3/oac7Yi803HDALc2hLAKaCTQtw9LmQeB58zcwOsqlQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.11.1"
|
||||
classnames "^2.2.1"
|
||||
rc-util "^5.2.1"
|
||||
|
||||
rc-slider@^9.7.5:
|
||||
version "9.7.5"
|
||||
resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-9.7.5.tgz#193141c68e99b1dc3b746daeb6bf852946f5b7f4"
|
||||
integrity sha512-LV/MWcXFjco1epPbdw1JlLXlTgmWpB9/Y/P2yinf8Pg3wElHxA9uajN21lJiWtZjf5SCUekfSP6QMJfDo4t1hg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.5"
|
||||
rc-tooltip "^5.0.1"
|
||||
rc-util "^5.16.1"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
rc-tooltip@^5.0.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-5.1.1.tgz#94178ed162d0252bc4993b725f5dc2ac0fccf154"
|
||||
integrity sha512-alt8eGMJulio6+4/uDm7nvV+rJq9bsfxFDCI0ljPdbuoygUscbsMYb6EQgwib/uqsXQUvzk+S7A59uYHmEgmDA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.11.2"
|
||||
rc-trigger "^5.0.0"
|
||||
|
||||
rc-trigger@^5.0.0:
|
||||
version "5.2.10"
|
||||
resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-5.2.10.tgz#8a0057a940b1b9027eaa33beec8a6ecd85cce2b1"
|
||||
integrity sha512-FkUf4H9BOFDaIwu42fvRycXMAvkttph9AlbCZXssZDVzz2L+QZ0ERvfB/4nX3ZFPh1Zd+uVGr1DEDeXxq4J1TA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.11.2"
|
||||
classnames "^2.2.6"
|
||||
rc-align "^4.0.0"
|
||||
rc-motion "^2.0.0"
|
||||
rc-util "^5.5.0"
|
||||
|
||||
rc-util@^5.16.1, rc-util@^5.2.1, rc-util@^5.3.0, rc-util@^5.5.0:
|
||||
version "5.16.1"
|
||||
resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.16.1.tgz#374db7cb735512f05165ddc3d6b2c61c21b8b4e3"
|
||||
integrity sha512-kSCyytvdb3aRxQacS/71ta6c+kBWvM1v8/2h9d/HaNWauc3qB8pLnF20PJ8NajkNN8gb+rR1l0eWO+D4Pz+LLQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.12.5"
|
||||
react-is "^16.12.0"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
rc@^1.2.7:
|
||||
version "1.2.8"
|
||||
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
|
||||
|
@ -8200,7 +8211,7 @@ react-is@17.0.2, react-is@^17.0.1, react-is@^17.0.2:
|
|||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
|
||||
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
|
||||
|
||||
react-is@^16.7.0, react-is@^16.8.1:
|
||||
react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1:
|
||||
version "16.13.1"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||
|
@ -8718,11 +8729,11 @@ scheduler@^0.20.2:
|
|||
object-assign "^4.1.1"
|
||||
|
||||
secp256k1@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1"
|
||||
integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303"
|
||||
integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==
|
||||
dependencies:
|
||||
elliptic "^6.5.2"
|
||||
elliptic "^6.5.4"
|
||||
node-addon-api "^2.0.0"
|
||||
node-gyp-build "^4.2.0"
|
||||
|
||||
|
@ -8803,6 +8814,11 @@ shallow-equal@^1.2.1:
|
|||
resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da"
|
||||
integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==
|
||||
|
||||
shallowequal@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
|
||||
integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
|
||||
|
||||
sharp@^0.28.3:
|
||||
version "0.28.3"
|
||||
resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.28.3.tgz#ecd74cefd020bee4891bb137c9850ee2ce277a8b"
|
||||
|
@ -9502,7 +9518,7 @@ tiny-glob@^0.2.9:
|
|||
globalyzer "0.1.0"
|
||||
globrex "^0.1.2"
|
||||
|
||||
tiny-invariant@^1.1.0, tiny-invariant@^1.2.0:
|
||||
tiny-invariant@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9"
|
||||
integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==
|
||||
|
@ -9854,9 +9870,9 @@ use@^3.1.0:
|
|||
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
|
||||
|
||||
utf-8-validate@^5.0.2:
|
||||
version "5.0.7"
|
||||
resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922"
|
||||
integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==
|
||||
version "5.0.8"
|
||||
resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.8.tgz#4a735a61661dbb1c59a0868c397d2fe263f14e58"
|
||||
integrity sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==
|
||||
dependencies:
|
||||
node-gyp-build "^4.3.0"
|
||||
|
||||
|
@ -10207,19 +10223,6 @@ yargs@^17.0.1:
|
|||
y18n "^5.0.5"
|
||||
yargs-parser "^21.0.0"
|
||||
|
||||
yargs@^17.2.1:
|
||||
version "17.3.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.0.tgz#295c4ffd0eef148ef3e48f7a2e0f58d0e4f26b1c"
|
||||
integrity sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==
|
||||
dependencies:
|
||||
cliui "^7.0.2"
|
||||
escalade "^3.1.1"
|
||||
get-caller-file "^2.0.5"
|
||||
require-directory "^2.1.1"
|
||||
string-width "^4.2.3"
|
||||
y18n "^5.0.5"
|
||||
yargs-parser "^21.0.0"
|
||||
|
||||
yn@3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
|
||||
|
|