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
+
+
+
)