v0.1 - макет интерфейса, аутентификация через логин, аккаунт админа, создание партии в 2 этапа, базовые настройки профиля и группы, переключение между группами, статистика

This commit is contained in:
2026-06-16 17:41:06 +03:00
parent 6ab74f01aa
commit 56b5d09a4d
123 changed files with 13572 additions and 21 deletions
@@ -0,0 +1,40 @@
import type { ProfileStats } from "../domain/types";
function pct(v: number | null | undefined): string {
return v == null ? "—" : `${Math.round(v * 100)}%`;
}
export function ProfileStatsCard({ stats }: { stats: ProfileStats }) {
const o = stats.overall;
return (
<div className="card">
<h3>Моя статистика</h3>
<div className="row-between">
<div>Игр</div>
<b>{o.games}</b>
</div>
<div className="row-between">
<div>Побед</div>
<b>{o.wins}</b>
</div>
<div className="row-between">
<div>Winrate</div>
<b>{pct(o.win_rate)}</b>
</div>
<div className="row-between">
<div>Среднее место</div>
<b>{o.avg_place ?? "—"}</b>
</div>
<div className="row-between">
<div>Очки (рейтинг)</div>
<b className="lb-score">{o.score ?? "—"}</b>
</div>
{stats.most_played_faction && (
<div className="row-between">
<div>Любимая фракция</div>
<b>{stats.most_played_faction.name_ru}</b>
</div>
)}
</div>
);
}