UNPKG

@mdxeditor/editor

Version:

React component for rich text markdown editing

62 lines (61 loc) 1.98 kB
import { realmPlugin } from "../../RealmWithPlugins.js"; import { Cell, Signal, map } from "@mdxeditor/gurx"; import { insertCodeBlock$, appendCodeBlockEditorDescriptor$ } from "../codeblock/index.js"; import { CodeMirrorEditor } from "./CodeMirrorEditor.js"; const codeBlockLanguages$ = Cell({ js: "JavaScript", ts: "TypeScript", tsx: "TypeScript (React)", jsx: "JavaScript (React)", css: "CSS" }); const insertCodeMirror$ = Signal((r) => { r.link( r.pipe( insertCodeMirror$, map(({ language, code }) => { return { code, language, meta: "" }; }) ), insertCodeBlock$ ); }); const codeMirrorExtensions$ = Cell([]); const codeMirrorAutoLoadLanguageSupport$ = Cell(true); const codeMirrorPlugin = realmPlugin({ update(r, params) { r.pubIn({ [codeBlockLanguages$]: params == null ? void 0 : params.codeBlockLanguages, [codeMirrorExtensions$]: (params == null ? void 0 : params.codeMirrorExtensions) ?? [], [codeMirrorAutoLoadLanguageSupport$]: (params == null ? void 0 : params.autoLoadLanguageSupport) ?? true }); }, init(r, params) { r.pubIn({ [codeBlockLanguages$]: params == null ? void 0 : params.codeBlockLanguages, [codeMirrorExtensions$]: (params == null ? void 0 : params.codeMirrorExtensions) ?? [], [appendCodeBlockEditorDescriptor$]: buildCodeBlockDescriptor((params == null ? void 0 : params.codeBlockLanguages) ?? {}), [codeMirrorAutoLoadLanguageSupport$]: (params == null ? void 0 : params.autoLoadLanguageSupport) ?? true }); } }); function buildCodeBlockDescriptor(codeBlockLanguages) { return { match(language, meta) { return Boolean(Object.hasOwn(codeBlockLanguages, language ?? "")) && !meta; }, priority: 1, Editor: CodeMirrorEditor }; } export { codeBlockLanguages$, codeMirrorAutoLoadLanguageSupport$, codeMirrorExtensions$, codeMirrorPlugin, insertCodeMirror$ };