import { Card, CardContent } from "@/components/ui/card" import { useStatus } from "@/hooks/use-status" import { formatBytes } from "@/lib/format" import { cn } from "@/lib/utils" import { ArrowDownCircleIcon, ArrowUpCircleIcon } from "@heroicons/react/20/solid" import { useTranslation } from "react-i18next" type ServerOverviewProps = { online: number offline: number total: number up: number down: number upSpeed: number downSpeed: number } export default function ServerOverview({ online, offline, total, up, down, upSpeed, downSpeed }: ServerOverviewProps) { const { t } = useTranslation() const { status, setStatus } = useStatus() // @ts-expect-error DisableAnimatedMan is a global variable const disableAnimatedMan = window.DisableAnimatedMan as boolean // @ts-expect-error CustomIllustration is a global variable const customIllustration = window.CustomIllustration || "/animated-man.webp" const customBackgroundImage = (window.CustomBackgroundImage as string) !== "" ? window.CustomBackgroundImage : undefined return ( <>
{ setStatus("all") }} className={cn("hover:border-blue-500 cursor-pointer transition-all", { "bg-card/70": customBackgroundImage, })} >

{t("serverOverview.totalServers")}

{total}
{ setStatus("online") }} className={cn( "cursor-pointer hover:ring-green-500 ring-1 ring-transparent transition-all", { "bg-card/70": customBackgroundImage, }, { "ring-green-500 ring-2 border-transparent": status === "online", }, )} >

{t("serverOverview.onlineServers")}

{online}
{ setStatus("offline") }} className={cn( "cursor-pointer hover:ring-red-500 ring-1 ring-transparent transition-all", { "bg-card/70": customBackgroundImage, }, { "ring-red-500 ring-2 border-transparent": status === "offline", }, )} >

{t("serverOverview.offlineServers")}

{offline}

{t("serverOverview.network")}

↑{formatBytes(up)}

↓{formatBytes(down)}

{formatBytes(upSpeed)}/s

{formatBytes(downSpeed)}/s

{!disableAnimatedMan && ( {"animated-man"} )}
) }