Skip to content

Commit 0ff765d

Browse files
authored
Merge pull request #1314 from mars-protocol/develop
v2.8.7
2 parents 838ec87 + f86ec7f commit 0ff765d

File tree

11 files changed

+1179
-381
lines changed

11 files changed

+1179
-381
lines changed

package.json

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "mars-v2-frontend",
3-
"version": "2.8.6",
3+
"version": "2.8.7",
44
"homepage": "./",
55
"private": false,
66
"license": "SEE LICENSE IN LICENSE FILE",
@@ -20,10 +20,10 @@
2020
]
2121
},
2222
"dependencies": {
23-
"@cosmjs/cosmwasm-stargate": "^0.32.4",
23+
"@cosmjs/cosmwasm-stargate": "^0.33.0",
2424
"@delphi-labs/shuttle-react": "^3.29.0",
25-
"@keplr-wallet/cosmos": "^0.12.163",
26-
"@next/eslint-plugin-next": "^15.1.0",
25+
"@keplr-wallet/cosmos": "^0.12.175",
26+
"@next/eslint-plugin-next": "^15.1.4",
2727
"@tailwindcss/container-queries": "^0.1.1",
2828
"@tanstack/react-table": "^8.20.6",
2929
"@tippyjs/react": "^4.2.6",
@@ -36,56 +36,56 @@
3636
"lodash.throttle": "^4.1.1",
3737
"mobx": "^6.13.5",
3838
"moment": "^2.30.1",
39-
"next": "^15.1.0",
39+
"next": "^15.1.4",
4040
"react": "19.0.0",
4141
"react-device-detect": "^2.2.3",
4242
"react-dom": "^19.0.0",
4343
"react-draggable": "^4.4.6",
4444
"react-helmet-async": "^2.0.5",
4545
"react-qr-code": "^2.0.15",
46-
"react-router-dom": "^7.0.2",
46+
"react-router-dom": "^7.1.2",
4747
"react-spring": "^9.7.5",
48-
"react-toastify": "^11.0.0",
48+
"react-toastify": "^11.0.3",
4949
"react-use-clipboard": "^1.0.9",
5050
"recharts": "^2.15.0",
5151
"sharp": "^0.33.5",
5252
"starknet": "^6.11.0",
53-
"swr": "^2.2.5",
54-
"tailwind-scrollbar-hide": "^1.1.7",
55-
"zustand": "5.0.2"
53+
"swr": "^2.3.0",
54+
"tailwind-scrollbar-hide": "^2.0.0",
55+
"zustand": "5.0.3"
5656
},
5757
"devDependencies": {
58-
"@babel/eslint-parser": "^7.25.9",
59-
"@eslint/compat": "^1.2.4",
58+
"@babel/eslint-parser": "^7.26.5",
59+
"@eslint/compat": "^1.2.5",
6060
"@svgr/webpack": "^8.1.0",
6161
"@types/debounce-promise": "^3.1.9",
6262
"@types/lodash.debounce": "^4.0.9",
6363
"@types/lodash.throttle": "^4.1.9",
64-
"@types/node": "^22.10.2",
65-
"@types/react": "19.0.1",
66-
"@types/react-dom": "19.0.2",
64+
"@types/node": "^22.10.7",
65+
"@types/react": "19.0.7",
66+
"@types/react-dom": "19.0.3",
6767
"@types/react-helmet": "^6.1.11",
68-
"@typescript-eslint/eslint-plugin": "^8.18.1",
69-
"@typescript-eslint/parser": "^8.18.1",
68+
"@typescript-eslint/eslint-plugin": "^8.20.0",
69+
"@typescript-eslint/parser": "^8.20.0",
7070
"autoprefixer": "^10.4.20",
7171
"dotenv": "^16.4.7",
72-
"dotenv-cli": "^7.4.4",
73-
"eslint": "^9.17.0",
74-
"eslint-config-prettier": "^9.1.0",
75-
"eslint-plugin-functional": "^7.1.0",
72+
"dotenv-cli": "^8.0.0",
73+
"eslint": "^9.18.0",
74+
"eslint-config-prettier": "^10.0.1",
75+
"eslint-plugin-functional": "^8.0.0",
7676
"eslint-plugin-import": "^2.31.0",
77-
"eslint-plugin-prettier": "^5.2.1",
78-
"eslint-plugin-react": "^7.37.2",
77+
"eslint-plugin-prettier": "^5.2.2",
78+
"eslint-plugin-react": "^7.37.4",
7979
"eslint-plugin-react-hooks": "^5.1.0",
8080
"husky": "^9.1.7",
8181
"identity-obj-proxy": "^3.0.0",
82-
"lint-staged": "^15.2.11",
82+
"lint-staged": "^15.4.1",
8383
"prettier": "^3.4.2",
84-
"prettier-plugin-tailwindcss": "^0.6.9",
84+
"prettier-plugin-tailwindcss": "^0.6.10",
8585
"shelljs": "^0.8.5",
86-
"tailwindcss": "^3.4.16",
87-
"typescript": "^5.7.2",
88-
"typescript-eslint": "^8.18.1"
86+
"tailwindcss": "^3.4.17",
87+
"typescript": "^5.7.3",
88+
"typescript-eslint": "^8.20.0"
8989
},
9090
"engines": {
9191
"npm": "please-use-yarn",

src/chains/osmosis/osmosis-1.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ const Osmosis1: ChainConfig = {
131131
hls: true,
132132
perps: false,
133133
farm: true,
134-
anyAsset: false,
134+
anyAsset: true,
135135
slinky: false,
136136
}
137137

src/components/common/Card/CardWithTabs.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ function Tabs(props: TabsProps) {
3636
<button
3737
key={tab.title}
3838
className={classNames(
39-
'py-4 border-b-[2px] border-transparent flex items-center',
39+
'pt-4 pb-1 mb-3 border-b-[2px] border-transparent flex items-center text-lg',
4040
props.tabs.length < 2 && 'cursor-default text-white border-transparent',
4141
index === props.activeIdx && props.tabs.length > 1 && 'border-b-martian-red',
4242
index !== props.activeIdx && props.tabs.length > 1 && 'text-white/20',

src/components/common/Card/index.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,22 @@ interface Props {
1010
onClick?: () => void
1111
title?: string | ReactElement
1212
id?: string
13+
isTab?: boolean
1314
}
1415

1516
export default function Card(props: Props) {
17+
const isTab = props.isTab ?? false
1618
return (
1719
<section
1820
id={props.id}
1921
onClick={props.onClick}
2022
className={classNames(
2123
props.className,
2224
'flex flex-col',
23-
'relative isolate max-w-full overflow-hidden rounded-base max-h-full',
24-
'before:content-[" "] before:absolute before:inset-0 before:-z-1 before:rounded-base before:p-[1px] before:border-glas',
25+
'relative isolate max-w-full overflow-hidden max-h-full',
26+
isTab
27+
? ''
28+
: 'before:content-[" "] before:absolute rounded-base before:inset-0 before:-z-1 before:rounded-base before:p-[1px] before:border-glas',
2529
)}
2630
>
2731
{typeof props.title === 'string' ? (

src/components/perps/PerpsChart.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ export function PerpsChart() {
7070
limitOrders={currentLimitOrders}
7171
onCreateLimitOrder={onCreateLimitOrder}
7272
onCreateStopOrder={onCreateStopOrder}
73+
isTab
7374
/>
7475
</div>
7576
)

src/components/perps/PerpsStats.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import classNames from 'classnames'
2+
import { CircularProgress } from 'components/common/CircularProgress'
3+
import { useState } from 'react'
4+
5+
interface Props {
6+
denom: string
7+
}
8+
9+
export function PerpsStats({ denom }: Props) {
10+
const [isLoading, setIsLoading] = useState(true)
11+
12+
const handleIframeLoad = () => {
13+
setTimeout(() => setIsLoading(false), 1500)
14+
}
15+
16+
return (
17+
<div className='flex gap-4 h-[500px] md:h-screen/70 md:max-h-[980px] md:min-h-[560px] w-full items-center justify-center'>
18+
{isLoading && <CircularProgress size={60} />}
19+
<iframe
20+
src={`http://stats.marsprotocol.io/${denom}?iframeView=on`}
21+
className={classNames(
22+
'w-[calc(100%-2px)] ml-[1px] h-full border-0',
23+
isLoading ? 'hidden' : 'flex',
24+
)}
25+
title='Perps Stats'
26+
onLoad={handleIframeLoad}
27+
/>
28+
</div>
29+
)
30+
}

src/components/perps/PerpsTabs.tsx

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { CardWithTabs } from 'components/common/Card/CardWithTabs'
2+
import { PerpsChart } from 'components/perps/PerpsChart'
3+
import { PerpsStats } from 'components/perps/PerpsStats'
4+
import usePerpsAsset from 'hooks/perps/usePerpsAsset'
5+
import { Suspense, useMemo } from 'react'
6+
7+
export function PerpsTabs() {
8+
const { perpsAsset } = usePerpsAsset()
9+
const tabs: CardTab[] = useMemo(
10+
() => [
11+
{
12+
title: 'Trading Chart',
13+
id: 'chart',
14+
renderContent: () => <PerpsChart />,
15+
},
16+
{
17+
title: 'Market Stats',
18+
id: 'stats',
19+
renderContent: () => (
20+
<div className='flex flex-col h-full gap-4'>
21+
<Suspense fallback={<div>Loading...</div>}>
22+
<PerpsStats denom={perpsAsset.denom} />
23+
</Suspense>
24+
</div>
25+
),
26+
},
27+
],
28+
[perpsAsset.denom],
29+
)
30+
31+
return <CardWithTabs tabs={tabs} />
32+
}

src/components/trade/TradeChart/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ interface Props {
4242
perpsPosition?: PerpsPosition
4343
liquidationPrice?: number
4444
limitOrders?: PerpPositionRow[]
45+
isTab?: boolean
4546
onCreateLimitOrder?: (price: BigNumber) => void
4647
onCreateStopOrder?: (price: BigNumber) => void
4748
}
@@ -374,6 +375,7 @@ export default function TradeChart(props: Props) {
374375
})
375376
}, [updateShapesAndStudies])
376377

378+
const { isTab = false } = props
377379
return (
378380
<Card
379381
title={
@@ -438,6 +440,7 @@ export default function TradeChart(props: Props) {
438440
'h-[500px]',
439441
'md:h-screen/70 md:max-h-[980px] md:min-h-[560px] order-1 w-full',
440442
)}
443+
isTab={isTab}
441444
>
442445
<div ref={chartContainerRef ?? undefined} className='h-[calc(100%-32px)] overflow-hidden'>
443446
<div className='flex items-center w-full h-full'>

src/pages/PerpsPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { PerpsModule } from 'components/perps/Module/PerpsModule'
22
import PerpsBanner from 'components/perps/PerpsBanner'
3-
import { PerpsChart } from 'components/perps/PerpsChart'
3+
import { PerpsTabs } from 'components/perps/PerpsTabs'
44
import { PerpsPositions } from 'components/perps/PerpsPositions'
55
import useAccountId from 'hooks/accounts/useAccountId'
66
import useWhitelistedAssets from 'hooks/assets/useWhitelistedAssets'
@@ -35,7 +35,7 @@ export default function PerpsPage() {
3535
<div className='flex flex-wrap w-full gap-4 md:grid md:grid-cols-chart'>
3636
<div className='w-full'>
3737
<PerpsBanner />
38-
<PerpsChart />
38+
<PerpsTabs />
3939
</div>
4040
<div className='w-full row-span-2'>
4141
<PerpsModule />

src/utils/swap.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,11 @@ export function getSwapExactInAction(
1414
routeInfo: SwapRouteInfo,
1515
slippage: number,
1616
): Action {
17-
const baseSwapExactInObject = {
18-
coin_in: coinIn,
19-
denom_out: denomOut,
20-
route: routeInfo?.route,
21-
}
2217
return {
2318
swap_exact_in: {
24-
...baseSwapExactInObject,
19+
coin_in: coinIn,
20+
denom_out: denomOut,
21+
route: routeInfo?.route,
2522
min_receive: getMinAmountOutFromRouteInfo(routeInfo, slippage).integerValue().toString(),
2623
},
2724
}

0 commit comments

Comments
 (0)