"use client" import { useState } from "react" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Textarea } from "@/components/ui/textarea" import { Button } from "@/components/ui/button" import { Bold, Italic, List, ListOrdered, LinkIcon, Code, Heading2, Eye, Edit3 } from "lucide-react" import ReactMarkdown from "react-markdown" import remarkGfm from "remark-gfm" interface MarkdownEditorProps { value: string onChange: (value: string) => void placeholder?: string minHeight?: string id?: string } export function MarkdownEditor({ value, onChange, placeholder = "Escriba aquí usando Markdown...", minHeight = "200px", id, }: MarkdownEditorProps) { const [activeTab, setActiveTab] = useState<"edit" | "preview">("edit") const insertMarkdown = (before: string, after = "") => { const textarea = document.getElementById(id || "markdown-editor") as HTMLTextAreaElement if (!textarea) return const start = textarea.selectionStart const end = textarea.selectionEnd const selectedText = value.substring(start, end) const newText = value.substring(0, start) + before + selectedText + after + value.substring(end) onChange(newText) setTimeout(() => { textarea.focus() textarea.setSelectionRange(start + before.length, start + before.length + selectedText.length) }, 0) } const toolbarButtons = [ { icon: Bold, label: "Negrita", action: () => insertMarkdown("**", "**") }, { icon: Italic, label: "Cursiva", action: () => insertMarkdown("*", "*") }, { icon: Heading2, label: "Encabezado", action: () => insertMarkdown("## ", "") }, { icon: List, label: "Lista", action: () => insertMarkdown("- ", "") }, { icon: ListOrdered, label: "Lista numerada", action: () => insertMarkdown("1. ", "") }, { icon: LinkIcon, label: "Link", action: () => insertMarkdown("[", "](url)") }, { icon: Code, label: "Código", action: () => insertMarkdown("`", "`") }, ] return (
Sin contenido para previsualizar
)}Soporta Markdown: **negrita**, *cursiva*, ## títulos, - listas, [links](url), `código`