All notable changes to this project will be documented in this file.
0.51.1 - February 9, 2020
- default-document-editor. Create
BorderlessOverlayButton
statically
0.51.0 - February 5, 2020
- renderer. The renderer doesn't accept a store enhancer anymore
- plugin-sc-mc-exercise. Resolve focus issues
- plugin-text. Resolve focus issues
- plugin-text. Provide our own types for slate, slate-html-serializer and slate-react
- renderer. Provide specialized store for the renderer
0.50.0 - January 27, 2020
This release cleans up the plugin states for the soon-ish 1.0.0 release. Note that this contains breaking changes in the serialized states so you'll need to migrate any persisted Edtr.io states. As far as we know, this concerns only Serlo so far. Please get in touch if this affects you, too, and we gladly help with migrating.
-
plugin-equations. Remove
@edtr-io/plugin-equations
. We'll experiment with that plugin at Serlo and might publish it as an Edtr.io plugin in the future again. -
plugin-files. Breaking change in serialized state:
- Rename
location
tosrc
- Rename
-
plugin-highlight. Breaking changes in serialized state:
- Rename
text
tocode
- Rename
lineNumbers
toshowLineNumbers
- Rename
-
plugin-hint. Remove
@edtr-io/plugin-hint
. Please build your own domain-specific plugins usingExpandableBox
in@edtr-io/renderer-ui
. -
plugin-image. Breaking changes in serialized state:
- Combine
href
,target
andrel
into the new optional objectlink
with propertieshref
andopenInNewTab
- Rename
description
toalt
and made it optional - Make
maxWidth
optional
- Combine
-
plugin-important-statement. Remove
@edtr-io/plugin-important-statement
-
plugin-input-exercise. Breaking change in serialized state:'
- Remove migratable, i.e. accept only the latest state
-
plugin-sc-mc-exercise. Breaking change in serialized state:
- Rename
id
tocontent
- Remove
hasFeedback
- Rename
-
plugin-solution. Remove
@edtr-io/plugin-solution
. Please build your own domain-specific plugins usingExpandableBox
in@edtr-io/renderer-ui
. -
plugin-text. Breaking change in serialized state:
- Use slate 0.50+ state for serialization so that we can upgrade to slate 0.50+ after releasing 1.0.0 in a non-breaking way. You can use the newly exported
serializer.serialize
to migrate old slate states.
- Use slate 0.50+ state for serialization so that we can upgrade to slate 0.50+ after releasing 1.0.0 in a non-breaking way. You can use the newly exported
-
plugin-video. Breaking changes in serialized state:
- Remove migratable, i.e. accept only the latest state
- plugin. Add new state type
optional
to work with optional values.
0.14.0 - January 23, 2020
- Plugins no longer receive
insert
,remove
,replace
,mergeWithPrevious
,mergeWithNext
via plugin props. Please use the new actions and selectors instead. If you wrote a plugin that provided those, implement the newinsertChild
andremoveChild
. - Plugins no longer receive their parents' plugin props. Please use the store instead if you need to access your parents somehow.
- Plugins no longer receive their name. Please get your document from the store if you really need that
- For consistency, plugins receive the
StateTypeReturnType
in the optionalisEmpty
instead of theirStateTypeValueType
- plugin. State types no longer receive the plugin props. This was only used by
child
anyways to handle the parents' plugin props. - plugin-text. The blockquote controls will only be shown if the type of the blockquote plugin is provided via plugin config.
- store. Add
wrap
andunwrap
actions - store. Add
replace
action - store. Add
insertChildAfter
,insertChildBefore
andremoveChild
actions - store. Add
getParent
selector - store. Add
mayInsertChild
andmayRemoveChild
selector
- store. When undoing resp. redoing, replace the state only once
0.13.7 - January 20, 2020
- plugin-rows. Fix drag and drop in Chrome
0.13.6 - January 15, 2020
- plugin-rows. Improve drag and drop, handle drag and drop between multiple documents correctly
0.13.5 - January 14, 2020
- Various improvements & fixes in the TypeScript declaration files
0.13.4 - January 14, 2020
- Accept the newly released styled-components v5 additionally to v4 as peer dependency
0.13.3 - January 13, 2020
- plugin-highlight. Fix server-side rendering
0.13.2 - January 7, 2020
- core. Show toolbar if
renderIntoToolbar
was called
0.13.1 - January 4, 2020
- Plugins receive new prop
renderIntoToolbar
to render toolbar buttons
- store.
serializeDocument
no longer returns a new object in every call
0.13.0 - December 20, 2019
-
All core plugins now consistently export
createFooPlugin()
,FooState
andFooProps
. The factorycreateFooPlugin()
accepts a (sometimes optional) config depending on the plugin. -
Plugins now receive their config via a new prop
config
. Furthermore, they need to specify their config in their definition. -
Packages that are only intended for internal use are now consistently named
@edtr-io/internal__${name}
. We don't consider these packages as part of the public API and therefore won't note their potential breaking changes in the future. More specifically, this means that the following packages have been removed:@edtr-io/abstract-plugin
,@edtr-io/abstract-plugin-state
@edtr-io/bundle-size
,@edtr-io/demo
,@edtr-io/fixtures
-
Plugins no longer receive the prop
renderIntoExtendedSettings
(that was only passed down to direct children of the rows plugin). Instead, please use the new proprenderIntoSettings
that now all documents receive. -
core, plugin-rows. We now have a peer dependency on
react-dnd@^10.0.0
andreact-dnd-html5-backend@^10.0.0
(both^7.0.0
previously) -
core. Removed
OverlayContext
andOverlayContextValue
. -
editor-ui. Moved
OverlayButton
,OverlayCheckbox
,OverlayInput
,OverlaySelect
,OverlayTextarea
into@edtr-io/core
-
editor-ui. Moved icons into
@edtr-io/ui
-
editor-ui. Removed
SettingsOverlay
-
plugin Removed
StatelessPlugin
,StatefulPlugin
,StatelessPluginProps
,StatefulPluginProps
. UseEditorPlugin
andEditorPluginProps
instead -
ui. Removed
OverlayTheme
-
ui. Removed
plugins
fromCustomTheme
. Instead, all core plugins that allowed to customize their theme now accept the theme via their config.
-
There are now more parts of the editor's UI configurable. More specifically, we moved the following components in the core:
-
Plugin Toolbar. The plugin toolbar is responsible for rendering the buttons that are shown on the left of focused documents by default. Furthermore, it is responsible for rendering any overlays that the toolbar buttons might open (e.g. the plugin settings). Plugins may override the toolbars of their children (e.g. the rows plugin adds a drag handler) and their settings (e.g. the rows plugin adds a delete and copy button to the settings of its children).
You may override the looks of the plugin toolbar completely by passing your own implementation as the new optional prop
PluginToolbar
toEditor
. By default we use@edtr-io/default-plugin-toolbar
. -
Document Editor. The document editor is responsible for rendering the plugin toolbar and possible additional editor UI elements that are application-specific.
You may override the default behavior completely by passing your own
DocumentEditor
toEditor
. By default, we use@edtr-io/default-document-editor
-
-
core. Added
PluginToolbarButton,
PluginToolbarOverlayButtonthat are intended to be passed by plugins into
renderToolbar` -
core. Added selectors
getFocused
,isFocused
-
plugin. The change handler of state types allows to pass an optional second argument that allows state types to handle asynchronous state updates that should be committed only once
-
ui. Added
BottomToolbarTheme
toEditorUiTheme
-
plugin-multimedia-explanation. New plugin that allows to position multimedia content (e.g. images, video) beside the content
-
plugin-text. Deserialize pasted HTML into corresponding text state if possible
-
plugin-text. Automatically transform urls into links
-
plugin-text. Add protocol
https
to urls without protocol
- editor-ui. Position
PreviewOverlay
over content - plugin-text. Correctly render colored text on server
- core. Improved undo/redo behavior for asynchronous changes (e.g. file uploads)
0.12.0 - October 14, 2019
- renderer-ui. Removed
title
prop inExpandableBox
. Use the newrenderTitle
prop instead.
- editor-ui. Add new component
OverlaySelect
- plugin. Add prop
defaultFocusRef
for plugins that should be passed asref
to the input element that should be focused initially when the plugin gets focused - plugin-video. Add alt text
- plugin-input-exercise. Add units to input exercises
- plugin-text. Heading button opens sub menu even when the block is already a heading
- plugin-text. Focus empty LaTeX textarea on mount initially
- renderer-ui. Open
ExpandableBox
initially
- plugin-hint. Remove title
- plugin-solution. Remove title
- core. Hot keys handler considers the correct state for deleting empty plugins
- core. Fix focus movement with arrow keys
- plugin-rows. Make extended settings scrollable
- plugin-serlo-injection. Automatically resize iframe when content or window height changes
- plugin-serlo-injection. Reduce content jumps by lazily loading iframes
0.11.3 - September 27, 2019
- plugin-input-exercise. Use
migratable
in state for backwards compatibility with pre v0.11.2 state - plugin-sc-mc-exercise. Fixed server side rendering
- plugin-text. Fixed server side rendering
- renderer-ssr. Tests now test for correct results additionally to working server side rendering.
0.11.2 - September 26, 2019
- plugin-input-exercise. Changed state and ui to be more consistent with
plugin-sc-mc-exercise
- core.
onChange
callback prop ofEditor
is now working again - plugin-text. Updated slate types to newest version 0.47.1.
- plugin-text. Fix suggestions for inserting plugins after typing
/
.
0.11.1 - September 18, 2019
- core. Documents no longer lose focus during editing
0.11.0 - September 16, 2019
- plugin. Refactored
StateType
API. This should only affect you if you defined custom state types. - plugin. Consistently renamed
StateDescriptor*
types toStateType*
- plugin.
StatelessPluginEditorProps
andPluginEditorProps
no longer accept the type paramProps
. ReplaceStatelessPluginEditorProps<Props>
withStatelessPluginEditorProps & Props
. - plugin.
StatelessPlugin
may no longer definegetFocusableChildren
. This is handled by state types instead. - plugin. The return type of the built-in
child
state type is no longer callable. Replacestate()
withstate.get()
orstate.id
to retrieve theid
. - plugin. The return type of the built-in
list
state type is no longer callable and doesn't exposeitems
anymore. Instead, the return types behaves like an array itself. Replacestate()
resp.state.items
withstate
. - plugin. The return type of the built-in
object
state type is no longer callable. Replacestate()
withstate
. - plugin. The return type of the built-in scalar state types (i.e.
boolean
,number
,string
,scalar
,serializedScalar
) is no longer callable. Replacestate()
withstate.get()
orstate.value
. - plugin. The return type of the built-in
upload
state type is no longer callable. Replacestate()
withstate.get()
orstate.value
.
- plugin. The return type of the built-in scalar state types (i.e.
boolean
,number
,string
,scalar
,serializedScalar
) now allows to set the value. Instead ofstate.set("foo")
, you may now also usestate.value = "foo"
. - store. Add new selector
hasFocusedChild
that checks whether the given document has any (direct) child that is focused - store. Add new selector
hasFocusedDescendant
that checks whether the given document has any descendant that is focused (i.e. also recursively checks children of children)
0.10.3 - September 13, 2019
- plugin-text. Various fixes (updated Slate)
0.10.2 - September 11, 2019
- store. Specify return type of
serializeRootDocument
0.10.1 - September 11, 2019
- plugin-image. Show upload status of images
- plugin-image. Better error messages
- plugin-rows. Improved performance
- plugin-text. Improved performance
- plugin-text. Improved math formulas (e.g. better error messages, responsive block formulas)
- editor-ui. Fix background color in default editor theme
- plugin-text. Split on enter now works also when there is a list in the same block.
0.10.0 - September 7, 2019
-
core Moved
actions
andselectors
to the new package@edtr-io/store
:// before import { actions, selectors } from '@edtr-io/core' console.log(actions.undo, selectors.getDocument) // now import { undo, getDocument } from '@edtr-io/store' console.log(undo, getDocument)
-
core. Moved
Plugin
,StatefulPluginEditorProps
,StatelessPluginEditorProps
,StatefulPlugin
,StatelessPlugin
andStateType
to the new package@edtr-io/plugin
:// before import { StateType, StatefulPluginEditorProps } from '@edtr-io/core' const state = StateType.string() // now import { string, StatefulPluginEditorProps } from '@edtr-io/plugin' const state = string()
-
core. Removed
connect
,connectDispatchOnly
andconnectStateOnly
. Instead, we now export hooksuseDispatch
,useSelector
anduseStore
(with scoped counterpartsuseScopedDispatch
,useScopedSelector
anduseScopedStore
) -
core. Removed
useEditorFocus
anduseEditorHistory
since they can easily be replicated with the newuseScopedDispatch
anduseScopedSelector
hooks -
core. Moved all store exports (e.g.
createStore
) to the new package@edtr-io/store
- plugin. Published new package
@edtr-io/plugin
intended to be used by plugin authors. It exposesPlugin
,PluginEditorProps
,StatelessPluginEditorProps
,StatefulPlugin
,StatelessPlugin
and (flatly) everything that was previously exported asStateType
. - store. Published new package
@edtr-io/store
. It (flatly) exposes actions and selectors, and all previous store exports that are mostly for special use cases.
-
store. The signatures of selectors have been unified. Every selector is now a function (with any number of parameters) and returns a function that accepts the scoped state (and returns any type of return value):
import { getDocument, getPlugin, getRoot } from '@edtr-io/store' useScopedSelector(getRoot()) useScopedSelector(getDocument('some-id')) useScopedSelector(state => { const document = /* do something */ null return document && getPlugin(document.plugin)(state) })```
-
editor-ui. Doesn't have to be a
peerDependency
anymore -
renderer-ui. Doesn't have to be a
peerDependency
anymore -
ui. Doesn't have to be a
peerDependency
anymore
0.9.7 - September 6, 2019
Redeployment of previous release since some types weren't published correctly.
0.9.6 - September 6, 2019
- plugin-text. Remember math mode preference (visual vs. LaTeX)
- core. Improve performance
0.9.5 - September 4, 2019
- plugin-sc-mc-exercise. Make preview overlay not editable
- plugin-table. Allow overriding of markdown renderer via newly exported
createTablePlugin
0.9.4 - August 30, 2019
- core. Editor is now able to recover from errors. If any error is thrown in the subtree, the respective
<Document />
offers users to undo their last change. Furthermore,<Editor />
now accepts an optionalonError
prop that gets called with the thrown error. - plugin-rows. Open plugin menu only when the respective button got clicked (instead of making the whole row clickable)
- plugin-sc-mc-exercise. Display a preview in edit mode and simplify focusing of exercises.
0.9.3 - August 29, 2019
- plugin-table. Add placeholder for empty tables
- plugin-text. Fixed persisting of math formulas
0.9.2 - August 25, 2019
- plugin-text. Make available plugins customizable via new export
createTextPlugin
- plugin-rows. Make available plugins customizable via new export
createRowsPlugin
0.9.1 - August 24, 2019
Redeployment of previous release since some types weren't published correctly.
0.9.0 - August 24, 2019
- core.
createStore
has a new required optioncreateStoreEnhancer
. Our high-level API (e.g.<Editor />
,<EditorProvider />
and<Renderer />
) handle that change in a non-breaking way, though.
- core. Expose
getUndoStack
andgetRedoStack
selectors
- core. Store no longer applies enhancers used for testing or development purposes. Instead,
<Editor />
,<EditorProvider />
and<Renderer />
provide a new optional propcreateStoreEnhancer
that allows to extend the store enhancer used. Our previous enhancer for development is published as a new package@edtr-io/store-devtools
(e.g. used in our demo).
0.8.3 - August 22, 2019
- plugin-equations. Heavily simplified for first release
- plugin-sc-mc-exercise. Complete redesign
- plugin-highlight. Handle arrow keys and enter within textarea
- plugin-rows. Show add button when no children exist
- plugin-table. Handle arrow keys and enter within textarea
0.8.2 - August 14, 2019
- Various naming improvements
- Various small UX improvements
- Add missing dependencies in various packages
- core. Review public API. For example,
useScopedStore
is now correctly part of the public API.
- Enable eslint rules to enforce consistency in our import statements (automatically fixable with
yarn format
) - Enable eslint rules that warn for common errors in imports (e.g. missing dependencies, ...)
0.8.1 - August 9, 2019
- core. Fix
StateType.upload
- core. Export
MigratableStateDescriptor
- plugin-rows. Add menu doesn't jump to the top of the root document anymore
0.8.0 - August 1, 2019
- When using the newly exposed
<Renderer />
,defaultPlugin
is no longer set to an actual plugin. So you should only rely ondefaultPlugin
in an editable environment (e.g. to decide which plugin to insert by default) and only pass complete serialized Edtr.io documents to<Renderer />
. - plugin-text. We no longer import KaTeX's stylesheet to not depend on a CSS-capable bundler. Please include the stylesheet yourself.
- renderer. Expose
<Renderer />
that renders a Edtr.io document with the given plugins with React. We plan to optimize its bundle size to minimize loading times for use cases where no editor is needed. Also, we plan to provide smaller renderer bundles for some of our plugins (e.g. text plugin) - renderer-ssr. Expose
render
that server-side renders a Edtr.io document with the given plugins and returns{ styles, html }
. - plugin-text. Add possibility to write inline-code via CTRL+Q
- plugin-text. Make plugin capable to be rendered server-side
- plugin-important-statement. Actually build the plugin before publishing
- Tests in
__tests-ssr__
folders are executednode
environment to test SSR (in contrast to tests in__tests__
folders that are executed in a browser-like environment)
0.7.1 - July 21, 2019
- core. Add
StateType.migratable
that allows to update plugin state structure without breaking changes - plugin-important-statement. Plugin that highlights important statements.
- plugin-serlo-injection. Add plugin for injecting serlo.org content
- plugin-table. Add plugin for markdown tables
- Optimize bundle size
- plugin-rows. add-button is now always visible under the focused document
- plugin-text. Split plugin when pasting multiple blocks
0.7.0 - July 6, 2019
- core. The state exposed in
EditorContext
introduces an additional layer to support multiple editor instances. Use theuseStore
helper instead to get the{ store: { getState() }, dispatch }
of the scoped document. - core.
EditorContext
now exposes{ store: { getState() }, dispatch }
instead of{ state, dispatch }
. Therefore, we also removed theEditorContextValue
type export - core. Removed
ActionType
export. Use the exported public action creatorsactions
instead - core. Removed export `ActionCommitType
- core. Renamed type
PluginState
toDocumentState
- core. Selectors aren't exported directly anymore. Instead use the new
selectors
export. - core.
selectors.serializeRootDocument
replaces the previousserializeDocument
(selectors.serializeDocument
can be used to serialize a non-root document) - core.
Editor
doesn't accept changed anymore. Instead, the optional proponChange
get's called with{ changed: boolean, document: DocumentState | null }
wherechanged
indicates whether there are pending changes anddocument
is the serialized root document. - core. Removed previous exports
Document
andDocumentProps
- core.
onChange
callback now accepts{ changed, getDocument() }
to avoid serializing the document if not needed - plugin-h5p. Removed
@edtr-io/plugin-hp5
- plugin-image. Changed configs for createImagePlugin and removed Upload export
- plugin-rows. Deprecated PrimarySettingsWrapper now removed. Use PrimarySettings from package editor-ui instead.
- core. To connect to the store, you can either use the exposed
useStore
or our newly exposedconnect
andconnectStateOnly
. If you want to connect to all editor instances useEditorContext
(e.g. withReact.useContext
) - core. Exposes a new Component
Document
that has to be rendered into anEditorProvider
. In contrast toEditor
, it accepts an additional propscope
and is not editable by default. Documents sharing the same scope use the same store state.
- Various performance improvements
- core. The exposed hooks now optionally accept the scope. If it is not provided, it uses the scope of the parent
Editor
- plugin-h5p. Since our
serlo.h5p.com
trial expired, we don't publish@edtr-io/h5p-plugin
anymore
- core. Various fixes to history handling (e.g. resetting to the last persisted state after undoing the last change)
- plugin-text. Fix positioning of text controls on touch devices
- core. Use
redux
&redux-saga
instead ofReact.useReducer
. Since we are passing our own context toredux
, you can still useredux
in your own application. The store should be considered as an implementation detail - core. Replace
uuid
withshortid
0.6.2 - June 19, 2019
- editor-ui. Add component PrimarySettings. Use this to wrap Settings displayed directly in page for common styling.
- plugin-rows. PrimarySettingsWrapper from props passed to children is now deprecated, use PrimarySettings from editor-ui instead.
- plugin-image. Do not lose focus in PrimarySettings
- plugin-image. Display Placeholder on empty image
0.6.1 - June 13, 2019
- plugin-image. Changed configs for createImagePlugin and removed Upload export
- core. Added StateType upload for file uploading.
0.6.0 - May 22, 2019
- core. Requires additional peer-dependencies
react-dnd@^7.0.0
andreact-dnd-html5-backend@^7.0.0
- core. Editor accepts a new boolean prop
omitDragDropContext
. If set totrue
, the editor won't renderreact-dnd
'sDragDropContextProvider
- plugin-files. Add plugin for file uploads
- plugin-rows. Pass
renderIntoExtendedSettings
andPrimarySettings
as props to children - plugin-text. Poweruser-Feature: Add new plugins with /[plugintitle] in editmode
- plugin-rows. Adapt styles and controls implemented by schul-cloud, including drag&drop
- plugin-rows. Add full color theming support
- plugin-text. Fix key conflicts of merge and remove on backspace (#123)
- plugin-spoiler, plugin-solution, plugin-hint, plugin-equations. Make children traversable
0.5.0 - May 9, 2019
- core. Mark
name
as required inStatelessEditorProps
- plugin-image. Image-plugin has new required
maxWidth
- state property - ui. Theming is handled differently. We now differentiate between editor ui elements, renderer ui elements and plugins. Furthermore, we now use a different (but more consistent) naming scheme.
- ui. Moved editor ui elements (e.g.
Button
,SettingsOverlay
) to the new package@edtr-io/editor-ui
. - ui. Moved renderer ui elements (e.g.
ExpandableBox
) to the new package@edtr-io/renderer-ui
- plugin-h5p. Add H5p.com plugin
- plugin-image. Add MaxWidth for images
- plugin-rows. Added more theming options
- core. Added
isEmpty(state: State, id: string)
to check if a plugin state is empty - core. Added optional function
isEmpty: (state: StateDescriptorValueType<S>) => boolean
to plugin definition - plugin-text. Added visual latex editor
- plugin-text. Added headings plugin
- plugin-text. Added list plugin
- plugin-text. Added colors plugin
- plugin-text. Added button to wrap in a blockquote plugin
- plugin-rows. Pass
remove
andreplace
functions to childs - all. Added plugin icons and descriptions
- plugin-text. Added Markdownshortcuts for Lists, Headings and Blockquotes.
- core. Pass plugin props and name of parents to childs too
- plugin-text. Leave nested Text-Plugins on second Enter key press
- plugin-text. Hide placeholder in render mode
- plugin-text. Hovering Menu for text formatting
- plugin-text. Styling of inline-overlay improved
- ui / editor-ui / renderer-ui. Revised theming workflow
- ui. reworked the ui of several plugins (image, video, anchor, geogebra, h5p, highlight, hint, solution and spoiler)
- plugin-rows. Improved styling of add menu and controls
- core. Add new text plugin on Enter and delete empty plugins on backspace and delete
- plugin-image. Hide config-overlay in render mode
- demo. Log errors only
- demo. Add additional examples for plugin-usage in Storybook
0.4.3 - March 29, 2019
- ui. Add
ContainerWithConfigButton
component for opening the Settings Overlay. - plugin-geogebra. Use ContainerWithConfigButton
- plugin-equations. Add plugin for aligned equations
- plugin-hint. Add plugin for hints
- plugin-image. Use ContainerWithConfigButton
- plugin-input-exercise. Add plugin for input exercises
- plugin-sc-mc-exercise. Add plugin for single-choice & multiple-choice exercises
- plugin-solution. Add plugin for solutions
- plugin-video. Use ContainerWithConfigButton
- plugin-text. Merge with previous / next text plugin on backspace / delete when at start / end of plugin
- plugin-geogebra. Scale applet with container size preserving aspect ratio
- plugin-geogebra. Accept full GeoGebra material link too
- plugin-image. Center image
- plugin-text. Display Link-Overlay only when plugin is focused
- plugin-text. Refocus after bold/italic button click
0.4.2 - March 25, 2019
- core.
Editor
now additionally accepts a render callback aschildren
prop - core. Added
useEditorFocus
,useEditorHistory
,useEditorMode
custom React hooks to simplify the building of a custom ui - core. Added
Reset
action that resets the current editor state to the last persisted value - core. Handle focus for all documents
- core. Added optional
onKeyDown
callback to plugins which allows plugins to cancel the default editor keydown handlers - demo. Added containers to demo storybook. Initially, we have a "plain" container (equivalent to the previosly existing demo) and a "Serlo" container (mocking integration into serlo.org. You can select your preferred container in the storybook's addon panel on the right.
- core. Added
name
prop to plugins - ui. Added Checkbox, Button and Textarea components for overlay
- plugin-image. Added
onPaste
handler accepting jpg, png, bmp, gif, svg - plugin-video. Added video plugin
- core. Handle focus in nested documents correctly
- plugin-rows. Align top and bottom add butons correctly in custom integrations
- plugin-text. Disable slate undo/redo
- plugin-text. Refocus after undo/redo
- demo. Plugins available to the demo storybook are now defined in
demo/src/plugins.tsx
- demo. Added
build-demo
task that builds the demo storybook (and deploys it automatically to Netlify). The demo of the master branch is available on https://demo.edtr.io - demo. Brand the demo storybook
0.4.1 - March 22, 2019
- Use Theming in toolbars and menus.
0.4.0 - March 21, 2019
- Moved rows plugin from
@edtr-io/ui
to@edtr-io/plugin-rows
- Replaced
showOverlay
andhideOverlay
with anOverlayContext
- Added
InlineOverlay
component for plugin controls - Added focus previous / focus next actions
- Added optional
getFocusableChildren
to stateful plugins, which is used to resolve the previous / next focusable child
- plugin-text. Handle focus when using arrow keys
- plugin-text. Focus / blur slate depending on
props.focused
0.3.2 - March 14, 2019
- Added Image plugin
- Added
editable
prop toEditor
for switching between edit and render mode - Added optional
onPaste
callback to plugins, which is called by the text plugin on paste event
0.3.1 - March 13, 2019
- Add move Up/Down functionality to Rows plugin
- Add clipboard to rows plugin add-menu
- Add Cut / Copy actions to Rows plugin
- GeoGebra plugin
- plugin-spoiler. Remove input element in render mode
- Settings Overlay now closes with click outside of the modal
- plugin-text. Don't dispatch selection changes anymore
0.3.0 - March 8, 2019
- Removed
DocumentIdentifier
. You should pass the state to<Editor />
instead - Removed
state
prop fromDocument
. You should pass only the id asid
prop instead. - Removed
value
property fromStateType.object
. The values are now exposed directly on[key]
.
- Added a menu for selecting a plugin on insert to rows plugin
- State Descriptors uniformly return their value/items/object by invoking the state.
- Only trigger
changed
if the number of pending changes changed
0.2.1 - February 28, 2019
- Added Rich-Text plugin
- Added Anchor plugin
- Added Blockquote plugin
- Added Code Highlight plugin
- Added Spoiler Plugin
- Added Undo and Redo to reducer
- Added Persist to reducer
- Added
changed
callback to Editor. The callback is called on every Action passing a boolean if the content changed since the lastPersistAction
was dispatched.
0.2.0 - February 18, 2019
- The newly added
<Editor />
replaces the removed<EditorProvider />
. It sets up theEditorContext
and renders an editor for the givenstate
. - Don't export API that isn't intended for external usage anymore.
- Rename
createDocumentIdentifier
tocreateDocument
- Remove
StatefulPlugin.createInitialState
in favor ofStatefulPlugin.state
- Plugins no longer receive
onChange
. Use the provided setters & helpers onstate
instead
- Handle serialization and deserialization of documents
- Add
<Editor />
that replaces<EditorProvider />
- Add
StateType.scalar
that represents a value of the given type (more specifically:StateType.boolean
,StateType.number
,StateType.child
- Add
StateType.list
,State.object
- Add slate for rich text and links. Standard Bold + Italic hotkeys supported.
- Rename
createDocumentIdentifier
tocreateDocument
- Remove
<EditorProvider />
in favor of<Editor />
0.1.0 - February 8, 2019
Initial release