8
0
Просмотр исходного кода

Merge branch 't/1447' into stable

Docs: New guide and example of multi-root editor.
Piotrek Koszuliński 6 лет назад
Родитель
Сommit
d20f4389e0

+ 37 - 0
docs/_snippets/examples/multi-root-editor.html

@@ -0,0 +1,37 @@
+<div id="snippet-inline-editor">
+	<div id="toolbar"></div>
+
+	<header id="header">
+		<h2>Gone traveling</h2>
+		<h3>Monthly travel news and inspiration</h3>
+	</header>
+
+	<div id="content">
+		<h3>Destination of the Month</h3>
+
+		<h4>Valletta</h4>
+
+		<figure class="image image-style-align-right">
+			<img alt="Picture of a sunlit facade of a Maltan building." src="%BASE_PATH%/assets/img/malta.jpg">
+			<figcaption>It's siesta time in Valletta.</figcaption>
+		</figure>
+
+		<p>The capital city of <a href="https://en.wikipedia.org/wiki/Malta" target="_blank" rel="external">Malta</a> is the top destination this summer. It’s home to a cutting-edge contemporary architecture, baroque masterpieces, delicious local cuisine and at least 8 months of sun. It’s also a top destination for filmmakers, so you can take a tour through locations familiar to you from Game of Thrones, Gladiator, Troy and many more.</p>
+	</div>
+
+	<div class="demo-row">
+		<div class="demo-row__half">
+			<div id="footer-left">
+				<h3>The three greatest things you learn from traveling</h3>
+				<p><a href="#">Find out more</a></p>
+			</div>
+		</div>
+
+		<div class="demo-row__half">
+			<div id="footer-right">
+				<h3>Walking the capitals of Europe: Warsaw</h3>
+				<p><a href="#">Find out more</a></p>
+			</div>
+		</div>
+	</div>
+</div>

+ 378 - 0
docs/_snippets/examples/multi-root-editor.js

