"use client"; import { useState } from "react"; import { Copy, Download, FileDown } from "lucide-react"; import { toast } from "sonner"; import { useTranslations } from "next-intl"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; import { UpgradeDialog } from "@/components/premium/upgrade-dialog"; import { ProBadge } from "@/components/premium/pro-badge"; export function ExportMarkdownButton({ markdown, filename, locked = false, }: { markdown: string; filename: string; locked?: boolean; }) { const t = useTranslations("common"); const [upgradeOpen, setUpgradeOpen] = useState(false); if (locked) { return ( <> setUpgradeOpen(true)}> } /> {t("exportMarkdown")} ); } async function handleCopy() { try { await navigator.clipboard.writeText(markdown); toast.success(t("copiedToClipboard")); } catch { toast.error(t("copyFailed")); } } function handleDownload() { const blob = new Blob([markdown], { type: "text/markdown;charset=utf-8" }); const url = URL.createObjectURL(blob); const a = document.createElement("a"); a.href = url; a.download = filename.endsWith(".md") ? filename : `${filename}.md`; document.body.appendChild(a); a.click(); a.remove(); URL.revokeObjectURL(url); } return ( } /> } /> {t("exportMarkdown")} { void handleCopy(); }}> {t("copyMarkdown")} {t("downloadMarkdown")} ); }