@fourwaves/tiptap-extension-selection-decoration
Version:
a selection decoration extension for tiptap
47 lines (37 loc) • 1.03 kB
text/typescript
import { Extension } from '@tiptap/core';
import { Plugin, PluginKey } from 'prosemirror-state';
import { Decoration, DecorationSet } from 'prosemirror-view';
export interface SelectionDecorationOptions {
className: string;
}
const SelectionDecoration = Extension.create<SelectionDecorationOptions>({
name: 'selectionDecoration',
addOptions() {
return {
className: 'selection',
};
},
addProseMirrorPlugins() {
const { editor } = this;
return [
new Plugin({
key: new PluginKey('selection'),
props: {
decorations: (state) => {
const { selection } = state;
if (selection.empty) {
return null;
}
return DecorationSet.create(state.doc, [
Decoration.inline(selection.from, selection.to, {
class: this.options.className,
}),
]);
},
},
}),
];
},
});
export { SelectionDecoration };
export default SelectionDecoration;