Prediction Market

Animated market listing cards with outcome CTAs, probabilities and bookmarks, plus a trade ticket with buy/sell modes and rolling amount entry.

Market Cards

prediction-market-card.tsx

Compact market listings with consistent outcome rows, animated odds CTAs, payout multipliers and bookmarks. Odds CTAs use green/red backgrounds and roll into Yes/No labels on hover or keyboard focus. Use Update odds to preview animated price changes.

On the radar

Demo markets · simulated prices

Boston Celtics vs. Los Angeles Lakers

Sunday · 7:30 PMBasketball

Celtics
Lakers
$2.4M vol.

Tampa Bay Rays vs. Atlanta Braves

Mid 6thMLB

Rays
Braves
$458K vol.

Where will interest rates land by the end of the year?

Dec 31Economics

Below 3.5%
Above 4.0%
$347K vol.

Install

$ bunx --bun shadcn add @beui/prediction-market-card

API Reference

title
string
icon?
ReactNode
category?
string
volume
string
volumeHistory?
number[]

Chronological volume samples for the optional footer sparkline.

status?
string

A scheduled time or live match status.

live?
boolean
false
outcomes
PredictionMarketCardOutcome[]
onOutcomeClick?
((value: PredictionMarketCardSelection) => void)

Called on each outcome CTA click; the card keeps no selected state.

bookmarked?
boolean
defaultBookmarked?
boolean
false
onBookmarkChange?
((bookmarked: boolean) => void)
className?
string

Trade Ticket

prediction-market.tsx

Buy and sell outcomes with rolling amount entry, quick add chips and trade states.

To win

Avg. Price 16.7¢

$688.62

Install

$ bunx --bun shadcn add @beui/prediction-market

API Reference

outcomes?
PredictionMarketOutcome[]
[ { id: "up", label: "Up", price: 0.09 }, { id: "down", label: "Down", price: 0.91 }, ]
value?
PredictionMarketOrderValue
defaultValue?
Partial<PredictionMarketOrderValue>
onValueChange?
((value: PredictionMarketOrderValue) => void)
onTrade?
((order: PredictionMarketOrderValue, quote: PredictionMarketQuote) => void)
onSignIn?
(() => void)
authenticated?
boolean
true
orderTypeLabel?
string
Market
balance?
number
500
positions?
Record<string, number>
{ up: 24, down: 16 }
quickAmounts?
number[]
[10, 50, 100, 500]
minTrade?
number
1
className?
string
classNames?
PredictionMarketClassNames

Keep in mind

Some components on this site are inspired by or recreated from existing work across the web. I'm not here to take credit; just to learn, experiment, and sometimes push things a bit further. If something looks familiar and I forgot to mention you, reach out and I'll fix that right away.

Updated