"use client"; import Image from "next/image"; import { DownloadIcon } from "lucide-react"; import type { ReactNode } from "react"; import { GuideExportBranding } from "@/components/public/guide-export-branding"; import { ExportLanguageToggle, ExportText, useExportLanguage, } from "@/components/public/export-language"; import { GuideImageExport } from "@/components/public/guide-image-export"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import type { PublicGuide } from "@/lib/guides/queries"; type WeaponGroup = PublicGuide["weaponGroups"][number]; type DamageMetric = "overallPercent" | "personalPercent"; function formattedPercent(value: string | null): string { if (value === null) return "-%"; const numeric = Number(value); if (numeric === 0) return "-%"; return `${numeric.toLocaleString("en-US", { maximumFractionDigits: 2 })}%`; } function WeaponComparisonImage({ guide, group, metric, conditionLabel, }: { guide: PublicGuide; group: WeaponGroup; metric: DamageMetric; conditionLabel: ReactNode; }) { const values = group.rows.map((row) => Number(row[metric]) || 0); const maximum = Math.max(100, ...values); return (
{metric === "overallPercent" ? (
{conditionLabel}
{group.note}
) : null}