diff --git a/docs/src/docPages/api/extensions.md b/docs/src/docPages/api/extensions.md index 28426d24..7e5f53f1 100644 --- a/docs/src/docPages/api/extensions.md +++ b/docs/src/docPages/api/extensions.md @@ -19,7 +19,7 @@ You don’t have to use it, but we prepared a `@tiptap/vue-starter-kit` which in | [BulletList](/api/extensions/bullet-list) | – | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-bullet-list/) | | [Code](/api/extensions/code) | Yes | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-code/) | | [Document](/api/extensions/document) | Yes | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-document/) | -| [HardBreak](/api/extensions/hard-break) | – | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-hard-break/) | +| [HardBreak](/api/extensions/hard-break) | Yes | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-hard-break/) | | [Heading](/api/extensions/heading) | Yes | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-heading/) | | [History](/api/extensions/history) | Yes | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-history/) | | [HorizontalRule](/api/extensions/horizontal-rule) | – | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-horizontal-rule/) | @@ -27,9 +27,9 @@ You don’t have to use it, but we prepared a `@tiptap/vue-starter-kit` which in | [Link](/api/extensions/link) | – | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-link/) | | [OrderedList](/api/extensions/ordered-list) | – | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-ordered-list/) | | [Paragraph](/api/extensions/paragraph) | Yes | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-paragraph/) | -| [Strike](/api/extensions/strike) | – | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-strike/) | +| [Strike](/api/extensions/strike) | Yes | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-strike/) | | [Text](/api/extensions/text) | Yes | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-text/) | -| [Underline](/api/extensions/underline) | – | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-underline/) | +| [Underline](/api/extensions/underline) | Yes | [GitHub](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-underline/) | diff --git a/packages/extension-hard-break/index.ts b/packages/extension-hard-break/index.ts new file mode 100644 index 00000000..1020fba1 --- /dev/null +++ b/packages/extension-hard-break/index.ts @@ -0,0 +1,38 @@ +import { Node } from '@tiptap/core' +import { chainCommands, exitCode } from 'prosemirror-commands' + +declare module '@tiptap/core/src/Editor' { + interface Editor { + hardBreak(): Editor, + } +} + +export default new Node() + .name('hardBreak') + .schema(() => ({ + inline: true, + group: 'inline', + selectable: false, + parseDOM: [ + { tag: 'br' }, + ], + toDOM: () => ['br'], + })) + .commands(({ editor, type }) => ({ + hardBreak: next => () => { + const { state, view } = editor + const { dispatch } = view + + chainCommands(exitCode, () => { + dispatch(state.tr.replaceSelectionWith(type.create()).scrollIntoView()) + return true + })(state, dispatch, view) + + next() + }, + })) + .keys(({ editor }) => ({ + 'Mod-Enter': () => editor.hardBreak(), + 'Shift-Enter': () => editor.hardBreak(), + })) + .create() diff --git a/packages/extension-hard-break/package.json b/packages/extension-hard-break/package.json new file mode 100644 index 00000000..59de75b9 --- /dev/null +++ b/packages/extension-hard-break/package.json @@ -0,0 +1,18 @@ +{ + "name": "@tiptap/extension-hardbreak", + "version": "1.0.0", + "source": "index.ts", + "main": "dist/tiptap-extension-hardbreak.js", + "umd:main": "dist/tiptap-extension-hardbreak.umd.js", + "module": "dist/tiptap-extension-hardbreak.mjs", + "unpkg": "dist/tiptap-extension-hardbreak.js", + "jsdelivr": "dist/tiptap-extension-hardbreak.js", + "files": [ + "src", + "dist" + ], + "peerDependencies": { + "@tiptap/core": "2.x", + "prosemirror-commands": "^1.1.3" + } +} diff --git a/packages/starter-kit/index.ts b/packages/starter-kit/index.ts index 0e3915a9..436c9608 100644 --- a/packages/starter-kit/index.ts +++ b/packages/starter-kit/index.ts @@ -7,6 +7,9 @@ import Italic from '@tiptap/extension-italic' import Code from '@tiptap/extension-code' import CodeBlock from '@tiptap/extension-codeblock' import Heading from '@tiptap/extension-heading' +import HardBreak from '@tiptap/extension-hard-break' +import Strike from '@tiptap/extension-strike' +import Underline from '@tiptap/extension-underline' export default function defaultExtensions() { return [ @@ -19,5 +22,8 @@ export default function defaultExtensions() { Code(), CodeBlock(), Heading(), + HardBreak(), + Strike(), + Underline(), ] } \ No newline at end of file diff --git a/packages/vue-starter-kit/index.ts b/packages/vue-starter-kit/index.ts index 3cb508c2..d91a43ac 100644 --- a/packages/vue-starter-kit/index.ts +++ b/packages/vue-starter-kit/index.ts @@ -9,6 +9,9 @@ import Italic from '@tiptap/extension-italic' import Code from '@tiptap/extension-code' import CodeBlock from '@tiptap/extension-codeblock' import Heading from '@tiptap/extension-heading' +import HardBreak from '@tiptap/extension-hard-break' +import Strike from '@tiptap/extension-strike' +import Underline from '@tiptap/extension-underline' export function defaultExtensions() { return [ @@ -21,5 +24,8 @@ export function defaultExtensions() { Code(), CodeBlock(), Heading(), + HardBreak(), + Strike(), + Underline(), ] } \ No newline at end of file