"use client" import { useEffect, useState } from "react" import { Skeleton } from "@/components/ui/skeleton" import { cn } from "@/lib/utils" import { markdownToHtml, markdownToHtmlSync } from "@/lib/markdown" interface MarkdownRendererProps { content: string className?: string inline?: boolean } export function MarkdownRenderer({ content, className, inline = false, }: MarkdownRendererProps) { const [htmlContent, setHtmlContent] = useState("") const [isLoading, setIsLoading] = useState(true) useEffect(() => { let cancelled = false async function processMarkdown() { setIsLoading(true) try { const html = await markdownToHtml(content) if (!cancelled) setHtmlContent(html) } catch (error) { console.error("Error rendering markdown:", error) if (!cancelled) setHtmlContent(content) } finally { if (!cancelled) setIsLoading(false) } } if (content) { processMarkdown() } else { setHtmlContent("") setIsLoading(false) } return () => { cancelled = true } }, [content]) if (isLoading) { return (
) } if (!htmlContent) { return (

Kein Inhalt verfügbar

) } const Component = inline ? "span" : "div" return ( ) } // Synchronous version for cases where we can't use hooks export function StaticMarkdownRenderer({ content, className, inline = false, }: MarkdownRendererProps) { if (!content) { return (

Kein Inhalt verfügbar

) } const Component = inline ? "span" : "div" return ( ) }