'use client' import { useEffect, useState } from 'react' import { MDXRemote } from 'next-mdx-remote' import { serialize } from 'next-mdx-remote/serialize' import type { MDXRemoteSerializeResult } from 'next-mdx-remote' import { mdxComponents } from '~/components/mdx-components' export default function MdxEditorPreview(params: { source: string }) { const [compiled, setCompiled] = useState(null) const [error, setError] = useState(null) useEffect(() => { let cancelled = false const timeout = window.setTimeout(() => { void serialize(params.source, { parseFrontmatter: false, mdxOptions: { remarkPlugins: [], rehypePlugins: [], }, }) .then((result) => { if (cancelled) return setCompiled(result) setError(null) }) .catch((nextError: unknown) => { if (cancelled) return setCompiled(null) setError(nextError instanceof Error ? nextError.message : 'Failed to compile MDX preview') }) }, 200) return () => { cancelled = true window.clearTimeout(timeout) } }, [params.source]) if (error) { return (
{error}
) } if (!compiled) { return
Rendering preview...
} return (
) }