COMPONENT trade-form

Trade Form

Complete prediction market trade form. Pass bookData={{ bids, asks }} from useOrderbook to auto-resolve mid/bid/ask. Requires sides array from market.sides (e.g. [{name: 'Yes', coin: '#9860'}]). Connect useTrade(exchange) for order submission via onSubmit. Key props: sides, bookData?, minShares? (from useMinShares), usdhBalance? (from usePortfolio), shareBalance?, isConnected?, builder? ({address, fee}), onSubmit? (TradeSubmitParams => Promise).

Install

$ npx shadcn@latest add https://ui.purrdict.xyz/r/trade-form.json

Preview

Bid 64.5¢Mid 65.0¢Ask 65.5¢
AmountBalance: $1,000.00
Usage
import { TradeForm } from "@/components/hip4/trade-form"
import { useOrderbook } from "@/hooks/hip4/use-orderbook"
import { usePortfolio } from "@/hooks/hip4/use-portfolio"
import { useMinShares } from "@/hooks/hip4/use-min-shares"

function TradingPanel({ market }: { market: Market }) {
  // Hooks auto-resolve client from HIP4Provider
  const book = useOrderbook(undefined, market.sides[0].coin)
  const { balance } = usePortfolio(undefined, address)
  const { minShares } = useMinShares(undefined, market.sides[0].coin)

  return (
    <TradeForm
      sides={market.sides}
      bookData={book}
      minShares={minShares}
      usdhBalance={balance}
      isConnected={!!signer}
      onSubmit={async (params) => {
        await placeOrder(params)
      }}
    />
  )
}
Props
Prop Type Description
market Market Market object
side TradeSide "Yes" | "No" — active trade side
onSideChange (side: TradeSide) => void Called when user switches side
currentPrice number Current mid price for selected side (0-1)
minShares number Minimum order size
builder BuilderConfig Builder fee config: { address: string, fee: number }
usdhBalance number User's free USDH balance for validation
isConnected boolean Whether the wallet is connected/signed in
onTrade (params: TradeParams) => Promise<void> Trade execution callback

Dependencies

npm packages

Registry components