@@ -0,0 +1,378 @@
+/**
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+
+/* globals console:false, document, window */
+
+// Multiroot editor dependencies.
+import Editor from '@ckeditor/ckeditor5-core/src/editor/editor';
+import DataApiMixin from '@ckeditor/ckeditor5-core/src/editor/utils/dataapimixin';
+import HtmlDataProcessor from '@ckeditor/ckeditor5-engine/src/dataprocessor/htmldataprocessor';
+import getDataFromElement from '@ckeditor/ckeditor5-utils/src/dom/getdatafromelement';
+import setDataInElement from '@ckeditor/ckeditor5-utils/src/dom/setdatainelement';
+import mix from '@ckeditor/ckeditor5-utils/src/mix';
+import EditorUI from '@ckeditor/ckeditor5-core/src/editor/editorui';
+import enableToolbarKeyboardFocus from '@ckeditor/ckeditor5-ui/src/toolbar/enabletoolbarkeyboardfocus';
+import normalizeToolbarConfig from '@ckeditor/ckeditor5-ui/src/toolbar/normalizetoolbarconfig';
+import { enablePlaceholder } from '@ckeditor/ckeditor5-engine/src/view/placeholder';
+import EditorUIView from '@ckeditor/ckeditor5-ui/src/editorui/editoruiview';
+import InlineEditableUIView from '@ckeditor/ckeditor5-ui/src/editableui/inline/inlineeditableuiview';
+import ToolbarView from '@ckeditor/ckeditor5-ui/src/toolbar/toolbarview';
+import Template from '@ckeditor/ckeditor5-ui/src/template';
+
+// Editor sample dependencies.
+import Essentials from '@ckeditor/ckeditor5-essentials/src/essentials';
+import Heading from '@ckeditor/ckeditor5-heading/src/heading';
+import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
+import Bold from '@ckeditor/ckeditor5-basic-styles/src/bold';
+import Italic from '@ckeditor/ckeditor5-basic-styles/src/italic';
+import List from '@ckeditor/ckeditor5-list/src/list';
+import Link from '@ckeditor/ckeditor5-link/src/link';
+import BlockQuote from '@ckeditor/ckeditor5-block-quote/src/blockquote';
+import Image from '@ckeditor/ckeditor5-image/src/image';
+import ImageCaption from '@ckeditor/ckeditor5-image/src/imagecaption';
+import ImageStyle from '@ckeditor/ckeditor5-image/src/imagestyle';
+import ImageToolbar from '@ckeditor/ckeditor5-image/src/imagetoolbar';
+import ImageUpload from '@ckeditor/ckeditor5-image/src/imageupload';
+import Table from '@ckeditor/ckeditor5-table/src/table';
+import TableToolbar from '@ckeditor/ckeditor5-table/src/tabletoolbar';
+import MediaEmbed from '@ckeditor/ckeditor5-media-embed/src/mediaembed';
+import EasyImage from '@ckeditor/ckeditor5-easy-image/src/easyimage';
+import { CS_CONFIG } from '@ckeditor/ckeditor5-cloud-services/tests/_utils/cloud-services-config';
+
+/**
+ * The multiroot editor implementation. It provides an inline editables and a toolbar.
+ *
+ * Unlike other editors, the toolbar is not rendered automatically and needs to be attached to the DOM manually.
+ *
+ * This type of an editor is dedicated to integrations which require a customized UI with an open
+ * structure, allowing developers to specify the exact location of the interface.
+ *
+ * @mixes module:core/editor/utils/dataapimixin~DataApiMixin
+ * @implements module:core/editor/editorwithui~EditorWithUI
+ * @extends module:core/editor/editor~Editor
+ */
+class MultirootEditor extends Editor {
+	/**
+	 * Creates an instance of the multiroot editor.
+	 *
+	 * **Note:** Do not use the constructor to create editor instances. Use the static `MultirootEditor.create()` method instead.
+	 *
+	 * @protected
+	 * @param {Object.<String,HTMLElement>} sourceElements The list of DOM elements that will be the source
+	 * for the created editor (on which the editor will be initialized).
+	 * @param {module:core/editor/editorconfig~EditorConfig} config The editor configuration.
+	 */
+	constructor( sourceElements, config ) {
+		super( config );
+
+		this.data.processor = new HtmlDataProcessor();
+
+		// Create root and UIView element for each editable container.
+		for ( const rootName of Object.keys( sourceElements ) ) {
+			this.model.document.createRoot( '$root', rootName );
+		}
+
+		this.ui = new MultirootEditorUI( this, new MultirootEditorUIView( this.locale, this.editing.view, sourceElements ) );
+	}
+
+	/**
+	 * @inheritDoc
+	 */
+	destroy() {
+		// Cache the data and editable DOM elements, then destroy.
+		// It's safe to assume that the model->view conversion will not work after super.destroy(),
+		// same as `ui.getEditableElement()` method will not return editables.
+		const data = {};
+		const editables = {};
+		const editablesNames = Array.from( this.ui.getEditableElementsNames() );
+
+		for ( const rootName of editablesNames ) {
+			data[ rootName ] = this.getData( { rootName } );
+			editables[ rootName ] = this.ui.getEditableElement( rootName );
+		}
+
+		this.ui.destroy();
+
+		return super.destroy()
+			.then( () => {
+				for ( const rootName of editablesNames ) {
+					setDataInElement( editables[ rootName ], data[ rootName ] );
+				}
+			} );
+	}
+
+	/**
+	 * Creates a multiroot editor instance.
+	 *
+	 * @param {Object.<String,HTMLElement>} sourceElements The list of DOM elements that will be the source
+	 * for the created editor (on which the editor will be initialized).
+	 * @param {module:core/editor/editorconfig~EditorConfig} config The editor configuration.
+	 * @returns {Promise} A promise resolved once the editor is ready. The promise returns the created multiroot editor instance.
+	 */
+	static create( sourceElements, config ) {
+		return new Promise( resolve => {
+			const editor = new this( sourceElements, config );
+
+			resolve(
+				editor.initPlugins()
+					.then( () => editor.ui.init() )
+					.then( () => {
+						const initialData = {};
+
+						// Create initial data object containing data from all roots.
+						for ( const rootName of Object.keys( sourceElements ) ) {
+							initialData[ rootName ] = getDataFromElement( sourceElements[ rootName ] );
+						}
+
+						return editor.data.init( initialData );
+					} )
+					.then( () => editor.fire( 'ready' ) )
+					.then( () => editor )
+			);
+		} );
+	}
+}
+
+mix( MultirootEditor, DataApiMixin );
+
+/**
+ * The multiroot editor UI class.
+ *
+ * @extends module:core/editor/editorui~EditorUI
+ */
+class MultirootEditorUI extends EditorUI {
+	/**
+	 * Creates an instance of the multiroot editor UI class.
+	 *
+	 * @param {module:core/editor/editor~Editor} editor The editor instance.
+	 * @param {module:ui/editorui/editoruiview~EditorUIView} view The view of the UI.
+	 */
+	constructor( editor, view ) {
+		super( editor );
+
+		/**
+		 * The main (top–most) view of the editor UI.
+		 *
+		 * @readonly
+		 * @member {module:ui/editorui/editoruiview~EditorUIView} #view
+		 */
+		this.view = view;
+
+		/**
+		 * A normalized `config.toolbar` object.
+		 *
+		 * @type {Object}
+		 * @private
+		 */
+		this._toolbarConfig = normalizeToolbarConfig( editor.config.get( 'toolbar' ) );
+	}
+
+	/**
+	 * Initializes the UI.
+	 */
+	init() {
+		const view = this.view;
+		const editor = this.editor;
+		const editingView = editor.editing.view;
+
+		view.render();
+
+		for ( const editable of this.view.editables ) {
+			// The editable UI element in DOM is available for sure only after the editor UI view has been rendered.
+			// But it can be available earlier if a DOM element has been passed to DecoupledEditor.create().
+			const editableElement = editable.element;
+
+			// Register the editable UI view in the editor. A single editor instance can aggregate multiple
+			// editable areas (roots) but the decoupled editor has only one.
+			this._editableElements.set( editable.name, editableElement );
+
+			// Let the global focus tracker know that the editable UI element is focusable and
+			// belongs to the editor. From now on, the focus tracker will sustain the editor focus
+			// as long as the editable is focused (e.g. the user is typing).
+			this.focusTracker.add( editableElement );
+
+			// Let the editable UI element respond to the changes in the global editor focus
+			// tracker. It has been added to the same tracker a few lines above but, in reality, there are
+			// many focusable areas in the editor, like balloons, toolbars or dropdowns and as long
+			// as they have focus, the editable should act like it is focused too (although technically
+			// it isn't), e.g. by setting the proper CSS class, visually announcing focus to the user.
+			// Doing otherwise will result in editable focus styles disappearing, once e.g. the
+			// toolbar gets focused.
+			editable.bind( 'isFocused' ).to( this.focusTracker );
+
+			// Bind the editable UI element to the editing view, making it an end– and entry–point
+			// of the editor's engine. This is where the engine meets the UI.
+			editingView.attachDomRoot( editableElement, editable.name );
+		}
+
+		this._initPlaceholder();
+		this._initToolbar();
+		this.fire( 'ready' );
+	}
+
+	/**
+	 * @inheritDoc
+	 */
+	destroy() {
+		const view = this.view;
+		const editingView = this.editor.editing.view;
+
+		for ( const editable of this.view.editables ) {
+			editingView.detachDomRoot( editable.name );
+		}
+
+		view.destroy();
+
+		super.destroy();
+	}
+
+	/**
+	 * Initializes the inline editor toolbar and its panel.
+	 *
+	 * @private
+	 */
+	_initToolbar() {
+		const editor = this.editor;
+		const view = this.view;
+		const toolbar = view.toolbar;
+
+		toolbar.fillFromConfig( this._toolbarConfig.items, this.componentFactory );
+
+		enableToolbarKeyboardFocus( {
+			origin: editor.editing.view,
+			originFocusTracker: this.focusTracker,
+			originKeystrokeHandler: editor.keystrokes,
+			toolbar
+		} );
+	}
+
+	/**
+	 * Enable the placeholder text on the editing root, if any was configured.
+	 *
+	 * @private
+	 */
+	_initPlaceholder() {
+		const editor = this.editor;
+		const editingView = editor.editing.view;
+
+		for ( const editable of this.view.editables ) {
+			const editingRoot = editingView.document.getRoot( editable.name );
+			const sourceElement = this.getEditableElement( editable.name );
+
+			const placeholderText = editor.config.get( 'placeholder' ) ||
+				sourceElement && sourceElement.tagName.toLowerCase() === 'textarea' && sourceElement.getAttribute( 'placeholder' );
+
+			if ( placeholderText ) {
+				enablePlaceholder( {
+					view: editingView,
+					element: editingRoot,
+					text: placeholderText,
+					isDirectHost: false
+				} );
+			}
+		}
+	}
+}
+
+/**
+ * The multiroot editor UI view. It is a virtual view providing an inline editable, but without
+ * any specific arrangement of the components in the DOM.
+ *
+ * @extends module:ui/editorui/editoruiview~EditorUIView
+ */
+class MultirootEditorUIView extends EditorUIView {
+	/**
+	 * Creates an instance of the multiroot editor UI view.
+	 *
+	 * @param {module:utils/locale~Locale} locale The {@link module:core/editor/editor~Editor#locale} instance.
+	 * @param {module:engine/view/view~View} editingView The editing view instance this view is related to.
+	 * @param {Object.<String,HTMLElement>} editableElements The list of editable elements, containing name and html element
+	 * for each editable.
+	 */
+	constructor( locale, editingView, editableElements ) {
+		super( locale );
+
+		/**
+		 * The main toolbar of the decoupled editor UI.
+		 *
+		 * @readonly
+		 * @member {module:ui/toolbar/toolbarview~ToolbarView}
+		 */
+		this.toolbar = new ToolbarView( locale );
+
+		/**
+		 * The editables of the multiroot editor UI.
+		 *
+		 * @readonly
+		 * @member {Array.<module:ui/editableui/inline/inlineeditableuiview~InlineEditableUIView>}
+		 */
+		this.editables = [];
+
+		// Create InlineEditableUIView instance for each editable.
+		for ( const editableName of Object.keys( editableElements ) ) {
+			const editable = new InlineEditableUIView( locale, editingView, editableElements[ editableName ] );
+
+			editable.name = editableName;
+			this.editables.push( editable );
+		}
+
+		// This toolbar may be placed anywhere in the page so things like font size need to be reset in it.
+		// Also because of the above, make sure the toolbar supports rounded corners.
+		Template.extend( this.toolbar.template, {
+			attributes: {
+				class: [
+					'ck-reset_all',
+					'ck-rounded-corners'
+				]
+			}
+		} );
+	}
+
+	/**
+	 * @inheritDoc
+	 */
+	render() {
+		super.render();
+
+		this.registerChild( this.editables );
+		this.registerChild( [ this.toolbar ] );
+	}
+}
+
+// Initialize editor
+MultirootEditor
+	.create( {
+		header: document.querySelector( '#header' ),
+		content: document.querySelector( '#content' ),
+		footerleft: document.querySelector( '#footer-left' ),
+		footerright: document.querySelector( '#footer-right' )
+	}, {
+		plugins: [ Essentials, Paragraph, Heading, Bold, Italic, List, Link, BlockQuote, Image, ImageCaption,
+			ImageStyle, ImageToolbar, ImageUpload, Table, TableToolbar, MediaEmbed, EasyImage ],
+		toolbar: [ 'heading', '|', 'bold', 'italic', 'link', 'bulletedList', 'numberedList', 'imageUpload', 'blockQuote',
+			'insertTable', 'mediaEmbed', 'undo', 'redo' ],
+		image: {
+			toolbar: [ 'imageTextAlternative', '|', 'imageStyle:alignLeft', 'imageStyle:full', 'imageStyle:alignRight' ],
+			styles: [ 'full', 'alignLeft', 'alignRight' ]
+		},
+		table: {
+			contentToolbar: [
+				'tableColumn',
+				'tableRow',
+				'mergeTableCells'
+			]
+		},
+		placeholder: 'Type your text here...',
+		cloudServices: CS_CONFIG
+	} )
+	.then( newEditor => {
+		document.querySelector( '#toolbar' ).appendChild( newEditor.ui.view.toolbar.element );
+
+		window.editor = newEditor;
+	} )
+	.catch( err => {
+		console.error( err.stack );
+	} );
+

