"use client"; import "@mdxeditor/editor/style.css"; import React, { useEffect, useRef, useState } from "react"; import { MDXEditor, MDXEditorMethods, codeBlockPlugin, codeMirrorPlugin, frontmatterPlugin, headingsPlugin, linkPlugin, listsPlugin, markdownShortcutPlugin, quotePlugin, tablePlugin, thematicBreakPlugin, toolbarPlugin, UndoRedo, BoldItalicUnderlineToggles, InsertTable, InsertCodeBlock, } from "@mdxeditor/editor"; export interface MdxEditorProps { content: string; // eslint-disable-next-line no-unused-vars setContentInParent: (content: string) => void; // eslint-disable-next-line no-unused-vars setEditorErrorInParent?: (error: { error: string; source: string }) => void; } export const MdxEditor: React.FC = ({ content, setContentInParent, setEditorErrorInParent }) => { const ref = useRef(null); const [markdownContent, setMarkdownContent] = useState(content); useEffect(() => { setMarkdownContent(content); }, [content]); useEffect(() => { setContentInParent(markdownContent); }, [markdownContent, setContentInParent]); const handleDivClick = () => { if (ref.current) { ref.current.focus(); } }; return (
{ setMarkdownContent(markdownContent); }} markdown={markdownContent} contentEditableClassName="prose dark:prose-invert" suppressHtmlProcessing={true} onError={(error) => { console.error("MDXEditor error:", error); if (setEditorErrorInParent) { setEditorErrorInParent({ error: error.error, source: "MDXEditor" }); } }} plugins={[ toolbarPlugin({ toolbarClassName: "my-toolbar", toolbarContents: () => ( <> ), }), listsPlugin(), quotePlugin(), headingsPlugin({ allowedHeadingLevels: [1, 2, 3] }), linkPlugin(), tablePlugin(), thematicBreakPlugin(), frontmatterPlugin(), codeBlockPlugin({ defaultCodeBlockLanguage: "txt" }), codeMirrorPlugin({ codeBlockLanguages: { js: "JavaScript", css: "CSS", txt: "text", tsx: "TypeScript", }, }), markdownShortcutPlugin(), ]} />
); };