@ckeditor/ckeditor5-editor-balloon 41.3.1 → 41.4.0-alpha.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index-content.css +4 -0
- package/dist/index-editor.css +4 -0
- package/dist/index.css +4 -0
- package/dist/index.js +320 -0
- package/dist/index.js.map +1 -0
- package/dist/types/ballooneditor.d.ts +181 -0
- package/dist/types/ballooneditorui.d.ts +46 -0
- package/dist/types/ballooneditoruiview.d.ts +36 -0
- package/dist/types/index.d.ts +12 -0
- package/package.json +3 -2
package/dist/index.css
ADDED
package/dist/index.js
ADDED
@@ -0,0 +1,320 @@
|
|
1
|
+
/**
|
2
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
4
|
+
*/
|
5
|
+
import { ElementApiMixin, Editor, secureSourceElement, attachToForm, Context } from '@ckeditor/ckeditor5-core/dist/index.js';
|
6
|
+
import { EditorUI, EditorUIView, InlineEditableUIView, BalloonToolbar } from '@ckeditor/ckeditor5-ui/dist/index.js';
|
7
|
+
import { CKEditorError, getDataFromElement } from '@ckeditor/ckeditor5-utils/dist/index.js';
|
8
|
+
import { EditorWatchdog, ContextWatchdog } from '@ckeditor/ckeditor5-watchdog/dist/index.js';
|
9
|
+
import { enablePlaceholder } from '@ckeditor/ckeditor5-engine/dist/index.js';
|
10
|
+
import { isElement as isElement$1 } from 'lodash-es';
|
11
|
+
|
12
|
+
class BalloonEditorUI extends EditorUI {
|
13
|
+
/**
|
14
|
+
* @inheritDoc
|
15
|
+
*/ get element() {
|
16
|
+
return this.view.editable.element;
|
17
|
+
}
|
18
|
+
/**
|
19
|
+
* Initializes the UI.
|
20
|
+
*/ init() {
|
21
|
+
const editor = this.editor;
|
22
|
+
const view = this.view;
|
23
|
+
const editingView = editor.editing.view;
|
24
|
+
const editable = view.editable;
|
25
|
+
const editingRoot = editingView.document.getRoot();
|
26
|
+
// The editable UI and editing root should share the same name. Then name is used
|
27
|
+
// to recognize the particular editable, for instance in ARIA attributes.
|
28
|
+
editable.name = editingRoot.rootName;
|
29
|
+
view.render();
|
30
|
+
// The editable UI element in DOM is available for sure only after the editor UI view has been rendered.
|
31
|
+
// But it can be available earlier if a DOM element has been passed to BalloonEditor.create().
|
32
|
+
const editableElement = editable.element;
|
33
|
+
// Register the editable UI view in the editor. A single editor instance can aggregate multiple
|
34
|
+
// editable areas (roots) but the balloon editor has only one.
|
35
|
+
this.setEditableElement(editable.name, editableElement);
|
36
|
+
// Let the editable UI element respond to the changes in the global editor focus
|
37
|
+
// tracker. It has been added to the same tracker a few lines above but, in reality, there are
|
38
|
+
// many focusable areas in the editor, like balloons, toolbars or dropdowns and as long
|
39
|
+
// as they have focus, the editable should act like it is focused too (although technically
|
40
|
+
// it isn't), e.g. by setting the proper CSS class, visually announcing focus to the user.
|
41
|
+
// Doing otherwise will result in editable focus styles disappearing, once e.g. the
|
42
|
+
// toolbar gets focused.
|
43
|
+
editable.bind('isFocused').to(this.focusTracker);
|
44
|
+
// Bind the editable UI element to the editing view, making it an end– and entry–point
|
45
|
+
// of the editor's engine. This is where the engine meets the UI.
|
46
|
+
editingView.attachDomRoot(editableElement);
|
47
|
+
this._initPlaceholder();
|
48
|
+
this.fire('ready');
|
49
|
+
}
|
50
|
+
/**
|
51
|
+
* @inheritDoc
|
52
|
+
*/ destroy() {
|
53
|
+
super.destroy();
|
54
|
+
const view = this.view;
|
55
|
+
const editingView = this.editor.editing.view;
|
56
|
+
editingView.detachDomRoot(view.editable.name);
|
57
|
+
view.destroy();
|
58
|
+
}
|
59
|
+
/**
|
60
|
+
* Enable the placeholder text on the editing root.
|
61
|
+
*/ _initPlaceholder() {
|
62
|
+
const editor = this.editor;
|
63
|
+
const editingView = editor.editing.view;
|
64
|
+
const editingRoot = editingView.document.getRoot();
|
65
|
+
const placeholder = editor.config.get('placeholder');
|
66
|
+
if (placeholder) {
|
67
|
+
const placeholderText = typeof placeholder === 'string' ? placeholder : placeholder[editingRoot.rootName];
|
68
|
+
if (placeholderText) {
|
69
|
+
editingRoot.placeholder = placeholderText;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
enablePlaceholder({
|
73
|
+
view: editingView,
|
74
|
+
element: editingRoot,
|
75
|
+
isDirectHost: false,
|
76
|
+
keepOnFocus: true
|
77
|
+
});
|
78
|
+
}
|
79
|
+
/**
|
80
|
+
* Creates an instance of the balloon editor UI class.
|
81
|
+
*
|
82
|
+
* @param editor The editor instance.
|
83
|
+
* @param view The view of the UI.
|
84
|
+
*/ constructor(editor, view){
|
85
|
+
super(editor);
|
86
|
+
this.view = view;
|
87
|
+
}
|
88
|
+
}
|
89
|
+
|
90
|
+
class BalloonEditorUIView extends EditorUIView {
|
91
|
+
/**
|
92
|
+
* @inheritDoc
|
93
|
+
*/ render() {
|
94
|
+
super.render();
|
95
|
+
this.registerChild(this.editable);
|
96
|
+
}
|
97
|
+
/**
|
98
|
+
* Creates an instance of the balloon editor UI view.
|
99
|
+
*
|
100
|
+
* @param locale The {@link module:core/editor/editor~Editor#locale} instance.
|
101
|
+
* @param editingView The editing view instance this view is related to.
|
102
|
+
* @param editableElement The editable element. If not specified, it will be automatically created by
|
103
|
+
* {@link module:ui/editableui/editableuiview~EditableUIView}. Otherwise, the given element will be used.
|
104
|
+
*/ constructor(locale, editingView, editableElement){
|
105
|
+
super(locale);
|
106
|
+
const t = locale.t;
|
107
|
+
this.editable = new InlineEditableUIView(locale, editingView, editableElement, {
|
108
|
+
label: (editableView)=>{
|
109
|
+
return t('Rich Text Editor. Editing area: %0', editableView.name);
|
110
|
+
}
|
111
|
+
});
|
112
|
+
}
|
113
|
+
}
|
114
|
+
|
115
|
+
/**
|
116
|
+
* The {@glink installation/getting-started/predefined-builds#balloon-editor balloon editor}
|
117
|
+
* implementation (Medium-like editor).
|
118
|
+
* It uses an inline editable and a toolbar based on the {@link module:ui/toolbar/balloon/balloontoolbar~BalloonToolbar}.
|
119
|
+
* See the {@glink examples/builds/balloon-editor demo}.
|
120
|
+
*
|
121
|
+
* In order to create a balloon editor instance, use the static
|
122
|
+
* {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`} method.
|
123
|
+
*
|
124
|
+
* # Balloon editor and balloon build
|
125
|
+
*
|
126
|
+
* The balloon editor can be used directly from source (if you installed the
|
127
|
+
* [`@ckeditor/ckeditor5-editor-balloon`](https://www.npmjs.com/package/@ckeditor/ckeditor5-editor-balloon) package)
|
128
|
+
* but it is also available in the {@glink installation/getting-started/predefined-builds#balloon-editor balloon build}.
|
129
|
+
*
|
130
|
+
* {@glink installation/getting-started/predefined-builds Builds}
|
131
|
+
* are ready-to-use editors with plugins bundled in. When using the editor from
|
132
|
+
* source you need to take care of loading all plugins by yourself
|
133
|
+
* (through the {@link module:core/editor/editorconfig~EditorConfig#plugins `config.plugins`} option).
|
134
|
+
* Using the editor from source gives much better flexibility and allows easier customization.
|
135
|
+
*
|
136
|
+
* Read more about initializing the editor from source or as a build in
|
137
|
+
* {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`}.
|
138
|
+
*/ class BalloonEditor extends ElementApiMixin(Editor) {
|
139
|
+
/**
|
140
|
+
* Destroys the editor instance, releasing all resources used by it.
|
141
|
+
*
|
142
|
+
* Updates the original editor element with the data if the
|
143
|
+
* {@link module:core/editor/editorconfig~EditorConfig#updateSourceElementOnDestroy `updateSourceElementOnDestroy`}
|
144
|
+
* configuration option is set to `true`.
|
145
|
+
*/ destroy() {
|
146
|
+
// Cache the data, then destroy.
|
147
|
+
// It's safe to assume that the model->view conversion will not work after super.destroy().
|
148
|
+
const data = this.getData();
|
149
|
+
this.ui.destroy();
|
150
|
+
return super.destroy().then(()=>{
|
151
|
+
if (this.sourceElement) {
|
152
|
+
this.updateSourceElement(data);
|
153
|
+
}
|
154
|
+
});
|
155
|
+
}
|
156
|
+
/**
|
157
|
+
* Creates a new balloon editor instance.
|
158
|
+
*
|
159
|
+
* There are three general ways how the editor can be initialized.
|
160
|
+
*
|
161
|
+
* # Using an existing DOM element (and loading data from it)
|
162
|
+
*
|
163
|
+
* You can initialize the editor using an existing DOM element:
|
164
|
+
*
|
165
|
+
* ```ts
|
166
|
+
* BalloonEditor
|
167
|
+
* .create( document.querySelector( '#editor' ) )
|
168
|
+
* .then( editor => {
|
169
|
+
* console.log( 'Editor was initialized', editor );
|
170
|
+
* } )
|
171
|
+
* .catch( err => {
|
172
|
+
* console.error( err.stack );
|
173
|
+
* } );
|
174
|
+
* ```
|
175
|
+
*
|
176
|
+
* The element's content will be used as the editor data and the element will become the editable element.
|
177
|
+
*
|
178
|
+
* # Creating a detached editor
|
179
|
+
*
|
180
|
+
* Alternatively, you can initialize the editor by passing the initial data directly as a string.
|
181
|
+
* In this case, the editor will render an element that must be inserted into the DOM for the editor to work properly:
|
182
|
+
*
|
183
|
+
* ```ts
|
184
|
+
* BalloonEditor
|
185
|
+
* .create( '<p>Hello world!</p>' )
|
186
|
+
* .then( editor => {
|
187
|
+
* console.log( 'Editor was initialized', editor );
|
188
|
+
*
|
189
|
+
* // Initial data was provided so the editor UI element needs to be added manually to the DOM.
|
190
|
+
* document.body.appendChild( editor.ui.element );
|
191
|
+
* } )
|
192
|
+
* .catch( err => {
|
193
|
+
* console.error( err.stack );
|
194
|
+
* } );
|
195
|
+
* ```
|
196
|
+
*
|
197
|
+
* This lets you dynamically append the editor to your web page whenever it is convenient for you. You may use this method if your
|
198
|
+
* web page content is generated on the client side and the DOM structure is not ready at the moment when you initialize the editor.
|
199
|
+
*
|
200
|
+
* # Using an existing DOM element (and data provided in `config.initialData`)
|
201
|
+
*
|
202
|
+
* You can also mix these two ways by providing a DOM element to be used and passing the initial data through the configuration:
|
203
|
+
*
|
204
|
+
* ```ts
|
205
|
+
* BalloonEditor
|
206
|
+
* .create( document.querySelector( '#editor' ), {
|
207
|
+
* initialData: '<h2>Initial data</h2><p>Foo bar.</p>'
|
208
|
+
* } )
|
209
|
+
* .then( editor => {
|
210
|
+
* console.log( 'Editor was initialized', editor );
|
211
|
+
* } )
|
212
|
+
* .catch( err => {
|
213
|
+
* console.error( err.stack );
|
214
|
+
* } );
|
215
|
+
* ```
|
216
|
+
*
|
217
|
+
* This method can be used to initialize the editor on an existing element with the specified content in case if your integration
|
218
|
+
* makes it difficult to set the content of the source element.
|
219
|
+
*
|
220
|
+
* Note that an error will be thrown if you pass the initial data both as the first parameter and also in the configuration.
|
221
|
+
*
|
222
|
+
* # Configuring the editor
|
223
|
+
*
|
224
|
+
* See the {@link module:core/editor/editorconfig~EditorConfig editor configuration documentation} to learn more about
|
225
|
+
* customizing plugins, toolbar and more.
|
226
|
+
*
|
227
|
+
* # Using the editor from source
|
228
|
+
*
|
229
|
+
* The code samples listed in the previous sections of this documentation assume that you are using an
|
230
|
+
* {@glink installation/getting-started/predefined-builds editor build} (for example – `@ckeditor/ckeditor5-build-balloon`).
|
231
|
+
*
|
232
|
+
* If you want to use the balloon editor from source (`@ckeditor/ckeditor5-editor-balloon/src/ballooneditor`),
|
233
|
+
* you need to define the list of
|
234
|
+
* {@link module:core/editor/editorconfig~EditorConfig#plugins plugins to be initialized} and
|
235
|
+
* {@link module:core/editor/editorconfig~EditorConfig#toolbar toolbar items}. Read more about using the editor from
|
236
|
+
* source in the {@glink installation/advanced/alternative-setups/integrating-from-source-webpack dedicated guide}.
|
237
|
+
*
|
238
|
+
* @param sourceElementOrData The DOM element that will be the source for the created editor
|
239
|
+
* or the editor's initial data.
|
240
|
+
*
|
241
|
+
* If a DOM element is passed, its content will be automatically loaded to the editor upon initialization.
|
242
|
+
* The editor data will be set back to the original element once the editor is destroyed only if the
|
243
|
+
* {@link module:core/editor/editorconfig~EditorConfig#updateSourceElementOnDestroy updateSourceElementOnDestroy}
|
244
|
+
* option is set to `true`.
|
245
|
+
*
|
246
|
+
* If the initial data is passed, a detached editor will be created. In this case you need to insert it into the DOM manually.
|
247
|
+
* It is available under the {@link module:editor-balloon/ballooneditorui~BalloonEditorUI#element `editor.ui.element`} property.
|
248
|
+
*
|
249
|
+
* @param config The editor configuration.
|
250
|
+
* @returns A promise resolved once the editor is ready. The promise resolves with the created editor instance.
|
251
|
+
*/ static create(sourceElementOrData, config = {}) {
|
252
|
+
return new Promise((resolve)=>{
|
253
|
+
if (isElement(sourceElementOrData) && sourceElementOrData.tagName === 'TEXTAREA') {
|
254
|
+
// Documented in core/editor/editor.js
|
255
|
+
// eslint-disable-next-line ckeditor5-rules/ckeditor-error-message
|
256
|
+
throw new CKEditorError('editor-wrong-element', null);
|
257
|
+
}
|
258
|
+
const editor = new this(sourceElementOrData, config);
|
259
|
+
resolve(editor.initPlugins().then(()=>editor.ui.init()).then(()=>editor.data.init(editor.config.get('initialData'))).then(()=>editor.fire('ready')).then(()=>editor));
|
260
|
+
});
|
261
|
+
}
|
262
|
+
/**
|
263
|
+
* Creates an instance of the balloon editor.
|
264
|
+
*
|
265
|
+
* **Note:** do not use the constructor to create editor instances. Use the static
|
266
|
+
* {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`} method instead.
|
267
|
+
*
|
268
|
+
* @param sourceElementOrData The DOM element that will be the source for the created editor
|
269
|
+
* (on which the editor will be initialized) or initial data for the editor. For more information see
|
270
|
+
* {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`}.
|
271
|
+
* @param config The editor configuration.
|
272
|
+
*/ constructor(sourceElementOrData, config = {}){
|
273
|
+
// If both `config.initialData` is set and initial data is passed as the constructor parameter, then throw.
|
274
|
+
if (!isElement(sourceElementOrData) && config.initialData !== undefined) {
|
275
|
+
// Documented in core/editor/editorconfig.jsdoc.
|
276
|
+
// eslint-disable-next-line ckeditor5-rules/ckeditor-error-message
|
277
|
+
throw new CKEditorError('editor-create-initial-data', null);
|
278
|
+
}
|
279
|
+
super(config);
|
280
|
+
if (this.config.get('initialData') === undefined) {
|
281
|
+
this.config.set('initialData', getInitialData(sourceElementOrData));
|
282
|
+
}
|
283
|
+
if (isElement(sourceElementOrData)) {
|
284
|
+
this.sourceElement = sourceElementOrData;
|
285
|
+
secureSourceElement(this, sourceElementOrData);
|
286
|
+
}
|
287
|
+
const plugins = this.config.get('plugins');
|
288
|
+
plugins.push(BalloonToolbar);
|
289
|
+
this.config.set('plugins', plugins);
|
290
|
+
this.config.define('balloonToolbar', this.config.get('toolbar'));
|
291
|
+
this.model.document.createRoot();
|
292
|
+
const view = new BalloonEditorUIView(this.locale, this.editing.view, this.sourceElement);
|
293
|
+
this.ui = new BalloonEditorUI(this, view);
|
294
|
+
attachToForm(this);
|
295
|
+
}
|
296
|
+
}
|
297
|
+
/**
|
298
|
+
* The {@link module:core/context~Context} class.
|
299
|
+
*
|
300
|
+
* Exposed as static editor field for easier access in editor builds.
|
301
|
+
*/ BalloonEditor.Context = Context;
|
302
|
+
/**
|
303
|
+
* The {@link module:watchdog/editorwatchdog~EditorWatchdog} class.
|
304
|
+
*
|
305
|
+
* Exposed as static editor field for easier access in editor builds.
|
306
|
+
*/ BalloonEditor.EditorWatchdog = EditorWatchdog;
|
307
|
+
/**
|
308
|
+
* The {@link module:watchdog/contextwatchdog~ContextWatchdog} class.
|
309
|
+
*
|
310
|
+
* Exposed as static editor field for easier access in editor builds.
|
311
|
+
*/ BalloonEditor.ContextWatchdog = ContextWatchdog;
|
312
|
+
function getInitialData(sourceElementOrData) {
|
313
|
+
return isElement(sourceElementOrData) ? getDataFromElement(sourceElementOrData) : sourceElementOrData;
|
314
|
+
}
|
315
|
+
function isElement(value) {
|
316
|
+
return isElement$1(value);
|
317
|
+
}
|
318
|
+
|
319
|
+
export { BalloonEditor };
|
320
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["index.js","../src/ballooneditorui.ts","../src/ballooneditoruiview.ts","../src/ballooneditor.ts"],"names":["BalloonEditorUI","EditorUI","element","view","editable","init","editor","editingView","editing","editingRoot","document","getRoot","name","rootName","render","editableElement","setEditableElement","bind","to","focusTracker","attachDomRoot","_initPlaceholder","fire","destroy","detachDomRoot","placeholder","config","get","placeholderText","enablePlaceholder","isDirectHost","keepOnFocus","constructor","BalloonEditorUIView","EditorUIView","registerChild","locale","t","InlineEditableUIView","label","editableView","BalloonEditor","ElementApiMixin","Editor","data","getData","ui","then","sourceElement","updateSourceElement","create","sourceElementOrData","Promise","resolve","isElement","tagName","CKEditorError","initPlugins","initialData","undefined","set","getInitialData","secureSourceElement","plugins","push","BalloonToolbar","define","model","createRoot","attachToForm","Context","EditorWatchdog","ContextWatchdog","getDataFromElement","value","_isElement"],"mappings":"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","file":"index.js.map","sourcesContent":["import { ElementApiMixin, Editor, secureSourceElement, attachToForm, Context } from '@ckeditor/ckeditor5-core/dist/index.js';\nimport { EditorUI, EditorUIView, InlineEditableUIView, BalloonToolbar } from '@ckeditor/ckeditor5-ui/dist/index.js';\nimport { CKEditorError, getDataFromElement } from '@ckeditor/ckeditor5-utils/dist/index.js';\nimport { EditorWatchdog, ContextWatchdog } from '@ckeditor/ckeditor5-watchdog/dist/index.js';\nimport { enablePlaceholder } from '@ckeditor/ckeditor5-engine/dist/index.js';\nimport { isElement as isElement$1 } from 'lodash-es';\n\nclass BalloonEditorUI extends EditorUI {\n /**\n * @inheritDoc\n */ get element() {\n return this.view.editable.element;\n }\n /**\n * Initializes the UI.\n */ init() {\n const editor = this.editor;\n const view = this.view;\n const editingView = editor.editing.view;\n const editable = view.editable;\n const editingRoot = editingView.document.getRoot();\n // The editable UI and editing root should share the same name. Then name is used\n // to recognize the particular editable, for instance in ARIA attributes.\n editable.name = editingRoot.rootName;\n view.render();\n // The editable UI element in DOM is available for sure only after the editor UI view has been rendered.\n // But it can be available earlier if a DOM element has been passed to BalloonEditor.create().\n const editableElement = editable.element;\n // Register the editable UI view in the editor. A single editor instance can aggregate multiple\n // editable areas (roots) but the balloon editor has only one.\n this.setEditableElement(editable.name, editableElement);\n // Let the editable UI element respond to the changes in the global editor focus\n // tracker. It has been added to the same tracker a few lines above but, in reality, there are\n // many focusable areas in the editor, like balloons, toolbars or dropdowns and as long\n // as they have focus, the editable should act like it is focused too (although technically\n // it isn't), e.g. by setting the proper CSS class, visually announcing focus to the user.\n // Doing otherwise will result in editable focus styles disappearing, once e.g. the\n // toolbar gets focused.\n editable.bind('isFocused').to(this.focusTracker);\n // Bind the editable UI element to the editing view, making it an end– and entry–point\n // of the editor's engine. This is where the engine meets the UI.\n editingView.attachDomRoot(editableElement);\n this._initPlaceholder();\n this.fire('ready');\n }\n /**\n * @inheritDoc\n */ destroy() {\n super.destroy();\n const view = this.view;\n const editingView = this.editor.editing.view;\n editingView.detachDomRoot(view.editable.name);\n view.destroy();\n }\n /**\n * Enable the placeholder text on the editing root.\n */ _initPlaceholder() {\n const editor = this.editor;\n const editingView = editor.editing.view;\n const editingRoot = editingView.document.getRoot();\n const placeholder = editor.config.get('placeholder');\n if (placeholder) {\n const placeholderText = typeof placeholder === 'string' ? placeholder : placeholder[editingRoot.rootName];\n if (placeholderText) {\n editingRoot.placeholder = placeholderText;\n }\n }\n enablePlaceholder({\n view: editingView,\n element: editingRoot,\n isDirectHost: false,\n keepOnFocus: true\n });\n }\n /**\n * Creates an instance of the balloon editor UI class.\n *\n * @param editor The editor instance.\n * @param view The view of the UI.\n */ constructor(editor, view){\n super(editor);\n this.view = view;\n }\n}\n\nclass BalloonEditorUIView extends EditorUIView {\n /**\n * @inheritDoc\n */ render() {\n super.render();\n this.registerChild(this.editable);\n }\n /**\n * Creates an instance of the balloon editor UI view.\n *\n * @param locale The {@link module:core/editor/editor~Editor#locale} instance.\n * @param editingView The editing view instance this view is related to.\n * @param editableElement The editable element. If not specified, it will be automatically created by\n * {@link module:ui/editableui/editableuiview~EditableUIView}. Otherwise, the given element will be used.\n */ constructor(locale, editingView, editableElement){\n super(locale);\n const t = locale.t;\n this.editable = new InlineEditableUIView(locale, editingView, editableElement, {\n label: (editableView)=>{\n return t('Rich Text Editor. Editing area: %0', editableView.name);\n }\n });\n }\n}\n\n/**\n * The {@glink installation/getting-started/predefined-builds#balloon-editor balloon editor}\n * implementation (Medium-like editor).\n * It uses an inline editable and a toolbar based on the {@link module:ui/toolbar/balloon/balloontoolbar~BalloonToolbar}.\n * See the {@glink examples/builds/balloon-editor demo}.\n *\n * In order to create a balloon editor instance, use the static\n * {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`} method.\n *\n * # Balloon editor and balloon build\n *\n * The balloon editor can be used directly from source (if you installed the\n * [`@ckeditor/ckeditor5-editor-balloon`](https://www.npmjs.com/package/@ckeditor/ckeditor5-editor-balloon) package)\n * but it is also available in the {@glink installation/getting-started/predefined-builds#balloon-editor balloon build}.\n *\n * {@glink installation/getting-started/predefined-builds Builds}\n * are ready-to-use editors with plugins bundled in. When using the editor from\n * source you need to take care of loading all plugins by yourself\n * (through the {@link module:core/editor/editorconfig~EditorConfig#plugins `config.plugins`} option).\n * Using the editor from source gives much better flexibility and allows easier customization.\n *\n * Read more about initializing the editor from source or as a build in\n * {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`}.\n */ class BalloonEditor extends ElementApiMixin(Editor) {\n /**\n * Destroys the editor instance, releasing all resources used by it.\n *\n * Updates the original editor element with the data if the\n * {@link module:core/editor/editorconfig~EditorConfig#updateSourceElementOnDestroy `updateSourceElementOnDestroy`}\n * configuration option is set to `true`.\n */ destroy() {\n // Cache the data, then destroy.\n // It's safe to assume that the model->view conversion will not work after super.destroy().\n const data = this.getData();\n this.ui.destroy();\n return super.destroy().then(()=>{\n if (this.sourceElement) {\n this.updateSourceElement(data);\n }\n });\n }\n /**\n * Creates a new balloon editor instance.\n *\n * There are three general ways how the editor can be initialized.\n *\n * # Using an existing DOM element (and loading data from it)\n *\n * You can initialize the editor using an existing DOM element:\n *\n * ```ts\n * BalloonEditor\n * \t.create( document.querySelector( '#editor' ) )\n * \t.then( editor => {\n * \t\tconsole.log( 'Editor was initialized', editor );\n * \t} )\n * \t.catch( err => {\n * \t\tconsole.error( err.stack );\n * \t} );\n * ```\n *\n * The element's content will be used as the editor data and the element will become the editable element.\n *\n * # Creating a detached editor\n *\n * Alternatively, you can initialize the editor by passing the initial data directly as a string.\n * In this case, the editor will render an element that must be inserted into the DOM for the editor to work properly:\n *\n * ```ts\n * BalloonEditor\n * \t.create( '<p>Hello world!</p>' )\n * \t.then( editor => {\n * \t\tconsole.log( 'Editor was initialized', editor );\n *\n * \t\t// Initial data was provided so the editor UI element needs to be added manually to the DOM.\n * \t\tdocument.body.appendChild( editor.ui.element );\n * \t} )\n * \t.catch( err => {\n * \t\tconsole.error( err.stack );\n * \t} );\n * ```\n *\n * This lets you dynamically append the editor to your web page whenever it is convenient for you. You may use this method if your\n * web page content is generated on the client side and the DOM structure is not ready at the moment when you initialize the editor.\n *\n * # Using an existing DOM element (and data provided in `config.initialData`)\n *\n * You can also mix these two ways by providing a DOM element to be used and passing the initial data through the configuration:\n *\n * ```ts\n * BalloonEditor\n * \t.create( document.querySelector( '#editor' ), {\n * \t\tinitialData: '<h2>Initial data</h2><p>Foo bar.</p>'\n * \t} )\n * \t.then( editor => {\n * \t\tconsole.log( 'Editor was initialized', editor );\n * \t} )\n * \t.catch( err => {\n * \t\tconsole.error( err.stack );\n * \t} );\n * ```\n *\n * This method can be used to initialize the editor on an existing element with the specified content in case if your integration\n * makes it difficult to set the content of the source element.\n *\n * Note that an error will be thrown if you pass the initial data both as the first parameter and also in the configuration.\n *\n * # Configuring the editor\n *\n * See the {@link module:core/editor/editorconfig~EditorConfig editor configuration documentation} to learn more about\n * customizing plugins, toolbar and more.\n *\n * # Using the editor from source\n *\n * The code samples listed in the previous sections of this documentation assume that you are using an\n * {@glink installation/getting-started/predefined-builds editor build} (for example – `@ckeditor/ckeditor5-build-balloon`).\n *\n * If you want to use the balloon editor from source (`@ckeditor/ckeditor5-editor-balloon/src/ballooneditor`),\n * you need to define the list of\n * {@link module:core/editor/editorconfig~EditorConfig#plugins plugins to be initialized} and\n * {@link module:core/editor/editorconfig~EditorConfig#toolbar toolbar items}. Read more about using the editor from\n * source in the {@glink installation/advanced/alternative-setups/integrating-from-source-webpack dedicated guide}.\n *\n * @param sourceElementOrData The DOM element that will be the source for the created editor\n * or the editor's initial data.\n *\n * If a DOM element is passed, its content will be automatically loaded to the editor upon initialization.\n * The editor data will be set back to the original element once the editor is destroyed only if the\n * {@link module:core/editor/editorconfig~EditorConfig#updateSourceElementOnDestroy updateSourceElementOnDestroy}\n * option is set to `true`.\n *\n * If the initial data is passed, a detached editor will be created. In this case you need to insert it into the DOM manually.\n * It is available under the {@link module:editor-balloon/ballooneditorui~BalloonEditorUI#element `editor.ui.element`} property.\n *\n * @param config The editor configuration.\n * @returns A promise resolved once the editor is ready. The promise resolves with the created editor instance.\n */ static create(sourceElementOrData, config = {}) {\n return new Promise((resolve)=>{\n if (isElement(sourceElementOrData) && sourceElementOrData.tagName === 'TEXTAREA') {\n // Documented in core/editor/editor.js\n // eslint-disable-next-line ckeditor5-rules/ckeditor-error-message\n throw new CKEditorError('editor-wrong-element', null);\n }\n const editor = new this(sourceElementOrData, config);\n resolve(editor.initPlugins().then(()=>editor.ui.init()).then(()=>editor.data.init(editor.config.get('initialData'))).then(()=>editor.fire('ready')).then(()=>editor));\n });\n }\n /**\n * Creates an instance of the balloon editor.\n *\n * **Note:** do not use the constructor to create editor instances. Use the static\n * {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`} method instead.\n *\n * @param sourceElementOrData The DOM element that will be the source for the created editor\n * (on which the editor will be initialized) or initial data for the editor. For more information see\n * {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`}.\n * @param config The editor configuration.\n */ constructor(sourceElementOrData, config = {}){\n // If both `config.initialData` is set and initial data is passed as the constructor parameter, then throw.\n if (!isElement(sourceElementOrData) && config.initialData !== undefined) {\n // Documented in core/editor/editorconfig.jsdoc.\n // eslint-disable-next-line ckeditor5-rules/ckeditor-error-message\n throw new CKEditorError('editor-create-initial-data', null);\n }\n super(config);\n if (this.config.get('initialData') === undefined) {\n this.config.set('initialData', getInitialData(sourceElementOrData));\n }\n if (isElement(sourceElementOrData)) {\n this.sourceElement = sourceElementOrData;\n secureSourceElement(this, sourceElementOrData);\n }\n const plugins = this.config.get('plugins');\n plugins.push(BalloonToolbar);\n this.config.set('plugins', plugins);\n this.config.define('balloonToolbar', this.config.get('toolbar'));\n this.model.document.createRoot();\n const view = new BalloonEditorUIView(this.locale, this.editing.view, this.sourceElement);\n this.ui = new BalloonEditorUI(this, view);\n attachToForm(this);\n }\n}\n/**\n * The {@link module:core/context~Context} class.\n *\n * Exposed as static editor field for easier access in editor builds.\n */ BalloonEditor.Context = Context;\n/**\n * The {@link module:watchdog/editorwatchdog~EditorWatchdog} class.\n *\n * Exposed as static editor field for easier access in editor builds.\n */ BalloonEditor.EditorWatchdog = EditorWatchdog;\n/**\n * The {@link module:watchdog/contextwatchdog~ContextWatchdog} class.\n *\n * Exposed as static editor field for easier access in editor builds.\n */ BalloonEditor.ContextWatchdog = ContextWatchdog;\nfunction getInitialData(sourceElementOrData) {\n return isElement(sourceElementOrData) ? getDataFromElement(sourceElementOrData) : sourceElementOrData;\n}\nfunction isElement(value) {\n return isElement$1(value);\n}\n\nexport { BalloonEditor };\n//# sourceMappingURL=index.js.map\n","/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module editor-balloon/ballooneditorui\n */\n\nimport {\n\ttype Editor\n} from 'ckeditor5/src/core.js';\n\nimport {\n\tEditorUI,\n\ttype EditorUIReadyEvent\n} from 'ckeditor5/src/ui.js';\n\nimport { enablePlaceholder } from 'ckeditor5/src/engine.js';\n\nimport type BalloonEditorUIView from './ballooneditoruiview.js';\n\n/**\n * The balloon editor UI class.\n */\nexport default class BalloonEditorUI extends EditorUI {\n\t/**\n\t * The main (top–most) view of the editor UI.\n\t */\n\tpublic readonly view: BalloonEditorUIView;\n\n\t/**\n\t * Creates an instance of the balloon editor UI class.\n\t *\n\t * @param editor The editor instance.\n\t * @param view The view of the UI.\n\t */\n\tconstructor( editor: Editor, view: BalloonEditorUIView ) {\n\t\tsuper( editor );\n\n\t\tthis.view = view;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override get element(): HTMLElement | null {\n\t\treturn this.view.editable.element;\n\t}\n\n\t/**\n\t * Initializes the UI.\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst view = this.view;\n\t\tconst editingView = editor.editing.view;\n\t\tconst editable = view.editable;\n\t\tconst editingRoot = editingView.document.getRoot()!;\n\n\t\t// The editable UI and editing root should share the same name. Then name is used\n\t\t// to recognize the particular editable, for instance in ARIA attributes.\n\t\teditable.name = editingRoot.rootName;\n\n\t\tview.render();\n\n\t\t// The editable UI element in DOM is available for sure only after the editor UI view has been rendered.\n\t\t// But it can be available earlier if a DOM element has been passed to BalloonEditor.create().\n\t\tconst editableElement = editable.element!;\n\n\t\t// Register the editable UI view in the editor. A single editor instance can aggregate multiple\n\t\t// editable areas (roots) but the balloon editor has only one.\n\t\tthis.setEditableElement( editable.name, editableElement );\n\n\t\t// Let the editable UI element respond to the changes in the global editor focus\n\t\t// tracker. It has been added to the same tracker a few lines above but, in reality, there are\n\t\t// many focusable areas in the editor, like balloons, toolbars or dropdowns and as long\n\t\t// as they have focus, the editable should act like it is focused too (although technically\n\t\t// it isn't), e.g. by setting the proper CSS class, visually announcing focus to the user.\n\t\t// Doing otherwise will result in editable focus styles disappearing, once e.g. the\n\t\t// toolbar gets focused.\n\t\teditable.bind( 'isFocused' ).to( this.focusTracker );\n\n\t\t// Bind the editable UI element to the editing view, making it an end– and entry–point\n\t\t// of the editor's engine. This is where the engine meets the UI.\n\t\teditingView.attachDomRoot( editableElement );\n\n\t\tthis._initPlaceholder();\n\t\tthis.fire<EditorUIReadyEvent>( 'ready' );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\tsuper.destroy();\n\n\t\tconst view = this.view;\n\t\tconst editingView = this.editor.editing.view;\n\n\t\teditingView.detachDomRoot( view.editable.name! );\n\t\tview.destroy();\n\t}\n\n\t/**\n\t * Enable the placeholder text on the editing root.\n\t */\n\tprivate _initPlaceholder(): void {\n\t\tconst editor = this.editor;\n\t\tconst editingView = editor.editing.view;\n\t\tconst editingRoot = editingView.document.getRoot()!;\n\t\tconst placeholder = editor.config.get( 'placeholder' );\n\n\t\tif ( placeholder ) {\n\t\t\tconst placeholderText = typeof placeholder === 'string' ? placeholder : placeholder[ editingRoot.rootName ];\n\n\t\t\tif ( placeholderText ) {\n\t\t\t\teditingRoot.placeholder = placeholderText;\n\t\t\t}\n\t\t}\n\n\t\tenablePlaceholder( {\n\t\t\tview: editingView,\n\t\t\telement: editingRoot,\n\t\t\tisDirectHost: false,\n\t\t\tkeepOnFocus: true\n\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module editor-balloon/ballooneditoruiview\n */\n\nimport { EditorUIView, InlineEditableUIView } from 'ckeditor5/src/ui.js';\nimport type { Locale } from 'ckeditor5/src/utils.js';\nimport type { EditingView } from 'ckeditor5/src/engine.js';\n\n/**\n * Contextual editor UI view. Uses the {@link module:ui/editableui/inline/inlineeditableuiview~InlineEditableUIView}.\n */\nexport default class BalloonEditorUIView extends EditorUIView {\n\t/**\n\t * Editable UI view.\n\t */\n\tpublic readonly editable: InlineEditableUIView;\n\n\t/**\n\t * Creates an instance of the balloon editor UI view.\n\t *\n\t * @param locale The {@link module:core/editor/editor~Editor#locale} instance.\n\t * @param editingView The editing view instance this view is related to.\n\t * @param editableElement The editable element. If not specified, it will be automatically created by\n\t * {@link module:ui/editableui/editableuiview~EditableUIView}. Otherwise, the given element will be used.\n\t */\n\tconstructor(\n\t\tlocale: Locale,\n\t\teditingView: EditingView,\n\t\teditableElement?: HTMLElement\n\t) {\n\t\tsuper( locale );\n\n\t\tconst t = locale.t;\n\n\t\tthis.editable = new InlineEditableUIView( locale, editingView, editableElement, {\n\t\t\tlabel: editableView => {\n\t\t\t\treturn t( 'Rich Text Editor. Editing area: %0', editableView.name! );\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override render(): void {\n\t\tsuper.render();\n\n\t\tthis.registerChild( this.editable );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module editor-balloon/ballooneditor\n */\n\nimport {\n\tEditor,\n\tContext,\n\tElementApiMixin,\n\tattachToForm,\n\tsecureSourceElement,\n\ttype EditorConfig,\n\ttype EditorReadyEvent\n} from 'ckeditor5/src/core.js';\n\nimport { BalloonToolbar } from 'ckeditor5/src/ui.js';\nimport { CKEditorError, getDataFromElement } from 'ckeditor5/src/utils.js';\n\nimport { ContextWatchdog, EditorWatchdog } from 'ckeditor5/src/watchdog.js';\n\nimport BalloonEditorUI from './ballooneditorui.js';\nimport BalloonEditorUIView from './ballooneditoruiview.js';\n\nimport { isElement as _isElement } from 'lodash-es';\n\n/**\n * The {@glink installation/getting-started/predefined-builds#balloon-editor balloon editor}\n * implementation (Medium-like editor).\n * It uses an inline editable and a toolbar based on the {@link module:ui/toolbar/balloon/balloontoolbar~BalloonToolbar}.\n * See the {@glink examples/builds/balloon-editor demo}.\n *\n * In order to create a balloon editor instance, use the static\n * {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`} method.\n *\n * # Balloon editor and balloon build\n *\n * The balloon editor can be used directly from source (if you installed the\n * [`@ckeditor/ckeditor5-editor-balloon`](https://www.npmjs.com/package/@ckeditor/ckeditor5-editor-balloon) package)\n * but it is also available in the {@glink installation/getting-started/predefined-builds#balloon-editor balloon build}.\n *\n * {@glink installation/getting-started/predefined-builds Builds}\n * are ready-to-use editors with plugins bundled in. When using the editor from\n * source you need to take care of loading all plugins by yourself\n * (through the {@link module:core/editor/editorconfig~EditorConfig#plugins `config.plugins`} option).\n * Using the editor from source gives much better flexibility and allows easier customization.\n *\n * Read more about initializing the editor from source or as a build in\n * {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`}.\n */\nexport default class BalloonEditor extends ElementApiMixin( Editor ) {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic readonly ui: BalloonEditorUI;\n\n\t/**\n\t * Creates an instance of the balloon editor.\n\t *\n\t * **Note:** do not use the constructor to create editor instances. Use the static\n\t * {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`} method instead.\n\t *\n\t * @param sourceElementOrData The DOM element that will be the source for the created editor\n\t * (on which the editor will be initialized) or initial data for the editor. For more information see\n\t * {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`}.\n\t * @param config The editor configuration.\n\t */\n\tprotected constructor( sourceElementOrData: HTMLElement | string, config: EditorConfig = {} ) {\n\t\t// If both `config.initialData` is set and initial data is passed as the constructor parameter, then throw.\n\t\tif ( !isElement( sourceElementOrData ) && config.initialData !== undefined ) {\n\t\t\t// Documented in core/editor/editorconfig.jsdoc.\n\t\t\t// eslint-disable-next-line ckeditor5-rules/ckeditor-error-message\n\t\t\tthrow new CKEditorError( 'editor-create-initial-data', null );\n\t\t}\n\n\t\tsuper( config );\n\n\t\tif ( this.config.get( 'initialData' ) === undefined ) {\n\t\t\tthis.config.set( 'initialData', getInitialData( sourceElementOrData ) );\n\t\t}\n\n\t\tif ( isElement( sourceElementOrData ) ) {\n\t\t\tthis.sourceElement = sourceElementOrData;\n\t\t\tsecureSourceElement( this, sourceElementOrData );\n\t\t}\n\n\t\tconst plugins = this.config.get( 'plugins' )!;\n\t\tplugins.push( BalloonToolbar );\n\n\t\tthis.config.set( 'plugins', plugins );\n\n\t\tthis.config.define( 'balloonToolbar', this.config.get( 'toolbar' ) );\n\n\t\tthis.model.document.createRoot();\n\n\t\tconst view = new BalloonEditorUIView( this.locale, this.editing.view, this.sourceElement );\n\t\tthis.ui = new BalloonEditorUI( this, view );\n\n\t\tattachToForm( this );\n\t}\n\n\t/**\n\t * Destroys the editor instance, releasing all resources used by it.\n\t *\n\t * Updates the original editor element with the data if the\n\t * {@link module:core/editor/editorconfig~EditorConfig#updateSourceElementOnDestroy `updateSourceElementOnDestroy`}\n\t * configuration option is set to `true`.\n\t */\n\tpublic override destroy(): Promise<unknown> {\n\t\t// Cache the data, then destroy.\n\t\t// It's safe to assume that the model->view conversion will not work after super.destroy().\n\t\tconst data = this.getData();\n\n\t\tthis.ui.destroy();\n\n\t\treturn super.destroy()\n\t\t\t.then( () => {\n\t\t\t\tif ( this.sourceElement ) {\n\t\t\t\t\tthis.updateSourceElement( data );\n\t\t\t\t}\n\t\t\t} );\n\t}\n\n\t/**\n\t * Creates a new balloon editor instance.\n\t *\n\t * There are three general ways how the editor can be initialized.\n\t *\n\t * # Using an existing DOM element (and loading data from it)\n\t *\n\t * You can initialize the editor using an existing DOM element:\n\t *\n\t * ```ts\n\t * BalloonEditor\n\t * \t.create( document.querySelector( '#editor' ) )\n\t * \t.then( editor => {\n\t * \t\tconsole.log( 'Editor was initialized', editor );\n\t * \t} )\n\t * \t.catch( err => {\n\t * \t\tconsole.error( err.stack );\n\t * \t} );\n\t * ```\n\t *\n\t * The element's content will be used as the editor data and the element will become the editable element.\n\t *\n\t * # Creating a detached editor\n\t *\n\t * Alternatively, you can initialize the editor by passing the initial data directly as a string.\n\t * In this case, the editor will render an element that must be inserted into the DOM for the editor to work properly:\n\t *\n\t * ```ts\n\t * BalloonEditor\n\t * \t.create( '<p>Hello world!</p>' )\n\t * \t.then( editor => {\n\t * \t\tconsole.log( 'Editor was initialized', editor );\n\t *\n\t * \t\t// Initial data was provided so the editor UI element needs to be added manually to the DOM.\n\t * \t\tdocument.body.appendChild( editor.ui.element );\n\t * \t} )\n\t * \t.catch( err => {\n\t * \t\tconsole.error( err.stack );\n\t * \t} );\n\t * ```\n\t *\n\t * This lets you dynamically append the editor to your web page whenever it is convenient for you. You may use this method if your\n\t * web page content is generated on the client side and the DOM structure is not ready at the moment when you initialize the editor.\n\t *\n\t * # Using an existing DOM element (and data provided in `config.initialData`)\n\t *\n\t * You can also mix these two ways by providing a DOM element to be used and passing the initial data through the configuration:\n\t *\n\t * ```ts\n\t * BalloonEditor\n\t * \t.create( document.querySelector( '#editor' ), {\n\t * \t\tinitialData: '<h2>Initial data</h2><p>Foo bar.</p>'\n\t * \t} )\n\t * \t.then( editor => {\n\t * \t\tconsole.log( 'Editor was initialized', editor );\n\t * \t} )\n\t * \t.catch( err => {\n\t * \t\tconsole.error( err.stack );\n\t * \t} );\n\t * ```\n\t *\n\t * This method can be used to initialize the editor on an existing element with the specified content in case if your integration\n\t * makes it difficult to set the content of the source element.\n\t *\n\t * Note that an error will be thrown if you pass the initial data both as the first parameter and also in the configuration.\n\t *\n\t * # Configuring the editor\n\t *\n\t * See the {@link module:core/editor/editorconfig~EditorConfig editor configuration documentation} to learn more about\n\t * customizing plugins, toolbar and more.\n\t *\n\t * # Using the editor from source\n\t *\n\t * The code samples listed in the previous sections of this documentation assume that you are using an\n\t * {@glink installation/getting-started/predefined-builds editor build} (for example – `@ckeditor/ckeditor5-build-balloon`).\n\t *\n\t * If you want to use the balloon editor from source (`@ckeditor/ckeditor5-editor-balloon/src/ballooneditor`),\n\t * you need to define the list of\n\t * {@link module:core/editor/editorconfig~EditorConfig#plugins plugins to be initialized} and\n\t * {@link module:core/editor/editorconfig~EditorConfig#toolbar toolbar items}. Read more about using the editor from\n\t * source in the {@glink installation/advanced/alternative-setups/integrating-from-source-webpack dedicated guide}.\n\t *\n\t * @param sourceElementOrData The DOM element that will be the source for the created editor\n\t * or the editor's initial data.\n\t *\n\t * If a DOM element is passed, its content will be automatically loaded to the editor upon initialization.\n\t * The editor data will be set back to the original element once the editor is destroyed only if the\n\t * {@link module:core/editor/editorconfig~EditorConfig#updateSourceElementOnDestroy updateSourceElementOnDestroy}\n\t * option is set to `true`.\n\t *\n\t * If the initial data is passed, a detached editor will be created. In this case you need to insert it into the DOM manually.\n\t * It is available under the {@link module:editor-balloon/ballooneditorui~BalloonEditorUI#element `editor.ui.element`} property.\n\t *\n\t * @param config The editor configuration.\n\t * @returns A promise resolved once the editor is ready. The promise resolves with the created editor instance.\n\t */\n\tpublic static override create( sourceElementOrData: HTMLElement | string, config: EditorConfig = {} ): Promise<BalloonEditor> {\n\t\treturn new Promise( resolve => {\n\t\t\tif ( isElement( sourceElementOrData ) && sourceElementOrData.tagName === 'TEXTAREA' ) {\n\t\t\t\t// Documented in core/editor/editor.js\n\t\t\t\t// eslint-disable-next-line ckeditor5-rules/ckeditor-error-message\n\t\t\t\tthrow new CKEditorError( 'editor-wrong-element', null );\n\t\t\t}\n\n\t\t\tconst editor = new this( sourceElementOrData, config );\n\n\t\t\tresolve(\n\t\t\t\teditor.initPlugins()\n\t\t\t\t\t.then( () => editor.ui.init() )\n\t\t\t\t\t.then( () => editor.data.init( editor.config.get( 'initialData' )! ) )\n\t\t\t\t\t.then( () => editor.fire<EditorReadyEvent>( 'ready' ) )\n\t\t\t\t\t.then( () => editor )\n\t\t\t);\n\t\t} );\n\t}\n\n\t/**\n\t * The {@link module:core/context~Context} class.\n\t *\n\t * Exposed as static editor field for easier access in editor builds.\n\t */\n\tpublic static Context = Context;\n\n\t/**\n\t * The {@link module:watchdog/editorwatchdog~EditorWatchdog} class.\n\t *\n\t * Exposed as static editor field for easier access in editor builds.\n\t */\n\tpublic static EditorWatchdog = EditorWatchdog;\n\n\t/**\n\t * The {@link module:watchdog/contextwatchdog~ContextWatchdog} class.\n\t *\n\t * Exposed as static editor field for easier access in editor builds.\n\t */\n\tpublic static ContextWatchdog = ContextWatchdog;\n}\n\nfunction getInitialData( sourceElementOrData: HTMLElement | string ): string {\n\treturn isElement( sourceElementOrData ) ? getDataFromElement( sourceElementOrData ) : sourceElementOrData;\n}\n\nfunction isElement( value: any ): value is Element {\n\treturn _isElement( value );\n}\n"]}
|
@@ -0,0 +1,181 @@
|
|
1
|
+
/**
|
2
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
4
|
+
*/
|
5
|
+
/**
|
6
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
7
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
8
|
+
*/
|
9
|
+
/**
|
10
|
+
* @module editor-balloon/ballooneditor
|
11
|
+
*/
|
12
|
+
import { Editor, Context, type EditorConfig } from 'ckeditor5/src/core.js';
|
13
|
+
import { ContextWatchdog, EditorWatchdog } from 'ckeditor5/src/watchdog.js';
|
14
|
+
import BalloonEditorUI from './ballooneditorui.js';
|
15
|
+
declare const BalloonEditor_base: import("ckeditor5/src/utils.js").Mixed<typeof Editor, import("ckeditor5/src/core.js").ElementApi>;
|
16
|
+
/**
|
17
|
+
* The {@glink installation/getting-started/predefined-builds#balloon-editor balloon editor}
|
18
|
+
* implementation (Medium-like editor).
|
19
|
+
* It uses an inline editable and a toolbar based on the {@link module:ui/toolbar/balloon/balloontoolbar~BalloonToolbar}.
|
20
|
+
* See the {@glink examples/builds/balloon-editor demo}.
|
21
|
+
*
|
22
|
+
* In order to create a balloon editor instance, use the static
|
23
|
+
* {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`} method.
|
24
|
+
*
|
25
|
+
* # Balloon editor and balloon build
|
26
|
+
*
|
27
|
+
* The balloon editor can be used directly from source (if you installed the
|
28
|
+
* [`@ckeditor/ckeditor5-editor-balloon`](https://www.npmjs.com/package/@ckeditor/ckeditor5-editor-balloon) package)
|
29
|
+
* but it is also available in the {@glink installation/getting-started/predefined-builds#balloon-editor balloon build}.
|
30
|
+
*
|
31
|
+
* {@glink installation/getting-started/predefined-builds Builds}
|
32
|
+
* are ready-to-use editors with plugins bundled in. When using the editor from
|
33
|
+
* source you need to take care of loading all plugins by yourself
|
34
|
+
* (through the {@link module:core/editor/editorconfig~EditorConfig#plugins `config.plugins`} option).
|
35
|
+
* Using the editor from source gives much better flexibility and allows easier customization.
|
36
|
+
*
|
37
|
+
* Read more about initializing the editor from source or as a build in
|
38
|
+
* {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`}.
|
39
|
+
*/
|
40
|
+
export default class BalloonEditor extends BalloonEditor_base {
|
41
|
+
/**
|
42
|
+
* @inheritDoc
|
43
|
+
*/
|
44
|
+
readonly ui: BalloonEditorUI;
|
45
|
+
/**
|
46
|
+
* Creates an instance of the balloon editor.
|
47
|
+
*
|
48
|
+
* **Note:** do not use the constructor to create editor instances. Use the static
|
49
|
+
* {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`} method instead.
|
50
|
+
*
|
51
|
+
* @param sourceElementOrData The DOM element that will be the source for the created editor
|
52
|
+
* (on which the editor will be initialized) or initial data for the editor. For more information see
|
53
|
+
* {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`}.
|
54
|
+
* @param config The editor configuration.
|
55
|
+
*/
|
56
|
+
protected constructor(sourceElementOrData: HTMLElement | string, config?: EditorConfig);
|
57
|
+
/**
|
58
|
+
* Destroys the editor instance, releasing all resources used by it.
|
59
|
+
*
|
60
|
+
* Updates the original editor element with the data if the
|
61
|
+
* {@link module:core/editor/editorconfig~EditorConfig#updateSourceElementOnDestroy `updateSourceElementOnDestroy`}
|
62
|
+
* configuration option is set to `true`.
|
63
|
+
*/
|
64
|
+
destroy(): Promise<unknown>;
|
65
|
+
/**
|
66
|
+
* Creates a new balloon editor instance.
|
67
|
+
*
|
68
|
+
* There are three general ways how the editor can be initialized.
|
69
|
+
*
|
70
|
+
* # Using an existing DOM element (and loading data from it)
|
71
|
+
*
|
72
|
+
* You can initialize the editor using an existing DOM element:
|
73
|
+
*
|
74
|
+
* ```ts
|
75
|
+
* BalloonEditor
|
76
|
+
* .create( document.querySelector( '#editor' ) )
|
77
|
+
* .then( editor => {
|
78
|
+
* console.log( 'Editor was initialized', editor );
|
79
|
+
* } )
|
80
|
+
* .catch( err => {
|
81
|
+
* console.error( err.stack );
|
82
|
+
* } );
|
83
|
+
* ```
|
84
|
+
*
|
85
|
+
* The element's content will be used as the editor data and the element will become the editable element.
|
86
|
+
*
|
87
|
+
* # Creating a detached editor
|
88
|
+
*
|
89
|
+
* Alternatively, you can initialize the editor by passing the initial data directly as a string.
|
90
|
+
* In this case, the editor will render an element that must be inserted into the DOM for the editor to work properly:
|
91
|
+
*
|
92
|
+
* ```ts
|
93
|
+
* BalloonEditor
|
94
|
+
* .create( '<p>Hello world!</p>' )
|
95
|
+
* .then( editor => {
|
96
|
+
* console.log( 'Editor was initialized', editor );
|
97
|
+
*
|
98
|
+
* // Initial data was provided so the editor UI element needs to be added manually to the DOM.
|
99
|
+
* document.body.appendChild( editor.ui.element );
|
100
|
+
* } )
|
101
|
+
* .catch( err => {
|
102
|
+
* console.error( err.stack );
|
103
|
+
* } );
|
104
|
+
* ```
|
105
|
+
*
|
106
|
+
* This lets you dynamically append the editor to your web page whenever it is convenient for you. You may use this method if your
|
107
|
+
* web page content is generated on the client side and the DOM structure is not ready at the moment when you initialize the editor.
|
108
|
+
*
|
109
|
+
* # Using an existing DOM element (and data provided in `config.initialData`)
|
110
|
+
*
|
111
|
+
* You can also mix these two ways by providing a DOM element to be used and passing the initial data through the configuration:
|
112
|
+
*
|
113
|
+
* ```ts
|
114
|
+
* BalloonEditor
|
115
|
+
* .create( document.querySelector( '#editor' ), {
|
116
|
+
* initialData: '<h2>Initial data</h2><p>Foo bar.</p>'
|
117
|
+
* } )
|
118
|
+
* .then( editor => {
|
119
|
+
* console.log( 'Editor was initialized', editor );
|
120
|
+
* } )
|
121
|
+
* .catch( err => {
|
122
|
+
* console.error( err.stack );
|
123
|
+
* } );
|
124
|
+
* ```
|
125
|
+
*
|
126
|
+
* This method can be used to initialize the editor on an existing element with the specified content in case if your integration
|
127
|
+
* makes it difficult to set the content of the source element.
|
128
|
+
*
|
129
|
+
* Note that an error will be thrown if you pass the initial data both as the first parameter and also in the configuration.
|
130
|
+
*
|
131
|
+
* # Configuring the editor
|
132
|
+
*
|
133
|
+
* See the {@link module:core/editor/editorconfig~EditorConfig editor configuration documentation} to learn more about
|
134
|
+
* customizing plugins, toolbar and more.
|
135
|
+
*
|
136
|
+
* # Using the editor from source
|
137
|
+
*
|
138
|
+
* The code samples listed in the previous sections of this documentation assume that you are using an
|
139
|
+
* {@glink installation/getting-started/predefined-builds editor build} (for example – `@ckeditor/ckeditor5-build-balloon`).
|
140
|
+
*
|
141
|
+
* If you want to use the balloon editor from source (`@ckeditor/ckeditor5-editor-balloon/src/ballooneditor`),
|
142
|
+
* you need to define the list of
|
143
|
+
* {@link module:core/editor/editorconfig~EditorConfig#plugins plugins to be initialized} and
|
144
|
+
* {@link module:core/editor/editorconfig~EditorConfig#toolbar toolbar items}. Read more about using the editor from
|
145
|
+
* source in the {@glink installation/advanced/alternative-setups/integrating-from-source-webpack dedicated guide}.
|
146
|
+
*
|
147
|
+
* @param sourceElementOrData The DOM element that will be the source for the created editor
|
148
|
+
* or the editor's initial data.
|
149
|
+
*
|
150
|
+
* If a DOM element is passed, its content will be automatically loaded to the editor upon initialization.
|
151
|
+
* The editor data will be set back to the original element once the editor is destroyed only if the
|
152
|
+
* {@link module:core/editor/editorconfig~EditorConfig#updateSourceElementOnDestroy updateSourceElementOnDestroy}
|
153
|
+
* option is set to `true`.
|
154
|
+
*
|
155
|
+
* If the initial data is passed, a detached editor will be created. In this case you need to insert it into the DOM manually.
|
156
|
+
* It is available under the {@link module:editor-balloon/ballooneditorui~BalloonEditorUI#element `editor.ui.element`} property.
|
157
|
+
*
|
158
|
+
* @param config The editor configuration.
|
159
|
+
* @returns A promise resolved once the editor is ready. The promise resolves with the created editor instance.
|
160
|
+
*/
|
161
|
+
static create(sourceElementOrData: HTMLElement | string, config?: EditorConfig): Promise<BalloonEditor>;
|
162
|
+
/**
|
163
|
+
* The {@link module:core/context~Context} class.
|
164
|
+
*
|
165
|
+
* Exposed as static editor field for easier access in editor builds.
|
166
|
+
*/
|
167
|
+
static Context: typeof Context;
|
168
|
+
/**
|
169
|
+
* The {@link module:watchdog/editorwatchdog~EditorWatchdog} class.
|
170
|
+
*
|
171
|
+
* Exposed as static editor field for easier access in editor builds.
|
172
|
+
*/
|
173
|
+
static EditorWatchdog: typeof EditorWatchdog;
|
174
|
+
/**
|
175
|
+
* The {@link module:watchdog/contextwatchdog~ContextWatchdog} class.
|
176
|
+
*
|
177
|
+
* Exposed as static editor field for easier access in editor builds.
|
178
|
+
*/
|
179
|
+
static ContextWatchdog: typeof ContextWatchdog;
|
180
|
+
}
|
181
|
+
export {};
|
@@ -0,0 +1,46 @@
|
|
1
|
+
/**
|
2
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
4
|
+
*/
|
5
|
+
/**
|
6
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
7
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
8
|
+
*/
|
9
|
+
/**
|
10
|
+
* @module editor-balloon/ballooneditorui
|
11
|
+
*/
|
12
|
+
import { type Editor } from 'ckeditor5/src/core.js';
|
13
|
+
import { EditorUI } from 'ckeditor5/src/ui.js';
|
14
|
+
import type BalloonEditorUIView from './ballooneditoruiview.js';
|
15
|
+
/**
|
16
|
+
* The balloon editor UI class.
|
17
|
+
*/
|
18
|
+
export default class BalloonEditorUI extends EditorUI {
|
19
|
+
/**
|
20
|
+
* The main (top–most) view of the editor UI.
|
21
|
+
*/
|
22
|
+
readonly view: BalloonEditorUIView;
|
23
|
+
/**
|
24
|
+
* Creates an instance of the balloon editor UI class.
|
25
|
+
*
|
26
|
+
* @param editor The editor instance.
|
27
|
+
* @param view The view of the UI.
|
28
|
+
*/
|
29
|
+
constructor(editor: Editor, view: BalloonEditorUIView);
|
30
|
+
/**
|
31
|
+
* @inheritDoc
|
32
|
+
*/
|
33
|
+
get element(): HTMLElement | null;
|
34
|
+
/**
|
35
|
+
* Initializes the UI.
|
36
|
+
*/
|
37
|
+
init(): void;
|
38
|
+
/**
|
39
|
+
* @inheritDoc
|
40
|
+
*/
|
41
|
+
destroy(): void;
|
42
|
+
/**
|
43
|
+
* Enable the placeholder text on the editing root.
|
44
|
+
*/
|
45
|
+
private _initPlaceholder;
|
46
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
/**
|
2
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
4
|
+
*/
|
5
|
+
/**
|
6
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
7
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
8
|
+
*/
|
9
|
+
/**
|
10
|
+
* @module editor-balloon/ballooneditoruiview
|
11
|
+
*/
|
12
|
+
import { EditorUIView, InlineEditableUIView } from 'ckeditor5/src/ui.js';
|
13
|
+
import type { Locale } from 'ckeditor5/src/utils.js';
|
14
|
+
import type { EditingView } from 'ckeditor5/src/engine.js';
|
15
|
+
/**
|
16
|
+
* Contextual editor UI view. Uses the {@link module:ui/editableui/inline/inlineeditableuiview~InlineEditableUIView}.
|
17
|
+
*/
|
18
|
+
export default class BalloonEditorUIView extends EditorUIView {
|
19
|
+
/**
|
20
|
+
* Editable UI view.
|
21
|
+
*/
|
22
|
+
readonly editable: InlineEditableUIView;
|
23
|
+
/**
|
24
|
+
* Creates an instance of the balloon editor UI view.
|
25
|
+
*
|
26
|
+
* @param locale The {@link module:core/editor/editor~Editor#locale} instance.
|
27
|
+
* @param editingView The editing view instance this view is related to.
|
28
|
+
* @param editableElement The editable element. If not specified, it will be automatically created by
|
29
|
+
* {@link module:ui/editableui/editableuiview~EditableUIView}. Otherwise, the given element will be used.
|
30
|
+
*/
|
31
|
+
constructor(locale: Locale, editingView: EditingView, editableElement?: HTMLElement);
|
32
|
+
/**
|
33
|
+
* @inheritDoc
|
34
|
+
*/
|
35
|
+
render(): void;
|
36
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
/**
|
2
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
4
|
+
*/
|
5
|
+
/**
|
6
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
7
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
8
|
+
*/
|
9
|
+
/**
|
10
|
+
* @module editor-balloon
|
11
|
+
*/
|
12
|
+
export { default as BalloonEditor } from './ballooneditor.js';
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@ckeditor/ckeditor5-editor-balloon",
|
3
|
-
"version": "41.
|
3
|
+
"version": "41.4.0-alpha.0",
|
4
4
|
"description": "Balloon editor implementation for CKEditor 5.",
|
5
5
|
"keywords": [
|
6
6
|
"ckeditor",
|
@@ -12,7 +12,7 @@
|
|
12
12
|
"type": "module",
|
13
13
|
"main": "src/index.js",
|
14
14
|
"dependencies": {
|
15
|
-
"ckeditor5": "41.
|
15
|
+
"ckeditor5": "41.4.0-alpha.0",
|
16
16
|
"lodash-es": "4.17.21"
|
17
17
|
},
|
18
18
|
"author": "CKSource (http://cksource.com/)",
|
@@ -25,6 +25,7 @@
|
|
25
25
|
"directory": "packages/ckeditor5-editor-balloon"
|
26
26
|
},
|
27
27
|
"files": [
|
28
|
+
"dist",
|
28
29
|
"lang",
|
29
30
|
"src/**/*.js",
|
30
31
|
"src/**/*.d.ts",
|