"use client"; import { Film, FileText, ImageIcon } from "lucide-react"; import type { FirmwareInfo } from "@/lib/firmware"; import { formatBytes, cn } from "@/lib/utils"; import { Badge } from "@/components/ui/badge"; function MediaSlot({ fw, active }: { fw: FirmwareInfo; active: boolean }) { const src = fw.media.animation || fw.media.cover; if (src) { return ( // Dynamic firmware media URLs — next/image needs remotePatterns per host // eslint-disable-next-line @next/next/no-img-element -- local API / arbitrary media ); } const initials = fw.name .replace(/[^A-Za-z0-9\u4e00-\u9fff]+/g, " ") .trim() .split(/\s+/) .slice(0, 2) .map((w) => w[0]?.toUpperCase() ?? "") .join(""); return (
{initials || "FW"} preview soon
); } export function FirmwareCard({ fw, active, onSelect, }: { fw: FirmwareInfo; active: boolean; onSelect: () => void; }) { const hasVideo = Boolean(fw.media.video); const hasDocs = Boolean(fw.media.docs); const hasCover = Boolean(fw.media.cover || fw.media.animation); return ( ); }