"use client"; import ReactMarkdown, { type Components } from "react-markdown"; import remarkGfm from "remark-gfm"; import { mergeMarkdownComponents } from "@/components/markdown/mergeComponents"; import { splitContentSegments } from "@/lib/directiveBlocks"; import type { HideKind } from "@/lib/hideBlocks"; import MdHideBlock from "@/components/markdown/MdHideBlock"; import MdTimeline from "@/components/markdown/MdTimeline"; type MarkdownBodyClientProps = { content: string; className?: string; components?: Components; postId?: number; loginHref?: string; loggedIn?: boolean; }; /** * 客户端 Markdown(发帖预览 / 评论):GFM + 隐藏块 / 时间线预览。 */ export default function MarkdownBodyClient({ content, className = "prose-content", components, postId, loginHref, loggedIn = false, }: MarkdownBodyClientProps) { const segs = splitContentSegments(content || ""); const mdComponents = mergeMarkdownComponents(components); return (
{segs.map((seg, i) => { if (seg.type === "md") { if (!seg.text.trim()) return null; return ( {seg.text} ); } if (seg.type === "timeline") { return ( it.body.trim() ? ( {it.body} ) : null } /> ); } const kind = seg.kind as HideKind; if (seg.locked) { return ( ); } return ( {seg.body.trim() ? ( {seg.body} ) : null} ); })}
); }