"use client"; import { Loader2 } from "lucide-react"; import { ContextMenuItem } from "@/components/ui/context-menu"; import { DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, } from "@/components/ui/dropdown-menu"; export const EXPORT_FILE_EXTENSIONS: Record = { pdf: "pdf", docx: "docx", html: "html", latex: "tex", epub: "epub", odt: "odt", plain: "txt", md: "md", }; interface ExportMenuItemsProps { onExport: (format: string) => void; exporting: string | null; /** Hide server-side formats (PDF, DOCX, etc.) — only show md */ showAllFormats?: boolean; /** When true, only show PDF export (used for Typst-based resumes) */ pdfOnly?: boolean; } export function ExportDropdownItems({ onExport, exporting, showAllFormats = true, pdfOnly = false, }: ExportMenuItemsProps) { const handle = (format: string) => (e: React.MouseEvent) => { e.stopPropagation(); onExport(format); }; if (pdfOnly) { return ( {exporting === "pdf" && } PDF (.pdf) ); } return ( <> {showAllFormats && ( <> Documents {exporting === "pdf" && } PDF (.pdf) {exporting === "docx" && } Word (.docx) {exporting === "odt" && } OpenDocument (.odt) Web & E-Book {exporting === "html" && } HTML (.html) {exporting === "epub" && } EPUB (.epub) Source & Plain {exporting === "latex" && } LaTeX (.tex) )} {exporting === "md" && } Markdown (.md) {showAllFormats && ( {exporting === "plain" && } Plain Text (.txt) )} ); } export function ExportContextItems({ onExport, exporting, showAllFormats = true, }: ExportMenuItemsProps) { const handle = (format: string) => (e: React.MouseEvent) => { e.stopPropagation(); onExport(format); }; return ( <> {showAllFormats && ( <> {exporting === "pdf" && } PDF (.pdf) {exporting === "docx" && } Word (.docx) {exporting === "odt" && } OpenDocument (.odt) {exporting === "html" && } HTML (.html) {exporting === "epub" && } EPUB (.epub) {exporting === "latex" && } LaTeX (.tex) )} {exporting === "md" && } Markdown (.md) {showAllFormats && ( {exporting === "plain" && } Plain Text (.txt) )} ); }