"use client"; import { useTranslation } from "@/components/i18n/locale-provider"; import Image from "next/image"; import { DownloadIcon } from "lucide-react"; import { GuideExportBranding } from "@/components/public/guide-export-branding"; 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, locale: string): string { if (value === null) return "-%"; const numeric = Number(value); if (numeric === 0) return "-%"; return `${numeric.toLocaleString(locale, { maximumFractionDigits: 2 })}%`; } function WeaponComparisonImage({ guide, group, metric, conditionIndex, }: { guide: PublicGuide; group: WeaponGroup; metric: DamageMetric; conditionIndex: number; }) { const { e, locale } = useTranslation(); const conditionLabel = group.name || e("condition", { index: conditionIndex + 1 }); const values = group.rows.map((row) => Number(row[metric]) || 0); const maximum = Math.max(100, ...values); return (
{e(metric === "overallPercent" ? "overallDamage" : "personalDamage")}
{conditionLabel}
{group.note}
) : null}