import { memo, useMemo } from "react" import { metaApi } from "@/api/footer" import { useQuery } from "@tanstack/react-query" import { Clipboard, ExternalLink, GitCommit, Info } from "lucide-react" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Separator } from "@/components/ui/separator" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip" type VersionInfo = { built: string // ISO string or "unknown" builtBy: string commit: string go: string goArch: string goOS: string version: string } function shortCommit(c?: string) { return c && c !== "none" ? c.slice(0, 7) : "none" } function formatBuilt(built: string) { if (!built || built === "unknown") return "unknown" const d = new Date(built) return isNaN(+d) ? built : d.toLocaleString() } function asClipboardText(v?: VersionInfo) { if (!v) return "" return `v${v.version} (${shortCommit(v.commit)}) • built ${v.built} • ${v.go} ${v.goOS}/${v.goArch}` } export const Footer = memo(function Footer({ className }: { className?: string }) { const footerQ = useQuery({ queryKey: ["footer"], queryFn: () => metaApi.footer() as Promise, staleTime: 60_000, refetchOnWindowFocus: false, }) const data = footerQ.data const copyText = useMemo(() => asClipboardText(data), [data]) return ( ) })