@portabletext/editor
Version:
Portable Text Editor made in React
27 lines (24 loc) • 948 B
text/typescript
import {keyIs} from '../internal-utils/key-is'
import * as selectors from '../selectors'
import {raise} from './behavior.types.action'
import {defineBehavior} from './behavior.types.behavior'
export const abstractKeyboardBehaviors = [
defineBehavior({
on: 'keyboard.keydown',
guard: ({snapshot, event}) =>
keyIs.break(event.originEvent) &&
selectors.isSelectionCollapsed(snapshot) &&
selectors.getFocusInlineObject(snapshot),
actions: [() => [raise({type: 'insert.break'})]],
}),
/**
* On WebKit, Shift+Enter results in an `insertParagraph` input event rather
* than an `insertLineBreak` input event. This Behavior makes sure we catch
* that `keyboard.keydown` event beforehand and raise an `insert.soft break` manually.
*/
defineBehavior({
on: 'keyboard.keydown',
guard: ({event}) => keyIs.lineBreak(event.originEvent),
actions: [() => [raise({type: 'insert.soft break'})]],
}),
]