"use client"; import ReactMarkdown from "react-markdown"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, } from "@kandev/ui/dialog"; import { ScrollArea } from "@kandev/ui/scroll-area"; import { Badge } from "@kandev/ui/badge"; import { Separator } from "@kandev/ui/separator"; import { IconExternalLink } from "@tabler/icons-react"; import { remarkPlugins, markdownComponents } from "@/components/shared/markdown-components"; import { getReleaseUrl } from "@/lib/release-notes"; import type { ChangelogEntry } from "@/lib/changelog"; import type { TFunction } from "i18next"; import { useTranslation } from "react-i18next"; type ReleaseNotesDialogProps = { open: boolean; onOpenChange: (open: boolean) => void; entries: ChangelogEntry[]; latestVersion: string; }; function buildDescription(t: TFunction, entries: ChangelogEntry[]): string { if (entries.length === 1) { return entries[0].date ? t("common:releasedOn", { date: entries[0].date }) : t("common:latestReleaseNotes"); } return t("common:newReleases", { count: entries.length }); } export function ReleaseNotesDialog({ open, onOpenChange, entries, latestVersion, }: ReleaseNotesDialogProps) { const { t } = useTranslation(); const releaseUrl = getReleaseUrl(latestVersion); return ( {t("common:whatSNew")} v{latestVersion} {buildDescription(t, entries)}
{entries.map((entry, index) => (
{entries.length > 1 && (
v{entry.version} {entry.date && ( {entry.date} )}
)}
{entry.notes}
{index < entries.length - 1 && }
))}
{t("common:viewFullReleaseOnGithub")}
); }