diff --git a/packages/extension-horizontal-rule/package.json b/packages/extension-horizontal-rule/package.json index 889452db..3f230e24 100644 --- a/packages/extension-horizontal-rule/package.json +++ b/packages/extension-horizontal-rule/package.json @@ -22,7 +22,9 @@ "dist" ], "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1", - "prosemirror-commands": "^1.1.3" + "@tiptap/core": "^2.0.0-beta.1" + }, + "dependencies": { + "prosemirror-state": "^1.3.4" } } diff --git a/packages/extension-horizontal-rule/src/horizontal-rule.ts b/packages/extension-horizontal-rule/src/horizontal-rule.ts index dd4c873c..1065bbcd 100644 --- a/packages/extension-horizontal-rule/src/horizontal-rule.ts +++ b/packages/extension-horizontal-rule/src/horizontal-rule.ts @@ -4,6 +4,7 @@ import { nodeInputRule, mergeAttributes, } from '@tiptap/core' +import { TextSelection } from 'prosemirror-state' export interface HorizontalRuleOptions { HTMLAttributes: { @@ -46,6 +47,22 @@ export const HorizontalRule = Node.create({ setHorizontalRule: () => ({ tr, dispatch }) => { if (dispatch) { tr.replaceSelectionWith(this.type.create()) + + const { parent, pos } = tr.selection.$from + const posAfter = pos + 1 + const nodeAfter = tr.doc.nodeAt(posAfter) + + // end of document + if (!nodeAfter) { + const node = parent.type.contentMatch.defaultType?.create() + + if (node) { + tr.insert(posAfter, node) + tr.setSelection(TextSelection.create(tr.doc, posAfter)) + } + } + + tr.scrollIntoView() } return true