@progress/kendo-angular-editor 17.0.0-develop.4 → 17.0.0-develop.40

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.
Files changed (127) hide show
  1. package/README.md +26 -18
  2. package/common/commands.d.ts +5 -5
  3. package/common/direction.d.ts +1 -1
  4. package/common/plugins-function.d.ts +1 -1
  5. package/common/predicate.d.ts +1 -1
  6. package/config/utils.d.ts +2 -2
  7. package/dialogs/colorpicker-dialog.component.d.ts +1 -1
  8. package/dialogs/file-link-dialog.component.d.ts +1 -1
  9. package/dialogs/font-family-dialog.component.d.ts +1 -1
  10. package/dialogs/font-size-dialog.component.d.ts +1 -1
  11. package/dialogs/format-dialog.component.d.ts +1 -1
  12. package/dialogs/image-dialog.component.d.ts +1 -1
  13. package/dialogs/insert-table-dialog.component.d.ts +1 -1
  14. package/dialogs/source-dialog.component.d.ts +1 -1
  15. package/editor.component.d.ts +1 -1
  16. package/editor.module.d.ts +2 -3
  17. package/{esm2020 → esm2022}/common/provider.service.mjs +4 -3
  18. package/{esm2020 → esm2022}/dialogs/colorpicker-dialog.component.mjs +17 -5
  19. package/{esm2020 → esm2022}/dialogs/file-link-dialog.component.mjs +15 -10
  20. package/{esm2020 → esm2022}/dialogs/font-family-dialog.component.mjs +13 -6
  21. package/{esm2020 → esm2022}/dialogs/font-size-dialog.component.mjs +13 -6
  22. package/{esm2020 → esm2022}/dialogs/format-dialog.component.mjs +13 -6
  23. package/{esm2020 → esm2022}/dialogs/image-dialog.component.mjs +29 -21
  24. package/{esm2020 → esm2022}/dialogs/insert-table-dialog.component.mjs +8 -5
  25. package/{esm2020 → esm2022}/dialogs/source-dialog.component.mjs +10 -6
  26. package/{esm2020 → esm2022}/editor.component.mjs +222 -180
  27. package/esm2022/editor.module.mjs +88 -0
  28. package/{esm2020 → esm2022}/localization/custom-messages.component.mjs +9 -8
  29. package/{esm2020 → esm2022}/localization/editor-localization.service.mjs +3 -3
  30. package/{esm2020 → esm2022}/localization/localized-messages.directive.mjs +7 -6
  31. package/esm2022/localization/messages.mjs +364 -0
  32. package/{esm2020 → esm2022}/package-metadata.mjs +2 -2
  33. package/{esm2020 → esm2022}/preventable-events/paste-event.mjs +12 -0
  34. package/{esm2020 → esm2022}/preventable-events/preventable-event.mjs +1 -3
  35. package/{esm2020 → esm2022}/tools/alignment/editor-align-center-button.directive.mjs +3 -3
  36. package/{esm2020 → esm2022}/tools/alignment/editor-align-justify-button.directive.mjs +3 -3
  37. package/{esm2020 → esm2022}/tools/alignment/editor-align-left-button.directive.mjs +3 -3
  38. package/{esm2020 → esm2022}/tools/alignment/editor-align-right-button.directive.mjs +3 -3
  39. package/{esm2020 → esm2022}/tools/blockquote/editor-blockquote-button.directive.mjs +3 -3
  40. package/{esm2020 → esm2022}/tools/colorpicker/editor-back-color.directive.mjs +4 -3
  41. package/{esm2020 → esm2022}/tools/colorpicker/editor-colorpicker.component.mjs +59 -33
  42. package/{esm2020 → esm2022}/tools/colorpicker/editor-fore-color.directive.mjs +4 -3
  43. package/{esm2020 → esm2022}/tools/editor-clean-formatting-button.directive.mjs +3 -3
  44. package/{esm2020 → esm2022}/tools/fontfamily/editor-fontfamily-dropdownlist.component.mjs +14 -7
  45. package/{esm2020 → esm2022}/tools/fontfamily/editor-fontfamily.component.mjs +53 -41
  46. package/{esm2020 → esm2022}/tools/fontsize/editor-fontsize-dropdownlist.component.mjs +14 -7
  47. package/{esm2020 → esm2022}/tools/fontsize/editor-fontsize.component.mjs +48 -36
  48. package/{esm2020 → esm2022}/tools/format/editor-format-dropdownlist.component.mjs +14 -7
  49. package/{esm2020 → esm2022}/tools/format/editor-format.component.mjs +41 -36
  50. package/{esm2020 → esm2022}/tools/history/editor-redo-button.directive.mjs +3 -3
  51. package/{esm2020 → esm2022}/tools/history/editor-undo-button.directive.mjs +3 -3
  52. package/{esm2020 → esm2022}/tools/image/editor-insert-image-button.directive.mjs +3 -3
  53. package/{esm2020 → esm2022}/tools/indentation/editor-indent-button.directive.mjs +3 -3
  54. package/{esm2020 → esm2022}/tools/indentation/editor-outdent-button.directive.mjs +3 -3
  55. package/{esm2020 → esm2022}/tools/link/editor-create-link-button.directive.mjs +3 -3
  56. package/{esm2020 → esm2022}/tools/link/editor-insert-file-button.directive.mjs +3 -3
  57. package/{esm2020 → esm2022}/tools/link/editor-unlink-button.directive.mjs +3 -3
  58. package/{esm2020 → esm2022}/tools/list/editor-insert-ordered-list-button.directive.mjs +3 -3
  59. package/{esm2020 → esm2022}/tools/list/editor-insert-unordered-list-button.directive.mjs +3 -3
  60. package/{esm2020 → esm2022}/tools/print/editor-print-button.directive.mjs +3 -3
  61. package/{esm2020 → esm2022}/tools/select-all/select-all-button.directive.mjs +3 -3
  62. package/{esm2020 → esm2022}/tools/shared/dropdown-tool.directive.mjs +11 -9
  63. package/{esm2020 → esm2022}/tools/shared/editor-command-base.mjs +9 -3
  64. package/{esm2020 → esm2022}/tools/shared/editor-command-button.mjs +5 -0
  65. package/{esm2020 → esm2022}/tools/shared/editor-command-dialog.mjs +5 -0
  66. package/{esm2020 → esm2022}/tools/source/editor-view-source-button.directive.mjs +3 -3
  67. package/{esm2020 → esm2022}/tools/tables/editor-add-column-after-button.directive.mjs +3 -3
  68. package/{esm2020 → esm2022}/tools/tables/editor-add-column-before-button.directive.mjs +3 -3
  69. package/{esm2020 → esm2022}/tools/tables/editor-add-row-after-button.directive.mjs +3 -3
  70. package/{esm2020 → esm2022}/tools/tables/editor-add-row-before-button.directive.mjs +3 -3
  71. package/{esm2020 → esm2022}/tools/tables/editor-delete-column-button.directive.mjs +3 -3
  72. package/{esm2020 → esm2022}/tools/tables/editor-delete-row-button.directive.mjs +3 -3
  73. package/{esm2020 → esm2022}/tools/tables/editor-delete-table-button.directive.mjs +3 -3
  74. package/{esm2020 → esm2022}/tools/tables/editor-insert-table-button.component.mjs +27 -16
  75. package/{esm2020 → esm2022}/tools/tables/editor-merge-cells-button.directive.mjs +3 -3
  76. package/{esm2020 → esm2022}/tools/tables/editor-split-cell-button.directive.mjs +3 -3
  77. package/{esm2020 → esm2022}/tools/tables/popup-table-grid.component.mjs +11 -10
  78. package/{esm2020 → esm2022}/tools/tools.service.mjs +5 -4
  79. package/{esm2020 → esm2022}/tools/typographical-emphasis/editor-bold-button.directive.mjs +3 -3
  80. package/{esm2020 → esm2022}/tools/typographical-emphasis/editor-italic-button.directive.mjs +3 -3
  81. package/{esm2020 → esm2022}/tools/typographical-emphasis/editor-strikethrough-button.directive.mjs +3 -3
  82. package/{esm2020 → esm2022}/tools/typographical-emphasis/editor-subscript-button.directive.mjs +3 -3
  83. package/{esm2020 → esm2022}/tools/typographical-emphasis/editor-superscript-button.directive.mjs +3 -3
  84. package/{esm2020 → esm2022}/tools/typographical-emphasis/editor-underline-button.directive.mjs +3 -3
  85. package/{fesm2020 → fesm2022}/progress-kendo-angular-editor.mjs +1608 -1174
  86. package/localization/messages.d.ts +1 -1
  87. package/package.json +25 -31
  88. package/schematics/ngAdd/index.js +4 -4
  89. package/tools/colorpicker/editor-colorpicker.component.d.ts +2 -4
  90. package/tools/fontfamily/editor-fontfamily-dropdownlist.component.d.ts +1 -1
  91. package/tools/fontfamily/editor-fontfamily.component.d.ts +2 -4
  92. package/tools/fontsize/editor-fontsize-dropdownlist.component.d.ts +1 -1
  93. package/tools/fontsize/editor-fontsize.component.d.ts +2 -4
  94. package/tools/format/editor-format-dropdownlist.component.d.ts +1 -1
  95. package/tools/format/editor-format.component.d.ts +2 -4
  96. package/tools/tables/editor-insert-table-button.component.d.ts +0 -2
  97. package/esm2020/editor.module.mjs +0 -111
  98. package/esm2020/localization/messages.mjs +0 -132
  99. package/fesm2015/progress-kendo-angular-editor.mjs +0 -6403
  100. /package/{esm2020 → esm2022}/common/active-marks.mjs +0 -0
  101. /package/{esm2020 → esm2022}/common/apply-to-word-options.mjs +0 -0
  102. /package/{esm2020 → esm2022}/common/commands.mjs +0 -0
  103. /package/{esm2020 → esm2022}/common/css-settings.interface.mjs +0 -0
  104. /package/{esm2020 → esm2022}/common/direction.mjs +0 -0
  105. /package/{esm2020 → esm2022}/common/error-messages.mjs +0 -0
  106. /package/{esm2020 → esm2022}/common/font-family-item.interface.mjs +0 -0
  107. /package/{esm2020 → esm2022}/common/font-size-item.interface.mjs +0 -0
  108. /package/{esm2020 → esm2022}/common/format-item.interface.mjs +0 -0
  109. /package/{esm2020 → esm2022}/common/image-data.interface.mjs +0 -0
  110. /package/{esm2020 → esm2022}/common/link-data.interface.mjs +0 -0
  111. /package/{esm2020 → esm2022}/common/paste-cleanup-settings.mjs +0 -0
  112. /package/{esm2020 → esm2022}/common/plugins-function.mjs +0 -0
  113. /package/{esm2020 → esm2022}/common/predicate.mjs +0 -0
  114. /package/{esm2020 → esm2022}/common/resizable-options.interface.mjs +0 -0
  115. /package/{esm2020 → esm2022}/common/styles.mjs +0 -0
  116. /package/{esm2020 → esm2022}/common/table-data.interface.mjs +0 -0
  117. /package/{esm2020 → esm2022}/config/command-icons.mjs +0 -0
  118. /package/{esm2020 → esm2022}/config/commands.mjs +0 -0
  119. /package/{esm2020 → esm2022}/config/schema.mjs +0 -0
  120. /package/{esm2020 → esm2022}/config/semantic-nodes.mjs +0 -0
  121. /package/{esm2020 → esm2022}/config/table-commands.mjs +0 -0
  122. /package/{esm2020 → esm2022}/config/utils.mjs +0 -0
  123. /package/{esm2020 → esm2022}/directives.mjs +0 -0
  124. /package/{esm2020 → esm2022}/editor-toolbar-state.mjs +0 -0
  125. /package/{esm2020 → esm2022}/index.mjs +0 -0
  126. /package/{esm2020 → esm2022}/progress-kendo-angular-editor.mjs +0 -0
  127. /package/{esm2020 → esm2022}/util.mjs +0 -0
