24 lines
712 B
TypeScript
24 lines
712 B
TypeScript
import { Plugin } from 'prosemirror-state';
|
|
import { Decoration, DecorationSet } from 'prosemirror-view';
|
|
import type { Node } from 'prosemirror-model';
|
|
|
|
const isEmptyParagraph = (node: Node) => {
|
|
return node.type.name === 'paragraph' && node.nodeSize === 2;
|
|
};
|
|
|
|
export const placeholderPlugin = (placeholder: string) => {
|
|
return new Plugin({
|
|
props: {
|
|
decorations(state) {
|
|
const { $from } = state.selection;
|
|
if (isEmptyParagraph($from.parent)) {
|
|
const decoration = Decoration.node($from.before(), $from.after(), {
|
|
'data-placeholder': placeholder,
|
|
});
|
|
return DecorationSet.create(state.doc, [decoration]);
|
|
}
|
|
},
|
|
},
|
|
});
|
|
};
|