import { BUILD_MODE, LOGO_SVG } from "@/lib/mode"; import { VERSION } from "@/lib/version"; import { useUpdateStore } from "@/stores/updateStore"; import { relaunchApp } from "@/api/update"; import Silk from "@/components/silk/Silk"; import { Button } from "@heroui/react"; import clsx from "clsx"; import { Suspense } from "react"; const modeColors: Record = { dev: "#F59E0B", beta: "#10B981", run: "#3B82F6", }; const modeGradients: Record = { dev: "linear-gradient(135deg, #F59E0B, #D97706)", beta: "linear-gradient(135deg, #10B981, #059669)", run: "linear-gradient(135deg, #3B82F6, #2563EB)", }; const modeLabels: Record = { dev: "开发版", beta: "测试版", run: "正式版", }; type UpdateState = "latest" | "hasUpdate" | "installed"; interface VersionCardProps { className?: string; overrideMode?: string | null; overrideState?: UpdateState | null; simple?: boolean; } export function VersionCard({ className, overrideMode, overrideState, simple = false, }: VersionCardProps) { const color = modeColors[overrideMode ?? BUILD_MODE] ?? modeColors.run; const gradient = modeGradients[overrideMode ?? BUILD_MODE] ?? modeGradients.run; const label = modeLabels[overrideMode ?? BUILD_MODE] ?? modeLabels.run; const { checking, downloading, installed, update, check, install } = useUpdateStore(); const effectiveState: UpdateState = overrideState ?? (installed ? "installed" : update ? "hasUpdate" : "latest"); const Btn = (props: React.ComponentProps) => (