diff --git a/components/react/MdxEditor.tsx b/components/react/MdxEditor.tsx new file mode 100644 index 0000000..1bdcb88 --- /dev/null +++ b/components/react/MdxEditor.tsx @@ -0,0 +1,84 @@ +/** @jsxImportSource react */ +// deno-lint-ignore no-unused-vars +import React from 'react' +import { + BoldItalicUnderlineToggles, + ChangeCodeMirrorLanguage, + CodeToggle, + ConditionalContents, + CreateLink, + DiffSourceToggleWrapper, + headingsPlugin, + InsertCodeBlock, + InsertFrontmatter, + InsertImage, + InsertTable, + InsertThematicBreak, + ListsToggle, + markdownShortcutPlugin, + MDXEditor, + Separator, + StrikeThroughSupSubToggles, + toolbarPlugin, + UndoRedo, +} from '@mdxeditor/editor' + +export default function MdxEditor(props: { markdown?: string }) { + return ( + , + }), + ]} + /> + ) +} + +function KitchenSinkToolbar() { + return ( + + ) => + editor?.editorType === 'codeblock', + contents: () => , + }, + { + fallback: () => ( + <> + + + + + + + + + + + + + + + + + + + + + + + + + ), + }, + ]} + /> + + ) +} diff --git a/deno.json b/deno.json index e8b76ef..2bdd977 100644 --- a/deno.json +++ b/deno.json @@ -28,6 +28,7 @@ "imports": { "@deno/emit": "jsr:@deno/emit@^0.46.0", "@deno/gfm": "jsr:@deno/gfm@^0.10.0", + "@mdxeditor/editor": "npm:@mdxeditor/editor@^3.32.3", "@std/fs": "jsr:@std/fs@^1.0.6", "@std/path": "jsr:@std/path@^1.0.8", "fresh": "jsr:@fresh/core@^2.0.0-alpha.25", @@ -49,6 +50,8 @@ "@std/json": "jsr:@std/json@^1.0.1", "@std/streams": "jsr:@std/streams@^0.224.5", "preact": "npm:preact@^10.24.2", + "react": "npm:react@^19.1.0", + "react-dom": "npm:react-dom@^19.1.0", "web-push": "npm:web-push@^3.6.7" }, "compilerOptions": { diff --git a/islands/MdxEditor.tsx b/islands/MdxEditor.tsx new file mode 100644 index 0000000..5f1e5e8 --- /dev/null +++ b/islands/MdxEditor.tsx @@ -0,0 +1,17 @@ +import { useEffect, useRef } from 'preact/hooks' +import ReactMdxEditor from ':components/react/MdxEditor.tsx' +import React from 'react' +import ReactDOM from 'react-dom/client' + +export default function MdxEditor(props: Parameters[0]) { + const ref = useRef(null) + + useEffect(() => { + if (ref.current) { + const root = ReactDOM.createRoot(ref.current!) + root.render(React.createElement(ReactMdxEditor, props)) + } + }, []) + + return
+}