diff --git a/docs/src/docPages/api/commands.md b/docs/src/docPages/api/commands.md index 8d55c86e..62f9bf18 100644 --- a/docs/src/docPages/api/commands.md +++ b/docs/src/docPages/api/commands.md @@ -33,3 +33,4 @@ editor.chain().focus().bold().run() | .deleteSelection() | Delete the selection, if there is one. | | .focus() | Focus the editor at the given position. | | .selectAll() | Select the whole document. | +| .scrollIntoView() | … | diff --git a/packages/extension-heading/index.ts b/packages/extension-heading/index.ts index 39de576a..ba647b78 100644 --- a/packages/extension-heading/index.ts +++ b/packages/extension-heading/index.ts @@ -7,7 +7,7 @@ export interface HeadingOptions { levels: Level[], } -export type HeadingCommand = (level: Level) => Command +export type HeadingCommand = (options: { level: Level }) => Command declare module '@tiptap/core/src/Editor' { interface Commands { @@ -38,11 +38,18 @@ export default new Node() toDOM: node => [`h${node.attrs.level}`, 0], })) .commands(({ name }) => ({ - [name]: attrs => ({ commands }) => { + heading: attrs => ({ commands }) => { return commands.toggleBlockType(name, 'paragraph', attrs) }, })) - // TODO: Keyboard Shortcuts + .keys(({ name, options, editor }) => { + return options.levels.reduce((items, level) => ({ + ...items, + ...{ + [`Mod-Alt-${level}`]: () => editor.setBlockType(name, { level }), + }, + }), {}) + }) .inputRules(({ options, type }) => { return options.levels.map((level: Level) => { return textblockTypeInputRule(new RegExp(`^(#{1,${level}})\\s$`), type, { level })