Spaces:
No application file
No application file
| import { splitListItem, liftListItem, sinkListItem } from 'prosemirror-schema-list'; | |
| import type { Schema } from 'prosemirror-model'; | |
| import { undo, redo } from 'prosemirror-history'; | |
| import { undoInputRule } from 'prosemirror-inputrules'; | |
| import type { Command } from 'prosemirror-state'; | |
| import { | |
| toggleMark, | |
| selectParentNode, | |
| joinUp, | |
| joinDown, | |
| chainCommands, | |
| newlineInCode, | |
| createParagraphNear, | |
| liftEmptyBlock, | |
| splitBlockKeepMarks, | |
| } from 'prosemirror-commands'; | |
| export const buildKeymap = (schema: Schema) => { | |
| const keys: Record<string, Command> = {}; | |
| const bind = (key: string, cmd: Command) => (keys[key] = cmd); | |
| bind('Alt-ArrowUp', joinUp); | |
| bind('Alt-ArrowDown', joinDown); | |
| bind('Mod-z', undo); | |
| bind('Mod-y', redo); | |
| bind('Backspace', undoInputRule); | |
| bind('Escape', selectParentNode); | |
| bind('Mod-b', toggleMark(schema.marks.strong)); | |
| bind('Mod-i', toggleMark(schema.marks.em)); | |
| bind('Mod-u', toggleMark(schema.marks.underline)); | |
| bind('Mod-d', toggleMark(schema.marks.strikethrough)); | |
| bind('Mod-e', toggleMark(schema.marks.code)); | |
| bind('Mod-;', toggleMark(schema.marks.superscript)); | |
| bind(`Mod-'`, toggleMark(schema.marks.subscript)); | |
| bind( | |
| 'Enter', | |
| chainCommands( | |
| splitListItem(schema.nodes.list_item), | |
| newlineInCode, | |
| createParagraphNear, | |
| liftEmptyBlock, | |
| splitBlockKeepMarks, | |
| ), | |
| ); | |
| bind('Mod-[', liftListItem(schema.nodes.list_item)); | |
| bind('Mod-]', sinkListItem(schema.nodes.list_item)); | |
| bind('Tab', sinkListItem(schema.nodes.list_item)); | |
| return keys; | |
| }; | |