mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-05-05 20:56:13 -05:00
* Initial * CSS lint * Test CI * Add 1v1, 2v2, and 3v3 Tags (#1771) * Initial * CSS lint * Test CI * Rename step --------- Co-authored-by: xi <104683822+ximk@users.noreply.github.com>
78 lines
2.0 KiB
TypeScript
78 lines
2.0 KiB
TypeScript
import clsx from "clsx";
|
|
import { Flag } from "~/components/Flag";
|
|
import { Image } from "~/components/Image";
|
|
import { Placement } from "~/components/Placement";
|
|
import invariant from "~/utils/invariant";
|
|
import { winnersImageUrl } from "~/utils/urls";
|
|
import playerData from "../top-ten.json";
|
|
|
|
export function TopTenPlayer({
|
|
power,
|
|
placement,
|
|
season,
|
|
small = false,
|
|
}: {
|
|
power?: number;
|
|
placement: number;
|
|
season: number;
|
|
small?: boolean;
|
|
}) {
|
|
const data = playerData[season]?.[placement - 1];
|
|
invariant(data, `No data for season ${season} and placement ${placement}`);
|
|
const { name, countryCode, transforms } = data;
|
|
|
|
const transformMultiplier = small ? 1 / 3 : 1;
|
|
|
|
return (
|
|
<div
|
|
className={clsx("stack horizontal items-center text-main-forced", {
|
|
md: !small,
|
|
sm: small,
|
|
"mt-2": small,
|
|
})}
|
|
>
|
|
<div className={clsx("winner__container", { small })}>
|
|
<Image
|
|
path={winnersImageUrl({ season, placement })}
|
|
alt=""
|
|
containerClassName="winner__img-container"
|
|
className="winner__img"
|
|
height={small ? 50 : 150}
|
|
containerStyle={
|
|
{
|
|
"--winner-top": transforms?.top
|
|
? `${transforms.top * transformMultiplier}px`
|
|
: undefined,
|
|
"--winner-left": transforms?.left
|
|
? `${transforms.left * transformMultiplier}px`
|
|
: undefined,
|
|
} as React.CSSProperties
|
|
}
|
|
/>
|
|
</div>
|
|
<div>
|
|
<div
|
|
className="text-xs text-lighter stack horizontal xxs items-center"
|
|
style={placement > 3 ? { marginBlockEnd: "-4px" } : undefined}
|
|
>
|
|
{placement <= 3 ? (
|
|
<Placement placement={placement} size={15} iconClassName="mr-1" />
|
|
) : null}{" "}
|
|
<Placement placement={placement} textOnly showAsSuperscript={false} />{" "}
|
|
place
|
|
</div>
|
|
{!small ? (
|
|
<>
|
|
<div className="text-xl font-semi-bold">
|
|
<Flag tiny countryCode={countryCode} /> {name}
|
|
</div>
|
|
<div className="text-lg font-bold" style={{ lineHeight: "1" }}>
|
|
{power}
|
|
</div>
|
|
</>
|
|
) : null}
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|