+ 14 - 0
docs/examples/framework/multi-root-editor.md

@@ -0,0 +1,14 @@
+---
+category: examples-framework
+order: 30
+---
+
+# Multi-root editor
+
+The main difference between a multi-root editor and using multiple separate editors (like in the {@link examples/builds/inline-editor inline editor demo}) is the fact that in a multi-root editor all editable areas belong to the same editor instance, share the same toolbar and create one undo stack.
+
+Out of the box, CKEditor 5 does not offer a ready-to-use multi-root editor yet. However, such an editor can be implemented by using the {@link framework/guides/overview CKEditor 5 Framework}.
+
+Check out the {@link framework/guides/custom-editor-creator "Implementing a custom editor creator" guide} which contains the source code of the demo below.
+
+{@snippet examples/multi-root-editor}

Разница между файлами не показана из-за своего большого размера
+ 429 - 0
docs/framework/guides/custom-editor-creator.md


+ 41 - 41
mgit.json

@@ -2,46 +2,46 @@
   "packages": "packages/",
   "packagesPrefix": "@ckeditor/ckeditor5-",
   "dependencies": {
-    "@ckeditor/ckeditor5-adapter-ckfinder": "ckeditor/ckeditor5-adapter-ckfinder#stable",
-    "@ckeditor/ckeditor5-alignment": "ckeditor/ckeditor5-alignment#stable",
-    "@ckeditor/ckeditor5-autoformat": "ckeditor/ckeditor5-autoformat#stable",
-    "@ckeditor/ckeditor5-autosave": "ckeditor/ckeditor5-autosave#stable",
-    "@ckeditor/ckeditor5-basic-styles": "ckeditor/ckeditor5-basic-styles#stable",
-    "@ckeditor/ckeditor5-block-quote": "ckeditor/ckeditor5-block-quote#stable",
-    "@ckeditor/ckeditor5-build-balloon": "ckeditor/ckeditor5-build-balloon#stable",
-    "@ckeditor/ckeditor5-build-balloon-block": "ckeditor/ckeditor5-build-balloon-block#stable",
-    "@ckeditor/ckeditor5-build-classic": "ckeditor/ckeditor5-build-classic#stable",
-    "@ckeditor/ckeditor5-build-decoupled-document": "ckeditor/ckeditor5-build-decoupled-document#stable",
-    "@ckeditor/ckeditor5-build-inline": "ckeditor/ckeditor5-build-inline#stable",
-    "@ckeditor/ckeditor5-clipboard": "ckeditor/ckeditor5-clipboard#stable",
-    "@ckeditor/ckeditor5-cloud-services": "ckeditor/ckeditor5-cloud-services#stable",
-    "@ckeditor/ckeditor5-ckfinder": "ckeditor/ckeditor5-ckfinder#stable",
-    "@ckeditor/ckeditor5-core": "ckeditor/ckeditor5-core#stable",
-    "@ckeditor/ckeditor5-easy-image": "ckeditor/ckeditor5-easy-image#stable",
-    "@ckeditor/ckeditor5-editor-balloon": "ckeditor/ckeditor5-editor-balloon#stable",
-    "@ckeditor/ckeditor5-editor-classic": "ckeditor/ckeditor5-editor-classic#stable",
-    "@ckeditor/ckeditor5-editor-decoupled": "ckeditor/ckeditor5-editor-decoupled#stable",
-    "@ckeditor/ckeditor5-editor-inline": "ckeditor/ckeditor5-editor-inline#stable",
-    "@ckeditor/ckeditor5-engine": "ckeditor/ckeditor5-engine#stable",
-    "@ckeditor/ckeditor5-enter": "ckeditor/ckeditor5-enter#stable",
-    "@ckeditor/ckeditor5-essentials": "ckeditor/ckeditor5-essentials#stable",
-    "@ckeditor/ckeditor5-font": "ckeditor/ckeditor5-font#stable",
-    "@ckeditor/ckeditor5-heading": "ckeditor/ckeditor5-heading#stable",
-    "@ckeditor/ckeditor5-highlight": "ckeditor/ckeditor5-highlight#stable",
-    "@ckeditor/ckeditor5-image": "ckeditor/ckeditor5-image#stable",
-    "@ckeditor/ckeditor5-link": "ckeditor/ckeditor5-link#stable",
-    "@ckeditor/ckeditor5-list": "ckeditor/ckeditor5-list#stable",
-    "@ckeditor/ckeditor5-markdown-gfm": "ckeditor/ckeditor5-markdown-gfm#stable",
-    "@ckeditor/ckeditor5-media-embed": "ckeditor/ckeditor5-media-embed#stable",
-    "@ckeditor/ckeditor5-paragraph": "ckeditor/ckeditor5-paragraph#stable",
-    "@ckeditor/ckeditor5-paste-from-office": "ckeditor/ckeditor5-paste-from-office#stable",
-    "@ckeditor/ckeditor5-table": "ckeditor/ckeditor5-table#stable",
-    "@ckeditor/ckeditor5-theme-lark": "ckeditor/ckeditor5-theme-lark#stable",
-    "@ckeditor/ckeditor5-typing": "ckeditor/ckeditor5-typing#stable",
-    "@ckeditor/ckeditor5-ui": "ckeditor/ckeditor5-ui#stable",
-    "@ckeditor/ckeditor5-undo": "ckeditor/ckeditor5-undo#stable",
-    "@ckeditor/ckeditor5-upload": "ckeditor/ckeditor5-upload#stable",
-    "@ckeditor/ckeditor5-utils": "ckeditor/ckeditor5-utils#stable",
-    "@ckeditor/ckeditor5-widget": "ckeditor/ckeditor5-widget#stable"
+    "@ckeditor/ckeditor5-adapter-ckfinder": "ckeditor/ckeditor5-adapter-ckfinder",
+    "@ckeditor/ckeditor5-alignment": "ckeditor/ckeditor5-alignment",
+    "@ckeditor/ckeditor5-autoformat": "ckeditor/ckeditor5-autoformat",
+    "@ckeditor/ckeditor5-autosave": "ckeditor/ckeditor5-autosave",
+    "@ckeditor/ckeditor5-basic-styles": "ckeditor/ckeditor5-basic-styles",
+    "@ckeditor/ckeditor5-block-quote": "ckeditor/ckeditor5-block-quote",
+    "@ckeditor/ckeditor5-build-balloon": "ckeditor/ckeditor5-build-balloon",
+    "@ckeditor/ckeditor5-build-balloon-block": "ckeditor/ckeditor5-build-balloon-block",
+    "@ckeditor/ckeditor5-build-classic": "ckeditor/ckeditor5-build-classic",
+    "@ckeditor/ckeditor5-build-decoupled-document": "ckeditor/ckeditor5-build-decoupled-document",
+    "@ckeditor/ckeditor5-build-inline": "ckeditor/ckeditor5-build-inline",
+    "@ckeditor/ckeditor5-clipboard": "ckeditor/ckeditor5-clipboard",
+    "@ckeditor/ckeditor5-cloud-services": "ckeditor/ckeditor5-cloud-services",
+    "@ckeditor/ckeditor5-ckfinder": "ckeditor/ckeditor5-ckfinder",
+    "@ckeditor/ckeditor5-core": "ckeditor/ckeditor5-core",
+    "@ckeditor/ckeditor5-easy-image": "ckeditor/ckeditor5-easy-image",
+    "@ckeditor/ckeditor5-editor-balloon": "ckeditor/ckeditor5-editor-balloon",
+    "@ckeditor/ckeditor5-editor-classic": "ckeditor/ckeditor5-editor-classic",
+    "@ckeditor/ckeditor5-editor-decoupled": "ckeditor/ckeditor5-editor-decoupled",
+    "@ckeditor/ckeditor5-editor-inline": "ckeditor/ckeditor5-editor-inline",
+    "@ckeditor/ckeditor5-engine": "ckeditor/ckeditor5-engine",
+    "@ckeditor/ckeditor5-enter": "ckeditor/ckeditor5-enter",
+    "@ckeditor/ckeditor5-essentials": "ckeditor/ckeditor5-essentials",
+    "@ckeditor/ckeditor5-font": "ckeditor/ckeditor5-font",
+    "@ckeditor/ckeditor5-heading": "ckeditor/ckeditor5-heading",
+    "@ckeditor/ckeditor5-highlight": "ckeditor/ckeditor5-highlight",
+    "@ckeditor/ckeditor5-image": "ckeditor/ckeditor5-image",
+    "@ckeditor/ckeditor5-link": "ckeditor/ckeditor5-link",
+    "@ckeditor/ckeditor5-list": "ckeditor/ckeditor5-list",
+    "@ckeditor/ckeditor5-markdown-gfm": "ckeditor/ckeditor5-markdown-gfm",
+    "@ckeditor/ckeditor5-media-embed": "ckeditor/ckeditor5-media-embed",
+    "@ckeditor/ckeditor5-paragraph": "ckeditor/ckeditor5-paragraph",
+    "@ckeditor/ckeditor5-paste-from-office": "ckeditor/ckeditor5-paste-from-office",
+    "@ckeditor/ckeditor5-table": "ckeditor/ckeditor5-table",
+    "@ckeditor/ckeditor5-theme-lark": "ckeditor/ckeditor5-theme-lark",
+    "@ckeditor/ckeditor5-typing": "ckeditor/ckeditor5-typing",
+    "@ckeditor/ckeditor5-ui": "ckeditor/ckeditor5-ui",
+    "@ckeditor/ckeditor5-undo": "ckeditor/ckeditor5-undo",
+    "@ckeditor/ckeditor5-upload": "ckeditor/ckeditor5-upload",
+    "@ckeditor/ckeditor5-utils": "ckeditor/ckeditor5-utils",
+    "@ckeditor/ckeditor5-widget": "ckeditor/ckeditor5-widget"
   }
 }

