import { mergeAttributes, Node } from "@tiptap/core"; export interface PageBreakOptions { HTMLAttributes: Record; } declare module "@tiptap/core" { interface Commands { pageBreak: { setPageBreak: () => ReturnType; }; } } export const PageBreak = Node.create({ name: "pageBreak", group: "block", atom: true, selectable: true, addOptions() { return { HTMLAttributes: {}, }; }, parseHTML() { return [ { tag: `div[data-type="${this.name}"]`, }, ]; }, renderHTML({ HTMLAttributes }) { return [ "div", mergeAttributes( { "data-type": this.name, class: "page-break" }, this.options.HTMLAttributes, HTMLAttributes, ), ]; }, addCommands() { return { setPageBreak: () => ({ chain }) => chain() .insertContent({ type: this.name }) .focus() .run(), }; }, });