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]) } }, }, }) }