import { useTranslations } from "next-intl"; import { NezhaAPISafe } from "../app/[locale]/types/nezha-api"; import ServerUsageBar from "@/components/ServerUsageBar"; import { Card } from "@/components/ui/card"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { cn, formatNezhaInfo } from "@/lib/utils"; import ServerCardPopover from "./ServerCardPopover"; import getUnicodeFlagIcon from "country-flag-icons/unicode"; import { env } from "next-runtime-env"; import { useEffect, useState } from "react"; export default function ServerCard({ serverInfo, }: { serverInfo: NezhaAPISafe; }) { const [supportsEmojiFlags, setSupportsEmojiFlags] = useState(false); useEffect(() => { const checkEmojiSupport = () => { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); const emojiFlag = "🇺🇸"; // 使用美国国旗作为测试 if (!ctx) return; ctx.fillStyle = "#000"; ctx.textBaseline = 'top'; ctx.font = '32px Arial'; ctx.fillText(emojiFlag, 0, 0); const support = ctx.getImageData(16, 16, 1, 1).data[3] !== 0; setSupportsEmojiFlags(support); }; checkEmojiSupport(); }, []); const t = useTranslations("ServerCard"); const { name, country_code, online, cpu, up, down, mem, stg, ...props } = formatNezhaInfo(serverInfo); const showFlag = env("NEXT_PUBLIC_ShowFlag") === "true"; return online ? ( {showFlag ? ( {!supportsEmojiFlags ? ( ) : ( getUnicodeFlagIcon(country_code) )} ) : null} {name} {" "} {/* 设置固定宽度 */} {t("CPU")} {cpu.toFixed(2)}% {" "} {/* 设置固定宽度 */} {t("Mem")} {mem.toFixed(2)}% {" "} {/* 设置固定宽度 */} {t("STG")} {stg.toFixed(2)}% {" "} {/* 设置固定宽度 */} {t("Upload")} {up.toFixed(2)} Mb/s {" "} {/* 设置固定宽度 */} {t("Download")} {down.toFixed(2)} Mb/s ) : ( {showFlag ? ( {!supportsEmojiFlags ? ( ) : ( getUnicodeFlagIcon(country_code) )} ) : null} {name} {t("Offline")} ); }
{name}
{t("CPU")}
{t("Mem")}
{t("STG")}
{t("Upload")}
{t("Download")}
{t("Offline")}