'use client'; import { ENTRY_FEE_DINO, MAX_ATTEMPTS } from '../shared'; interface LeaderboardEntry { owner: string; score: string; } interface LeaderboardProps { leaderboard: LeaderboardEntry[]; loading: boolean; error: string | null; attemptsCount: number; } export default function Leaderboard({ leaderboard, loading, error, attemptsCount }: LeaderboardProps) { // Only show loading state if we have no data yet if (loading && leaderboard.length === 0) { return (
Failed to load leaderboard
Leaderboard resets after {MAX_ATTEMPTS} attempts
No scores yet. Be the first to play!
{entry.owner.length > 20 ? `${entry.owner.slice(0, 8)}...${entry.owner.slice(-8)}` : entry.owner }
{entry.owner.length > 20 && ({entry.owner}
)} {/* Prize indicators for top 3 */} {index < 3 && ({entry.score}
points
Updates every 5 seconds • {sortedLeaderboard.length} player{sortedLeaderboard.length !== 1 ? 's' : ''}
{loading && leaderboard.length > 0 && (