diff --git a/packages/slate-react/src/components/editable.tsx b/packages/slate-react/src/components/editable.tsx index 11dfc1167..0dc85955e 100644 --- a/packages/slate-react/src/components/editable.tsx +++ b/packages/slate-react/src/components/editable.tsx @@ -301,7 +301,8 @@ export const Editable = (props: EditableProps) => { Range.isExpanded(selection) && type.startsWith('delete') ) { - Editor.deleteFragment(editor) + const direction = type.endsWith('Backward') ? 'backward' : 'forward' + Editor.deleteFragment(editor, direction) return } @@ -945,7 +946,7 @@ export const Editable = (props: EditableProps) => { event.preventDefault() if (selection && Range.isExpanded(selection)) { - Editor.deleteFragment(editor) + Editor.deleteFragment(editor, 'backward') } else { Editor.deleteBackward(editor) } @@ -957,7 +958,7 @@ export const Editable = (props: EditableProps) => { event.preventDefault() if (selection && Range.isExpanded(selection)) { - Editor.deleteFragment(editor) + Editor.deleteFragment(editor, 'forward') } else { Editor.deleteForward(editor) } @@ -969,7 +970,7 @@ export const Editable = (props: EditableProps) => { event.preventDefault() if (selection && Range.isExpanded(selection)) { - Editor.deleteFragment(editor) + Editor.deleteFragment(editor, 'backward') } else { Editor.deleteBackward(editor, { unit: 'line' }) } @@ -981,7 +982,7 @@ export const Editable = (props: EditableProps) => { event.preventDefault() if (selection && Range.isExpanded(selection)) { - Editor.deleteFragment(editor) + Editor.deleteFragment(editor, 'forward') } else { Editor.deleteForward(editor, { unit: 'line' }) } @@ -993,7 +994,7 @@ export const Editable = (props: EditableProps) => { event.preventDefault() if (selection && Range.isExpanded(selection)) { - Editor.deleteFragment(editor) + Editor.deleteFragment(editor, 'backward') } else { Editor.deleteBackward(editor, { unit: 'word' }) } @@ -1005,7 +1006,7 @@ export const Editable = (props: EditableProps) => { event.preventDefault() if (selection && Range.isExpanded(selection)) { - Editor.deleteFragment(editor) + Editor.deleteFragment(editor, 'forward') } else { Editor.deleteForward(editor, { unit: 'word' }) } diff --git a/packages/slate/src/create-editor.ts b/packages/slate/src/create-editor.ts index 5c9d53fb0..97beccf0b 100755 --- a/packages/slate/src/create-editor.ts +++ b/packages/slate/src/create-editor.ts @@ -127,11 +127,11 @@ export const createEditor = (): Editor => { } }, - deleteFragment: () => { + deleteFragment: (direction?: 'forward' | 'backward') => { const { selection } = editor if (selection && Range.isExpanded(selection)) { - Transforms.delete(editor) + Transforms.delete(editor, { reverse: direction === 'backward' }) } }, diff --git a/packages/slate/src/interfaces/editor.ts b/packages/slate/src/interfaces/editor.ts index f906ef094..54494a8ea 100755 --- a/packages/slate/src/interfaces/editor.ts +++ b/packages/slate/src/interfaces/editor.ts @@ -54,7 +54,7 @@ export interface BaseEditor { apply: (operation: Operation) => void deleteBackward: (unit: 'character' | 'word' | 'line' | 'block') => void deleteForward: (unit: 'character' | 'word' | 'line' | 'block') => void - deleteFragment: () => void + deleteFragment: (direction?: 'forward' | 'backward') => void getFragment: () => Descendant[] insertBreak: () => void insertFragment: (fragment: Node[]) => void @@ -435,8 +435,8 @@ export const Editor: EditorInterface = { * Delete the content in the current selection. */ - deleteFragment(editor: Editor): void { - editor.deleteFragment() + deleteFragment(editor: Editor, direction?: 'forward' | 'backward'): void { + editor.deleteFragment(direction) }, /** diff --git a/packages/slate/src/transforms/text.ts b/packages/slate/src/transforms/text.ts index b994d021a..76f053904 100644 --- a/packages/slate/src/transforms/text.ts +++ b/packages/slate/src/transforms/text.ts @@ -207,7 +207,9 @@ export const TextTransforms: TextTransforms = { }) } - const point = endRef.unref() || startRef.unref() + const point = reverse + ? startRef.unref() || endRef.unref() + : endRef.unref() || startRef.unref() if (options.at == null && point) { Transforms.select(editor, point) diff --git a/packages/slate/test/transforms/delete/point/inline-end.tsx b/packages/slate/test/transforms/delete/point/inline-end.tsx new file mode 100644 index 000000000..3e7d14822 --- /dev/null +++ b/packages/slate/test/transforms/delete/point/inline-end.tsx @@ -0,0 +1,37 @@ +/** @jsx jsx */ +import { Transforms } from 'slate' +import { jsx } from '../../..' + +export const run = editor => { + Transforms.delete(editor) +} +export const input = ( + + + one + + two + + + + + + + three + four + + +) +export const output = ( + + + one + two + + + + three + four + + +) diff --git a/packages/slate/test/transforms/delete/point/inline-inside-reverse.tsx b/packages/slate/test/transforms/delete/point/inline-inside-reverse.tsx index e87084b26..d17afdba5 100644 --- a/packages/slate/test/transforms/delete/point/inline-inside-reverse.tsx +++ b/packages/slate/test/transforms/delete/point/inline-inside-reverse.tsx @@ -27,11 +27,10 @@ export const output = ( one two - - + - three - + + three four diff --git a/packages/slate/test/transforms/delete/point/inline-void-reverse.tsx b/packages/slate/test/transforms/delete/point/inline-void-reverse.tsx index 6b6b26a04..d9cd964fa 100644 --- a/packages/slate/test/transforms/delete/point/inline-void-reverse.tsx +++ b/packages/slate/test/transforms/delete/point/inline-void-reverse.tsx @@ -25,9 +25,10 @@ export const output = ( - + + + - word diff --git a/packages/slate/test/transforms/delete/point/inline-void.tsx b/packages/slate/test/transforms/delete/point/inline-void.tsx new file mode 100644 index 000000000..0c9b91b8a --- /dev/null +++ b/packages/slate/test/transforms/delete/point/inline-void.tsx @@ -0,0 +1,34 @@ +/** @jsx jsx */ +import { Transforms } from 'slate' +import { jsx } from '../../..' + +export const run = editor => { + Transforms.delete(editor) +} +export const input = ( + + + word + + + + + + + + + + +) +export const output = ( + + + word + + + + + + + +) diff --git a/packages/slate/test/transforms/delete/unit-character/inline-after.tsx b/packages/slate/test/transforms/delete/unit-character/inline-after.tsx new file mode 100644 index 000000000..786fa9811 --- /dev/null +++ b/packages/slate/test/transforms/delete/unit-character/inline-after.tsx @@ -0,0 +1,25 @@ +/** @jsx jsx */ +import { Transforms } from 'slate' +import { jsx } from '../../..' + +export const run = editor => { + Transforms.delete(editor) +} +export const input = ( + + + one + two + a + + +) +export const output = ( + + + one + two + + + +) diff --git a/packages/slate/test/transforms/delete/unit-character/inline-before.tsx b/packages/slate/test/transforms/delete/unit-character/inline-before.tsx index 786fa9811..849c2b0a3 100644 --- a/packages/slate/test/transforms/delete/unit-character/inline-before.tsx +++ b/packages/slate/test/transforms/delete/unit-character/inline-before.tsx @@ -3,23 +3,26 @@ import { Transforms } from 'slate' import { jsx } from '../../..' export const run = editor => { - Transforms.delete(editor) + Transforms.delete(editor, { unit: 'character' }) } export const input = ( - one + a two - a + three ) export const output = ( - one - two - + a + + + wo + + three ) diff --git a/packages/slate/test/transforms/delete/unit-character/inline-end-reverse.tsx b/packages/slate/test/transforms/delete/unit-character/inline-end-reverse.tsx index 028dc993c..e117b3428 100644 --- a/packages/slate/test/transforms/delete/unit-character/inline-end-reverse.tsx +++ b/packages/slate/test/transforms/delete/unit-character/inline-end-reverse.tsx @@ -18,8 +18,11 @@ export const output = ( one - tw - + + tw + + + )