feat: implement leaderboard page with top performers and market activity

This commit is contained in:
Face 2025-05-24 15:50:10 +03:00
parent 930d1f41d7
commit 35237c3470
7 changed files with 605 additions and 66 deletions

View file

@ -17,7 +17,8 @@
CreditCardIcon,
BellIcon,
LogOutIcon,
Wallet
Wallet,
Trophy
} from 'lucide-svelte';
import { mode, setMode } from 'mode-watcher';
import type { HTMLAttributes } from 'svelte/elements';
@ -35,6 +36,7 @@
{ title: 'Home', url: '/', icon: Home },
{ title: 'Market', url: '/market', icon: Store },
{ title: 'Portfolio', url: '/portfolio', icon: BriefcaseBusiness },
{ title: 'Leaderboard', url: '/leaderboard', icon: Trophy },
{ title: 'Create coin', url: '/coin/create', icon: Coins }
],
navAdmin: [{ title: 'Admin', url: '/admin', icon: ShieldAlert }]

View file

@ -42,4 +42,43 @@ export function debounce(func: (...args: any[]) => void, wait: number) {
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
}
export function formatPrice(price: number): string {
if (price < 0.01) {
return price.toFixed(6);
} else if (price < 1) {
return price.toFixed(4);
} else {
return price.toLocaleString(undefined, {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
}
}
export function formatValue(value: number): string {
if (value >= 1e9) return `$${(value / 1e9).toFixed(2)}B`;
if (value >= 1e6) return `$${(value / 1e6).toFixed(2)}M`;
if (value >= 1e3) return `$${(value / 1e3).toFixed(2)}K`;
return `$${value.toFixed(2)}`;
}
export function formatQuantity(value: number): string {
if (value >= 1e9) return `${(value / 1e9).toFixed(2)}B`;
if (value >= 1e6) return `${(value / 1e6).toFixed(2)}M`;
if (value >= 1e3) return `${(value / 1e3).toFixed(2)}K`;
return value.toLocaleString();
}
export function formatDate(timestamp: string): string {
const date = new Date(timestamp);
return date.toLocaleDateString('en-US', {
month: 'short',
day: 'numeric',
hour: '2-digit',
minute: '2-digit'
});
}
export const formatMarketCap = formatValue;