UNPKG

lexical-vue

Version:

An extensible Vue 3 web text-editor based on Lexical.

51 lines (50 loc) 1.78 kB
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 };