import { chainCommands, createParagraphNear, deleteSelection, joinBackward, joinForward, liftEmptyBlock, selectAll, selectNodeBackward, selectNodeForward, splitBlock } from "prosemirror-commands"; import { EditorState } from "prosemirror-state"; import { UxCommand } from "./constants"; import { filter, not, textSelected } from "./predicate"; import { Dispatch } from "./types"; const deleteBackwardChain = chainCommands(deleteSelection, joinBackward, selectNodeBackward); const deleteForwardChain = chainCommands(deleteSelection, joinForward, selectNodeForward); const enterChain = chainCommands(createParagraphNear, liftEmptyBlock, splitBlock); export function deleteBackward(state: EditorState, dispatch?: Dispatch) { return deleteBackwardChain(state, dispatch); } export function deleteForward(state: EditorState, dispatch?: Dispatch) { return deleteForwardChain(state, dispatch); } export function enter(state: EditorState, dispatch?: Dispatch) { return enterChain(state, dispatch); } // It's easy to accidentally use keyboard shortcuts in the wrong context and // invoke an unintended browser behaviour. export function preventDefault() { return true; } export { selectAll }; export const ux = { [UxCommand.DeleteBackward]: deleteBackward, [UxCommand.DeleteForward]: deleteForward, [UxCommand.Enter]: enter, [UxCommand.Lift]: preventDefault, [UxCommand.SelectAll]: selectAll, [UxCommand.Sink]: preventDefault, [UxCommand.TabForward]: filter(not(textSelected), preventDefault), [UxCommand.TabBackward]: filter(not(textSelected), preventDefault) };