@@ -74,160 +74,14 @@ const getPasteCleanupAttributes = (config) => {
74
74
  * Represents the [Kendo UI Editor component for Angular]({% slug overview_editor %}).
75
75
  */
76
76
  export class EditorComponent {
77
- constructor(dialogService, localization, cdr, ngZone, element, providerService, toolsService, renderer) {
78
- this.dialogService = dialogService;
79
- this.localization = localization;
80
- this.cdr = cdr;
81
- this.ngZone = ngZone;
82
- this.element = element;
83
- this.providerService = providerService;
84
- this.toolsService = toolsService;
85
- this.renderer = renderer;
86
- /**
87
- * If set to `false`, the Editor will run in style non-encapsulated mode. This means
88
- * that the styles of the page will be persisted in the Editor and its content will be affected by them.
89
- * @default true
90
- */
91
- this.iframe = true;
92
- /**
93
- * If set to `true` or `ApplyToWordOptions` object, commands that apply emphasis or inline styles will be applied to the whole word the cursor is in.
94
- * @default false
95
- */
96
- this.applyToWord = false;
97
- /**
98
- * By default, whitespace is collapsed as per HTML's rules.
99
- * Set to `true` to preserve whitespace, but normalize newlines to spaces.
100
- * Set to `'full'` to preserve whitespace entirely. In this case the default ProseMirror behavior is to parse white space into nodes.
101
- *
102
- * @default false
103
- */
104
- this.preserveWhitespace = false;
105
- /**
106
- * Determines whether the Editor can be resized ([see example](slug:resizing_editor#toc-resizing-the-editor)).
107
- * @default false
108
- */
109
- this.resizable = false;
110
- /**
111
- * Fires each time the value of the Editor is changed upon user interaction—
112
- * for example, when the value is updated through typing in the content area or using some of the Editor tools ([see example](slug:events_editor)).
113
- * When the value of the Editor is programmatically changed through its API (`ngModel`) or form binding (`formControl`),
114
- * the `valueChange` event is not triggered because it might cause a mix-up with the
115
- * built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.
116
- */
117
- this.valueChange = new EventEmitter();
118
- /**
119
- * Fires when the content area of the Editor is focused ([see example](slug:events_editor)).
120
- */
121
- this.onFocus = new EventEmitter();
122
- /**
123
- * Fires when the user performs paste in the content area of the Editor ([see example](slug:events_editor)).
124
- * The event is preventable. If you cancel it, the Editor content will not change.
125
- */
126
- this.paste = new EventEmitter();
127
- /**
128
- * Fires when the content area of the Editor is blurred ([see example](slug:events_editor)).
129
- */
130
- this.onBlur = new EventEmitter();
131
- this.hostClass = true;
132
- /**
133
- * @hidden
134
- */
135
- this.stateChange = new BehaviorSubject(initialToolBarState);
136
- /**
137
- * @hidden
138
- */
139
- this.showLicenseWatermark = false;
140
- /**
141
- * @hidden
142
- */
143
- this.valueModified = new Subject();
144
- /**
145
- * @hidden
146
- */
147
- this.focusableId = `k-editor-${guid()}`;
148
- this._readonly = false;
149
- this._placeholder = '';
150
- this.inForm = false;
151
- this._iframeCss = { keepBuiltInCss: true };
152
- this.afterViewInit = new Subject();
153
- this.contentAreaLoaded = new Subject();
154
- this.dispatchTransaction = (tr) => {
155
- const docChanged = tr.docChanged;
156
- if (this.disabled || (this.readonly && docChanged)) {
157
- return;
158
- }
159
- if (docChanged) {
160
- const doc = tr.doc;
161
- const html = getHtml({ doc });
162
- this.trOnChange = tr;
163
- this.htmlOnChange = html;
164
- this.ngZone.run(() => {
165
- this.valueModified.next(html === EMPTY_PARAGRAPH ? '' : html);
166
- });
167
- }
168
- if (!docChanged || this.inForm) {
169
- this.view.updateState(this.view.state.apply(tr));
170
- this.trOnChange = null;
171
- }
172
- };
173
- this.transformPastedContent = (dirtyHtml, plainText) => {
174
- if (plainText) {
175
- return this.dispatchPasteEvent(dirtyHtml, dirtyHtml);
176
- }
177
- const pasteCleanupSettings = { ...defaultPasteCleanupSettings, ...this.pasteCleanupSettings };
178
- const html = pipe(removeInvalidHTMLIf(pasteCleanupSettings.removeInvalidHTML), removeCommentsIf(pasteCleanupSettings.removeHtmlComments))(dirtyHtml);
179
- const clean = pasteCleanup(html, {
180
- convertMsLists: pasteCleanupSettings.convertMsLists,
181
- stripTags: pasteCleanupSettings.stripTags.join('|'),
182
- attributes: getPasteCleanupAttributes(pasteCleanupSettings)
183
- });
184
- return this.dispatchPasteEvent(dirtyHtml, clean);
185
- };
186
- this.transformPastedHTML = (html) => this.transformPastedContent(html);
187
- this.transformPastedText = (html) => this.transformPastedContent(html, true);
188
- this.changeValue = (value) => {
189
- const prev = this._value;
190
- this._value = value;
191
- if (!this._view) {
192
- return;
193
- }
194
- if (this.htmlOnChange === value && this.trOnChange) {
195
- this.view.updateState(this.view.state.apply(this.trOnChange));
196
- }
197
- else {
198
- const newValue = (prev || '') !== (value || '');
199
- const formReset = (this.inForm && !value);
200
- if (newValue || formReset) {
201
- const iframeContentWindowNotPresent = this.iframe && !this.container.element.nativeElement.contentWindow;
202
- if (iframeContentWindowNotPresent) {
203
- return;
204
- }
205
- const state = this.view.state;
206
- const nextDoc = parseContent(value || '', state.schema, { preserveWhitespace: this.preserveWhitespace });
207
- const tr = state.tr
208
- .setSelection(new AllSelection(state.doc))
209
- .replaceSelectionWith(nextDoc);
210
- this.view.updateState(state.apply(tr));
211
- }
212
- }
213
- this.trOnChange = null;
214
- this.htmlOnChange = null;
215
- };
216
- this.onChangeCallback = (value) => {
217
- this.changeValue(value);
218
- };
219
- this.onTouchedCallback = (_) => { };
220
- this.onPaste = (_view, nativeEvent) => {
221
- this._pasteEvent = nativeEvent;
222
- return false;
223
- };
224
- const isValid = validatePackage(packageMetadata);
225
- this.showLicenseWatermark = shouldShowValidationUI(isValid);
226
- this.providerService.editor = this;
227
- this.direction = localization.rtl ? 'rtl' : 'ltr';
228
- // https://stackoverflow.com/questions/56572483/chrome-is-synchronously-handling-iframe-loading-whereas-firefox-handles-it-asyn
229
- this.subs = zip(this.afterViewInit.asObservable(), this.contentAreaLoaded.asObservable()).subscribe(() => this.initialize());
230
- }
77
+ dialogService;
78
+ localization;
79
+ cdr;
80
+ ngZone;
81
+ element;
82
+ providerService;
83
+ toolsService;
84
+ renderer;
231
85
  /**
232
86
  * Sets the value of the Editor ([see example](slug:overview_editor)).
233
87
  */
@@ -308,6 +162,12 @@ export class EditorComponent {
308
162
  get readonly() {
309
163
  return this._readonly;
310
164
  }
165
+ /**
166
+ * If set to `false`, the Editor will run in style non-encapsulated mode. This means
167
+ * that the styles of the page will be persisted in the Editor and its content will be affected by them.
168
+ * @default true
169
+ */
170
+ iframe = true;
311
171
  /**
312
172
  * Allows applying custom CSS styles to the Editor in iframe mode.
313
173
  */
@@ -317,6 +177,11 @@ export class EditorComponent {
317
177
  get iframeCss() {
318
178
  return this._iframeCss;
319
179
  }
180
+ /**
181
+ * If set to `true` or `ApplyToWordOptions` object, commands that apply emphasis or inline styles will be applied to the whole word the cursor is in.
182
+ * @default false
183
+ */
184
+ applyToWord = false;
320
185
  /**
321
186
  * Allows providing a custom schema. ([see example]({% slug schema_editor %}))
322
187
  */
@@ -365,6 +230,45 @@ export class EditorComponent {
365
230
  get placeholder() {
366
231
  return this._placeholder;
367
232
  }
233
+ /**
234
+ * By default, whitespace is collapsed as per HTML's rules.
235
+ * Set to `true` to preserve whitespace, but normalize newlines to spaces.
236
+ * Set to `'full'` to preserve whitespace entirely. In this case the default ProseMirror behavior is to parse white space into nodes.
237
+ *
238
+ * @default false
239
+ */
240
+ preserveWhitespace = false;
241
+ /**
242
+ * Configures how pasted content is modified before it is added to the Editor ([see example]({% slug paste_cleanup %})).
243
+ */
244
+ pasteCleanupSettings;
245
+ /**
246
+ * Determines whether the Editor can be resized ([see example](slug:resizing_editor#toc-resizing-the-editor)).
247
+ * @default false
248
+ */
249
+ resizable = false;
250
+ /**
251
+ * Fires each time the value of the Editor is changed upon user interaction—
252
+ * for example, when the value is updated through typing in the content area or using some of the Editor tools ([see example](slug:events_editor)).
253
+ * When the value of the Editor is programmatically changed through its API (`ngModel`) or form binding (`formControl`),
254
+ * the `valueChange` event is not triggered because it might cause a mix-up with the
255
+ * built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.
256
+ */
257
+ valueChange = new EventEmitter();
258
+ /**
259
+ * Fires when the content area of the Editor is focused ([see example](slug:events_editor)).
260
+ */
261
+ onFocus = new EventEmitter();
262
+ /**
263
+ * Fires when the user performs paste in the content area of the Editor ([see example](slug:events_editor)).
264
+ * The event is preventable. If you cancel it, the Editor content will not change.
265
+ */
266
+ paste = new EventEmitter();
267
+ /**
268
+ * Fires when the content area of the Editor is blurred ([see example](slug:events_editor)).
269
+ */
270
+ onBlur = new EventEmitter();
271
+ hostClass = true;
368
272
  get resizableClass() {
369
273
  return !!this.resizable;
370
274
  }
@@ -399,6 +303,14 @@ export class EditorComponent {
399
303
  const resizableOptions = this.resizable;
400
304
  return resizableOptions.maxHeight ? resizableOptions.maxHeight + 'px' : undefined;
401
305
  }
306
+ /**
307
+ * @hidden
308
+ */
309
+ stateChange = new BehaviorSubject(initialToolBarState);
310
+ /**
311
+ * @hidden
312
+ */
313
+ showLicenseWatermark = false;
402
314
  get toolbar() {
403
315
  return this.defaultToolbarComponent || this.userToolBarComponent;
404
316
  }
@@ -418,6 +330,63 @@ export class EditorComponent {
418
330
  get selectionText() {
419
331
  return this._view && this._view.state ? getSelectionText(this._view.state) : '';
420
332
  }
333
+ /**
334
+ * @hidden
335
+ */
336
+ valueModified = new Subject();
337
+ userToolBarComponent;
338
+ userToolBarElement;
339
+ dialogContainer;
340
+ // Use `ViewContainerRef` instead of `ElementRef` because the dialog expects `ViewContainerRef`.
341
+ container;
342
+ direction;
343
+ viewMountElement;
344
+ /**
345
+ * @hidden
346
+ */
347
+ focusChangedProgrammatically;
348
+ /**
349
+ * @hidden
350
+ */
351
+ shouldEmitFocus;
352
+ /**
353
+ * @hidden
354
+ */
355
+ focusableId = `k-editor-${guid()}`;
356
+ defaultToolbar;
357
+ defaultToolbarComponent;
358
+ subs;
359
+ _view;
360
+ _value;
361
+ _disabled;
362
+ _readonly = false;
363
+ _schema;
364
+ _plugins;
365
+ _placeholder = '';
366
+ _styleObserver;
367
+ trOnChange;
368
+ htmlOnChange;
369
+ inForm = false;
370
+ _pasteEvent;
371
+ _iframeCss = { keepBuiltInCss: true };
372
+ afterViewInit = new Subject();
373
+ contentAreaLoaded = new Subject();
374
+ constructor(dialogService, localization, cdr, ngZone, element, providerService, toolsService, renderer) {
375
+ this.dialogService = dialogService;
376
+ this.localization = localization;
377
+ this.cdr = cdr;
378
+ this.ngZone = ngZone;
379
+ this.element = element;
380
+ this.providerService = providerService;
381
+ this.toolsService = toolsService;
382
+ this.renderer = renderer;
383
+ const isValid = validatePackage(packageMetadata);
384
+ this.showLicenseWatermark = shouldShowValidationUI(isValid);
385
+ this.providerService.editor = this;
386
+ this.direction = localization.rtl ? 'rtl' : 'ltr';
387
+ // https://stackoverflow.com/questions/56572483/chrome-is-synchronously-handling-iframe-loading-whereas-firefox-handles-it-asyn
388
+ this.subs = zip(this.afterViewInit.asObservable(), this.contentAreaLoaded.asObservable()).subscribe(() => this.initialize());
389
+ }
421
390
  ngOnInit() {
422
391
  this.subs.add(this.localization.changes.subscribe(({ rtl }) => {
423
392
  this.direction = rtl ? 'rtl' : 'ltr';
@@ -749,6 +718,71 @@ export class EditorComponent {
749
718
  .pipe(filter((event) => !this.viewMountElement.contains(event.relatedTarget)))
750
719
  .subscribe(() => this.onTouchedCallback()));
751
720
  }
721
+ dispatchTransaction = (tr) => {
722
+ const docChanged = tr.docChanged;
723
+ if (this.disabled || (this.readonly && docChanged)) {
724
+ return;
725
+ }
726
+ if (docChanged) {
727
+ const doc = tr.doc;
728
+ const html = getHtml({ doc });
729
+ this.trOnChange = tr;
730
+ this.htmlOnChange = html;
731
+ this.ngZone.run(() => {
732
+ this.valueModified.next(html === EMPTY_PARAGRAPH ? '' : html);
733
+ });
734
+ }
735
+ if (!docChanged || this.inForm) {
736
+ this.view.updateState(this.view.state.apply(tr));
737
+ this.trOnChange = null;
738
+ }
739
+ };
740
+ transformPastedContent = (dirtyHtml, plainText) => {
741
+ if (plainText) {
742
+ return this.dispatchPasteEvent(dirtyHtml, dirtyHtml);
743
+ }
744
+ const pasteCleanupSettings = { ...defaultPasteCleanupSettings, ...this.pasteCleanupSettings };
745
+ const html = pipe(removeInvalidHTMLIf(pasteCleanupSettings.removeInvalidHTML), removeCommentsIf(pasteCleanupSettings.removeHtmlComments))(dirtyHtml);
746
+ const clean = pasteCleanup(html, {
747
+ convertMsLists: pasteCleanupSettings.convertMsLists,
748
+ stripTags: pasteCleanupSettings.stripTags.join('|'),
749
+ attributes: getPasteCleanupAttributes(pasteCleanupSettings)
750
+ });
751
+ return this.dispatchPasteEvent(dirtyHtml, clean);
752
+ };
753
+ transformPastedHTML = (html) => this.transformPastedContent(html);
754
+ transformPastedText = (html) => this.transformPastedContent(html, true);
755
+ changeValue = (value) => {
756
+ const prev = this._value;
757
+ this._value = value;
758
+ if (!this._view) {
759
+ return;
760
+ }
761
+ if (this.htmlOnChange === value && this.trOnChange) {
762
+ this.view.updateState(this.view.state.apply(this.trOnChange));
763
+ }
764
+ else {
765
+ const newValue = (prev || '') !== (value || '');
766
+ const formReset = (this.inForm && !value);
767
+ if (newValue || formReset) {
768
+ const iframeContentWindowNotPresent = this.iframe && !this.container.element.nativeElement.contentWindow;
769
+ if (iframeContentWindowNotPresent) {
770
+ return;
771
+ }
772
+ const state = this.view.state;
773
+ const nextDoc = parseContent(value || '', state.schema, { preserveWhitespace: this.preserveWhitespace });
774
+ const tr = state.tr
775
+ .setSelection(new AllSelection(state.doc))
776
+ .replaceSelectionWith(nextDoc);
777
+ this.view.updateState(state.apply(tr));
778
+ }
779
+ }
780
+ this.trOnChange = null;
781
+ this.htmlOnChange = null;
782
+ };
783
+ onChangeCallback = (value) => {
784
+ this.changeValue(value);
785
+ };
752
786
  normalizeSize() {
753
787
  if (typeof this.resizable === 'object' && !this._styleObserver) {
754
788
  const element = this.element.nativeElement;
@@ -790,38 +824,45 @@ export class EditorComponent {
790
824
  }
791
825
  });
792
826
  }
827
+ onTouchedCallback = (_) => { };
828
+ onPaste = (_view, nativeEvent) => {
829
+ this._pasteEvent = nativeEvent;
830
+ return false;
831
+ };
793
832
  dispatchPasteEvent(originalContent, cleanContent) {
794
833
  if (hasObservers(this.paste)) {
834
+ if (!this.iframe) {
835
+ this._pasteEvent.stopImmediatePropagation();
836
+ }
795
837
  const event = new EditorPasteEvent(cleanContent, originalContent, this._pasteEvent);
796
838
  this.ngZone.run(() => this.paste.emit(event));
797
839
  return event.isDefaultPrevented() ? '' : event.cleanedHtml;
798
840
  }
799
841
  return cleanContent;
800
842
  }
801
- }
802
- EditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditorComponent, deps: [{ token: i1.DialogService }, { token: i2.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.ElementRef }, { token: i3.ProviderService }, { token: i4.EditorToolsService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
803
- EditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: EditorComponent, isStandalone: true, selector: "kendo-editor", inputs: { value: "value", disabled: "disabled", readonly: "readonly", iframe: "iframe", iframeCss: "iframeCss", applyToWord: "applyToWord", schema: "schema", plugins: "plugins", placeholder: "placeholder", preserveWhitespace: "preserveWhitespace", pasteCleanupSettings: "pasteCleanupSettings", resizable: "resizable" }, outputs: { valueChange: "valueChange", onFocus: "focus", paste: "paste", onBlur: "blur" }, host: { properties: { "class.k-editor": "this.hostClass", "class.k-editor-resizable": "this.resizableClass", "class.k-disabled": "this.isDisabled", "class.k-readonly": "this.isReadonly", "class.k-ie": "this.isIE", "attr.dir": "this.dir", "attr.ariaDisabled": "this.ariaDisabled", "style.minWidth": "this.minWidth", "style.maxWidth": "this.maxWidth", "style.minHeight": "this.minHeight", "style.maxHeight": "this.maxHeight" } }, providers: [
804
- EditorLocalizationService,
805
- ProviderService,
806
- EditorToolsService,
807
- {
808
- provide: LocalizationService,
809
- useExisting: EditorLocalizationService
810
- },
811
- {
812
- provide: L10N_PREFIX,
813
- useValue: 'kendo.editor'
814
- },
815
- {
816
- provide: NG_VALUE_ACCESSOR,
817
- useExisting: forwardRef(() => EditorComponent),
818
- multi: true
819
- },
820
- {
821
- provide: KendoInput,
822
- useExisting: forwardRef(() => EditorComponent)
823
- }
824
- ], queries: [{ propertyName: "userToolBarComponent", first: true, predicate: ToolBarComponent, descendants: true }, { propertyName: "userToolBarElement", first: true, predicate: ToolBarComponent, descendants: true, read: ElementRef }], viewQueries: [{ propertyName: "dialogContainer", first: true, predicate: ["dialogsContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "container", first: true, predicate: ["content"], descendants: true, read: ViewContainerRef }, { propertyName: "defaultToolbar", first: true, predicate: ["defaultToolbar"], descendants: true, read: ElementRef }, { propertyName: "defaultToolbarComponent", first: true, predicate: ["defaultToolbar"], descendants: true, read: ToolBarComponent }], usesOnChanges: true, ngImport: i0, template: `
843
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorComponent, deps: [{ token: i1.DialogService }, { token: i2.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.ElementRef }, { token: i3.ProviderService }, { token: i4.EditorToolsService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
844
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EditorComponent, isStandalone: true, selector: "kendo-editor", inputs: { value: "value", disabled: "disabled", readonly: "readonly", iframe: "iframe", iframeCss: "iframeCss", applyToWord: "applyToWord", schema: "schema", plugins: "plugins", placeholder: "placeholder", preserveWhitespace: "preserveWhitespace", pasteCleanupSettings: "pasteCleanupSettings", resizable: "resizable" }, outputs: { valueChange: "valueChange", onFocus: "focus", paste: "paste", onBlur: "blur" }, host: { properties: { "class.k-editor": "this.hostClass", "class.k-editor-resizable": "this.resizableClass", "class.k-disabled": "this.isDisabled", "class.k-readonly": "this.isReadonly", "class.k-ie": "this.isIE", "attr.dir": "this.dir", "attr.ariaDisabled": "this.ariaDisabled", "style.minWidth": "this.minWidth", "style.maxWidth": "this.maxWidth", "style.minHeight": "this.minHeight", "style.maxHeight": "this.maxHeight" } }, providers: [
845
+ EditorLocalizationService,
846
+ ProviderService,
847
+ EditorToolsService,
848
+ {
849
+ provide: LocalizationService,
850
+ useExisting: EditorLocalizationService
851
+ },
852
+ {
853
+ provide: L10N_PREFIX,
854
+ useValue: 'kendo.editor'
855
+ },
856
+ {
857
+ provide: NG_VALUE_ACCESSOR,
858
+ useExisting: forwardRef(() => EditorComponent),
859
+ multi: true
860
+ },
861
+ {
862
+ provide: KendoInput,
863
+ useExisting: forwardRef(() => EditorComponent)
864
+ }
865
+ ], queries: [{ propertyName: "userToolBarComponent", first: true, predicate: ToolBarComponent, descendants: true }, { propertyName: "userToolBarElement", first: true, predicate: ToolBarComponent, descendants: true, read: ElementRef }], viewQueries: [{ propertyName: "dialogContainer", first: true, predicate: ["dialogsContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "container", first: true, predicate: ["content"], descendants: true, read: ViewContainerRef }, { propertyName: "defaultToolbar", first: true, predicate: ["defaultToolbar"], descendants: true, read: ElementRef }, { propertyName: "defaultToolbarComponent", first: true, predicate: ["defaultToolbar"], descendants: true, read: ToolBarComponent }], usesOnChanges: true, ngImport: i0, template: `
825
866
  <ng-container
826
867
  kendoEditorLocalizedMessages
827
868
  i18n-alignCenter="kendo.editor.alignCenter|The title of the tool that aligns text in the center."
@@ -980,8 +1021,9 @@ EditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versio
980
1021
  <ng-container #dialogsContainer></ng-container>
981
1022
 
982
1023
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
983
- `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoEditorLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ToolBarComponent, selector: "kendo-toolbar", inputs: ["overflow", "resizable", "popupSettings", "tabindex", "size", "tabIndex"], outputs: ["open", "close"], exportAs: ["kendoToolBar"] }, { kind: "component", type: ToolBarButtonGroupComponent, selector: "kendo-toolbar-buttongroup", inputs: ["disabled", "selection", "width", "look"], exportAs: ["kendoToolBarButtonGroup"] }, { kind: "component", type: ToolBarButtonComponent, selector: "kendo-toolbar-button", inputs: ["showText", "showIcon", "text", "style", "className", "title", "disabled", "toggleable", "look", "togglable", "selected", "fillMode", "themeColor", "icon", "iconClass", "svgIcon", "imageUrl"], outputs: ["click", "pointerdown", "selectedChange"], exportAs: ["kendoToolBarButton"] }, { kind: "directive", type: EditorBoldButtonDirective, selector: "kendo-toolbar-button[kendoEditorBoldButton]" }, { kind: "directive", type: EditorItalicButtonDirective, selector: "kendo-toolbar-button[kendoEditorItalicButton]" }, { kind: "directive", type: EditorUnderlineButtonDirective, selector: "kendo-toolbar-button[kendoEditorUnderlineButton]" }, { kind: "component", type: EditorFormatComponent, selector: "kendo-toolbar-dropdownlist[kendoEditorFormat]", inputs: ["data"], outputs: ["valueChange"] }, { kind: "directive", type: EditorAlignLeftButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignLeftButton]" }, { kind: "directive", type: EditorAlignCenterButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignCenterButton]" }, { kind: "directive", type: EditorAlignRightButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignRightButton]" }, { kind: "directive", type: EditorAlignJustifyButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignJustifyButton]" }, { kind: "directive", type: EditorInsertUnorderedListButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertUnorderedListButton]" }, { kind: "directive", type: EditorInsertOrderedListButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertOrderedListButton]" }, { kind: "directive", type: EditorIndentButtonDirective, selector: "kendo-toolbar-button[kendoEditorIndentButton]" }, { kind: "directive", type: EditorOutdentButtonDirective, selector: "kendo-toolbar-button[kendoEditorOutdentButton]" }, { kind: "directive", type: EditorCreateLinkButtonDirective, selector: "kendo-toolbar-button[kendoEditorCreateLinkButton]" }, { kind: "directive", type: EditorUnlinkButtonDirective, selector: "kendo-toolbar-button[kendoEditorUnlinkButton]" }, { kind: "directive", type: EditorInsertImageButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertImageButton]" }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]" }] });
984
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditorComponent, decorators: [{
1024
+ `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoEditorLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ToolBarComponent, selector: "kendo-toolbar", inputs: ["overflow", "resizable", "popupSettings", "fillMode", "tabindex", "size", "tabIndex"], outputs: ["open", "close"], exportAs: ["kendoToolBar"] }, { kind: "component", type: ToolBarButtonGroupComponent, selector: "kendo-toolbar-buttongroup", inputs: ["disabled", "fillMode", "selection", "width", "look"], exportAs: ["kendoToolBarButtonGroup"] }, { kind: "component", type: ToolBarButtonComponent, selector: "kendo-toolbar-button", inputs: ["showText", "showIcon", "text", "style", "className", "title", "disabled", "toggleable", "look", "togglable", "selected", "fillMode", "themeColor", "icon", "iconClass", "svgIcon", "imageUrl"], outputs: ["click", "pointerdown", "selectedChange"], exportAs: ["kendoToolBarButton"] }, { kind: "directive", type: EditorBoldButtonDirective, selector: "kendo-toolbar-button[kendoEditorBoldButton]" }, { kind: "directive", type: EditorItalicButtonDirective, selector: "kendo-toolbar-button[kendoEditorItalicButton]" }, { kind: "directive", type: EditorUnderlineButtonDirective, selector: "kendo-toolbar-button[kendoEditorUnderlineButton]" }, { kind: "component", type: EditorFormatComponent, selector: "kendo-toolbar-dropdownlist[kendoEditorFormat]", inputs: ["data"], outputs: ["valueChange"] }, { kind: "directive", type: EditorAlignLeftButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignLeftButton]" }, { kind: "directive", type: EditorAlignCenterButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignCenterButton]" }, { kind: "directive", type: EditorAlignRightButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignRightButton]" }, { kind: "directive", type: EditorAlignJustifyButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignJustifyButton]" }, { kind: "directive", type: EditorInsertUnorderedListButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertUnorderedListButton]" }, { kind: "directive", type: EditorInsertOrderedListButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertOrderedListButton]" }, { kind: "directive", type: EditorIndentButtonDirective, selector: "kendo-toolbar-button[kendoEditorIndentButton]" }, { kind: "directive", type: EditorOutdentButtonDirective, selector: "kendo-toolbar-button[kendoEditorOutdentButton]" }, { kind: "directive", type: EditorCreateLinkButtonDirective, selector: "kendo-toolbar-button[kendoEditorCreateLinkButton]" }, { kind: "directive", type: EditorUnlinkButtonDirective, selector: "kendo-toolbar-button[kendoEditorUnlinkButton]" }, { kind: "directive", type: EditorInsertImageButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertImageButton]" }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]" }] });
1025
+ }
1026
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorComponent, decorators: [{
985
1027
  type: Component,
986
1028
  args: [{
987
1029
  selector: 'kendo-editor',
@@ -0,0 +1,88 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2024 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { NgModule } from '@angular/core';
6
+ import { ResizeBatchService } from '@progress/kendo-angular-common';
7
+ import { DialogContainerService, DialogService, WindowContainerService, WindowService } from '@progress/kendo-angular-dialog';
8
+ import { IconsService } from '@progress/kendo-angular-icons';
9
+ import { KENDO_TOOLBAR } from '@progress/kendo-angular-toolbar';
10
+ import { PopupService } from '@progress/kendo-angular-popup';
11
+ import { KENDO_EDITOR } from './directives';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "./editor.component";
14
+ import * as i2 from "./tools/alignment/editor-align-left-button.directive";
15
+ import * as i3 from "./tools/alignment/editor-align-center-button.directive";
16
+ import * as i4 from "./tools/alignment/editor-align-right-button.directive";
17
+ import * as i5 from "./tools/alignment/editor-align-justify-button.directive";
18
+ import * as i6 from "./tools/link/editor-insert-file-button.directive";
19
+ import * as i7 from "./tools/history/editor-redo-button.directive";
20
+ import * as i8 from "./tools/history/editor-undo-button.directive";
21
+ import * as i9 from "./tools/image/editor-insert-image-button.directive";
22
+ import * as i10 from "./tools/indentation/editor-indent-button.directive";
23
+ import * as i11 from "./tools/indentation/editor-outdent-button.directive";
24
+ import * as i12 from "./tools/link/editor-create-link-button.directive";
25
+ import * as i13 from "./tools/link/editor-unlink-button.directive";
26
+ import * as i14 from "./tools/list/editor-insert-ordered-list-button.directive";
27
+ import * as i15 from "./tools/list/editor-insert-unordered-list-button.directive";
28
+ import * as i16 from "./tools/source/editor-view-source-button.directive";
29
+ import * as i17 from "./tools/typographical-emphasis/editor-bold-button.directive";
30
+ import * as i18 from "./tools/typographical-emphasis/editor-italic-button.directive";
31
+ import * as i19 from "./tools/typographical-emphasis/editor-underline-button.directive";
32
+ import * as i20 from "./tools/typographical-emphasis/editor-strikethrough-button.directive";
33
+ import * as i21 from "./tools/typographical-emphasis/editor-subscript-button.directive";
34
+ import * as i22 from "./tools/typographical-emphasis/editor-superscript-button.directive";
35
+ import * as i23 from "./tools/colorpicker/editor-fore-color.directive";
36
+ import * as i24 from "./tools/colorpicker/editor-back-color.directive";
37
+ import * as i25 from "./tools/editor-clean-formatting-button.directive";
38
+ import * as i26 from "./tools/tables/editor-add-column-before-button.directive";
39
+ import * as i27 from "./tools/tables/editor-add-column-after-button.directive";
40
+ import * as i28 from "./tools/tables/editor-add-row-before-button.directive";
41
+ import * as i29 from "./tools/tables/editor-add-row-after-button.directive";
42
+ import * as i30 from "./tools/tables/editor-delete-column-button.directive";
43
+ import * as i31 from "./tools/tables/editor-delete-row-button.directive";
44
+ import * as i32 from "./tools/tables/editor-delete-table-button.directive";
45
+ import * as i33 from "./localization/custom-messages.component";
46
+ import * as i34 from "./tools/print/editor-print-button.directive";
47
+ import * as i35 from "./tools/select-all/select-all-button.directive";
48
+ import * as i36 from "./tools/blockquote/editor-blockquote-button.directive";
49
+ import * as i37 from "./tools/fontsize/editor-fontsize.component";
50
+ import * as i38 from "./tools/fontfamily/editor-fontfamily.component";
51
+ import * as i39 from "./tools/format/editor-format.component";
52
+ import * as i40 from "./tools/colorpicker/editor-colorpicker.component";
53
+ import * as i41 from "./tools/tables/editor-insert-table-button.component";
54
+ import * as i42 from "./tools/tables/editor-merge-cells-button.directive";
55
+ import * as i43 from "./tools/tables/editor-split-cell-button.directive";
56
+ import * as i44 from "@progress/kendo-angular-toolbar";
57
+ // IMPORTANT: NgModule export kept for backwards compatibility
58
+ /**
59
+ * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi']) definition for the Editor component.
60
+ *
61
+ * ```ts-no-run
62
+ * import { NgModule } from '@angular/core';
63
+ * import { EditorModule } from '@progress/kendo-angular-editor';
64
+ * import { BrowserModule } from "@angular/platform-browser";
65
+ * import { AppComponent } from './app.component';
66
+ *
67
+ * _@NgModule({
68
+ * declarations: [AppComponent],
69
+ * imports: [BrowserModule, EditorModule],
70
+ * bootstrap: [AppComponent]
71
+ * })
72
+ * export class AppModule {}
73
+ *
74
+ * ```
75
+ */
76
+ export class EditorModule {
77
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
78
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: EditorModule, imports: [i1.EditorComponent, i2.EditorAlignLeftButtonDirective, i3.EditorAlignCenterButtonDirective, i4.EditorAlignRightButtonDirective, i5.EditorAlignJustifyButtonDirective, i6.EditorInsertFileButtonDirective, i7.EditorRedoButtonDirective, i8.EditorUndoButtonDirective, i9.EditorInsertImageButtonDirective, i10.EditorIndentButtonDirective, i11.EditorOutdentButtonDirective, i12.EditorCreateLinkButtonDirective, i13.EditorUnlinkButtonDirective, i14.EditorInsertOrderedListButtonDirective, i15.EditorInsertUnorderedListButtonDirective, i16.EditorViewSourceButtonDirective, i17.EditorBoldButtonDirective, i18.EditorItalicButtonDirective, i19.EditorUnderlineButtonDirective, i20.EditorStrikethroughButtonDirective, i21.EditorSubscriptButtonDirective, i22.EditorSuperscriptButtonDirective, i23.EditorForeColorDirective, i24.EditorBackColorDirective, i25.EditorCleanFormattingButtonDirective, i26.EditorAddColumnBeforeButtonDirective, i27.EditorAddColumnAfterButtonDirective, i28.EditorAddRowBeforeButtonDirective, i29.EditorAddRowAfterButtonDirective, i30.EditorDeleteColumnButtonDirective, i31.EditorDeleteRowButtonDirective, i32.EditorDeleteTableButtonDirective, i33.CustomMessagesComponent, i34.EditorPrintDirective, i35.EditorSelectAllButtonDirective, i36.EditorBlockquoteDirective, i37.EditorFontSizeComponent, i38.EditorFontFamilyComponent, i39.EditorFormatComponent, i40.EditorColorPickerComponent, i41.EditorInsertTableButtonComponent, i42.EditorMergeCellsButtonDirective, i43.EditorSplitCellButtonDirective, i44.ToolBarComponent, i44.ToolbarCustomMessagesComponent, i44.ToolBarButtonComponent, i44.ToolBarButtonGroupComponent, i44.ToolBarDropDownButtonComponent, i44.ToolBarSeparatorComponent, i44.ToolBarSpacerComponent, i44.ToolBarSplitButtonComponent, i44.ToolBarToolComponent], exports: [i1.EditorComponent, i2.EditorAlignLeftButtonDirective, i3.EditorAlignCenterButtonDirective, i4.EditorAlignRightButtonDirective, i5.EditorAlignJustifyButtonDirective, i6.EditorInsertFileButtonDirective, i7.EditorRedoButtonDirective, i8.EditorUndoButtonDirective, i9.EditorInsertImageButtonDirective, i10.EditorIndentButtonDirective, i11.EditorOutdentButtonDirective, i12.EditorCreateLinkButtonDirective, i13.EditorUnlinkButtonDirective, i14.EditorInsertOrderedListButtonDirective, i15.EditorInsertUnorderedListButtonDirective, i16.EditorViewSourceButtonDirective, i17.EditorBoldButtonDirective, i18.EditorItalicButtonDirective, i19.EditorUnderlineButtonDirective, i20.EditorStrikethroughButtonDirective, i21.EditorSubscriptButtonDirective, i22.EditorSuperscriptButtonDirective, i23.EditorForeColorDirective, i24.EditorBackColorDirective, i25.EditorCleanFormattingButtonDirective, i26.EditorAddColumnBeforeButtonDirective, i27.EditorAddColumnAfterButtonDirective, i28.EditorAddRowBeforeButtonDirective, i29.EditorAddRowAfterButtonDirective, i30.EditorDeleteColumnButtonDirective, i31.EditorDeleteRowButtonDirective, i32.EditorDeleteTableButtonDirective, i33.CustomMessagesComponent, i34.EditorPrintDirective, i35.EditorSelectAllButtonDirective, i36.EditorBlockquoteDirective, i37.EditorFontSizeComponent, i38.EditorFontFamilyComponent, i39.EditorFormatComponent, i40.EditorColorPickerComponent, i41.EditorInsertTableButtonComponent, i42.EditorMergeCellsButtonDirective, i43.EditorSplitCellButtonDirective, i44.ToolBarComponent, i44.ToolbarCustomMessagesComponent, i44.ToolBarButtonComponent, i44.ToolBarButtonGroupComponent, i44.ToolBarDropDownButtonComponent, i44.ToolBarSeparatorComponent, i44.ToolBarSpacerComponent, i44.ToolBarSplitButtonComponent, i44.ToolBarToolComponent] });
79
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorModule, providers: [IconsService, PopupService, ResizeBatchService, DialogContainerService, DialogService, WindowService, WindowContainerService], imports: [i1.EditorComponent, i37.EditorFontSizeComponent, i38.EditorFontFamilyComponent, i39.EditorFormatComponent, i40.EditorColorPickerComponent, i41.EditorInsertTableButtonComponent, i44.ToolBarComponent, i44.ToolbarCustomMessagesComponent, i44.ToolBarButtonComponent, i44.ToolBarButtonGroupComponent, i44.ToolBarDropDownButtonComponent, i44.ToolBarSeparatorComponent, i44.ToolBarSpacerComponent, i44.ToolBarSplitButtonComponent] });
80
+ }
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorModule, decorators: [{
82
+ type: NgModule,
83
+ args: [{
84
+ exports: [...KENDO_EDITOR, ...KENDO_TOOLBAR],
85
+ imports: [...KENDO_EDITOR, ...KENDO_TOOLBAR],
86
+ providers: [IconsService, PopupService, ResizeBatchService, DialogContainerService, DialogService, WindowService, WindowContainerService]
87
+ }]
88
+ }] });
@@ -12,6 +12,7 @@ import * as i1 from "@progress/kendo-angular-l10n";
12
12
  * ([see example]({% slug globalization_editor %}#toc-custom-messages)).
13
13
  */
14
14
  export class CustomMessagesComponent extends MessagesDirective {
15
+ service;
15
16
  constructor(service) {
16
17
  super();
17
18
  this.service = service;
@@ -19,15 +20,15 @@ export class CustomMessagesComponent extends MessagesDirective {
19
20
  get override() {
20
21
  return true;
21
22
  }
23
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });
24
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: CustomMessagesComponent, isStandalone: true, selector: "kendo-editor-messages", providers: [
25
+ {
26
+ provide: MessagesDirective,
27
+ useExisting: forwardRef(() => CustomMessagesComponent)
28
+ }
29
+ ], usesInheritance: true, ngImport: i0 });
22
30
  }
23
- CustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });
24
- CustomMessagesComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: CustomMessagesComponent, isStandalone: true, selector: "kendo-editor-messages", providers: [
25
- {
26
- provide: MessagesDirective,
27
- useExisting: forwardRef(() => CustomMessagesComponent)
28
- }
29
- ], usesInheritance: true, ngImport: i0 });
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomMessagesComponent, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CustomMessagesComponent, decorators: [{
31
32
  type: Directive,
32
33
  args: [{
33
34
  providers: [
@@ -13,10 +13,10 @@ export class EditorLocalizationService extends LocalizationService {
13
13
  constructor(prefix, messageService, _rtl) {
14
14
  super(prefix, messageService, _rtl);
15
15
  }
16
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorLocalizationService, deps: [{ token: L10N_PREFIX }, { token: i1.MessageService, optional: true }, { token: RTL, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
17
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorLocalizationService });
16
18
  }
17
- EditorLocalizationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditorLocalizationService, deps: [{ token: L10N_PREFIX }, { token: i1.MessageService, optional: true }, { token: RTL, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
18
- EditorLocalizationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditorLocalizationService });
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditorLocalizationService, decorators: [{
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorLocalizationService, decorators: [{
20
20
  type: Injectable
21
21
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
22
22
  type: Inject,