// @flow import { Change } from 'slate'; import { isModKey } from '../utils'; export default function KeyboardShortcuts() { return { onKeyDown(ev: SyntheticKeyboardEvent, change: Change) { if (!isModKey(ev)) return null; switch (ev.key) { case 'b': return this.toggleMark(change, 'bold'); case 'i': return this.toggleMark(change, 'italic'); case 'u': return this.toggleMark(change, 'underlined'); case 'd': return this.toggleMark(change, 'deleted'); case 'k': return change.wrapInline({ type: 'link', data: { href: '' } }); default: return null; } }, toggleMark(change: Change, type: string) { const { value } = change; // don't allow formatting of document title const firstNode = value.document.nodes.first(); if (firstNode === value.startBlock) return; change.toggleMark(type); }, }; }