* first stab at removing leaves with tests passing
* fixes
* add iterables to the element interface
* use iterables in more places
* update examples to use iterables
* update naming
* fix tests
* convert more key-based logic to paths
* add range support to iterables
* refactor many methods to use iterables, deprecate cruft
* clean up existing iterables
* more cleanup
* more cleaning
* fix word count example
* work
* split decoration and annotations
* update examples for `renderNode` useage
* deprecate old DOM-based helpers, update examples
* make formats first class, refactor leaf rendering
* fix examples, fix isAtomic checking
* deprecate leaf model
* convert Text and Leaf to functional components
* fix lint and tests
* Add `defaultValue` prop to `Editor` component
* Use `defaultValue` prop in the `Read Only` example
* Use `defaultValue` prop in the `Check Lists` example
* Use `defaultValue` prop in the `Code Highlighting` example
* Use `defaultValue` prop in the `Embeds` example
* Use `defaultValue` prop in the `Emojis` example
* Use `defaultValue` prop in the `Forced Layout` example
* Use `defaultValue` prop in the `Huge Document` example
* Use `defaultValue` prop in the `Images` example
* Use `defaultValue` prop in the `Input Tester` example
* Use `defaultValue` prop in the `Markdown Preview` example
* Use `defaultValue` prop in the `Markdown Shortcuts` example
* Use `defaultValue` prop in the `Paste HTML` example
* Use `defaultValue` prop in the `Plain Text` example
* Use `defaultValue` prop in the `Plugins` example
* Use `defaultValue` prop in the `RTL` example
* Use `defaultValue` prop in the `Search Highlighting` example
* Use `defaultValue` prop in the `Tables` example
#### Is this adding or improving a _feature_ or fixing a _bug_?
Improvement / debt.
#### What's the new behavior?
This pull request removes the `Change` object as we know it, and folds all of its behaviors into the new `Editor` controller instead, simplifying a lot of the confusion around what is a "change vs. editor" and when to use which. It makes the standard API a **lot** nicer to use I think.
---
###### NEW
**The `editor.command` and `editor.query` methods can take functions.** Previously they only accepted a `type` string and would look up the command or query by type. Now, they also accept a custom function. This is helpful for plugin authors, who want to accept a "command option", since it gives users more flexibility to write one-off commands or queries. For example a plugin could be passed either:
```js
Hotkey({
hotkey: 'cmd+b',
command: 'addBoldMark',
})
```
Or a custom command function:
```js
Hotkey({
hotkey: 'cmd+b',
command: editor => editor.addBoldMark().moveToEnd()
})
```
###### BREAKING
**The `Change` object has been removed.** The `Change` object as we know it previously has been removed, and all of its behaviors have been folded into the `Editor` controller. This includes the top-level commands and queries methods, as well as methods like `applyOperation` and `normalize`. _All places that used to receive `change` now receive `editor`, which is API equivalent._
**Changes are now flushed to `onChange` asynchronously.** Previously this was done synchronously, which resulted in some strange race conditions in React environments. Now they will always be flushed asynchronously, just like `setState`.
**The `render*` and `decorate*` middleware signatures have changed!** Previously the `render*` and `decorate*` middleware was passed `(props, next)`. However now, for consistency with the other middleware they are all passed `(props, editor, next)`. This way, all middleware always receive `editor` and `next` as their final two arguments.
**The `normalize*` and `validate*` middleware signatures have changed!** Previously the `normalize*` and `validate*` middleware was passed `(node, next)`. However now, for consistency with the other middleware they are all passed `(node, editor, next)`. This way, all middleware always receive `editor` and `next` as their final two arguments.
**The `editor.event` method has been removed.** Previously this is what you'd use when writing tests to simulate events being fired—which were slightly different to other running other middleware. With the simplification to the editor and to the newly-consistent middleware signatures, you can now use `editor.run` directly to simulate events:
```js
editor.run('onKeyDown', { key: 'Tab', ... })
```
###### DEPRECATED
**The `editor.change` method is deprecated.** With the removal of the `Change` object, there's no need anymore to create the small closures with `editor.change()`. Instead you can directly invoke commands on the editor in series, and all of the changes will be emitted asynchronously on the next tick.
```js
editor
.insertText('word')
.moveFocusForward(10)
.addMark('bold')
```
**The `applyOperations` method is deprecated.** Instead you can loop a set of operations and apply each one using `applyOperation`. This is to reduce the number of methods exposed on the `Editor` to keep it simpler.
**The `change.call` method is deprecated.** Previously this was used to call a one-off function as a change method. Now this behavior is equivalent to calling `editor.command(fn)` instead.
---
Fixes: https://github.com/ianstormtaylor/slate/issues/2334
Fixes: https://github.com/ianstormtaylor/slate/issues/2282
* Fix bolded text in input-tester initial value
* Fix crash on Input Tester example with certain input events
If an Input event with inputType "insertReplacementText" is received, the example crashes because "event.dataTransfer.get is not a function"
The correct API is `getData()`, not `get()`.
Ref: https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/getData
* Revert "Fix bolded text in input-tester initial value"
This reverts commit 82e1213be39a9f19c837ff3d28c4c025035d595b.
* Revert "Revert "Fix bolded text in input-tester initial value""
This reverts commit b5a0a2440f388f741222574974cf5fd2ff454a91.
* fold Stack into Editor
* switch Change objects to be tied to editors, not values
* introduce controller
* add the "commands" concept
* convert history into commands on `value.data`
* add the ability to not normalize on editor creation/setting
* convert schema to a mutable constructor
* add editor.command method
* convert plugin handlers to receive `next`
* switch commands to use the onCommand middleware
* add queries support, convert schema to queries
* split out browser plugin
* remove noop util
* fixes
* fixes
* start fixing tests, refactor hyperscript to be more literal
* fix slate-html-serializer tests
* fix schema tests with hyperscript
* fix text model tests with hyperscript
* fix more tests
* get all tests passing
* fix lint
* undo decorations example update
* update examples
* small changes to the api to make it nicer
* update docs
* update commands/queries plugin logic
* change normalizeNode and validateNode to be middleware
* fix decoration removal
* rename commands tests
* add useful errors to existing APIs
* update changelogs
* cleanup
* fixes
* update docs
* add editor docs
#### Is this adding or improving a _feature_ or fixing a _bug_?
Example.
#### What's the new behavior?
Adds a new example that is an input event logger, for more easily seeing which input/keyboard/selection events are firing when editing in a Slate editor.

#### Have you checked that...?
* [x] The new code matches the existing patterns and styles.
* [x] The tests pass with `yarn test`.
* [x] The linter passes with `yarn lint`. (Fix errors with `yarn prettier`.)
* [x] The relevant examples still work. (Run examples with `yarn watch`.)