// site/widget-mock.jsx — small Setly widget mockups for use in features + lockscreen function WidgetTrend({ surface = "clay" }) { const sColor = { hard: "#4E98FF", clay: "#FF6B30", grass: "#5AE860", indoor: "#A78BFA" }[surface]; return (
TREND · 7D
{surface.toUpperCase()}
SINNER
↑ 2 ranking · #1 ATP
WIN%
87%
); } function WidgetSeason() { const tournaments = [ { name: "MELBOURNE", date: "JAN", color: "#4E98FF", status: "past" }, { name: "INDIAN W.", date: "MAR", color: "#4E98FF", status: "past" }, { name: "MONTE-C.", date: "APR", color: "#FF6B30", status: "past" }, { name: "ROMA", date: "MAY", color: "#FF6B30", status: "live" }, { name: "PARIS", date: "JUN", color: "#FF6B30", status: "next" }, { name: "WIMBLEDON", date: "JUN", color: "#5AE860", status: "soon" }, ]; return (
ATP SEASON · 2026
ROMA LIVE
{tournaments.map((t, i) => (
{t.date}
{t.name}
))}
); } function WidgetLive({ accent = "#FF6B30" }) { return (
INTERNAZIONALI · ROMA
LIVE
QUARTERFINAL · SET 3
ALCARAZ
644
DRAPER
363
); } function WidgetCountdown({ accent = "#196B1E" }) { return (
NEXT SLAM
GRASS
WIMBLEDON
29 Jun — All England Club
{[52, 11, 38, 14].map((n, i) => (
{String(n).padStart(2, '0')}
{['days','hrs','min','sec'][i]}
))}
); } Object.assign(window, { WidgetTrend, WidgetSeason, WidgetLive, WidgetCountdown });