"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")}
);
}