diff --git a/Readme.md b/Readme.md
index 7a5e3b578..57a8b59b2 100644
--- a/Readme.md
+++ b/Readme.md
@@ -14,7 +14,7 @@
Principles ·
Demo ·
Examples ·
- Plugins ·
+ Plugins ·
Documentation ·
Contributing!
@@ -26,7 +26,7 @@
-
+
@@ -41,13 +41,13 @@
-
+
-
+
-
+
@@ -153,7 +153,7 @@ Slate encourages you to write small, reusable modules. Check out the public ones
- [`slate-prism`](https://github.com/GitbookIO/slate-prism) highlights code blocks with [Prism.js](http://prismjs.com/)!
- [`slate-soft-break`](https://github.com/ianstormtaylor/slate-soft-break) adds a soft break when `enter` is pressed.
- [`slate-drop-or-paste-images`](https://github.com/ianstormtaylor/slate-drop-or-paste-images) lets users drop or paste images to insert them!
-- [**See all the plugins...**](https://yarnpkg.com/en/packages?q=slate)
+- [**See all the plugins...**](./docs/general/plugins.md)
diff --git a/docs/Introduction.md b/docs/Introduction.md
index 44b36ea1e..92e20d05a 100644
--- a/docs/Introduction.md
+++ b/docs/Introduction.md
@@ -93,7 +93,7 @@ Slate encourages you to write small, reusable modules. Check out the public ones
- [`slate-prism`](https://github.com/GitbookIO/slate-prism) highlights code blocks with [Prism.js](http://prismjs.com/)!
- [`slate-soft-break`](https://github.com/ianstormtaylor/slate-soft-break) adds a soft break when `enter` is pressed.
- [`slate-drop-or-paste-images`](https://github.com/ianstormtaylor/slate-drop-or-paste-images) lets users drop or paste images to insert them!
-- [**View all plugins on `npm`...**](https://www.npmjs.com/browse/keyword/slate)
+- [**View all plugins...**](https://github.com/ianstormtaylor/slate/blob/master/docs/general/plugins.md)
## Documentation
diff --git a/docs/Readme.md b/docs/Readme.md
index 453f77763..ababa43bf 100644
--- a/docs/Readme.md
+++ b/docs/Readme.md
@@ -24,6 +24,7 @@
## General
+- [Plugins](./general/plugins.md)
- [Resources](./general/resources.md)
- [Contributing](../Contributing.md)
- [Changelog](../Changelog.md)
diff --git a/docs/general/plugins.md b/docs/general/plugins.md
new file mode 100644
index 000000000..1db91fca7
--- /dev/null
+++ b/docs/general/plugins.md
@@ -0,0 +1,58 @@
+
+# Plugins
+
+Here's a list of Slate plugins, organized by category, so that they're easier to find than searching NPM or Yarn.
+
+
+### Behavior
+
+Plugins that add specific behaviors to your editor.
+
+|**Plugin**|**Description**|**Downloads**|
+|---|---|---|
+|[`slate-auto-replace`](https://yarnpkg.com/en/package/slate-auto-replace)|Automatically transform certain input as a user types.||
+|[`slate-collapse-on-escape`](https://yarnpkg.com/en/package/slate-collapse-on-escape)|Collapse the selection when users hit esc.||
+|[`slate-drop-or-paste-images`](https://yarnpkg.com/en/package/slate-drop-or-paste-images)|Allows users to insert images by drag-dropping or copy-pasting.||
+|[`slate-edit-blockquote`](https://yarnpkg.com/en/package/slate-edit-blockquote)|Adds blockquote editing behaviors to an editor.||
+|[`slate-edit-code`](https://yarnpkg.com/en/package/slate-edit-code)|Adds code block editing behaviors to an editor.||
+|[`slate-edit-footnote`](https://yarnpkg.com/en/package/slate-edit-footnote)|Adds footnote editing behaviors to an editor.||
+|[`slate-edit-list`](https://yarnpkg.com/en/package/slate-edit-list)|Adds list editing behaviors to an editor.||
+|[`slate-edit-table`](https://yarnpkg.com/en/package/slate-edit-table)|Adds common table editing behaviors to an editor.||
+|[`slate-mentions`](https://yarnpkg.com/en/package/slate-mentions)|Adds mentions like Facebook's to an editor.||
+|[`slate-no-empty`](https://yarnpkg.com/en/package/slate-no-empty)|Prevents documents from being empty.||
+|[`slate-paste-linkify`](https://yarnpkg.com/en/package/slate-paste-linkify)|Automatically linkify URLs when they are pasted.||
+|[`slate-soft-break`](https://yarnpkg.com/en/package/slate-soft-break)|Adds soft breaks when users hit enter.||
+|[`slate-sticky-inlines`](https://yarnpkg.com/en/package/slate-sticky-inlines)|Changes the inline node behavior to allow editing at the edges.||
+|[`slate-suggestions`](https://yarnpkg.com/en/package/slate-suggestions)|Displays inline auto-completed suggestions.||
+|[`slate-trailing-block`](https://yarnpkg.com/en/package/slate-trailing-block)|Ensure that documents end in a specific kind of block.||
+
+
+### Components
+
+Components for building Slate editors.
+
+|**Plugin**|**Description**|**Downloads**|
+|---|---|---|
+|[`slate-editor-icons`](https://yarnpkg.com/en/package/slate-editor-icons)|A set of icons for using in toolbars, etc.||
+
+
+### Serializers
+
+Serializers for handling Slate data.
+
+|**Plugin**|**Description**|**Downloads**|
+|---|---|---|
+|[`slate-base64-serializer`](https://yarnpkg.com/en/package/slate-base64-serializer)|A base64 string serializer for Slate documents.||
+|[`slate-html-serializer`](https://yarnpkg.com/en/package/slate-html-serializer)|An HTML serializer for Slate documents.||
+|[`slate-plain-serializer`](https://yarnpkg.com/en/package/slate-plain-serializer)|A plain text serializer for Slate documents.||
+
+
+### Utils
+
+Useful utilities when working with Slate documents and components.
+
+|**Plugin**|**Description**|**Downloads**|
+|---|---|---|
+|[`slate-hyperprint`](https://yarnpkg.com/en/package/slate-hyperprint)|Prints Slate documents in their `slate-hyperscript` format.||
+|[`slate-hyperscript`](https://yarnpkg.com/en/package/slate-hyperscript)|Allows you to express Slate documents in JSX.||
+|[`slate-prop-types`](https://yarnpkg.com/en/package/slate-prop-types)|A set of prop types to use in your Slate components.||
diff --git a/packages/slate-react/src/plugins/after.js b/packages/slate-react/src/plugins/after.js
index fc8d9a8e7..0e93670ce 100644
--- a/packages/slate-react/src/plugins/after.js
+++ b/packages/slate-react/src/plugins/after.js
@@ -6,6 +6,7 @@ import React from 'react'
import getWindow from 'get-window'
import { Block, Inline, Text } from 'slate'
+import { IS_IOS } from '../constants/environment'
import EVENT_HANDLERS from '../constants/event-handlers'
import HOTKEYS from '../constants/hotkeys'
import Content from '../components/content'
@@ -362,17 +363,20 @@ function AfterPlugin() {
const { value } = change
- if (HOTKEYS.SPLIT_BLOCK(event)) {
+ // COMPAT: In iOS, some of these hotkeys are handled in the
+ // `onNativeBeforeInput` handler of the `` component in order to
+ // preserve native autocorrect behavior, so they shouldn't be handled here.
+ if (HOTKEYS.SPLIT_BLOCK(event) && !IS_IOS) {
return value.isInVoid
? change.collapseToStartOfNextText()
: change.splitBlock()
}
- if (HOTKEYS.DELETE_CHAR_BACKWARD(event)) {
+ if (HOTKEYS.DELETE_CHAR_BACKWARD(event) && !IS_IOS) {
return change.deleteCharBackward()
}
- if (HOTKEYS.DELETE_CHAR_FORWARD(event)) {
+ if (HOTKEYS.DELETE_CHAR_FORWARD(event) && !IS_IOS) {
return change.deleteCharForward()
}