@ckeditor/ckeditor5-core 48.1.0 → 48.2.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/editor/editor.d.ts +10 -4
- package/dist/editor/editorconfig.d.ts +152 -62
- package/dist/editor/utils/normalizerootsconfig.d.ts +28 -1
- package/dist/editor/utils/rootacceptsblocks.d.ts +17 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +165 -12
- package/dist/index.js.map +1 -1
- package/dist/translations/af.js +1 -1
- package/dist/translations/af.umd.js +1 -1
- package/dist/translations/ar.js +1 -1
- package/dist/translations/ar.umd.js +1 -1
- package/dist/translations/ast.js +1 -1
- package/dist/translations/ast.umd.js +1 -1
- package/dist/translations/az.js +1 -1
- package/dist/translations/az.umd.js +1 -1
- package/dist/translations/be.js +1 -1
- package/dist/translations/be.umd.js +1 -1
- package/dist/translations/bg.js +1 -1
- package/dist/translations/bg.umd.js +1 -1
- package/dist/translations/bn.js +1 -1
- package/dist/translations/bn.umd.js +1 -1
- package/dist/translations/bs.js +1 -1
- package/dist/translations/bs.umd.js +1 -1
- package/dist/translations/ca.js +1 -1
- package/dist/translations/ca.umd.js +1 -1
- package/dist/translations/cs.js +1 -1
- package/dist/translations/cs.umd.js +1 -1
- package/dist/translations/da.js +1 -1
- package/dist/translations/da.umd.js +1 -1
- package/dist/translations/de-ch.js +1 -1
- package/dist/translations/de-ch.umd.js +1 -1
- package/dist/translations/de.js +1 -1
- package/dist/translations/de.umd.js +1 -1
- package/dist/translations/el.js +1 -1
- package/dist/translations/el.umd.js +1 -1
- package/dist/translations/en-au.js +1 -1
- package/dist/translations/en-au.umd.js +1 -1
- package/dist/translations/en-gb.js +1 -1
- package/dist/translations/en-gb.umd.js +1 -1
- package/dist/translations/en.js +1 -1
- package/dist/translations/en.umd.js +1 -1
- package/dist/translations/eo.js +1 -1
- package/dist/translations/eo.umd.js +1 -1
- package/dist/translations/es-co.js +1 -1
- package/dist/translations/es-co.umd.js +1 -1
- package/dist/translations/es.js +1 -1
- package/dist/translations/es.umd.js +1 -1
- package/dist/translations/et.js +1 -1
- package/dist/translations/et.umd.js +1 -1
- package/dist/translations/eu.js +1 -1
- package/dist/translations/eu.umd.js +1 -1
- package/dist/translations/fa.js +1 -1
- package/dist/translations/fa.umd.js +1 -1
- package/dist/translations/fi.js +1 -1
- package/dist/translations/fi.umd.js +1 -1
- package/dist/translations/fr.js +1 -1
- package/dist/translations/fr.umd.js +1 -1
- package/dist/translations/gl.js +1 -1
- package/dist/translations/gl.umd.js +1 -1
- package/dist/translations/gu.js +1 -1
- package/dist/translations/gu.umd.js +1 -1
- package/dist/translations/he.js +1 -1
- package/dist/translations/he.umd.js +1 -1
- package/dist/translations/hi.js +1 -1
- package/dist/translations/hi.umd.js +1 -1
- package/dist/translations/hr.js +1 -1
- package/dist/translations/hr.umd.js +1 -1
- package/dist/translations/hu.js +1 -1
- package/dist/translations/hu.umd.js +1 -1
- package/dist/translations/hy.js +1 -1
- package/dist/translations/hy.umd.js +1 -1
- package/dist/translations/id.js +1 -1
- package/dist/translations/id.umd.js +1 -1
- package/dist/translations/it.js +1 -1
- package/dist/translations/it.umd.js +1 -1
- package/dist/translations/ja.js +1 -1
- package/dist/translations/ja.umd.js +1 -1
- package/dist/translations/jv.js +1 -1
- package/dist/translations/jv.umd.js +1 -1
- package/dist/translations/kk.js +1 -1
- package/dist/translations/kk.umd.js +1 -1
- package/dist/translations/km.js +1 -1
- package/dist/translations/km.umd.js +1 -1
- package/dist/translations/kn.js +1 -1
- package/dist/translations/kn.umd.js +1 -1
- package/dist/translations/ko.js +1 -1
- package/dist/translations/ko.umd.js +1 -1
- package/dist/translations/ku.js +1 -1
- package/dist/translations/ku.umd.js +1 -1
- package/dist/translations/lt.js +1 -1
- package/dist/translations/lt.umd.js +1 -1
- package/dist/translations/lv.js +1 -1
- package/dist/translations/lv.umd.js +1 -1
- package/dist/translations/ms.js +1 -1
- package/dist/translations/ms.umd.js +1 -1
- package/dist/translations/nb.js +1 -1
- package/dist/translations/nb.umd.js +1 -1
- package/dist/translations/ne.js +1 -1
- package/dist/translations/ne.umd.js +1 -1
- package/dist/translations/nl.js +1 -1
- package/dist/translations/nl.umd.js +1 -1
- package/dist/translations/no.js +1 -1
- package/dist/translations/no.umd.js +1 -1
- package/dist/translations/oc.js +1 -1
- package/dist/translations/oc.umd.js +1 -1
- package/dist/translations/pl.js +1 -1
- package/dist/translations/pl.umd.js +1 -1
- package/dist/translations/pt-br.js +1 -1
- package/dist/translations/pt-br.umd.js +1 -1
- package/dist/translations/pt.js +1 -1
- package/dist/translations/pt.umd.js +1 -1
- package/dist/translations/ro.js +1 -1
- package/dist/translations/ro.umd.js +1 -1
- package/dist/translations/ru.js +1 -1
- package/dist/translations/ru.umd.js +1 -1
- package/dist/translations/si.js +1 -1
- package/dist/translations/si.umd.js +1 -1
- package/dist/translations/sk.js +1 -1
- package/dist/translations/sk.umd.js +1 -1
- package/dist/translations/sl.js +1 -1
- package/dist/translations/sl.umd.js +1 -1
- package/dist/translations/sq.js +1 -1
- package/dist/translations/sq.umd.js +1 -1
- package/dist/translations/sr-latn.js +1 -1
- package/dist/translations/sr-latn.umd.js +1 -1
- package/dist/translations/sr.js +1 -1
- package/dist/translations/sr.umd.js +1 -1
- package/dist/translations/sv.js +1 -1
- package/dist/translations/sv.umd.js +1 -1
- package/dist/translations/th.js +1 -1
- package/dist/translations/th.umd.js +1 -1
- package/dist/translations/ti.js +1 -1
- package/dist/translations/ti.umd.js +1 -1
- package/dist/translations/tk.js +1 -1
- package/dist/translations/tk.umd.js +1 -1
- package/dist/translations/tr.js +1 -1
- package/dist/translations/tr.umd.js +1 -1
- package/dist/translations/tt.js +1 -1
- package/dist/translations/tt.umd.js +1 -1
- package/dist/translations/ug.js +1 -1
- package/dist/translations/ug.umd.js +1 -1
- package/dist/translations/uk.js +1 -1
- package/dist/translations/uk.umd.js +1 -1
- package/dist/translations/ur.js +1 -1
- package/dist/translations/ur.umd.js +1 -1
- package/dist/translations/uz.js +1 -1
- package/dist/translations/uz.umd.js +1 -1
- package/dist/translations/vi.js +1 -1
- package/dist/translations/vi.umd.js +1 -1
- package/dist/translations/zh-cn.js +1 -1
- package/dist/translations/zh-cn.umd.js +1 -1
- package/dist/translations/zh.js +1 -1
- package/dist/translations/zh.umd.js +1 -1
- package/package.json +5 -5
package/dist/editor/editor.d.ts
CHANGED
|
@@ -173,7 +173,7 @@ export declare abstract class Editor extends /* #__PURE__ */ Editor_base {
|
|
|
173
173
|
*
|
|
174
174
|
* // The default options can be overridden by the configuration passed to create().
|
|
175
175
|
* ClassicEditor
|
|
176
|
-
* .create(
|
|
176
|
+
* .create( { bar: 3 } )
|
|
177
177
|
* .then( editor => {
|
|
178
178
|
* editor.config.get( 'foo' ); // -> 1
|
|
179
179
|
* editor.config.get( 'bar' ); // -> 3
|
|
@@ -206,7 +206,7 @@ export declare abstract class Editor extends /* #__PURE__ */ Editor_base {
|
|
|
206
206
|
* } );
|
|
207
207
|
*
|
|
208
208
|
* ClassicEditor
|
|
209
|
-
* .create(
|
|
209
|
+
* .create( {
|
|
210
210
|
* // Do not initialize these plugins (note: it is defined by a string):
|
|
211
211
|
* removePlugins: [ 'Foo' ]
|
|
212
212
|
* } )
|
|
@@ -216,7 +216,7 @@ export declare abstract class Editor extends /* #__PURE__ */ Editor_base {
|
|
|
216
216
|
* } );
|
|
217
217
|
*
|
|
218
218
|
* ClassicEditor
|
|
219
|
-
* .create(
|
|
219
|
+
* .create( {
|
|
220
220
|
* // Load only this plugin. It can also be defined by a string if
|
|
221
221
|
* // this plugin was built into the editor class.
|
|
222
222
|
* plugins: [ FooPlugin ]
|
|
@@ -441,12 +441,18 @@ export declare abstract class Editor extends /* #__PURE__ */ Editor_base {
|
|
|
441
441
|
* Registers a given string as a root attribute key. Registered root attributes are added to
|
|
442
442
|
* the {@link module:engine/model/schema~ModelSchema schema}.
|
|
443
443
|
*
|
|
444
|
-
* Note
|
|
444
|
+
* **Note:** Attributes passed in the configuration for multi-root editors
|
|
445
445
|
* ({@link module:core/editor/editorconfig~EditorConfig#roots `config.roots.<rootName>.modelAttributes`}) or
|
|
446
446
|
* single-root editors ({@link module:core/editor/editorconfig~EditorConfig#root `config.root.modelAttributes`})
|
|
447
447
|
* are automatically registered when the editor is initialized. However, registering the same attribute twice
|
|
448
448
|
* does not have any negative impact, so it is recommended to use this method in any feature that uses
|
|
449
449
|
* root attributes.
|
|
450
|
+
*
|
|
451
|
+
* **Note:** Registered attributes are attached only to the generic `$root` schema element. A custom root
|
|
452
|
+
* {@link module:core/editor/editorconfig~RootConfig#modelElement `modelElement`} must opt into the `$root`
|
|
453
|
+
* attribute chain via `allowAttributesOf: '$root'` to inherit these attributes.
|
|
454
|
+
* See the {@glink framework/deep-dive/schema#custom-root-elements Custom root elements} section of the
|
|
455
|
+
* {@glink framework/deep-dive/schema Schema deep-dive} guide for more details.
|
|
450
456
|
*/
|
|
451
457
|
registerRootAttribute(key: string): void;
|
|
452
458
|
/**
|
|
@@ -79,8 +79,11 @@ export interface EditorConfig extends EngineConfig {
|
|
|
79
79
|
*
|
|
80
80
|
* ```ts
|
|
81
81
|
* ClassicEditor
|
|
82
|
-
* .create(
|
|
83
|
-
*
|
|
82
|
+
* .create( {
|
|
83
|
+
* attachTo: document.querySelector( '#editor' ),
|
|
84
|
+
* root: {
|
|
85
|
+
* initialData: '<h2>Initial data</h2><p>Foo bar.</p>'
|
|
86
|
+
* }
|
|
84
87
|
* } )
|
|
85
88
|
* .then( ... )
|
|
86
89
|
* .catch( ... );
|
|
@@ -94,24 +97,26 @@ export interface EditorConfig extends EngineConfig {
|
|
|
94
97
|
* roots names and values equal to the data that should be set in each root:
|
|
95
98
|
*
|
|
96
99
|
* ```ts
|
|
97
|
-
* MultiRootEditor.create(
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
100
|
+
* MultiRootEditor.create( {
|
|
101
|
+
* roots: {
|
|
102
|
+
* header: {
|
|
103
|
+
* element: document.querySelector( '#header' ),
|
|
104
|
+
* initialData: '<p>Content for header part.</p>'
|
|
105
|
+
* },
|
|
106
|
+
* content: {
|
|
107
|
+
* element: document.querySelector( '#content' ),
|
|
108
|
+
* initialData: '<p>Content for main part.</p>'
|
|
109
|
+
* },
|
|
110
|
+
* leftSide: {
|
|
111
|
+
* element: document.querySelector( '#left-side' ),
|
|
112
|
+
* initialData: '<p>Content for left-side box.</p>'
|
|
113
|
+
* },
|
|
114
|
+
* rightSide: {
|
|
115
|
+
* element: document.querySelector( '#right-side' ),
|
|
116
|
+
* initialData: '<p>Content for right-side box.</p>'
|
|
112
117
|
* }
|
|
113
118
|
* }
|
|
114
|
-
* )
|
|
119
|
+
* } )
|
|
115
120
|
* .then( ... )
|
|
116
121
|
* .catch( ... );
|
|
117
122
|
* ```
|
|
@@ -521,8 +526,11 @@ export interface EditorConfig extends EngineConfig {
|
|
|
521
526
|
*
|
|
522
527
|
* ```ts
|
|
523
528
|
* ClassicEditor
|
|
524
|
-
* .create(
|
|
525
|
-
*
|
|
529
|
+
* .create( {
|
|
530
|
+
* attachTo: document.querySelector( '#editor' ),
|
|
531
|
+
* root: {
|
|
532
|
+
* placeholder: 'Type some text...'
|
|
533
|
+
* }
|
|
526
534
|
* } )
|
|
527
535
|
* .then( ... )
|
|
528
536
|
* .catch( ... );
|
|
@@ -532,24 +540,26 @@ export interface EditorConfig extends EngineConfig {
|
|
|
532
540
|
* roots names and values equal to the placeholder that should be set in each root:
|
|
533
541
|
*
|
|
534
542
|
* ```ts
|
|
535
|
-
* MultiRootEditor.create(
|
|
536
|
-
*
|
|
537
|
-
*
|
|
538
|
-
*
|
|
539
|
-
*
|
|
540
|
-
*
|
|
541
|
-
*
|
|
542
|
-
*
|
|
543
|
-
*
|
|
544
|
-
*
|
|
545
|
-
*
|
|
546
|
-
*
|
|
547
|
-
*
|
|
548
|
-
*
|
|
549
|
-
*
|
|
543
|
+
* MultiRootEditor.create( {
|
|
544
|
+
* roots: {
|
|
545
|
+
* header: {
|
|
546
|
+
* element: document.querySelector( '#header' ),
|
|
547
|
+
* placeholder: 'Type header...'
|
|
548
|
+
* },
|
|
549
|
+
* content: {
|
|
550
|
+
* element: document.querySelector( '#content' ),
|
|
551
|
+
* placeholder: 'Type content...'
|
|
552
|
+
* },
|
|
553
|
+
* leftSide: {
|
|
554
|
+
* element: document.querySelector( '#left-side' ),
|
|
555
|
+
* placeholder: 'Type left-side...'
|
|
556
|
+
* },
|
|
557
|
+
* rightSide: {
|
|
558
|
+
* element: document.querySelector( '#right-side' ),
|
|
559
|
+
* placeholder: 'Type right-side...'
|
|
550
560
|
* }
|
|
551
561
|
* }
|
|
552
|
-
* )
|
|
562
|
+
* } )
|
|
553
563
|
* .then( ... )
|
|
554
564
|
* .catch( ... );
|
|
555
565
|
* ```
|
|
@@ -866,8 +876,11 @@ export interface EditorConfig extends EngineConfig {
|
|
|
866
876
|
*
|
|
867
877
|
* ```ts
|
|
868
878
|
* ClassicEditor
|
|
869
|
-
* .create(
|
|
870
|
-
*
|
|
879
|
+
* .create( {
|
|
880
|
+
* attachTo: document.querySelector( '#editor' ),
|
|
881
|
+
* root: {
|
|
882
|
+
* label: 'Article main content'
|
|
883
|
+
* }
|
|
871
884
|
* } )
|
|
872
885
|
* .then( ... )
|
|
873
886
|
* .catch( ... );
|
|
@@ -877,24 +890,26 @@ export interface EditorConfig extends EngineConfig {
|
|
|
877
890
|
* roots names and values equal to the label that should be used for each root:
|
|
878
891
|
*
|
|
879
892
|
* ```ts
|
|
880
|
-
* MultiRootEditor.create(
|
|
881
|
-
*
|
|
882
|
-
*
|
|
883
|
-
*
|
|
884
|
-
*
|
|
885
|
-
*
|
|
886
|
-
*
|
|
887
|
-
*
|
|
888
|
-
*
|
|
889
|
-
*
|
|
890
|
-
*
|
|
891
|
-
*
|
|
892
|
-
*
|
|
893
|
-
*
|
|
894
|
-
*
|
|
893
|
+
* MultiRootEditor.create( {
|
|
894
|
+
* roots: {
|
|
895
|
+
* header: {
|
|
896
|
+
* element: document.querySelector( '#header' ),
|
|
897
|
+
* label: 'Article header'
|
|
898
|
+
* },
|
|
899
|
+
* content: {
|
|
900
|
+
* element: document.querySelector( '#content' ),
|
|
901
|
+
* label: 'Article main content'
|
|
902
|
+
* },
|
|
903
|
+
* sideQuote: {
|
|
904
|
+
* element: document.querySelector( '#side-quote' ),
|
|
905
|
+
* label: 'Side-quote'
|
|
906
|
+
* },
|
|
907
|
+
* relatedLinks: {
|
|
908
|
+
* element: document.querySelector( '#related-links' ),
|
|
909
|
+
* label: 'Related links'
|
|
895
910
|
* }
|
|
896
911
|
* }
|
|
897
|
-
* )
|
|
912
|
+
* } )
|
|
898
913
|
* .then( ... )
|
|
899
914
|
* .catch( ... );
|
|
900
915
|
* ```
|
|
@@ -1089,18 +1104,52 @@ export interface EditorConfig extends EngineConfig {
|
|
|
1089
1104
|
*/
|
|
1090
1105
|
export interface RootConfig {
|
|
1091
1106
|
/**
|
|
1092
|
-
* The DOM element
|
|
1107
|
+
* The DOM element to use as the editor's editable root, or a description of one to create.
|
|
1108
|
+
*
|
|
1109
|
+
* Accepted forms:
|
|
1110
|
+
*
|
|
1111
|
+
* * An existing DOM element.
|
|
1112
|
+
*
|
|
1113
|
+
* Its content is automatically loaded to the editor upon initialization (but only when
|
|
1114
|
+
* {@link #initialData `initialData`} is not set).
|
|
1093
1115
|
*
|
|
1094
|
-
*
|
|
1095
|
-
*
|
|
1116
|
+
* The editor data will be set back to the original element once the editor is destroyed only if the
|
|
1117
|
+
* {@link module:core/editor/editorconfig~EditorConfig#updateSourceElementOnDestroy `updateSourceElementOnDestroy`}
|
|
1118
|
+
* option is set to `true`.
|
|
1096
1119
|
*
|
|
1097
|
-
*
|
|
1098
|
-
*
|
|
1099
|
-
* option is set to `true`.
|
|
1120
|
+
* Not accepted by {@link module:editor-classic/classiceditor~ClassicEditor} - use
|
|
1121
|
+
* {@link module:core/editor/editorconfig~EditorConfig#attachTo `config.attachTo`} instead.
|
|
1100
1122
|
*
|
|
1101
|
-
*
|
|
1123
|
+
* * A tag name string, e.g. `'h1'`. The editor creates a fresh element with that tag and uses it as the editable.
|
|
1124
|
+
*
|
|
1125
|
+
* * A {@link ~ViewRootElementDefinition} object. The editor creates a fresh element matching the definition and
|
|
1126
|
+
* uses it as the editable.
|
|
1127
|
+
*
|
|
1128
|
+
* ```ts
|
|
1129
|
+
* // Tag name string.
|
|
1130
|
+
* BalloonEditor.create( {
|
|
1131
|
+
* root: {
|
|
1132
|
+
* element: 'h1'
|
|
1133
|
+
* }
|
|
1134
|
+
* } );
|
|
1135
|
+
*
|
|
1136
|
+
* // Element definition.
|
|
1137
|
+
* BalloonEditor.create( {
|
|
1138
|
+
* root: {
|
|
1139
|
+
* element: {
|
|
1140
|
+
* name: 'h1',
|
|
1141
|
+
* classes: [ 'article-title' ],
|
|
1142
|
+
* styles: { 'font-weight': 'bold' },
|
|
1143
|
+
* attributes: { 'data-id': '123' }
|
|
1144
|
+
* }
|
|
1145
|
+
* }
|
|
1146
|
+
* } );
|
|
1147
|
+
* ```
|
|
1148
|
+
*
|
|
1149
|
+
* Unless an existing DOM element is provided, a detached editor will be created. In this case you need to insert
|
|
1150
|
+
* it into the DOM manually.
|
|
1102
1151
|
*/
|
|
1103
|
-
element?: HTMLElement;
|
|
1152
|
+
element?: HTMLElement | string | ViewRootElementDefinition;
|
|
1104
1153
|
/**
|
|
1105
1154
|
* The initial editor data to be used instead of the HTML content of the
|
|
1106
1155
|
* {@link module:core/editor/editorconfig~RootConfig#element source element}.
|
|
@@ -1434,6 +1483,47 @@ export interface RootConfig {
|
|
|
1434
1483
|
*/
|
|
1435
1484
|
modelAttributes?: EditorRootAttributes;
|
|
1436
1485
|
}
|
|
1486
|
+
/**
|
|
1487
|
+
* A description of the DOM element used as an editor's editable root, accepted by
|
|
1488
|
+
* {@link module:core/editor/editorconfig~RootConfig#element `config.root.element`}.
|
|
1489
|
+
*
|
|
1490
|
+
* ```ts
|
|
1491
|
+
* const element: ViewRootElementDefinition = {
|
|
1492
|
+
* name: 'h1',
|
|
1493
|
+
* classes: [ 'article-title' ],
|
|
1494
|
+
* styles: { 'font-weight': 'bold' },
|
|
1495
|
+
* attributes: { 'data-id': '123' }
|
|
1496
|
+
* };
|
|
1497
|
+
* ```
|
|
1498
|
+
*
|
|
1499
|
+
* `class` and `style` may also be passed as strings inside `attributes` as a shorthand:
|
|
1500
|
+
*
|
|
1501
|
+
* ```ts
|
|
1502
|
+
* const element: ViewRootElementDefinition = {
|
|
1503
|
+
* name: 'h1',
|
|
1504
|
+
* attributes: { class: 'article-title', style: 'font-weight: bold' }
|
|
1505
|
+
* };
|
|
1506
|
+
* ```
|
|
1507
|
+
*/
|
|
1508
|
+
export interface ViewRootElementDefinition {
|
|
1509
|
+
/**
|
|
1510
|
+
* The DOM tag name to use. Defaults to `'div'` when not provided, so integrators can keep the default element and
|
|
1511
|
+
* still specify {@link #classes}, {@link #styles}, or {@link #attributes}.
|
|
1512
|
+
*/
|
|
1513
|
+
name?: string;
|
|
1514
|
+
/**
|
|
1515
|
+
* Class name or array of class names to apply to the editable element. Each name can be provided as a string.
|
|
1516
|
+
*/
|
|
1517
|
+
classes?: string | Array<string>;
|
|
1518
|
+
/**
|
|
1519
|
+
* Inline styles to apply to the editable element as a record of style properties.
|
|
1520
|
+
*/
|
|
1521
|
+
styles?: Record<string, string>;
|
|
1522
|
+
/**
|
|
1523
|
+
* Additional DOM attributes to apply to the editable element.
|
|
1524
|
+
*/
|
|
1525
|
+
attributes?: Record<string, string>;
|
|
1526
|
+
}
|
|
1437
1527
|
/**
|
|
1438
1528
|
* The configuration of the editor language.
|
|
1439
1529
|
*
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @module core/editor/utils/normalizerootsconfig
|
|
7
7
|
*/
|
|
8
|
-
import type { EditorConfig } from '../editorconfig.js';
|
|
8
|
+
import type { EditorConfig, ViewRootElementDefinition } from '../editorconfig.js';
|
|
9
9
|
import { type Config } from '@ckeditor/ckeditor5-utils';
|
|
10
10
|
/**
|
|
11
11
|
* Normalizes the editor roots configuration. It ensures that all root configurations are defined in `config.roots`
|
|
@@ -48,3 +48,30 @@ export declare function normalizeMultiRootEditorConstructorParams(sourceElementO
|
|
|
48
48
|
sourceElementsOrData: Record<string, string> | Record<string, HTMLElement>;
|
|
49
49
|
editorConfig: EditorConfig;
|
|
50
50
|
};
|
|
51
|
+
/**
|
|
52
|
+
* Normalizes the value passed in {@link module:core/editor/editorconfig~RootConfig#element `config.root.element`} into a
|
|
53
|
+
* canonical form (`HTMLElement` or {@link module:core/editor/editorconfig~ViewRootElementDefinition}) that the UI layer
|
|
54
|
+
* can consume directly.
|
|
55
|
+
*
|
|
56
|
+
* Accepts:
|
|
57
|
+
*
|
|
58
|
+
* * an existing `HTMLElement` - returned as is, so the editor wraps it in place,
|
|
59
|
+
* * a tag name string (e.g. `'h1'`) - turned into `{ name: 'h1' }`,
|
|
60
|
+
* * a {@link module:core/editor/editorconfig~ViewRootElementDefinition} object - reshaped so `classes` becomes an
|
|
61
|
+
* array and `attributes.class` is lifted into it.
|
|
62
|
+
*
|
|
63
|
+
* The `class` attribute may be passed either as the dedicated `classes` field (string or array of strings) or as a
|
|
64
|
+
* `class` key inside `attributes`. They are concatenated. The `style` attribute may be passed either as the `styles`
|
|
65
|
+
* object or as a `style` string inside `attributes`. When both are provided, the object form takes precedence and a
|
|
66
|
+
* warning is logged.
|
|
67
|
+
*
|
|
68
|
+
* The `<textarea>` tag name is rejected as it cannot host a rich-text editable.
|
|
69
|
+
*
|
|
70
|
+
* Already used internally by {@link ~normalizeRootsConfig `normalizeRootsConfig()`} for `config.root.element` /
|
|
71
|
+
* `config.roots.*.element`. Exported for callers that bypass the regular config-normalization pass, e.g.
|
|
72
|
+
* {@link module:editor-multi-root/multirooteditor~MultiRootEditor#addRoot `MultiRootEditor.addRoot()`}
|
|
73
|
+
* and {@link module:editor-multi-root/multirooteditor~MultiRootEditor#createEditable `MultiRootEditor.createEditable()`}.
|
|
74
|
+
*
|
|
75
|
+
* @internal
|
|
76
|
+
*/
|
|
77
|
+
export declare function normalizeViewRootElementDefinition(spec: HTMLElement | string | ViewRootElementDefinition | undefined): HTMLElement | ViewRootElementDefinition | undefined;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @module core/editor/utils/rootacceptsblocks
|
|
7
|
+
*/
|
|
8
|
+
import type { Editor } from '../editor.js';
|
|
9
|
+
/**
|
|
10
|
+
* Returns whether the model root with the given name accepts `$block` children according to the editor's schema.
|
|
11
|
+
*
|
|
12
|
+
* Call this once the plugin initialization phase is finished — typically during UI init or right after creating
|
|
13
|
+
* a new editable — so the schema reflects any plugin-registered root types or additional content rules.
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
export declare function rootAcceptsBlocks(editor: Editor, rootName: string): boolean;
|
package/dist/index.d.ts
CHANGED
|
@@ -15,13 +15,14 @@ export { ContextPlugin, type ContextInterface, type ContextPluginDependencies }
|
|
|
15
15
|
export { EditingKeystrokeHandler, type EditingKeystrokeCallback } from './editingkeystrokehandler.js';
|
|
16
16
|
export type { PartialBy, NonEmptyArray, HexColor } from './typings.js';
|
|
17
17
|
export { Editor, type EditorRootAttributes, type EditorCollectUsageDataEvent, type EditorReadyEvent, type EditorDestroyEvent, type LicenseErrorReason as _LicenseErrorReason } from './editor/editor.js';
|
|
18
|
-
export type { EditorConfig, RootConfig, LanguageConfig, ToolbarConfig, ToolbarConfigItem, UiConfig, ViewportOffsetConfig, PoweredByConfig } from './editor/editorconfig.js';
|
|
18
|
+
export type { EditorConfig, RootConfig, ViewRootElementDefinition, LanguageConfig, ToolbarConfig, ToolbarConfigItem, UiConfig, ViewportOffsetConfig, PoweredByConfig } from './editor/editorconfig.js';
|
|
19
19
|
export { attachToForm } from './editor/utils/attachtoform.js';
|
|
20
20
|
export { ElementApiMixin, type ElementApi } from './editor/utils/elementapimixin.js';
|
|
21
21
|
export { secureSourceElement } from './editor/utils/securesourceelement.js';
|
|
22
22
|
export { registerAndInitializeRootConfigAttributes } from './editor/utils/registerandinitializerootconfigattributes.js';
|
|
23
|
-
export { normalizeRootsConfig, normalizeSingleRootEditorConstructorParams, normalizeMultiRootEditorConstructorParams } from './editor/utils/normalizerootsconfig.js';
|
|
23
|
+
export { normalizeRootsConfig, normalizeSingleRootEditorConstructorParams, normalizeMultiRootEditorConstructorParams, normalizeViewRootElementDefinition } from './editor/utils/normalizerootsconfig.js';
|
|
24
24
|
export { verifyRootElements } from './editor/utils/verifyrootelements.js';
|
|
25
|
+
export { rootAcceptsBlocks } from './editor/utils/rootacceptsblocks.js';
|
|
25
26
|
export { PendingActions, type PendingAction, type PendingActionsAddEvent, type PendingActionsRemoveEvent } from './pendingactions.js';
|
|
26
27
|
export { Accessibility, DEFAULT_GROUP_ID as _DEFAULT_ACCESSIBILITY_GROUP_ID, type AddKeystrokeInfoCategoryData, type AddKeystrokeInfoGroupData, type AddKeystrokeInfosData, type KeystrokeInfoDefinition, type KeystrokeInfoDefinitions, type KeystrokeInfoGroupDefinition, type KeystrokeInfoCategoryDefinition } from './accessibility.js';
|
|
27
28
|
export { getEditorUsageData as _getEditorUsageData, type EditorUsageData as _EditorUsageData } from './editor/utils/editorusagedata.js';
|
package/dist/index.js
CHANGED
|
@@ -1944,7 +1944,7 @@ function getPageSessionID() {
|
|
|
1944
1944
|
*
|
|
1945
1945
|
* // The default options can be overridden by the configuration passed to create().
|
|
1946
1946
|
* ClassicEditor
|
|
1947
|
-
* .create(
|
|
1947
|
+
* .create( { bar: 3 } )
|
|
1948
1948
|
* .then( editor => {
|
|
1949
1949
|
* editor.config.get( 'foo' ); // -> 1
|
|
1950
1950
|
* editor.config.get( 'bar' ); // -> 3
|
|
@@ -1976,7 +1976,7 @@ function getPageSessionID() {
|
|
|
1976
1976
|
* } );
|
|
1977
1977
|
*
|
|
1978
1978
|
* ClassicEditor
|
|
1979
|
-
* .create(
|
|
1979
|
+
* .create( {
|
|
1980
1980
|
* // Do not initialize these plugins (note: it is defined by a string):
|
|
1981
1981
|
* removePlugins: [ 'Foo' ]
|
|
1982
1982
|
* } )
|
|
@@ -1986,7 +1986,7 @@ function getPageSessionID() {
|
|
|
1986
1986
|
* } );
|
|
1987
1987
|
*
|
|
1988
1988
|
* ClassicEditor
|
|
1989
|
-
* .create(
|
|
1989
|
+
* .create( {
|
|
1990
1990
|
* // Load only this plugin. It can also be defined by a string if
|
|
1991
1991
|
* // this plugin was built into the editor class.
|
|
1992
1992
|
* plugins: [ FooPlugin ]
|
|
@@ -2547,12 +2547,18 @@ function getPageSessionID() {
|
|
|
2547
2547
|
* Registers a given string as a root attribute key. Registered root attributes are added to
|
|
2548
2548
|
* the {@link module:engine/model/schema~ModelSchema schema}.
|
|
2549
2549
|
*
|
|
2550
|
-
* Note
|
|
2550
|
+
* **Note:** Attributes passed in the configuration for multi-root editors
|
|
2551
2551
|
* ({@link module:core/editor/editorconfig~EditorConfig#roots `config.roots.<rootName>.modelAttributes`}) or
|
|
2552
2552
|
* single-root editors ({@link module:core/editor/editorconfig~EditorConfig#root `config.root.modelAttributes`})
|
|
2553
2553
|
* are automatically registered when the editor is initialized. However, registering the same attribute twice
|
|
2554
2554
|
* does not have any negative impact, so it is recommended to use this method in any feature that uses
|
|
2555
2555
|
* root attributes.
|
|
2556
|
+
*
|
|
2557
|
+
* **Note:** Registered attributes are attached only to the generic `$root` schema element. A custom root
|
|
2558
|
+
* {@link module:core/editor/editorconfig~RootConfig#modelElement `modelElement`} must opt into the `$root`
|
|
2559
|
+
* attribute chain via `allowAttributesOf: '$root'` to inherit these attributes.
|
|
2560
|
+
* See the {@glink framework/deep-dive/schema#custom-root-elements Custom root elements} section of the
|
|
2561
|
+
* {@glink framework/deep-dive/schema Schema deep-dive} guide for more details.
|
|
2556
2562
|
*/ registerRootAttribute(key) {
|
|
2557
2563
|
if (this._registeredRootsAttributesKeys.has(key)) {
|
|
2558
2564
|
return;
|
|
@@ -3064,22 +3070,32 @@ function isTextArea(sourceElement) {
|
|
|
3064
3070
|
}
|
|
3065
3071
|
if (separateAttachTo && isElement(rootConfig.element)) {
|
|
3066
3072
|
/**
|
|
3067
|
-
* The {@link module:editor-classic/classiceditor~ClassicEditor}
|
|
3068
|
-
* {@link module:core/editor/editorconfig~RootConfig#element `config.root.element`} because
|
|
3069
|
-
*
|
|
3070
|
-
*
|
|
3071
|
-
*
|
|
3073
|
+
* The {@link module:editor-classic/classiceditor~ClassicEditor} cannot use an existing DOM element as
|
|
3074
|
+
* {@link module:core/editor/editorconfig~RootConfig#element `config.root.element`} because the classic
|
|
3075
|
+
* editor replaces the source element with its own UI rather than editing inline within it. The passed
|
|
3076
|
+
* element is ignored along with its content, so any markup inside it will not be used as the editor's
|
|
3077
|
+
* initial data. Use {@link module:core/editor/editorconfig~EditorConfig#attachTo `config.attachTo`}
|
|
3078
|
+
* to specify the DOM element the editor should replace, or pass the initial data via
|
|
3079
|
+
* {@link module:core/editor/editorconfig~RootConfig#initialData `config.root.initialData`}.
|
|
3080
|
+
*
|
|
3081
|
+
* A tag name string (e.g. `'h1'`) or a
|
|
3082
|
+
* {@link module:engine/view/elementdefinition~ViewElementDefinition view element definition} are still
|
|
3083
|
+
* accepted - they describe the editable root element the classic editor creates inside its UI box.
|
|
3072
3084
|
*
|
|
3073
3085
|
* @error editor-create-root-element-not-supported
|
|
3074
3086
|
*/ logWarning('editor-create-root-element-not-supported');
|
|
3087
|
+
// Drop the unsupported DOM element so downstream code can read a normalized value without re-checking.
|
|
3088
|
+
rootConfig.element = undefined;
|
|
3075
3089
|
}
|
|
3076
3090
|
// No dedicated initial data for the root.
|
|
3077
3091
|
if (rootConfig.initialData === undefined) {
|
|
3078
3092
|
// No legacy initial data for the root, either.
|
|
3079
3093
|
if (legacyInitialData[rootName] === undefined) {
|
|
3080
3094
|
// Use source element data or data itself as a string.
|
|
3081
|
-
// Fall back to legacy sourceElement, `rootConfig.element`
|
|
3082
|
-
|
|
3095
|
+
// Fall back to legacy sourceElement, `rootConfig.element` (only when it is an HTMLElement)
|
|
3096
|
+
// or `config.attachTo` (for ClassicEditor) for data extraction.
|
|
3097
|
+
const rootConfigElement = isElement(rootConfig.element) ? rootConfig.element : undefined;
|
|
3098
|
+
rootConfig.initialData = getInitialData(sourceElementOrDataForRoot || rootConfigElement || separateAttachTo && config.get('attachTo') || '');
|
|
3083
3099
|
} else if (sourceElementOrDataForRoot && !isElement(sourceElementOrDataForRoot)) {
|
|
3084
3100
|
/**
|
|
3085
3101
|
* The initial data is specified both as the first argument of the editor `create()` method
|
|
@@ -3129,6 +3145,9 @@ function isTextArea(sourceElement) {
|
|
|
3129
3145
|
rootConfig.label ??= getLegacyPlainConfigValue(config, 'label', rootName);
|
|
3130
3146
|
// Default model element to `$root` so all callers can rely on `rootConfig.modelElement` being a string.
|
|
3131
3147
|
rootConfig.modelElement ||= '$root';
|
|
3148
|
+
// Reshape `rootConfig.element` into a canonical form (`HTMLElement` or `ViewRootElementDefinition`)
|
|
3149
|
+
// so downstream code can read it directly without re-running the string / flat-notation normalization.
|
|
3150
|
+
rootConfig.element = normalizeViewRootElementDefinition(rootConfig.element);
|
|
3132
3151
|
rootsConfig[rootName] = rootConfig;
|
|
3133
3152
|
}
|
|
3134
3153
|
// The ClassicEditor has a special separate config option `attachTo`.
|
|
@@ -3235,6 +3254,123 @@ function isTextArea(sourceElement) {
|
|
|
3235
3254
|
return typeof legacyValue == 'string' ? legacyValue : legacyValue[rootName];
|
|
3236
3255
|
}
|
|
3237
3256
|
}
|
|
3257
|
+
/**
|
|
3258
|
+
* Normalizes the value passed in {@link module:core/editor/editorconfig~RootConfig#element `config.root.element`} into a
|
|
3259
|
+
* canonical form (`HTMLElement` or {@link module:core/editor/editorconfig~ViewRootElementDefinition}) that the UI layer
|
|
3260
|
+
* can consume directly.
|
|
3261
|
+
*
|
|
3262
|
+
* Accepts:
|
|
3263
|
+
*
|
|
3264
|
+
* * an existing `HTMLElement` - returned as is, so the editor wraps it in place,
|
|
3265
|
+
* * a tag name string (e.g. `'h1'`) - turned into `{ name: 'h1' }`,
|
|
3266
|
+
* * a {@link module:core/editor/editorconfig~ViewRootElementDefinition} object - reshaped so `classes` becomes an
|
|
3267
|
+
* array and `attributes.class` is lifted into it.
|
|
3268
|
+
*
|
|
3269
|
+
* The `class` attribute may be passed either as the dedicated `classes` field (string or array of strings) or as a
|
|
3270
|
+
* `class` key inside `attributes`. They are concatenated. The `style` attribute may be passed either as the `styles`
|
|
3271
|
+
* object or as a `style` string inside `attributes`. When both are provided, the object form takes precedence and a
|
|
3272
|
+
* warning is logged.
|
|
3273
|
+
*
|
|
3274
|
+
* The `<textarea>` tag name is rejected as it cannot host a rich-text editable.
|
|
3275
|
+
*
|
|
3276
|
+
* Already used internally by {@link ~normalizeRootsConfig `normalizeRootsConfig()`} for `config.root.element` /
|
|
3277
|
+
* `config.roots.*.element`. Exported for callers that bypass the regular config-normalization pass, e.g.
|
|
3278
|
+
* {@link module:editor-multi-root/multirooteditor~MultiRootEditor#addRoot `MultiRootEditor.addRoot()`}
|
|
3279
|
+
* and {@link module:editor-multi-root/multirooteditor~MultiRootEditor#createEditable `MultiRootEditor.createEditable()`}.
|
|
3280
|
+
*
|
|
3281
|
+
* @internal
|
|
3282
|
+
*/ function normalizeViewRootElementDefinition(spec) {
|
|
3283
|
+
if (spec == null) {
|
|
3284
|
+
return undefined;
|
|
3285
|
+
}
|
|
3286
|
+
if (isElement(spec)) {
|
|
3287
|
+
assertAllowedTagName(spec.tagName);
|
|
3288
|
+
return spec;
|
|
3289
|
+
}
|
|
3290
|
+
if (typeof spec === 'string') {
|
|
3291
|
+
assertAllowedTagName(spec);
|
|
3292
|
+
return {
|
|
3293
|
+
name: spec
|
|
3294
|
+
};
|
|
3295
|
+
}
|
|
3296
|
+
const { name, classes, styles, attributes } = spec;
|
|
3297
|
+
if (name !== undefined) {
|
|
3298
|
+
assertAllowedTagName(name);
|
|
3299
|
+
}
|
|
3300
|
+
const { class: attrClass, style: attrStyle, ...restAttributes } = attributes || {};
|
|
3301
|
+
const hadAttrClass = !!attributes && 'class' in attributes;
|
|
3302
|
+
const hasStyles = !!styles && Object.keys(styles).length > 0;
|
|
3303
|
+
const stylesOverrode = hasStyles && !!attrStyle;
|
|
3304
|
+
if (stylesOverrode) {
|
|
3305
|
+
/**
|
|
3306
|
+
* Both the {@link module:engine/view/elementdefinition~ViewElementObjectDefinition#styles `styles`} object
|
|
3307
|
+
* and the {@link module:engine/view/elementdefinition~ViewElementObjectDefinition#attributes `attributes.style`}
|
|
3308
|
+
* string were provided in {@link module:core/editor/editorconfig~RootConfig#element `config.root.element`}.
|
|
3309
|
+
* Provide one or the other - the object form takes precedence.
|
|
3310
|
+
*
|
|
3311
|
+
* @error editor-root-element-styles-overspecified
|
|
3312
|
+
*/ logWarning('editor-root-element-styles-overspecified');
|
|
3313
|
+
}
|
|
3314
|
+
// Split whitespace-separated tokens (e.g. `'foo bar'` or `[ 'a b', 'c' ]`) into individual class names so the
|
|
3315
|
+
// canonical `classes` array is "one class per entry". This matches how a caller would expect the array form to
|
|
3316
|
+
// behave if it were ever passed directly to per-class APIs.
|
|
3317
|
+
const normalizedClasses = [
|
|
3318
|
+
...tokenizeClasses(classes),
|
|
3319
|
+
...tokenizeClasses(attrClass)
|
|
3320
|
+
];
|
|
3321
|
+
// `class` and `style` are kept as empty strings (rather than stripped) when their value was lifted into `classes`
|
|
3322
|
+
// or overridden by `styles`. This way the deep-merge in `Config.set()` overwrites any stale value left from the
|
|
3323
|
+
// user-provided input, instead of preserving it.
|
|
3324
|
+
const normalizedAttributes = {
|
|
3325
|
+
...restAttributes
|
|
3326
|
+
};
|
|
3327
|
+
if (hadAttrClass) {
|
|
3328
|
+
normalizedAttributes.class = '';
|
|
3329
|
+
}
|
|
3330
|
+
if (stylesOverrode) {
|
|
3331
|
+
normalizedAttributes.style = '';
|
|
3332
|
+
} else if (attrStyle) {
|
|
3333
|
+
normalizedAttributes.style = attrStyle;
|
|
3334
|
+
}
|
|
3335
|
+
return {
|
|
3336
|
+
...name !== undefined && {
|
|
3337
|
+
name
|
|
3338
|
+
},
|
|
3339
|
+
...normalizedClasses.length && {
|
|
3340
|
+
classes: normalizedClasses
|
|
3341
|
+
},
|
|
3342
|
+
...hasStyles && {
|
|
3343
|
+
styles
|
|
3344
|
+
},
|
|
3345
|
+
...Object.keys(normalizedAttributes).length && {
|
|
3346
|
+
attributes: normalizedAttributes
|
|
3347
|
+
}
|
|
3348
|
+
};
|
|
3349
|
+
}
|
|
3350
|
+
/**
|
|
3351
|
+
* Splits a class value (string, array of strings, or `undefined`) into individual class tokens.
|
|
3352
|
+
* Whitespace-separated tokens within a single string are split into separate array entries and empty entries are dropped.
|
|
3353
|
+
*/ function tokenizeClasses(value) {
|
|
3354
|
+
if (!value) {
|
|
3355
|
+
return [];
|
|
3356
|
+
}
|
|
3357
|
+
return toArray(value).flatMap((token)=>token.split(/\s+/)).filter(Boolean);
|
|
3358
|
+
}
|
|
3359
|
+
/**
|
|
3360
|
+
* Throws when the given tag name cannot be used as an editable root.
|
|
3361
|
+
*/ function assertAllowedTagName(name) {
|
|
3362
|
+
if ([
|
|
3363
|
+
'textarea',
|
|
3364
|
+
'input'
|
|
3365
|
+
].includes(name.toLowerCase())) {
|
|
3366
|
+
/**
|
|
3367
|
+
* The DOM tag name specified in {@link module:core/editor/editorconfig~RootConfig#element `config.root.element`}
|
|
3368
|
+
* cannot be used as an editor's editable root.
|
|
3369
|
+
*
|
|
3370
|
+
* @error editor-wrong-element
|
|
3371
|
+
*/ throw new CKEditorError('editor-wrong-element', null);
|
|
3372
|
+
}
|
|
3373
|
+
}
|
|
3238
3374
|
/**
|
|
3239
3375
|
* An alias for `isElement` from `es-toolkit/compat` with additional type guard.
|
|
3240
3376
|
*/ function isElement(value) {
|
|
@@ -3274,6 +3410,23 @@ function isTextArea(sourceElement) {
|
|
|
3274
3410
|
}
|
|
3275
3411
|
}
|
|
3276
3412
|
|
|
3413
|
+
/**
|
|
3414
|
+
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3415
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
3416
|
+
*/ /**
|
|
3417
|
+
* @module core/editor/utils/rootacceptsblocks
|
|
3418
|
+
*/ /**
|
|
3419
|
+
* Returns whether the model root with the given name accepts `$block` children according to the editor's schema.
|
|
3420
|
+
*
|
|
3421
|
+
* Call this once the plugin initialization phase is finished — typically during UI init or right after creating
|
|
3422
|
+
* a new editable — so the schema reflects any plugin-registered root types or additional content rules.
|
|
3423
|
+
*
|
|
3424
|
+
* @internal
|
|
3425
|
+
*/ function rootAcceptsBlocks(editor, rootName) {
|
|
3426
|
+
const root = editor.model.document.getRoot(rootName);
|
|
3427
|
+
return editor.model.schema.checkChild(root, '$block');
|
|
3428
|
+
}
|
|
3429
|
+
|
|
3277
3430
|
/**
|
|
3278
3431
|
* The list of pending editor actions.
|
|
3279
3432
|
*
|
|
@@ -3385,5 +3538,5 @@ function isTextArea(sourceElement) {
|
|
|
3385
3538
|
}
|
|
3386
3539
|
}
|
|
3387
3540
|
|
|
3388
|
-
export { Accessibility, Command, CommandCollection, Context, ContextPlugin, EditingKeystrokeHandler, Editor, ElementApiMixin, MultiCommand, PendingActions, Plugin, PluginCollection, DEFAULT_GROUP_ID as _DEFAULT_ACCESSIBILITY_GROUP_ID, getEditorUsageData as _getEditorUsageData, attachToForm, normalizeMultiRootEditorConstructorParams, normalizeRootsConfig, normalizeSingleRootEditorConstructorParams, registerAndInitializeRootConfigAttributes, secureSourceElement, verifyRootElements };
|
|
3541
|
+
export { Accessibility, Command, CommandCollection, Context, ContextPlugin, EditingKeystrokeHandler, Editor, ElementApiMixin, MultiCommand, PendingActions, Plugin, PluginCollection, DEFAULT_GROUP_ID as _DEFAULT_ACCESSIBILITY_GROUP_ID, getEditorUsageData as _getEditorUsageData, attachToForm, normalizeMultiRootEditorConstructorParams, normalizeRootsConfig, normalizeSingleRootEditorConstructorParams, normalizeViewRootElementDefinition, registerAndInitializeRootConfigAttributes, rootAcceptsBlocks, secureSourceElement, verifyRootElements };
|
|
3389
3542
|
//# sourceMappingURL=index.js.map
|