lexical-vue
Version:
An extensible Vue 3 web text-editor based on Lexical.
46 lines (45 loc) • 1.79 kB
JavaScript
import { useDefaults } from "vue-vine";
import { defineComponent, toRefs, watchEffect } from "vue";
import { HISTORY_MERGE_TAG } from "lexical";
import { useLexicalComposer } from "./LexicalComposer.vine.js";
const OnChangePlugin = (()=>{
const __vine = defineComponent({
name: 'OnChangePlugin',
props: {
ignoreSelectionChange: {
type: Boolean,
default: false
},
ignoreHistoryMergeTagChange: {
type: Boolean,
default: true
}
},
emits: [
'change'
],
setup (__props, param) {
let { emit: __emit, expose: __expose } = param;
const emit = __emit;
__expose();
const props = useDefaults(__props, {
ignoreSelectionChange: ()=>false,
ignoreHistoryMergeTagChange: ()=>true
});
const { ignoreSelectionChange, ignoreHistoryMergeTagChange } = toRefs(props);
const editor = useLexicalComposer();
watchEffect((onInvalidate)=>{
const unregister = editor.registerUpdateListener((param)=>{
let { editorState, dirtyElements, dirtyLeaves, prevEditorState, tags } = param;
if (props.ignoreSelectionChange && 0 === dirtyElements.size && 0 === dirtyLeaves.size || props.ignoreHistoryMergeTagChange && tags.has(HISTORY_MERGE_TAG) || prevEditorState.isEmpty()) return;
emit('change', editorState, editor, tags);
});
onInvalidate(unregister);
});
return (_ctx, _cache)=>null;
}
});
__vine.__vue_vine = true;
return __vine;
})();
export { OnChangePlugin };