lexical-vue
Version:
An extensible Vue 3 web text-editor based on Lexical.
51 lines (50 loc) • 1.78 kB
JavaScript
import { useDefaults } from "vue-vine";
import { defineComponent, toRefs, watchEffect } from "vue";
import { TRANSFORMERS, registerMarkdownShortcuts } from "@lexical/markdown";
import { useLexicalComposer } from "./LexicalComposer.vine.js";
import { $createHorizontalRuleNode, $isHorizontalRuleNode, HorizontalRuleNode } from "./LexicalHorizontalRuleNode.js";
const HR = {
dependencies: [
HorizontalRuleNode
],
export: (node)=>$isHorizontalRuleNode(node) ? '***' : null,
regExp: /^(---|\*\*\*|___)\s?$/,
replace: (parentNode, _1, _2, isImport)=>{
const line = $createHorizontalRuleNode();
if (isImport || null != parentNode.getNextSibling()) parentNode.replace(line);
else parentNode.insertBefore(line);
line.selectNext();
},
type: 'element'
};
const DEFAULT_TRANSFORMERS = [
HR,
...TRANSFORMERS
];
const MarkdownShortcutPlugin = (()=>{
const __vine = defineComponent({
name: 'MarkdownShortcutPlugin',
props: {
transformers: {
required: true
}
},
setup (__props, param) {
let { expose: __expose } = param;
__expose();
const props = useDefaults(__props, {
transformers: ()=>DEFAULT_TRANSFORMERS
});
const { transformers } = toRefs(props);
const editor = useLexicalComposer();
watchEffect((onInvalidate)=>{
const unregister = registerMarkdownShortcuts(editor, props.transformers);
onInvalidate(unregister);
});
return (_ctx, _cache)=>null;
}
});
__vine.__vue_vine = true;
return __vine;
})();
export { DEFAULT_TRANSFORMERS, HR, MarkdownShortcutPlugin };