@mdxeditor/editor
Version:
React component for rich text markdown editing
62 lines (61 loc) • 1.98 kB
JavaScript
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$
};