diff --git a/frontend/components/leaderboard/LeaderboardClient.tsx b/frontend/components/leaderboard/LeaderboardClient.tsx index 2d196b1e..970644a9 100644 --- a/frontend/components/leaderboard/LeaderboardClient.tsx +++ b/frontend/components/leaderboard/LeaderboardClient.tsx @@ -25,7 +25,10 @@ export default function LeaderboardClient({ return (
- +
diff --git a/frontend/components/leaderboard/LeaderboardPodium.tsx b/frontend/components/leaderboard/LeaderboardPodium.tsx index 8db2879d..febd3937 100644 --- a/frontend/components/leaderboard/LeaderboardPodium.tsx +++ b/frontend/components/leaderboard/LeaderboardPodium.tsx @@ -16,7 +16,6 @@ const rankConfig = { text: 'text-yellow-600 dark:text-yellow-400', badge: 'bg-yellow-400 dark:bg-yellow-500', ring: 'border-yellow-400 dark:border-yellow-500', - barTop: 'bg-yellow-400 dark:bg-yellow-500', }, }, 2: { @@ -28,7 +27,6 @@ const rankConfig = { text: 'text-slate-600 dark:text-slate-400', badge: 'bg-slate-400 dark:bg-slate-500', ring: 'border-slate-300 dark:border-slate-500', - barTop: 'bg-slate-300 dark:bg-slate-500', }, }, 3: { @@ -40,7 +38,6 @@ const rankConfig = { text: 'text-orange-600 dark:text-orange-400', badge: 'bg-orange-400 dark:bg-orange-500', ring: 'border-orange-300 dark:border-orange-500', - barTop: 'bg-orange-300 dark:bg-orange-500', }, }, } as const; @@ -55,40 +52,11 @@ export function LeaderboardPodium({ topThree }: { topThree: User[] }) { return (
{podiumOrder.map(user => { - const rank = user.rank; + const rank = user.rank as 1 | 2 | 3; const isFirst = rank === 1; - const height = rank === 1 ? '100%' : rank === 2 ? '40%' : '35%'; - const delay = rank === 1 ? 0.4 : rank === 2 ? 0.2 : 0.6; - - const rankStyles = { - 1: { - border: 'border-yellow-400 dark:border-yellow-500', - bg: 'bg-yellow-400/20 dark:bg-yellow-500/10', - text: 'text-yellow-600 dark:text-yellow-400', - badge: 'bg-yellow-400 dark:bg-yellow-500', - ring: 'border-yellow-400 dark:border-yellow-500', - barTop: 'bg-yellow-400 dark:bg-yellow-500', - }, - 2: { - border: 'border-slate-300 dark:border-slate-500', - bg: 'bg-slate-300/20 dark:bg-slate-500/10', - text: 'text-slate-600 dark:text-slate-400', - badge: 'bg-slate-400 dark:bg-slate-500', - ring: 'border-slate-300 dark:border-slate-500', - barTop: 'bg-slate-300 dark:bg-slate-500', - }, - 3: { - border: 'border-orange-300 dark:border-orange-500', - bg: 'bg-orange-300/20 dark:bg-orange-500/10', - text: 'text-orange-600 dark:text-orange-400', - badge: 'bg-orange-400 dark:bg-orange-500', - ring: 'border-orange-300 dark:border-orange-500', - barTop: 'bg-orange-300 dark:bg-orange-500', - }, - }; - - const style = rankStyles[rank as 1 | 2 | 3] || rankStyles[2]; + const config = rankConfig[rank] || rankConfig[2]; + const { height, delay, style } = config; return (
@@ -164,14 +132,7 @@ export function LeaderboardPodium({ topThree }: { topThree: User[] }) { style.bg, style.border )} - > -
- + >
); })} diff --git a/frontend/components/leaderboard/LeaderboardTable.tsx b/frontend/components/leaderboard/LeaderboardTable.tsx index 234e391d..6a450992 100644 --- a/frontend/components/leaderboard/LeaderboardTable.tsx +++ b/frontend/components/leaderboard/LeaderboardTable.tsx @@ -34,25 +34,23 @@ export function LeaderboardTable({
- {/* ✅ ВИПРАВЛЕННЯ 1: border-separate + border-spacing-0 замість border-collapse */} - +
- - - - {/* ✅ ВИПРАВЛЕННЯ 2: Прибрали divide-y, бо він конфліктує з border-separate */} {topUsers.map(user => { const isMe = @@ -81,7 +79,7 @@ export function LeaderboardTable({
-
{t('tableCaption')}
+ {t('rank')} + {t('user')} + {t('score')}
+
@@ -103,20 +101,23 @@ function TableRow({ isCurrentUser: boolean; t: ReturnType; }) { - // ✅ ВИПРАВЛЕННЯ 3: Спільний клас для ліній між рядками const cellClass = - 'px-3 sm:px-6 py-4 border-b border-slate-100 dark:border-white/5'; + 'px-2 sm:px-6 py-3 sm:py-4 border-b border-slate-100 dark:border-white/5'; + + const leftBorderClass = isCurrentUser + ? 'border-l-[1px] sm:border-l-[1px] border-l-[var(--accent-primary)]' + : 'border-l-[1px] sm:border-l-[1px] border-l-transparent'; return ( -
+
@@ -139,18 +140,18 @@ function TableRow({
- + {user.username} {isCurrentUser && ( -
+
- - - {t('you') || 'YOU'} -
)} @@ -191,8 +188,8 @@ function TableRow({ className={cn( 'font-mono font-bold inline-block transition-all', isCurrentUser - ? 'text-[var(--accent-primary)] scale-110 drop-shadow-sm text-base sm:text-lg' - : 'text-slate-700 dark:text-slate-300 group-hover:scale-105' + ? 'text-[var(--accent-primary)] scale-110 drop-shadow-sm text-sm sm:text-lg' + : 'text-slate-700 dark:text-slate-300 group-hover:scale-105 text-sm sm:text-base' )} > {user.points.toLocaleString()} @@ -205,32 +202,32 @@ function TableRow({ function RankBadge({ rank }: { rank: number }) { if (rank === 1) { return ( -
+
1 - +
); } if (rank === 2) { return ( -
+
2 - +
); } if (rank === 3) { return ( -
+
3 - +
); }