+ 5 - 5
package.json

@@ -65,11 +65,11 @@
   },
   "devDependencies": {
     "@ckeditor/ckeditor5-comments": "^2.0.0",
-    "@ckeditor/ckeditor5-dev-docs": "^11.0.0",
-    "@ckeditor/ckeditor5-dev-env": "^14.0.0",
-    "@ckeditor/ckeditor5-dev-tests": "^16.0.0",
-    "@ckeditor/ckeditor5-dev-utils": "^12.0.0",
-    "@ckeditor/ckeditor5-dev-webpack-plugin": "^8.0.0",
+    "@ckeditor/ckeditor5-dev-docs": "^11.0.1",
+    "@ckeditor/ckeditor5-dev-env": "^14.0.1",
+    "@ckeditor/ckeditor5-dev-tests": "^16.1.0",
+    "@ckeditor/ckeditor5-dev-utils": "^12.0.1",
+    "@ckeditor/ckeditor5-dev-webpack-plugin": "^8.0.1",
     "@ckeditor/ckeditor5-real-time-collaboration": "^12.1.0",
     "@ckeditor/ckeditor5-track-changes": "^0.1.0",
     "css-loader": "^1.0.0",

+ 134 - 208
yarn.lock

@@ -669,25 +669,19 @@
     lodash "^4.17.10"
     to-fast-properties "^2.0.0"
 
-"@ckeditor/ckeditor-cloud-services-collaboration@^2.0.2":
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor-cloud-services-collaboration/-/ckeditor-cloud-services-collaboration-2.0.2.tgz#ba16db2694436d6219742ec1c131ac299c4d4b5e"
-  integrity sha512-s2mqpnJh0eaasDj3SM1R9vbp4hhAVRC1XimnxDKQmx9vYm8gMzA0+iWCP3YcwYh8YoNWNCzFc7oZD+ZU0k1TvA==
+"@ckeditor/ckeditor-cloud-services-collaboration@^2.1.0":
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor-cloud-services-collaboration/-/ckeditor-cloud-services-collaboration-2.1.0.tgz#9209ecec9b306d93313baae8cd19013a2fb2762b"
+  integrity sha512-CRQsUqygWayiCrjoV+YiJy+POpbphm6EW0N359ZIDDL0sUenlJur5HoV1bclhFD4BHxEACGoaXyfQmbT+tbF2A==
   dependencies:
-    "@ckeditor/ckeditor5-utils" "^11.1.0"
+    "@ckeditor/ckeditor5-utils" "^12.0.0"
     lodash-es "^4.17.10"
     protobufjs "^6.8.8"
     socket.io-client "^2.0.4"
+    socket.io-parser "^3.3.0"
     url-parse "^1.4.0"
     uuid "^3.0.1"
 
-"@ckeditor/ckeditor-cloud-services-core@^2.0.0":
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor-cloud-services-core/-/ckeditor-cloud-services-core-2.0.0.tgz#19fed5470d2d849ed1617cde00845c2a649a035f"
-  integrity sha512-UPt7GH5KMkfqraNWuPUIsGH38p2aws/XhKt7k+CI4v4QkX68zJNP7MFPHT/3dt4jNjd2bGbo2xt3bSUnbTOHGg==
-  dependencies:
-    "@ckeditor/ckeditor5-utils" "^11.0.0"
-
 "@ckeditor/ckeditor-cloud-services-core@^3.0.0":
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor-cloud-services-core/-/ckeditor-cloud-services-core-3.0.0.tgz#30e236d82e5a6622c6895a0b01f7f97883be909f"
@@ -695,94 +689,54 @@
   dependencies:
     "@ckeditor/ckeditor5-utils" "^12.0.0"
 
-"@ckeditor/ckeditor5-autoformat@^10.0.4":
-  version "10.0.4"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-10.0.4.tgz#e56bd211273761e1a7de17a397bbb3274b7db616"
-  integrity sha512-fDHxGVSTuldM0sLrLbxOSQqwx8K3w3vxO13dnNkwARFDQbJC6VWZ1Bj1Kesi9u86JRYu6Ymij9ID/7i+aFFJ3w==
-  dependencies:
-    "@ckeditor/ckeditor5-core" "^11.1.0"
-
-"@ckeditor/ckeditor5-basic-styles@^10.1.0":
-  version "10.1.0"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-10.1.0.tgz#2e504f1f177ab4050f8a2f3fa9ca4cbb74a0e9f3"
-  integrity sha512-OenBNiowZsW2ZZasrA8FMr508uvWii+B3oF0blzaVIDjb7zDpbAan9Otuisxz/YGMcQpoDnSaVnYtBCTqov1EQ==
-  dependencies:
-    "@ckeditor/ckeditor5-core" "^11.1.0"
-    "@ckeditor/ckeditor5-ui" "^11.2.0"
-
-"@ckeditor/ckeditor5-clipboard@^10.0.4":
-  version "10.0.4"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-10.0.4.tgz#76371d3998dca5732c549d4ad393fd17d3dee3f0"
-  integrity sha512-9JMnB1iuS1Eh6u/Z2qxSNbwe2pQ3hIrQfWnlcNRAdYPeTt3qytqQT9YKqZ1bq9F5N2OBwr2oFySEJS3xF1HWeA==
-  dependencies:
-    "@ckeditor/ckeditor5-core" "^11.1.0"
-    "@ckeditor/ckeditor5-engine" "^12.0.0"
-
-"@ckeditor/ckeditor5-cloud-services@^10.1.1":
-  version "10.1.1"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-10.1.1.tgz#4ce08da667dcabe88c389b387195e8418b3197bd"
-  integrity sha512-j+RqmU8TD420JM+rQou1WaBRp/NbskBgDITlg9fs/ZBdW1wQCNyBFD4qV89ZKGkVKz8ovYNJuDMsDf5BlLLESw==
-  dependencies:
-    "@ckeditor/ckeditor-cloud-services-core" "^2.0.0"
-    "@ckeditor/ckeditor5-core" "^11.1.0"
-    "@ckeditor/ckeditor5-utils" "^11.1.0"
-
-"@ckeditor/ckeditor5-collaboration-core@^1.0.0":
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-collaboration-core/-/ckeditor5-collaboration-core-1.0.0.tgz#58bde7049f11e0b15e07c6847edb7501c3e23f0b"
-  integrity sha512-8piILjTK/lPfxVyK1OrL177f8CYYmzjoe9rpzDJSL+jmWPmq4pCtuVqifdjh4pNopHBdNNr/eRrdVlLRm4jpZQ==
+"@ckeditor/ckeditor5-collaboration-core@^1.0.1":
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-collaboration-core/-/ckeditor5-collaboration-core-1.0.1.tgz#51e551dbdbad7da7b28b612265aea993233006f9"
+  integrity sha512-DokTNA8v1MRx9rKIVA7HOKagxSes6J/pFSY5soBQd7/6cdyxaubkCo2W+LTQH0kbwl4wlPaZuycIGPNRL284gA==
   dependencies:
-    "@ckeditor/ckeditor5-core" "^11.1.0"
-    "@ckeditor/ckeditor5-engine" "^12.0.0"
-    "@ckeditor/ckeditor5-ui" "^11.2.0"
-    "@ckeditor/ckeditor5-utils" "^11.1.0"
+    "@ckeditor/ckeditor5-core" "^12.0.0"
+    "@ckeditor/ckeditor5-engine" "^13.0.0"
+    "@ckeditor/ckeditor5-ui" "^12.0.0"
+    "@ckeditor/ckeditor5-utils" "^12.0.0"
 
-"@ckeditor/ckeditor5-comments@^1.0.1":
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-comments/-/ckeditor5-comments-1.0.1.tgz#2789a50ade40d9085a6c23b86fbb89b7c598f740"
-  integrity sha512-zA0ZG8r9ytBck40bEV9hFg92DIXT6LTHd+lWBECxp8AGWm3BoXpua0t3Nt1dwq23o/F6MWZSRGsZufLFf9LyaQ==
-  dependencies:
-    "@ckeditor/ckeditor5-autoformat" "^10.0.4"
-    "@ckeditor/ckeditor5-basic-styles" "^10.1.0"
-    "@ckeditor/ckeditor5-collaboration-core" "^1.0.0"
-    "@ckeditor/ckeditor5-core" "^11.1.0"
-    "@ckeditor/ckeditor5-engine" "^12.0.0"
-    "@ckeditor/ckeditor5-essentials" "^10.1.3"
-    "@ckeditor/ckeditor5-list" "^11.0.3"
-    "@ckeditor/ckeditor5-paragraph" "^10.0.4"
-    "@ckeditor/ckeditor5-ui" "^11.2.0"
-    "@ckeditor/ckeditor5-utils" "^11.1.0"
+"@ckeditor/ckeditor5-comments@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-comments/-/ckeditor5-comments-2.0.0.tgz#ecf00e11c109dcfb9bf7bed5bc612b191b668262"
+  integrity sha512-r+EVdtGr9dvKRidTiEjllb9rcFRh/PMhYOG7goFJvDgidBtk05hOATUOZHKKvHvyDUbfxsnMI7PyHGAx6rdnOg==
+  dependencies:
+    "@ckeditor/ckeditor5-autoformat" "^11.0.0"
+    "@ckeditor/ckeditor5-basic-styles" "^11.0.0"
+    "@ckeditor/ckeditor5-collaboration-core" "^1.0.1"
+    "@ckeditor/ckeditor5-core" "^12.0.0"
+    "@ckeditor/ckeditor5-easy-image" "^11.0.0"
+    "@ckeditor/ckeditor5-engine" "^13.0.0"
+    "@ckeditor/ckeditor5-essentials" "^11.0.0"
+    "@ckeditor/ckeditor5-list" "^12.0.0"
+    "@ckeditor/ckeditor5-paragraph" "^11.0.0"
+    "@ckeditor/ckeditor5-ui" "^12.0.0"
+    "@ckeditor/ckeditor5-utils" "^12.0.0"
     date-fns "^1.29.0"
     lodash-es "^4.17.11"
     trim-html "^0.1.9"
 
-"@ckeditor/ckeditor5-core@^11.1.0":
-  version "11.1.0"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-11.1.0.tgz#e2ff1e399a0024a2343c750f2796606196167f1a"
-  integrity sha512-iwSV1SUBITOxncuIVbGv/xFwkZ1Sd0Po/8CRn+p6r5mq91T73L6nMC+MUfT52W9Z/12DfjAz4hRMsabLqRbkIQ==
-  dependencies:
-    "@ckeditor/ckeditor5-engine" "^12.0.0"
-    "@ckeditor/ckeditor5-utils" "^11.1.0"
-    lodash-es "^4.17.10"
-
-"@ckeditor/ckeditor5-dev-docs@^11.0.0":
-  version "11.0.0"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-docs/-/ckeditor5-dev-docs-11.0.0.tgz#54a4719808291219ac14ae2d29f8bd3985638c92"
-  integrity sha512-EskBVLx0AJBWb9K2i+vFoEvQufTxGpvfVVDBy0I7oBOX3GsRwUwogpapvK3v/R6R0/p6AmAa+7VOneQT3NJ3EQ==
+"@ckeditor/ckeditor5-dev-docs@^11.0.1":
+  version "11.0.1"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-docs/-/ckeditor5-dev-docs-11.0.1.tgz#6de8152575e1886e086c9f31cf58329cd76b7625"
+  integrity sha512-Uv6JfCFsFSAUdtZ53/D/T8grHsi1Nq+TxzbcI23+pV8kmiSbuWlkvARvFivtMWWMzZ2FzJXAkRMovt6xpfovtA==
   dependencies:
-    "@ckeditor/ckeditor5-dev-utils" "^12.0.0"
-    "@ckeditor/jsdoc-plugins" "^3.0.0"
+    "@ckeditor/ckeditor5-dev-utils" "^12.0.1"
+    "@ckeditor/jsdoc-plugins" "^3.0.1"
     jsdoc "3.4.3"
     map-stream "^0.0.7"
     tmp "^0.0.33"
     vinyl-fs "^3.0.2"
 
-"@ckeditor/ckeditor5-dev-env@^14.0.0":
-  version "14.0.0"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-env/-/ckeditor5-dev-env-14.0.0.tgz#7e089ec7c0e4f585e1309c354fe89dc618b6297c"
-  integrity sha512-es/651IUQSDQ39eytaps70leoE8F5u+yqoXwg2RmR1ZOVjr1mDOrhStSTLAP4aatuYfDI9KSDcCUlOF9S8w7Bg==
+"@ckeditor/ckeditor5-dev-env@^14.0.1":
+  version "14.0.1"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-env/-/ckeditor5-dev-env-14.0.1.tgz#27027e9dfad3d28756d243cd64576edbfac658b7"
+  integrity sha512-pAiNazoI/455oNctO4BNEv2B+xzazqe59fQj+tp7Kgr9pLWBiWwe82Kzq8IBWOvhoDsVqCys2tBh//p7KSnzsQ==
   dependencies:
-    "@ckeditor/ckeditor5-dev-utils" "^12.0.0"
+    "@ckeditor/ckeditor5-dev-utils" "^12.0.1"
     "@octokit/rest" "^15.12.0"
     chalk "^2.4.1"
     compare-func "^1.3.2"
@@ -801,14 +755,15 @@
     request "^2.83.0"
     semver "^5.4.1"
 
-"@ckeditor/ckeditor5-dev-tests@^16.0.0":
-  version "16.0.0"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-tests/-/ckeditor5-dev-tests-16.0.0.tgz#59810d095fde316b5470d042d86d68dbf92c783d"
-  integrity sha512-EB32kf+CUm6ClUsBzA3wONWHeRD0jpZKjIroPuHMgEyGVekNQfjkQqZ46o0lODfP9n6U4MzpxaqjWfarps/ytQ==
+"@ckeditor/ckeditor5-dev-tests@^16.1.0":
+  version "16.1.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-tests/-/ckeditor5-dev-tests-16.1.0.tgz#fe72309372c2e16efc0613bf861dd29cb3d24c86"
+  integrity sha512-0dvm60BF6vVeZshEtefl+PkmCZ7t7QhIF/2Um6HkR6/A5urPOn3kT53+L8RxC4I6fsPw8Frr7d1AobPxqHupzg==
   dependencies:
     "@babel/core" "^7.0.0"
-    "@ckeditor/ckeditor5-dev-utils" "^12.0.0"
-    "@ckeditor/ckeditor5-dev-webpack-plugin" "^8.0.0"
+    "@ckeditor/ckeditor5-dev-utils" "^12.0.1"
+    "@ckeditor/ckeditor5-dev-webpack-plugin" "^8.0.1"
+    "@ckeditor/ckeditor5-inspector" "^1.0.0"
     babel-core "^6.26.0"
     babel-loader "^8.0.2"
     babel-plugin-transform-es2015-modules-commonjs "^6.26.0"
@@ -866,6 +821,26 @@
     shelljs "^0.8.1"
     through2 "^2.0.3"
 
+"@ckeditor/ckeditor5-dev-utils@^12.0.1":
+  version "12.0.1"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-utils/-/ckeditor5-dev-utils-12.0.1.tgz#5804d1d1abf609e2d20b2efdefb927af28931e9d"
+  integrity sha512-27OncYtvehxOjOzGafjgPK79iG/H/5tEoufskjZ4dG/+D6P4/3hbMGsPAanSuZFudDB8MzcLLyKEr3LoFFR8CA==
+  dependencies:
+    acorn "^5.1.2"
+    chalk "^2.4.1"
+    cssnano "^4.0.0"
+    del "^3.0.0"
+    escodegen "^1.9.0"
+    fs-extra "^7.0.0"
+    javascript-stringify "^1.6.0"
+    pofile "^1.0.9"
+    postcss "^6.0.23"
+    postcss-import "^12.0.0"
+    postcss-mixins "^6.2.0"
+    postcss-nesting "^6.0.0"
+    shelljs "^0.8.1"
+    through2 "^2.0.3"
+
 "@ckeditor/ckeditor5-dev-webpack-plugin@^8.0.0":
   version "8.0.0"
   resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-webpack-plugin/-/ckeditor5-dev-webpack-plugin-8.0.0.tgz#b5e5689ef8e52d13e02cb85ca6fa79720abe77b1"
@@ -876,120 +851,62 @@
     rimraf "^2.6.2"
     webpack-sources "^1.1.0"
 
-"@ckeditor/ckeditor5-engine@^12.0.0":
-  version "12.0.0"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-12.0.0.tgz#89f6adeb36ad21841166af542ba2bb940e065307"
-  integrity sha512-tRgI4kyPq4UaS9eIZoeMhzNwOKqNV/HC6dAD5JZxghnPsuqAwGlOjGygGVCje7j8I3byTFgaxS5xWFwwnn3fqQ==
+"@ckeditor/ckeditor5-dev-webpack-plugin@^8.0.1":
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-webpack-plugin/-/ckeditor5-dev-webpack-plugin-8.0.1.tgz#685b11be5fde0d02f44eea6e4f94ca4e6e8a7b20"
+  integrity sha512-YrxXcgzNRhYhCucYMPxsC6lfadPq3zY9Otv5gL1jUd1V4Ztw128p/Qn5llHUy16I31Dl7bCgi123G68Theuv2A==
   dependencies:
-    "@ckeditor/ckeditor5-utils" "^11.1.0"
-    lodash-es "^4.17.10"
+    "@ckeditor/ckeditor5-dev-utils" "^12.0.1"
+    chalk "^2.4.1"
+    rimraf "^2.6.2"
+    webpack-sources "^1.1.0"
 
-"@ckeditor/ckeditor5-enter@^10.1.3":
-  version "10.1.3"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-10.1.3.tgz#a6886f1e75820423c5655f76a7b621cc529ff798"
-  integrity sha512-7zGlGXO886u2QLJqEneF1XauTZH6saeQslrD54j0G2bWRGtSh5zI+CyYgJKeYgYaiPs9G25cqgUYNgrz+/j7dg==
-  dependencies:
-    "@ckeditor/ckeditor5-core" "^11.1.0"
-    "@ckeditor/ckeditor5-engine" "^12.0.0"
-    "@ckeditor/ckeditor5-utils" "^11.1.0"
-
-"@ckeditor/ckeditor5-essentials@^10.1.3":
-  version "10.1.3"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-10.1.3.tgz#c14d2b0b5a85341e833cb698ae8856f9b2cc8722"
-  integrity sha512-RktkIMF0mAHguDIJMkoldLcUAoOOANZxGbFWv1lPvrUpy/MwVkaKo1mXvLagYD+7UPoiBnKdpPEy8F8AkpteJQ==
-  dependencies:
-    "@ckeditor/ckeditor5-clipboard" "^10.0.4"
-    "@ckeditor/ckeditor5-core" "^11.1.0"
-    "@ckeditor/ckeditor5-enter" "^10.1.3"
-    "@ckeditor/ckeditor5-typing" "^11.0.2"
-    "@ckeditor/ckeditor5-undo" "^10.0.4"
-
-"@ckeditor/ckeditor5-list@^11.0.3":
-  version "11.0.3"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-11.0.3.tgz#8916b87a7c2abcc2c8f225a1062d93a842300dc9"
-  integrity sha512-+NB+lfZFrm6plz0BJww4gro0BJrzZfUE+hmeuroHmUrf3m8pQDMCG9CfAYZqbRxSMjAHVXuo2vNmHQTH3qPFrg==
-  dependencies:
-    "@ckeditor/ckeditor5-core" "^11.1.0"
-    "@ckeditor/ckeditor5-engine" "^12.0.0"
-    "@ckeditor/ckeditor5-paragraph" "^10.0.4"
-    "@ckeditor/ckeditor5-ui" "^11.2.0"
-    "@ckeditor/ckeditor5-utils" "^11.1.0"
-
-"@ckeditor/ckeditor5-operations-compressor@^1.0.1":
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-operations-compressor/-/ckeditor5-operations-compressor-1.0.1.tgz#fff403afb622c9fc58f3fd0b92309ed64a0275d0"
-  integrity sha512-RaUq6CSVQUBrdF4hy3v7C1PNqH0N/YVL86PNTqCS5L4aJ+beSfF1ehK9gZlW4A2bMeFTuwlrC8+jA/yrjhjjzw==
+"@ckeditor/ckeditor5-inspector@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-inspector/-/ckeditor5-inspector-1.0.0.tgz#9d13657b4f72ec683829383e1c7139492811241a"
+  integrity sha512-UOOGdOY46ywyWeS1bbRAUfTi++E8FTaETqd6aUxVY64T9hG3nG4XymEAhtJSouANpY7qAFziGGMb9kTZx1IfRg==
+
+"@ckeditor/ckeditor5-operations-compressor@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-operations-compressor/-/ckeditor5-operations-compressor-1.1.0.tgz#a9702c5ccf3cb64d17165e5b9a0ed1e209b88d24"
+  integrity sha512-HiHRXgJILq+i4M7X2E6mPgvEBPDM52g+PRYecvdaM9FdiOalEYY0Tj+OrfP0g7tnSlG+MSQcWTKatGjOO4ac6Q==
   dependencies:
     lodash-es "^4.17.11"
     protobufjs "^6.8.8"
 
-"@ckeditor/ckeditor5-paragraph@^10.0.4":
-  version "10.0.4"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-10.0.4.tgz#9e0527d996e04be7e78e098f0c465476498b4184"
-  integrity sha512-DLi71ps5cZKLk/hMx8ze5wajB0fFaFuYjlHAjAZS2PrYHDkNAeq5Fm3rk1bfiQpEXiV83ATfQp1KUUgZJoD3Ww==
-  dependencies:
-    "@ckeditor/ckeditor5-core" "^11.1.0"
-    "@ckeditor/ckeditor5-ui" "^11.2.0"
-    "@ckeditor/ckeditor5-utils" "^11.1.0"
-
-"@ckeditor/ckeditor5-real-time-collaboration@^12.0.1":
-  version "12.0.1"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-real-time-collaboration/-/ckeditor5-real-time-collaboration-12.0.1.tgz#e662d3e6ac6283669c417d289ffa5f3054e5a73b"
-  integrity sha512-sWMF1vL0g198yMT+SEBNlYQTSwVZijrC/Cx6QrTYkazpS/Vfil2CszV3f9b+R2mCvEkqKlnZXehrCmwvvgb1RQ==
-  dependencies:
-    "@ckeditor/ckeditor-cloud-services-collaboration" "^2.0.2"
-    "@ckeditor/ckeditor5-cloud-services" "^10.1.1"
-    "@ckeditor/ckeditor5-collaboration-core" "^1.0.0"
-    "@ckeditor/ckeditor5-comments" "^1.0.1"
-    "@ckeditor/ckeditor5-core" "^11.1.0"
-    "@ckeditor/ckeditor5-engine" "^12.0.0"
-    "@ckeditor/ckeditor5-operations-compressor" "^1.0.1"
-    "@ckeditor/ckeditor5-ui" "^11.2.0"
-    "@ckeditor/ckeditor5-utils" "^11.1.0"
+"@ckeditor/ckeditor5-real-time-collaboration@^12.1.0":
+  version "12.1.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-real-time-collaboration/-/ckeditor5-real-time-collaboration-12.1.0.tgz#6d92679ff456a0edc0847beae088563fb01bc512"
+  integrity sha512-zIf5ZlFsvthbx30m3K+/NxecDLrC1MdzxDMUjZKmXqxQbWXveTbbIhVlWGRL5bO3+ryg+Hy0LjoZUOkbUbcWHA==
+  dependencies:
+    "@ckeditor/ckeditor-cloud-services-collaboration" "^2.1.0"
+    "@ckeditor/ckeditor5-cloud-services" "^11.0.0"
+    "@ckeditor/ckeditor5-collaboration-core" "^1.0.1"
+    "@ckeditor/ckeditor5-comments" "^2.0.0"
+    "@ckeditor/ckeditor5-core" "^12.0.0"
+    "@ckeditor/ckeditor5-engine" "^13.0.0"
+    "@ckeditor/ckeditor5-operations-compressor" "^1.1.0"
+    "@ckeditor/ckeditor5-ui" "^12.0.0"
+    "@ckeditor/ckeditor5-utils" "^12.0.0"
     lodash-es "^4.17.11"
 
-"@ckeditor/ckeditor5-theme-lark@^12.0.0":
-  version "12.0.0"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-12.0.0.tgz#db87a8f0215f374b4e50d07c8b4ad88352ddd4ec"
-  integrity sha512-+ZemhL8jpvUNgS3JdkP4eLR+au8/GQcjiwExLp350CwSklOaQk5hApYB7F/3z6sLuZbjxg1M6a9/QarwQJpWDg==
-  dependencies:
-    "@ckeditor/ckeditor5-ui" "^11.2.0"
-
-"@ckeditor/ckeditor5-typing@^11.0.2":
-  version "11.0.2"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-11.0.2.tgz#0991c6516385fb645c26d641ec854701902190f3"
-  integrity sha512-WqHcz8lsnD5vEXSeIPqyms97mUAP8spZFPl8/sOEJxzexMkDrxFhITnCoz5YC8Yhs1mcATsij1SfQm7yM9zJ3w==
-  dependencies:
-    "@ckeditor/ckeditor5-core" "^11.1.0"
-    "@ckeditor/ckeditor5-engine" "^12.0.0"
-    "@ckeditor/ckeditor5-utils" "^11.1.0"
-
-"@ckeditor/ckeditor5-ui@^11.2.0":
-  version "11.2.0"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-11.2.0.tgz#c8de7b4b1f1f9b256b3e298f161acdb5ef168b54"
-  integrity sha512-V8fxKRwfZdXy011IyxuHX+1FawboMEBBKqdoY2zdVv5zdwsMQRq5jvFUEAeowAXdc7mx0b3zKnafVNUV5Imr0g==
-  dependencies:
-    "@ckeditor/ckeditor5-core" "^11.1.0"
-    "@ckeditor/ckeditor5-theme-lark" "^12.0.0"
-    "@ckeditor/ckeditor5-utils" "^11.1.0"
-    lodash-es "^4.17.10"
-
-"@ckeditor/ckeditor5-undo@^10.0.4":
-  version "10.0.4"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-10.0.4.tgz#06013dfa266a358a66cb57df5a2f51940b2c7ffe"
-  integrity sha512-WMUUciNZM/miZuVSZL6wla6Gn8Vi251jwZJfWHKBbP37kIs5xeN0yMZFEUGHBAoIbFckn5Cbtkfaik5C32/Bog==
-  dependencies:
-    "@ckeditor/ckeditor5-core" "^11.1.0"
-    "@ckeditor/ckeditor5-engine" "^12.0.0"
-    "@ckeditor/ckeditor5-ui" "^11.2.0"
-
-"@ckeditor/ckeditor5-utils@^11.0.0", "@ckeditor/ckeditor5-utils@^11.1.0":
-  version "11.1.0"
-  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-11.1.0.tgz#53535004ca9e2074fc0776b60a1706aa8af9a180"
-  integrity sha512-QgjK5BHs2krdqv8OY7qR0SMEKePcLaBo+b26oh3vMuzdC0KckMytbngn+uIGRoGBiKiza5RwI51Wk4Y8zxKMxQ==
-  dependencies:
-    ckeditor5 "^11.2.0"
-    lodash-es "^4.17.10"
+"@ckeditor/ckeditor5-track-changes@^0.1.0":
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-track-changes/-/ckeditor5-track-changes-0.1.0.tgz#79805cf5a32a1b9d7e8f572d8b20b638dc5fabb5"
+  integrity sha512-1ckH7Q1/txpOMJf2QrdC7zvZoQs0yDGfNu2CkkpYeOP4aNTy2nxanfqNpxAYc3Bl3nimByanQkIhwQM8hFxDZQ==
+  dependencies:
+    "@ckeditor/ckeditor5-collaboration-core" "^1.0.1"
+    "@ckeditor/ckeditor5-comments" "^2.0.0"
+    "@ckeditor/ckeditor5-core" "^12.0.0"
+    "@ckeditor/ckeditor5-engine" "^13.0.0"
+    "@ckeditor/ckeditor5-enter" "^11.0.0"
+    "@ckeditor/ckeditor5-typing" "^12.0.0"
+    "@ckeditor/ckeditor5-ui" "^12.0.0"
+    "@ckeditor/ckeditor5-undo" "^11.0.0"
+    "@ckeditor/ckeditor5-utils" "^12.0.0"
+    date-fns "^1.30.1"
+    lodash-es "^4.17.11"
+    trim-html "^0.1.9"
 
 "@ckeditor/jsdoc-plugins@^2.0.1":
   version "2.1.0"
@@ -999,10 +916,10 @@
     fs-extra "^7.0.0"
     lodash "^4.17.11"
 
-"@ckeditor/jsdoc-plugins@^3.0.0":
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/@ckeditor/jsdoc-plugins/-/jsdoc-plugins-3.0.0.tgz#4f735a696c27da16b0bd50e7e55ba52b98b8e634"
-  integrity sha512-tuVrG2fMQQSOx5LzanVymvrcGlwslGB/lmjOoJvNx0jWi9jckOIjTbzLfnBH9hZAoh2DpMaAjBNckRQ5IqNgCA==
+"@ckeditor/jsdoc-plugins@^3.0.1":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@ckeditor/jsdoc-plugins/-/jsdoc-plugins-3.0.1.tgz#06efc83310569bc285f327aea53d904356306c1c"
+  integrity sha512-/YnO66RHcwHLx1ofjlrYYDmg5JirVD6ryQdD3UYagdvkJt+D4Ahcs6LQQNlIK4lNTsyfb8UmGC/6O7wn04QDQQ==
   dependencies:
     fs-extra "^7.0.0"
     lodash "^4.17.11"
@@ -2561,11 +2478,6 @@ circular-json@^0.5.5:
   resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.9.tgz#932763ae88f4f7dead7a0d09c8a51a4743a53b1d"
   integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==
 
-ckeditor5@^11.2.0:
-  version "11.2.0"
-  resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-11.2.0.tgz#480c6d65475b73772681877114da859c1c2b5cba"
-  integrity sha512-hP6lxCj0bDGv/yhtdYxuASjZbho0zpVKu5x7rNHSjwcsIKeJleRf3TQCxECcG6Mhmuigf6gV4JZzOp+0zLz2rA==
-
 class-utils@^0.3.5:
   version "0.3.6"
   resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
@@ -3472,6 +3384,11 @@ date-fns@^1.27.2, date-fns@^1.29.0:
   resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6"
   integrity sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==
 
+date-fns@^1.30.1:
+  version "1.30.1"
+  resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
+  integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
+
 date-format@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8"
@@ -10077,6 +9994,15 @@ socket.io-client@2.1.1, socket.io-client@^2.0.4:
     socket.io-parser "~3.2.0"
     to-array "0.1.4"
 
+socket.io-parser@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f"
+  integrity sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==
+  dependencies:
+    component-emitter "1.2.1"
+    debug "~3.1.0"
+    isarray "2.0.1"
+
 socket.io-parser@~3.2.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077"