@syncfusion/ej2-richtexteditor 24.2.7 → 24.2.9

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 (78) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/ej2-richtexteditor.min.js +2 -2
  3. package/dist/ej2-richtexteditor.umd.min.js +2 -2
  4. package/dist/ej2-richtexteditor.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-richtexteditor.es2015.js +341 -157
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +342 -156
  8. package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
  9. package/dist/global/ej2-richtexteditor.min.js +2 -2
  10. package/dist/global/ej2-richtexteditor.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +8 -8
  13. package/src/editor-manager/plugin/dom-node.js +3 -1
  14. package/src/editor-manager/plugin/format-painter-actions.d.ts +1 -0
  15. package/src/editor-manager/plugin/format-painter-actions.js +18 -0
  16. package/src/editor-manager/plugin/inserthtml.js +9 -1
  17. package/src/editor-manager/plugin/lists.js +79 -70
  18. package/src/editor-manager/plugin/ms-word-clean-up.d.ts +1 -0
  19. package/src/editor-manager/plugin/ms-word-clean-up.js +22 -1
  20. package/src/rich-text-editor/actions/base-quick-toolbar.js +5 -2
  21. package/src/rich-text-editor/actions/color-picker.d.ts +1 -0
  22. package/src/rich-text-editor/actions/color-picker.js +10 -0
  23. package/src/rich-text-editor/actions/emoji-picker.js +1 -1
  24. package/src/rich-text-editor/actions/enter-key.js +2 -2
  25. package/src/rich-text-editor/actions/html-editor.js +10 -5
  26. package/src/rich-text-editor/actions/quick-toolbar.js +1 -1
  27. package/src/rich-text-editor/actions/toolbar.js +3 -0
  28. package/src/rich-text-editor/base/constant.d.ts +5 -0
  29. package/src/rich-text-editor/base/constant.js +5 -0
  30. package/src/rich-text-editor/base/rich-text-editor.js +21 -5
  31. package/src/rich-text-editor/models/default-locale.js +1 -1
  32. package/src/rich-text-editor/renderer/dialog-renderer.js +5 -1
  33. package/src/rich-text-editor/renderer/iframe-content-renderer.js +1 -1
  34. package/src/rich-text-editor/renderer/image-module.js +28 -7
  35. package/src/rich-text-editor/renderer/table-module.d.ts +3 -1
  36. package/src/rich-text-editor/renderer/table-module.js +111 -50
  37. package/src/rich-text-editor/renderer/toolbar-renderer.js +13 -13
  38. package/styles/bootstrap-dark.css +32 -13
  39. package/styles/bootstrap.css +36 -20
  40. package/styles/bootstrap4.css +18 -3
  41. package/styles/bootstrap5-dark.css +22 -9
  42. package/styles/bootstrap5.css +22 -9
  43. package/styles/fabric-dark.css +18 -3
  44. package/styles/fabric.css +18 -3
  45. package/styles/fluent-dark.css +24 -3
  46. package/styles/fluent.css +24 -3
  47. package/styles/highcontrast-light.css +18 -3
  48. package/styles/highcontrast.css +21 -3
  49. package/styles/material-dark.css +22 -3
  50. package/styles/material.css +22 -3
  51. package/styles/material3-dark.css +19 -4
  52. package/styles/material3.css +19 -4
  53. package/styles/rich-text-editor/_bootstrap-dark-definition.scss +8 -8
  54. package/styles/rich-text-editor/_bootstrap-definition.scss +14 -14
  55. package/styles/rich-text-editor/_layout.scss +11 -0
  56. package/styles/rich-text-editor/_material3-definition.scss +1 -1
  57. package/styles/rich-text-editor/_theme.scss +47 -13
  58. package/styles/rich-text-editor/bootstrap-dark.css +32 -13
  59. package/styles/rich-text-editor/bootstrap.css +36 -20
  60. package/styles/rich-text-editor/bootstrap4.css +18 -3
  61. package/styles/rich-text-editor/bootstrap5-dark.css +22 -9
  62. package/styles/rich-text-editor/bootstrap5.css +22 -9
  63. package/styles/rich-text-editor/fabric-dark.css +18 -3
  64. package/styles/rich-text-editor/fabric.css +18 -3
  65. package/styles/rich-text-editor/fluent-dark.css +24 -3
  66. package/styles/rich-text-editor/fluent.css +24 -3
  67. package/styles/rich-text-editor/highcontrast-light.css +18 -3
  68. package/styles/rich-text-editor/highcontrast.css +21 -3
  69. package/styles/rich-text-editor/material-dark.css +22 -3
  70. package/styles/rich-text-editor/material.css +22 -3
  71. package/styles/rich-text-editor/material3-dark.css +19 -4
  72. package/styles/rich-text-editor/material3.css +19 -4
  73. package/styles/rich-text-editor/tailwind-dark.css +30 -3
  74. package/styles/rich-text-editor/tailwind.css +30 -3
  75. package/styles/tailwind-dark.css +30 -3
  76. package/styles/tailwind.css +30 -3
  77. package/.github/PULL_REQUEST_TEMPLATE/Bug.md +0 -41
  78. package/.github/PULL_REQUEST_TEMPLATE/Feature.md +0 -27
@@ -764,6 +764,11 @@ const updateValueOnIdle = 'updateValueOnIdle';
764
764
  * @deprecated
765
765
  */
766
766
  const documentClickClosedBy = 'documentClickClosedBy';
767
+ /**
768
+ * @hidden
769
+ * @deprecated
770
+ */
771
+ const showColorPicker = 'showColorPicker';
767
772
  /**
768
773
  * @hidden
769
774
  * @deprecated
@@ -2714,7 +2719,7 @@ let defaultLocale = {
2714
2719
  'browse': 'Browse',
2715
2720
  'imageUrl': 'http://example.com/image.png',
2716
2721
  'audioUrl': 'http://example.com/audio.mp3',
2717
- 'videoUrl': 'http://example.com/video.mp3',
2722
+ 'videoUrl': 'http://example.com/video.mp4',
2718
2723
  'webUrl': 'Web URL',
2719
2724
  'embedUrl': 'Embed Code',
2720
2725
  'imageCaption': 'Caption',
@@ -3675,6 +3680,19 @@ class ToolbarRenderer {
3675
3680
  addClass([listEle[1], listEle[2]], 'e-disabled');
3676
3681
  }
3677
3682
  }
3683
+ if (this.parent.showTooltip) {
3684
+ this.dropdownTooltip = new Tooltip({
3685
+ target: '[aria-owns="' + this.parent.getID() + '"].e-rte-elements [title]',
3686
+ showTipPointer: true,
3687
+ openDelay: 400,
3688
+ opensOn: 'Hover',
3689
+ beforeRender: this.tooltipBeforeRender.bind(this),
3690
+ cssClass: this.parent.getCssClass(),
3691
+ windowCollision: true,
3692
+ position: 'BottomCenter'
3693
+ });
3694
+ this.dropdownTooltip.appendTo(args.element);
3695
+ }
3678
3696
  this.parent.notify(selectionSave, args);
3679
3697
  }
3680
3698
  dropDownClose(args) {
@@ -3719,19 +3737,6 @@ class ToolbarRenderer {
3719
3737
  });
3720
3738
  this.tooltip.appendTo(args.target);
3721
3739
  }
3722
- if (this.parent.showTooltip) {
3723
- this.dropdownTooltip = new Tooltip({
3724
- target: '[aria-owns="' + this.parent.getID() + '"].e-rte-elements [title]',
3725
- showTipPointer: true,
3726
- openDelay: 400,
3727
- opensOn: 'Hover',
3728
- beforeRender: this.tooltipBeforeRender.bind(this),
3729
- cssClass: this.parent.getCssClass(),
3730
- windowCollision: true,
3731
- position: 'BottomCenter'
3732
- });
3733
- this.dropdownTooltip.appendTo(document.body);
3734
- }
3735
3740
  }
3736
3741
  /**
3737
3742
  * renderDropDownButton method
@@ -5143,6 +5148,9 @@ class Toolbar$2 {
5143
5148
  if (e.target.classList.contains('e-hor-nav')) {
5144
5149
  this.adjustContentHeight(e.target, true);
5145
5150
  }
5151
+ if (!isNullOrUndefined(e.target) && (e.target.classList.contains("e-rte-fontcolor-dropdown") || e.target.classList.contains("e-rte-backgroundcolor-dropdown"))) {
5152
+ this.parent.notify(showColorPicker, { toolbarClick: e.target.classList.contains("e-rte-fontcolor-dropdown") ? "fontcolor" : "backgroundcolor" });
5153
+ }
5146
5154
  }
5147
5155
  }
5148
5156
  createToolbarElement() {
@@ -6181,6 +6189,15 @@ class ColorPickerInput {
6181
6189
  this.parent.on(destroyColorPicker, this.destroyColorPicker, this);
6182
6190
  this.parent.on(modelChanged, this.onPropertyChanged, this);
6183
6191
  this.parent.on(bindCssClass, this.setCssClass, this);
6192
+ this.parent.on(showColorPicker, this.showColorPicker, this);
6193
+ }
6194
+ showColorPicker(e) {
6195
+ if (!isNullOrUndefined(this.fontColorPicker) && (e.toolbarClick === "fontcolor")) {
6196
+ this.fontColorDropDown.toggle();
6197
+ }
6198
+ else if (!isNullOrUndefined(this.backgroundColorPicker) && (e.toolbarClick === "backgroundcolor")) {
6199
+ this.backgroundColorDropDown.toggle();
6200
+ }
6184
6201
  }
6185
6202
  onPropertyChanged(model) {
6186
6203
  const newProp = model.newProp;
@@ -6251,6 +6268,7 @@ class ColorPickerInput {
6251
6268
  this.parent.off(destroyColorPicker, this.destroyColorPicker);
6252
6269
  this.parent.off(modelChanged, this.onPropertyChanged);
6253
6270
  this.parent.off(bindCssClass, this.setCssClass);
6271
+ this.parent.off(showColorPicker, this.showColorPicker);
6254
6272
  }
6255
6273
  }
6256
6274
 
@@ -6468,6 +6486,9 @@ class BaseQuickToolbar {
6468
6486
  this.parent.disableToolbarItem(this.parent.toolbarSettings.items);
6469
6487
  this.parent.enableToolbarItem(['Undo', 'Redo']);
6470
6488
  }
6489
+ else {
6490
+ this.parent.enableToolbarItem(this.parent.toolbarSettings.items);
6491
+ }
6471
6492
  append([this.element], document.body);
6472
6493
  if (this.parent.showTooltip) {
6473
6494
  this.tooltip = new Tooltip({
@@ -6509,9 +6530,9 @@ class BaseQuickToolbar {
6509
6530
  parentData: parent.getBoundingClientRect(),
6510
6531
  tBarElementHeight: tBarHeight
6511
6532
  };
6512
- if (target.tagName === 'IMG' || target.tagName === 'AUDIO' || target.tagName === 'VIDEO' || target.tagName === 'IFRAME' || (target.classList &&
6533
+ if ((target.tagName === 'IMG' || target.tagName === 'AUDIO' || target.tagName === 'VIDEO' || target.tagName === 'IFRAME' || (target.classList &&
6513
6534
  (target.classList.contains(CLS_AUDIOWRAP) || target.classList.contains(CLS_CLICKELEM) ||
6514
- target.classList.contains(CLS_VID_CLICK_ELEM)))) {
6535
+ target.classList.contains(CLS_VID_CLICK_ELEM)))) && (x == beforeQuickToolbarArgs.positionX || y == beforeQuickToolbarArgs.positionY)) {
6515
6536
  this.setPosition(showPopupData);
6516
6537
  }
6517
6538
  if (!this.parent.inlineMode.enable) {
@@ -6915,7 +6936,7 @@ class QuickToolbar {
6915
6936
  * @deprecated
6916
6937
  */
6917
6938
  showInlineQTBar(x, y, target) {
6918
- if (isNullOrUndefined(this.parent) || this.parent.readonly || target.tagName.toLowerCase() === 'img') {
6939
+ if (isNullOrUndefined(this.parent) || this.parent.readonly || target.tagName.toLowerCase() === 'img' || this.inlineQTBar.element.querySelector('.e-rte-color-content')) {
6919
6940
  return;
6920
6941
  }
6921
6942
  this.inlineQTBar.showPopup(x, y, target);
@@ -11698,9 +11719,11 @@ class DOMNode {
11698
11719
  const range = save.range;
11699
11720
  const startChildNodes = range.startContainer.childNodes;
11700
11721
  const isTableStart = startChildNodes.length > 1 && startChildNodes[0].nodeName === 'TABLE';
11722
+ const isImgOnlySelected = startChildNodes.length > 1 && startChildNodes[0].nodeName === 'IMAGE' &&
11723
+ range.endOffset === 1 && range.endContainer.nodeName === '#text' && range.endContainer.textContent.length === 0;
11701
11724
  let start = ((isTableStart ? getLastTextNode(startChildNodes[range.startOffset + 1]) :
11702
11725
  startChildNodes[(range.startOffset > 0) ? (range.startOffset - 1) : range.startOffset]) || range.startContainer);
11703
- let end = (range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]
11726
+ let end = (range.endContainer.childNodes[(range.endOffset > 0) ? (isImgOnlySelected ? range.endOffset : (range.endOffset - 1)) : range.endOffset]
11704
11727
  || range.endContainer);
11705
11728
  if ((start.nodeType === Node.ELEMENT_NODE && end.nodeType === Node.ELEMENT_NODE) && (start.contains(end) || end.contains(start))) {
11706
11729
  const existNode = start.contains(end) ? start : end;
@@ -12048,14 +12071,21 @@ class Lists {
12048
12071
  const preElementOLTest = this.testList(preElement);
12049
12072
  const nextElementOLTest = this.testList(nextElement);
12050
12073
  if (!preElementOLTest && !nextElementOLTest && preElemULStart !== '*' && nextElemULStart !== '*') {
12074
+ const brElement = createElement('br');
12051
12075
  if (startElementOLTest) {
12052
12076
  range.startContainer.textContent = range.startContainer.textContent.slice(range.startOffset, range.startContainer.textContent.length);
12077
+ if (range.startContainer.nodeName === '#text' && range.startContainer.textContent.length === 0) {
12078
+ this.parent.domNode.insertAfter(brElement, range.startContainer);
12079
+ }
12053
12080
  this.applyListsHandler({ subCommand: 'OL', callBack: e.callBack });
12054
12081
  e.event.preventDefault();
12055
12082
  }
12056
12083
  else if (range.startContainer.textContent.replace(/\u200B/g, '').slice(0, range.startOffset).trim() === '*' ||
12057
12084
  range.startContainer.textContent.replace(/\u200B/g, '').slice(0, range.startOffset).trim() === '-') {
12058
12085
  range.startContainer.textContent = range.startContainer.textContent.slice(range.startOffset, range.startContainer.textContent.length);
12086
+ if (range.startContainer.nodeName === '#text' && range.startContainer.textContent.length === 0) {
12087
+ this.parent.domNode.insertAfter(brElement, range.startContainer);
12088
+ }
12059
12089
  this.applyListsHandler({ subCommand: 'UL', callBack: e.callBack });
12060
12090
  e.event.preventDefault();
12061
12091
  }
@@ -12166,11 +12196,11 @@ class Lists {
12166
12196
  }
12167
12197
  removeList(range, e) {
12168
12198
  let startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);
12169
- let endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);
12199
+ let endNode = (!isNullOrUndefined(range.endContainer.parentElement.closest('li')) && range.endContainer.parentElement.closest('li').childElementCount > 1 && range.endContainer.nodeName === '#text') ? range.endContainer : this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);
12170
12200
  startNode = startNode.nodeName === 'BR' ? startNode.parentElement : startNode;
12171
12201
  endNode = endNode.nodeName === 'BR' ? endNode.parentElement : endNode;
12172
12202
  startNode = startNode.nodeName !== 'LI' && !isNullOrUndefined(startNode.closest('LI')) ? startNode.closest('LI') : startNode;
12173
- endNode = endNode.nodeName !== 'LI' && !isNullOrUndefined(endNode.closest('LI')) ? endNode.closest('LI') : endNode;
12203
+ endNode = endNode.nodeName !== 'LI' && endNode.nodeName !== '#text' && !isNullOrUndefined(endNode.closest('LI')) ? endNode.closest('LI') : endNode;
12174
12204
  if (((range.commonAncestorContainer.nodeName === 'OL' || range.commonAncestorContainer.nodeName === 'UL' || range.commonAncestorContainer.nodeName === 'LI') &&
12175
12205
  isNullOrUndefined(endNode.nextElementSibling) && endNode.textContent.length === range.endOffset &&
12176
12206
  isNullOrUndefined(startNode.previousElementSibling) && range.startOffset === 0) ||
@@ -12575,7 +12605,7 @@ class Lists {
12575
12605
  }
12576
12606
  }
12577
12607
  applyLists(elements, type, selector, item, e) {
12578
- if (this.isRevert(elements, type, item) && isNullOrUndefined(item)) {
12608
+ if (this.isRevert(elements, type, item) && isNullOrUndefined(item) || (!isNullOrUndefined(item) && item.listStyle === 'none')) {
12579
12609
  this.revertList(elements, e);
12580
12610
  this.removeEmptyListElements();
12581
12611
  }
@@ -12763,76 +12793,78 @@ class Lists {
12763
12793
  const viewNode = [];
12764
12794
  for (let i = 0; i < elements.length; i++) {
12765
12795
  const element = elements[i];
12766
- if (this.domNode.contents(element)[0].nodeType === 3 && this.domNode.contents(element)[0].textContent.trim().length === 0) {
12767
- detach(this.domNode.contents(element)[0]);
12768
- }
12769
- let parentNode = elements[i].parentNode;
12770
- let className = element.getAttribute('class');
12771
- if (temp.length === 0) {
12772
- const siblingList = elements[i].querySelectorAll('ul, ol');
12773
- const firstNode = siblingList[0];
12774
- if (firstNode) {
12775
- const child = firstNode
12776
- .querySelectorAll('li');
12777
- if (child) {
12778
- const nestedElement = createElement(firstNode.tagName);
12779
- append([nestedElement], firstNode.parentNode);
12780
- const nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });
12781
- append([nestedElementLI], nestedElement);
12782
- append([firstNode], nestedElementLI);
12796
+ if ((isNullOrUndefined(e.item)) || ((element.nodeName === 'LI' && e.item.listStyle === 'none'))) {
12797
+ if (this.domNode.contents(element)[0].nodeType === 3 && this.domNode.contents(element)[0].textContent.trim().length === 0) {
12798
+ detach(this.domNode.contents(element)[0]);
12799
+ }
12800
+ let parentNode = elements[i].parentNode;
12801
+ let className = element.getAttribute('class');
12802
+ if (temp.length === 0) {
12803
+ const siblingList = elements[i].querySelectorAll('ul, ol');
12804
+ const firstNode = siblingList[0];
12805
+ if (firstNode) {
12806
+ const child = firstNode
12807
+ .querySelectorAll('li');
12808
+ if (child) {
12809
+ const nestedElement = createElement(firstNode.tagName);
12810
+ append([nestedElement], firstNode.parentNode);
12811
+ const nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });
12812
+ append([nestedElementLI], nestedElement);
12813
+ append([firstNode], nestedElementLI);
12814
+ }
12783
12815
  }
12784
12816
  }
12785
- }
12786
- if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element), 'LI' === parentNode.parentNode.tagName || 'OL' === parentNode.parentNode.tagName ||
12787
- 'UL' === parentNode.parentNode.tagName) {
12788
- element.parentNode.insertBefore(this.closeTag('LI'), element);
12789
- }
12790
- else {
12791
- if (DEFAULT_TAG && 0 === element.querySelectorAll(BLOCK_TAGS.join(', ')).length) {
12792
- const wrapperclass = isNullOrUndefined(className) ? ' class="e-rte-wrap-inner"' :
12793
- ' class="' + className + ' e-rte-wrap-inner"';
12794
- let parentElement = parentNode;
12795
- if (!isNullOrUndefined(parentElement.style.listStyleType)) {
12796
- parentNode.style.removeProperty("list-style-type");
12817
+ if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element), 'LI' === parentNode.parentNode.tagName || 'OL' === parentNode.parentNode.tagName ||
12818
+ 'UL' === parentNode.parentNode.tagName) {
12819
+ element.parentNode.insertBefore(this.closeTag('LI'), element);
12820
+ }
12821
+ else {
12822
+ if (DEFAULT_TAG && 0 === element.querySelectorAll(BLOCK_TAGS.join(', ')).length) {
12823
+ const wrapperclass = isNullOrUndefined(className) ? ' class="e-rte-wrap-inner"' :
12824
+ ' class="' + className + ' e-rte-wrap-inner"';
12825
+ let parentElement = parentNode;
12826
+ if (!isNullOrUndefined(parentElement.style.listStyleType)) {
12827
+ parentNode.style.removeProperty("list-style-type");
12828
+ }
12829
+ if (!isNullOrUndefined(parentElement.style.listStyleImage)) {
12830
+ parentNode.style.removeProperty("list-style-image");
12831
+ }
12832
+ if (parentElement.style.length === 0) {
12833
+ parentNode.removeAttribute("style");
12834
+ }
12835
+ const wrapper = '<' + DEFAULT_TAG + wrapperclass +
12836
+ this.domNode.attributes(parentElement) + '></' + DEFAULT_TAG + '>';
12837
+ if (e.enterAction !== 'BR') {
12838
+ this.domNode.wrapInner(element, this.domNode.parseHTMLFragment(wrapper));
12839
+ }
12797
12840
  }
12798
- if (!isNullOrUndefined(parentElement.style.listStyleImage)) {
12799
- parentNode.style.removeProperty("list-style-image");
12841
+ else if (this.domNode.contents(element)[0].nodeType === 3) {
12842
+ const replace = this.domNode.createTagString(DEFAULT_TAG, parentNode, this.parent.domNode.encode(this.domNode.contents(element)[0].textContent));
12843
+ this.domNode.replaceWith(this.domNode.contents(element)[0], replace);
12800
12844
  }
12801
- if (parentElement.style.length === 0) {
12802
- parentNode.removeAttribute("style");
12845
+ else if (this.domNode.contents(element)[0].classList.contains(markerClassName.startSelection) ||
12846
+ this.domNode.contents(element)[0].classList.contains(markerClassName.endSelection)) {
12847
+ const replace = this.domNode.createTagString(DEFAULT_TAG, parentNode, this.domNode.contents(element)[0].outerHTML);
12848
+ this.domNode.replaceWith(this.domNode.contents(element)[0], replace);
12803
12849
  }
12804
- const wrapper = '<' + DEFAULT_TAG + wrapperclass +
12805
- this.domNode.attributes(parentElement) + '></' + DEFAULT_TAG + '>';
12806
- if (e.enterAction !== 'BR') {
12807
- this.domNode.wrapInner(element, this.domNode.parseHTMLFragment(wrapper));
12850
+ else {
12851
+ const childNode = element.firstChild;
12852
+ className = childNode.getAttribute('class');
12853
+ attributes(childNode, this.domNode.rawAttributes(parentNode));
12854
+ if (className && childNode.getAttribute('class')) {
12855
+ attributes(childNode, { 'class': className + ' ' + childNode.getAttribute('class') });
12856
+ }
12808
12857
  }
12858
+ append([this.openTag('LI')], element);
12859
+ prepend([this.closeTag('LI')], element);
12809
12860
  }
12810
- else if (this.domNode.contents(element)[0].nodeType === 3) {
12811
- const replace = this.domNode.createTagString(DEFAULT_TAG, parentNode, this.parent.domNode.encode(this.domNode.contents(element)[0].textContent));
12812
- this.domNode.replaceWith(this.domNode.contents(element)[0], replace);
12813
- }
12814
- else if (this.domNode.contents(element)[0].classList.contains(markerClassName.startSelection) ||
12815
- this.domNode.contents(element)[0].classList.contains(markerClassName.endSelection)) {
12816
- const replace = this.domNode.createTagString(DEFAULT_TAG, parentNode, this.domNode.contents(element)[0].outerHTML);
12817
- this.domNode.replaceWith(this.domNode.contents(element)[0], replace);
12861
+ this.domNode.insertAfter(this.openTag(parentNode.tagName), element);
12862
+ if (parentNode.parentNode.tagName === 'LI') {
12863
+ parentNode = parentNode.parentNode.parentNode;
12818
12864
  }
12819
- else {
12820
- const childNode = element.firstChild;
12821
- className = childNode.getAttribute('class');
12822
- attributes(childNode, this.domNode.rawAttributes(parentNode));
12823
- if (className && childNode.getAttribute('class')) {
12824
- attributes(childNode, { 'class': className + ' ' + childNode.getAttribute('class') });
12825
- }
12865
+ if (viewNode.indexOf(parentNode) < 0) {
12866
+ viewNode.push(parentNode);
12826
12867
  }
12827
- append([this.openTag('LI')], element);
12828
- prepend([this.closeTag('LI')], element);
12829
- }
12830
- this.domNode.insertAfter(this.openTag(parentNode.tagName), element);
12831
- if (parentNode.parentNode.tagName === 'LI') {
12832
- parentNode = parentNode.parentNode.parentNode;
12833
- }
12834
- if (viewNode.indexOf(parentNode) < 0) {
12835
- viewNode.push(parentNode);
12836
12868
  }
12837
12869
  }
12838
12870
  for (let i = 0; i < viewNode.length; i++) {
@@ -13750,7 +13782,12 @@ class InsertHtml {
13750
13782
  TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) !== -1))
13751
13783
  || (node.nodeName.toLowerCase() === 'table' && closestParentNode &&
13752
13784
  TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) === -1))) {
13753
- preNode = nodeCutter.GetSpliceNode(range, closestParentNode);
13785
+ if (isCollapsed) {
13786
+ preNode = nodeCutter.SplitNode(range, closestParentNode, true);
13787
+ }
13788
+ else {
13789
+ preNode = nodeCutter.SplitNode(range, closestParentNode, false);
13790
+ }
13754
13791
  sibNode = isNullOrUndefined(preNode.previousSibling) ? preNode.parentNode.previousSibling : preNode.previousSibling;
13755
13792
  if (nodes.length === 1) {
13756
13793
  nodeSelection.setSelectionContents(docElement, preNode);
@@ -13837,6 +13874,9 @@ class InsertHtml {
13837
13874
  let paraElm;
13838
13875
  let previousParent;
13839
13876
  if (!this.contentsDeleted) {
13877
+ if (!isCollapsed && range.startContainer.parentElement.textContent.length === 0 && range.startContainer.nodeName === 'BR' && range.startContainer.parentElement.nodeName === 'P') {
13878
+ editNode.removeChild(range.startContainer.parentElement);
13879
+ }
13840
13880
  range.deleteContents();
13841
13881
  }
13842
13882
  while (node.firstChild) {
@@ -18137,6 +18177,7 @@ class MsWordPaste {
18137
18177
  const elm = createElement('p');
18138
18178
  elm.setAttribute('id', 'MSWord-Content');
18139
18179
  elm.innerHTML = tempHTMLContent;
18180
+ this.addDoubleBr(elm);
18140
18181
  const patern = /class='?Mso|style='[^ ]*\bmso-/i;
18141
18182
  const patern2 = /class="?Mso|style="[^ ]*\bmso-/i;
18142
18183
  const patern3 = /(class="?Mso|class='?Mso|class="?Xl|class='?Xl|class=Xl|style="[^"]*\bmso-|style='[^']*\bmso-|w:WordDocument)/gi;
@@ -18171,6 +18212,26 @@ class MsWordPaste {
18171
18212
  e.callBack(elm.innerHTML);
18172
18213
  }
18173
18214
  }
18215
+ addDoubleBr(elm) {
18216
+ const newline = elm.querySelector('.Apple-interchange-newline');
18217
+ if (!isNullOrUndefined(newline) && Browser.userAgent.indexOf('Chrome') !== -1 && newline.parentElement.nodeName === 'P' && elm !== newline.parentElement) {
18218
+ for (let i = 0; i < elm.childNodes.length; i++) {
18219
+ // eslint-disable-next-line
18220
+ const node = elm.childNodes[i];
18221
+ if (node.nodeType === Node.COMMENT_NODE && node.nodeValue.includes('StartFragment')) {
18222
+ const newElement = document.createElement('p');
18223
+ newElement.innerHTML = '<br>';
18224
+ const cssText = newline.parentElement.style.cssText;
18225
+ const currentStyle = newElement.getAttribute('style') || '';
18226
+ const newStyle = currentStyle + cssText;
18227
+ newElement.setAttribute('style', newStyle);
18228
+ elm.insertBefore(newElement, node.nextSibling);
18229
+ detach(newline);
18230
+ break;
18231
+ }
18232
+ }
18233
+ }
18234
+ }
18174
18235
  cleanList(elm, listTag) {
18175
18236
  const replacableElem = elm.querySelectorAll(listTag + ' div');
18176
18237
  for (let j = replacableElem.length - 1; j >= 0; j--) {
@@ -19935,6 +19996,14 @@ class FormatPainterActions {
19935
19996
  const range = this.parent.nodeSelection.getRange(docElement);
19936
19997
  const isCollapsed = range.collapsed;
19937
19998
  const blockNodes = this.parent.domNode.blockNodes();
19999
+ const isListCopied = this.isListCopied();
20000
+ if (isListCopied) {
20001
+ for (let i = 0; i < blockNodes.length; i++) {
20002
+ if (closest(blockNodes[i], 'li')) {
20003
+ blockNodes[i] = closest(blockNodes[i], 'li');
20004
+ }
20005
+ }
20006
+ }
19938
20007
  let isFullNodeSelected = false;
19939
20008
  if (blockNodes.length === 1) {
19940
20009
  isFullNodeSelected = blockNodes[0].textContent.trim() === range.toString().trim();
@@ -19943,6 +20012,16 @@ class FormatPainterActions {
19943
20012
  this.insertBlockNode(clonedElem, range, docElement, blockNodes);
19944
20013
  }
19945
20014
  }
20015
+ isListCopied() {
20016
+ let isListCopied = false;
20017
+ for (let i = 0; i < this.copyCollection.length; i++) {
20018
+ if (this.copyCollection[i].tagName === 'OL' || this.copyCollection[i].tagName === 'UL') {
20019
+ isListCopied = true;
20020
+ break;
20021
+ }
20022
+ }
20023
+ return isListCopied;
20024
+ }
19946
20025
  insertBlockNode(element, range, docElement, nodes) {
19947
20026
  const domSelection = this.parent.nodeSelection;
19948
20027
  const saveSelection = domSelection.save(range, docElement);
@@ -20639,7 +20718,8 @@ const IFRAMEHEADER = `
20639
20718
  block;float: none;height: auto;margin: 5px auto;max-width: 100%;position: relative;}
20640
20719
  .e-rte-audio {border: 0;cursor: pointer;display:
20641
20720
  block;float: none;margin: 5px auto;max-width: 100%;position: relative;}
20642
- .e-rte-image.e-imginline, .e-rte-audio.e-audio-inline, .e-rte-video.e-video-inline {display: inline-block;float: none;max-width: calc(100% - (2 * 5px));padding: 1px;vertical-align: bottom;}
20721
+ .e-rte-image.e-imginline, .e-rte-audio.e-audio-inline, .e-rte-video.e-video-inline {display: inline-block;float: none;
20722
+ margin-left: 5px;margin-right: 5px;max-width: calc(100% - (2 * 5px));padding: 1px;vertical-align: bottom;}
20643
20723
  .e-rte-image.e-imgcenter, .e-rte-video.e-video-center {cursor: pointer;display: block;float: none;margin: 5px auto;max-width: 100%;position: relative;}
20644
20724
  .e-rte-image.e-imgright, .e-rte-video.e-video-right { float: right; margin: 0 auto;margin-left: 5px;text-align: right;}
20645
20725
  .e-rte-image.e-imgleft, .e-rte-video.e-video-left {float: left;margin: 0 auto;margin-right: 5px;text-align: left;}
@@ -21366,9 +21446,9 @@ class HtmlEditor {
21366
21446
  const liElement = this.getRangeLiNode(currentRange.startContainer);
21367
21447
  if (liElement.previousElementSibling && liElement.previousElementSibling.childElementCount > 0) {
21368
21448
  this.oldRangeElement = liElement.previousElementSibling.lastElementChild.nodeName === 'BR' ?
21369
- liElement.previousElementSibling : liElement.previousElementSibling.lastElementChild;
21449
+ liElement.previousElementSibling : liElement.previousElementSibling.lastChild;
21370
21450
  if (!isNullOrUndefined(liElement.lastElementChild) && liElement.lastElementChild.nodeName !== 'BR' &&
21371
- isNullOrUndefined(liElement.lastElementChild.previousSibling)) {
21451
+ isNullOrUndefined(liElement.lastElementChild.previousSibling) && liElement.lastChild.nodeName !== "#text") {
21372
21452
  this.rangeElement = liElement.lastElementChild;
21373
21453
  isLiElement = true;
21374
21454
  }
@@ -21393,7 +21473,7 @@ class HtmlEditor {
21393
21473
  ? this.oldRangeElement.lastElementChild.lastElementChild :
21394
21474
  this.oldRangeElement.lastElementChild;
21395
21475
  }
21396
- let lastNode = this.oldRangeElement.lastChild;
21476
+ let lastNode = this.oldRangeElement.lastChild ? this.oldRangeElement.lastChild : this.oldRangeElement;
21397
21477
  while (lastNode.nodeType !== 3 && lastNode.nodeName !== '#text' &&
21398
21478
  lastNode.nodeName !== 'BR') {
21399
21479
  lastNode = lastNode.lastChild;
@@ -21401,12 +21481,17 @@ class HtmlEditor {
21401
21481
  this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(),
21402
21482
  // eslint-disable-next-line
21403
21483
  lastNode, lastNode.textContent.length);
21404
- if (this.oldRangeElement.querySelectorAll('BR').length === 1) {
21484
+ if (this.oldRangeElement.nodeName !== '#text' && this.oldRangeElement.querySelectorAll('BR').length === 1) {
21405
21485
  detach(this.oldRangeElement.querySelector('BR'));
21406
21486
  }
21407
21487
  if (!isNullOrUndefined(this.rangeElement) && this.oldRangeElement !== this.rangeElement) {
21408
21488
  while (this.rangeElement.firstChild) {
21409
- this.oldRangeElement.appendChild(this.rangeElement.childNodes[0]);
21489
+ if (this.oldRangeElement.nodeName === '#text') {
21490
+ this.oldRangeElement.parentElement.appendChild(this.rangeElement.childNodes[0]);
21491
+ }
21492
+ else {
21493
+ this.oldRangeElement.appendChild(this.rangeElement.childNodes[0]);
21494
+ }
21410
21495
  }
21411
21496
  // eslint-disable-next-line
21412
21497
  !isLiElement ? detach(this.rangeElement) : detach(this.rangeElement.parentElement);
@@ -23867,7 +23952,7 @@ class EmojiPicker {
23867
23952
  this.parent.getToolbar().appendChild(this.popDiv);
23868
23953
  }
23869
23954
  else if (this.parent.inlineMode.enable) {
23870
- this.parent.inputElement.appendChild(this.popDiv);
23955
+ this.parent.element.appendChild(this.popDiv);
23871
23956
  }
23872
23957
  EventHandler.add(this.popDiv, 'keydown', this.onKeyDown, this);
23873
23958
  EventHandler.add(this.popDiv, 'keyup', this.searchFilter, this);
@@ -25509,6 +25594,7 @@ class Image$1 {
25509
25594
  }
25510
25595
  });
25511
25596
  }
25597
+ EventHandler.add(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing, this);
25512
25598
  EventHandler.add(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd, this);
25513
25599
  }
25514
25600
  }
@@ -25560,7 +25646,6 @@ class Image$1 {
25560
25646
  this.imgResizePos(e, this.imgResizeDiv);
25561
25647
  this.resizeImgDupPos(e);
25562
25648
  this.contentModule.getEditPanel().appendChild(this.imgResizeDiv);
25563
- EventHandler.add(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing, this);
25564
25649
  }
25565
25650
  getPointX(e) {
25566
25651
  if (e.touches && e.touches.length) {
@@ -25918,7 +26003,9 @@ class Image$1 {
25918
26003
  }
25919
26004
  }
25920
26005
  if (originalEvent.ctrlKey && (originalEvent.keyCode === 89 || originalEvent.keyCode === 90)) {
25921
- this.undoStack({ subCommand: (originalEvent.keyCode === 90 ? 'undo' : 'redo') });
26006
+ if (this.parent.editorMode !== 'Markdown') {
26007
+ this.undoStack({ subCommand: (originalEvent.keyCode === 90 ? 'undo' : 'redo') });
26008
+ }
25922
26009
  }
25923
26010
  if (originalEvent.keyCode === 8 || originalEvent.keyCode === 46) {
25924
26011
  if (selectNodeEle && selectNodeEle[0].nodeName === 'IMG' && selectNodeEle.length < 1) {
@@ -26440,7 +26527,29 @@ class Image$1 {
26440
26527
  if (this.parent.formatter.getUndoRedoStack().length === 0) {
26441
26528
  this.parent.formatter.saveData();
26442
26529
  }
26443
- e.selection.restore();
26530
+ let restoreStartElement = e.selection.range.startContainer;
26531
+ if (e.selection.range.startContainer.nodeName === 'SPAN' &&
26532
+ restoreStartElement.classList.contains('e-img-wrap') &&
26533
+ restoreStartElement.parentElement.classList.contains('e-img-caption')) {
26534
+ restoreStartElement = restoreStartElement.parentElement;
26535
+ if (!isNullOrUndefined(restoreStartElement.previousSibling)) {
26536
+ let lastNode = restoreStartElement.previousSibling;
26537
+ while (lastNode.nodeName !== '#text' && lastNode.nodeName !== 'BR') {
26538
+ lastNode = lastNode.lastChild;
26539
+ }
26540
+ this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), lastNode, lastNode.nodeName !== 'BR' ? lastNode.textContent.length : 0);
26541
+ }
26542
+ else if (!isNullOrUndefined(restoreStartElement.nextSibling)) {
26543
+ let firstNode = restoreStartElement.nextSibling;
26544
+ while (firstNode.nodeName !== '#text' && firstNode.nodeName !== 'BR') {
26545
+ firstNode = firstNode.firstChild;
26546
+ }
26547
+ this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), firstNode, 0);
26548
+ }
26549
+ }
26550
+ else {
26551
+ e.selection.restore();
26552
+ }
26444
26553
  if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {
26445
26554
  this.removeResizeEle();
26446
26555
  }
@@ -26652,7 +26761,7 @@ class Image$1 {
26652
26761
  animationSettings: { effect: 'None' },
26653
26762
  close: (event) => {
26654
26763
  if (this.isImgUploaded) {
26655
- this.uploadObj.removing();
26764
+ this.uploadObj.remove();
26656
26765
  }
26657
26766
  this.parent.isBlur = false;
26658
26767
  if (event && event.event.returnValue) {
@@ -26720,9 +26829,6 @@ class Image$1 {
26720
26829
  cancelDialog(e) {
26721
26830
  this.parent.isBlur = false;
26722
26831
  this.dialogObj.hide({ returnValue: true });
26723
- if (this.isImgUploaded) {
26724
- this.uploadObj.removing();
26725
- }
26726
26832
  }
26727
26833
  onDocumentClick(e) {
26728
26834
  const target = e.target;
@@ -30138,7 +30244,6 @@ class Table {
30138
30244
  this.pageY = null;
30139
30245
  this.moveEle = null;
30140
30246
  this.currentColumnResize = '';
30141
- this.currentMarginLeft = 0;
30142
30247
  this.parent = parent;
30143
30248
  this.rteID = parent.element.id;
30144
30249
  this.l10n = serviceLocator.getService('rteLocale');
@@ -30754,7 +30859,7 @@ class Table {
30754
30859
  }
30755
30860
  tableResizeEleCreation(table, e) {
30756
30861
  this.parent.preventDefaultResize(e);
30757
- const columns = table.rows[this.calMaxCol(table)].cells;
30862
+ const columns = this.calMaxCol(this.curTable);
30758
30863
  const rows = [];
30759
30864
  for (let i = 0; i < table.rows.length; i++) {
30760
30865
  for (let j = 0; j < table.rows[i].cells.length; j++) {
@@ -30885,6 +30990,7 @@ class Table {
30885
30990
  if (target.classList.contains(CLS_TB_COL_RES) ||
30886
30991
  target.classList.contains(CLS_TB_ROW_RES) ||
30887
30992
  target.classList.contains(CLS_TB_BOX_RES)) {
30993
+ this.resetResizeHelper(this.curTable);
30888
30994
  e.preventDefault();
30889
30995
  this.parent.preventDefaultResize(e);
30890
30996
  removeClass(this.curTable.querySelectorAll('td,th'), CLS_TABLE_SEL);
@@ -30895,9 +31001,10 @@ class Table {
30895
31001
  this.hideTableQuickToolbar();
30896
31002
  if (target.classList.contains(CLS_TB_COL_RES)) {
30897
31003
  this.resizeBtnStat.column = true;
30898
- if (parseInt(target.getAttribute('data-col'), 10) === this.curTable.rows[this.calMaxCol(this.curTable)].cells.length) {
31004
+ if (parseInt(target.getAttribute('data-col'), 10) === this.calMaxCol(this.curTable).length) {
30899
31005
  this.currentColumnResize = 'last';
30900
- this.columnEle = this.curTable.rows[this.calMaxCol(this.curTable)].cells[parseInt(target.getAttribute('data-col'), 10) - 1];
31006
+ this.colIndex = parseInt(target.getAttribute('data-col'), 10) - 1;
31007
+ this.columnEle = this.calMaxCol(this.curTable)[this.colIndex];
30901
31008
  }
30902
31009
  else {
30903
31010
  if (parseInt(target.getAttribute('data-col'), 10) === 0) {
@@ -30944,9 +31051,9 @@ class Table {
30944
31051
  }
30945
31052
  }
30946
31053
  }
30947
- this.columnEle = this.curTable.rows[this.calMaxCol(this.curTable)].cells[parseInt(target.getAttribute('data-col'), 10)];
31054
+ this.colIndex = parseInt(target.getAttribute('data-col'), 10);
31055
+ this.columnEle = this.calMaxCol(this.curTable)[this.colIndex];
30948
31056
  }
30949
- this.colIndex = this.columnEle.cellIndex;
30950
31057
  this.moveEle = e.target;
30951
31058
  this.appendHelper();
30952
31059
  }
@@ -31035,16 +31142,33 @@ class Table {
31035
31142
  this.helper.style.top = top + 'px';
31036
31143
  }
31037
31144
  }
31038
- calMaxCol(element) {
31039
- let max = 0;
31040
- let maxRowIndex;
31041
- for (let i = 0; i < element.rows.length; i++) {
31042
- if (max < element.rows[i].cells.length) {
31043
- maxRowIndex = i;
31044
- max = element.rows[i].cells.length;
31145
+ calMaxCol(curTable) {
31146
+ const cellColl = curTable.rows[0].cells;
31147
+ let cellCount = 0;
31148
+ for (let cell = 0; cell < cellColl.length; cell++) {
31149
+ cellCount = cellCount + cellColl[cell].colSpan;
31150
+ }
31151
+ const cells = new Array(cellCount);
31152
+ const rowSpanCells = new Map();
31153
+ for (let i = 0; i < curTable.rows.length; i++) {
31154
+ let currentColIndex = 0;
31155
+ for (let k = 0; k < curTable.rows[i].cells.length; k++) {
31156
+ for (let l = 1; l < curTable.rows[i].cells[k].rowSpan; l++) {
31157
+ const key = `${i + l}${currentColIndex}`;
31158
+ rowSpanCells.set(key, curTable.rows[i].cells[k]);
31159
+ }
31160
+ const cellIndex = this.getCellIndex(rowSpanCells, i, k);
31161
+ if (cellIndex > currentColIndex) {
31162
+ currentColIndex = cellIndex;
31163
+ }
31164
+ const width = curTable.rows[i].cells[k].offsetWidth;
31165
+ if (!cells[currentColIndex] || width < cells[currentColIndex].offsetWidth) {
31166
+ cells[currentColIndex] = curTable.rows[i].cells[k];
31167
+ }
31168
+ currentColIndex += 1 + curTable.rows[i].cells[k].colSpan - 1;
31045
31169
  }
31046
31170
  }
31047
- return maxRowIndex;
31171
+ return cells;
31048
31172
  }
31049
31173
  resizing(e) {
31050
31174
  const pageX = this.getPointX(e);
@@ -31081,7 +31205,6 @@ class Table {
31081
31205
  }
31082
31206
  if (this.resizeBtnStat.column) {
31083
31207
  const colGroup = this.curTable.querySelectorAll('colgroup > col');
31084
- const cellRow = this.curTable.rows[0].cells[0].nodeName === 'TH' ? 1 : 0;
31085
31208
  let currentTableWidth;
31086
31209
  if (this.curTable.style.width !== '' && this.curTable.style.width.includes('%')) {
31087
31210
  currentTableWidth = parseFloat(this.curTable.style.width.split('%')[0]);
@@ -31089,7 +31212,8 @@ class Table {
31089
31212
  else {
31090
31213
  currentTableWidth = this.getCurrentTableWidth(this.curTable.offsetWidth, this.parent.inputElement.offsetWidth);
31091
31214
  }
31092
- const currentColumnCellWidth = parseFloat(this.curTable.rows[cellRow].cells[this.colIndex >= this.curTable.rows[cellRow].cells.length ? this.curTable.rows[cellRow].cells.length - 1 : this.colIndex].style.width.split('%')[0]);
31215
+ const currentCol = this.calMaxCol(this.curTable)[this.colIndex];
31216
+ let currentColResizableWidth = this.getCurrentColWidth(currentCol, tableWidth);
31093
31217
  if (this.currentColumnResize === 'first') {
31094
31218
  mouseX = mouseX - 0.75; //This was done for to make the gripper and the table first/last column will be close.
31095
31219
  this.removeResizeElement();
@@ -31098,16 +31222,25 @@ class Table {
31098
31222
  this.curTable.style.maxWidth = maxiumWidth + 'px';
31099
31223
  }
31100
31224
  // Below the value '100' is the 100% width of the parent element.
31101
- if (((mouseX !== 0 && 5 < currentColumnCellWidth) || mouseX < 0) && currentTableWidth <= 100 &&
31225
+ if (((mouseX !== 0 && 5 < currentColResizableWidth) || mouseX < 0) && currentTableWidth <= 100 &&
31102
31226
  this.convertPixelToPercentage(tableWidth - mouseX, widthCompare) <= 100) {
31103
31227
  const firstColumnsCell = this.findFirstLastColCells(this.curTable, true);
31104
31228
  this.curTable.style.width = this.convertPixelToPercentage(tableWidth - mouseX, widthCompare) > 100 ? (100 + '%') :
31105
31229
  (this.convertPixelToPercentage(tableWidth - mouseX, widthCompare) + '%');
31106
31230
  const differenceWidth = currentTableWidth - this.convertPixelToPercentage(tableWidth - mouseX, widthCompare);
31107
- this.currentMarginLeft = this.currentMarginLeft + differenceWidth;
31108
- this.curTable.style.marginLeft = 'calc(' + (this.curTable.style.width === '100%' ? 0 : this.currentMarginLeft) + '%)';
31231
+ let preMarginLeft = 0;
31232
+ if (!isNullOrUndefined(this.curTable.style.marginLeft) && this.curTable.style.marginLeft !== '') {
31233
+ const regex = /[-+]?\d*\.\d+|\d+/;
31234
+ const value = this.curTable.style.marginLeft.match(regex);
31235
+ if (!isNullOrUndefined(value)) {
31236
+ preMarginLeft = parseFloat(value[0]);
31237
+ }
31238
+ }
31239
+ const currentMarginLeft = preMarginLeft + differenceWidth;
31240
+ this.curTable.style.marginLeft = 'calc(' + (this.curTable.style.width === '100%' ? 0 : currentMarginLeft) + '%)';
31109
31241
  for (let i = 0; i < firstColumnsCell.length; i++) {
31110
- this.curTable.rows[i].cells[this.colIndex].style.width = (currentColumnCellWidth - differenceWidth) + '%';
31242
+ const currentColumnCellWidth = this.getCurrentColWidth(firstColumnsCell[i], tableWidth);
31243
+ firstColumnsCell[i].style.width = (currentColumnCellWidth - differenceWidth) + '%';
31111
31244
  }
31112
31245
  }
31113
31246
  }
@@ -31119,16 +31252,14 @@ class Table {
31119
31252
  this.curTable.style.maxWidth = maxiumWidth + 'px';
31120
31253
  }
31121
31254
  // Below the value '100' is the 100% width of the parent element.
31122
- if (((mouseX !== 0 && 5 < currentColumnCellWidth) || mouseX > 0) &&
31255
+ if (((mouseX !== 0 && 5 < currentColResizableWidth) || mouseX > 0) &&
31123
31256
  currentTableWidth <= 100 && this.convertPixelToPercentage(tableWidth + mouseX, widthCompare) <= 100) {
31124
31257
  const lastColumnsCell = this.findFirstLastColCells(this.curTable, false);
31125
31258
  this.curTable.style.width = this.convertPixelToPercentage(tableWidth + mouseX, widthCompare) > 100 ? (100 + '%') : (this.convertPixelToPercentage(tableWidth + mouseX, widthCompare) + '%');
31126
31259
  const differenceWidth = currentTableWidth - this.convertPixelToPercentage(tableWidth + mouseX, widthCompare);
31127
31260
  for (let i = 0; i < lastColumnsCell.length; i++) {
31128
- if (this.curTable.rows[i].cells[this.colIndex]) {
31129
- this.curTable.rows[i].cells[this.curTable.rows[i].cells.length === this.colIndex ?
31130
- this.colIndex - 1 : this.colIndex].style.width = (currentColumnCellWidth - differenceWidth) + '%';
31131
- }
31261
+ const currentColumnCellWidth = this.getCurrentColWidth(lastColumnsCell[i], tableWidth);
31262
+ lastColumnsCell[i].style.width = (currentColumnCellWidth - differenceWidth) + '%';
31132
31263
  }
31133
31264
  }
31134
31265
  }
@@ -31154,7 +31285,7 @@ class Table {
31154
31285
  tableTrElementPixel[i] = (parseFloat(currentTableTrElement[i].clientHeight.toString()));
31155
31286
  }
31156
31287
  }
31157
- this.curTable.style.height = (parseFloat(this.curTable.clientHeight.toString()) + mouseY) + 'px';
31288
+ this.curTable.style.height = (parseFloat(this.curTable.clientHeight.toString()) + ((mouseY > 0) ? 0 : mouseY)) + 'px';
31158
31289
  for (let i = 0; i < currentTableTrElement.length; i++) {
31159
31290
  if (this.rowEle === currentTableTrElement[i]) {
31160
31291
  currentTableTrElement[i].style.height = (parseFloat(currentTableTrElement[i].clientHeight.toString()) + mouseY) + 'px';
@@ -31189,6 +31320,16 @@ class Table {
31189
31320
  }
31190
31321
  });
31191
31322
  }
31323
+ getCurrentColWidth(col, tableWidth) {
31324
+ let currentColWidth = 0;
31325
+ if (col.style.width !== '' && col.style.width.includes('%')) {
31326
+ currentColWidth = parseFloat(col.style.width.split('%')[0]);
31327
+ }
31328
+ else {
31329
+ currentColWidth = this.convertPixelToPercentage(col.offsetWidth, tableWidth);
31330
+ }
31331
+ return currentColWidth;
31332
+ }
31192
31333
  getCurrentTableWidth(tableWidth, parentWidth) {
31193
31334
  let currentTableWidth = 0;
31194
31335
  currentTableWidth = tableWidth / parentWidth * 100;
@@ -31196,11 +31337,18 @@ class Table {
31196
31337
  }
31197
31338
  findFirstLastColCells(table, isFirst) {
31198
31339
  const resultColumns = [];
31199
- const rows = table.querySelectorAll('tr');
31340
+ const rows = table.rows;
31341
+ const rowSpanCellIndexs = new Array();
31200
31342
  for (let i = 0; i < rows.length; i++) {
31201
- if (rows[i].closest('table') === table) {
31202
- const columns = rows[i].querySelectorAll('th, td');
31203
- resultColumns.push(isFirst ? columns[0] : columns[columns.length - 1]);
31343
+ const cellIndex = isFirst ? 0 : rows[i].cells.length - 1;
31344
+ const column = rows[i].cells[cellIndex];
31345
+ for (let rowSpan = 1; rowSpan < column.rowSpan; rowSpan++) {
31346
+ const key = `${i + rowSpan}-${cellIndex}`;
31347
+ rowSpanCellIndexs.push(key);
31348
+ }
31349
+ const spannedCellKey = `${i}-${cellIndex}`;
31350
+ if (rowSpanCellIndexs.length === 0 || (isFirst && rowSpanCellIndexs.indexOf(spannedCellKey) === -1) || (!isFirst && rowSpanCellIndexs.indexOf(spannedCellKey) === -1 && rowSpanCellIndexs.every((key) => key.split('-')[0] !== i.toString()))) {
31351
+ resultColumns.push(column);
31204
31352
  }
31205
31353
  }
31206
31354
  return resultColumns;
@@ -31225,22 +31373,7 @@ class Table {
31225
31373
  detach(this.helper);
31226
31374
  this.helper = null;
31227
31375
  }
31228
- const colHelper = this.parent.element.querySelectorAll('.e-table-rhelper.e-column-helper');
31229
- Array.from(colHelper).forEach((element) => {
31230
- if (element.parentNode) {
31231
- element.parentNode.removeChild(element);
31232
- }
31233
- });
31234
- for (let i = 0; i < this.curTable.rows.length; i++) {
31235
- for (let k = 0; k < this.curTable.rows[i].cells.length; k++) {
31236
- const width = this.convertPixelToPercentage(this.curTable.rows[i].cells[k].offsetWidth, parseInt(getComputedStyle(this.curTable).width, 10)) + '%';
31237
- this.curTable.rows[i].cells[k].style.width = width;
31238
- }
31239
- }
31240
- const colGroup = this.curTable.querySelector('colgroup');
31241
- if (colGroup) {
31242
- this.curTable.removeChild(colGroup);
31243
- }
31376
+ this.resetResizeHelper(this.curTable);
31244
31377
  this.pageX = null;
31245
31378
  this.pageY = null;
31246
31379
  this.moveEle = null;
@@ -31257,6 +31390,30 @@ class Table {
31257
31390
  this.parent.trigger(resizeStop, args);
31258
31391
  this.parent.formatter.saveData();
31259
31392
  }
31393
+ resetResizeHelper(curTable) {
31394
+ const colHelper = this.parent.element.querySelectorAll('.e-table-rhelper.e-column-helper');
31395
+ Array.from(colHelper).forEach((element) => {
31396
+ if (element.parentNode) {
31397
+ element.parentNode.removeChild(element);
31398
+ }
31399
+ });
31400
+ const rowHelper = this.parent.element.querySelectorAll('.e-table-rhelper.e-row-helper');
31401
+ Array.from(rowHelper).forEach((element) => {
31402
+ if (element.parentNode) {
31403
+ element.parentNode.removeChild(element);
31404
+ }
31405
+ });
31406
+ const colGroup = curTable.querySelector('colgroup');
31407
+ if (colGroup) {
31408
+ for (let i = 0; i < curTable.rows.length; i++) {
31409
+ for (let k = 0; k < curTable.rows[i].cells.length; k++) {
31410
+ const width = this.convertPixelToPercentage(curTable.rows[i].cells[k].offsetWidth, parseInt(getComputedStyle(curTable).width, 10)) + '%';
31411
+ curTable.rows[i].cells[k].style.width = width;
31412
+ }
31413
+ }
31414
+ curTable.removeChild(colGroup);
31415
+ }
31416
+ }
31260
31417
  resizeBtnInit() {
31261
31418
  return this.resizeBtnStat = { column: false, row: false, tableBox: false };
31262
31419
  }
@@ -31365,6 +31522,7 @@ class Table {
31365
31522
  if (!isNullOrUndefined(this.parent.cssClass)) {
31366
31523
  addClass([this.popupObj.element], this.parent.getCssClass());
31367
31524
  }
31525
+ btnEle.focus();
31368
31526
  this.popupObj.refreshPosition(target);
31369
31527
  }
31370
31528
  onIframeMouseDown() {
@@ -31694,12 +31852,18 @@ class Table {
31694
31852
  afterKeyDown(e) {
31695
31853
  if (this.curTable) {
31696
31854
  setTimeout(() => {
31697
- const mouseOverEvent = document.createEvent('MouseEvents');
31698
- mouseOverEvent.initEvent('mouseover', true, true);
31699
- this.curTable.dispatchEvent(mouseOverEvent);
31855
+ this.updateResizeIconPosition();
31700
31856
  }, 1);
31701
31857
  }
31702
31858
  }
31859
+ updateResizeIconPosition() {
31860
+ const tableReBox = this.parent.contentModule.getEditPanel().querySelector('.e-table-box');
31861
+ if (!isNullOrUndefined(tableReBox)) {
31862
+ const tablePosition = this.calcPos(this.curTable);
31863
+ tableReBox.style.cssText = 'top: ' + (tablePosition.top + parseInt(getComputedStyle(this.curTable).height, 10) - 4) +
31864
+ 'px; left:' + (tablePosition.left + parseInt(getComputedStyle(this.curTable).width, 10) - 4) + 'px;';
31865
+ }
31866
+ }
31703
31867
  }
31704
31868
 
31705
31869
  /**
@@ -31738,7 +31902,11 @@ class DialogRenderer {
31738
31902
  let dlgObj;
31739
31903
  e.beforeOpen = this.beforeOpen.bind(this);
31740
31904
  e.open = this.open.bind(this);
31741
- e.position = { X: 'center', Y: this.getDialogPosition() };
31905
+ e.position = {
31906
+ X: 'center',
31907
+ Y: (e.target !== 'string' && e.target.nodeName === 'BODY' &&
31908
+ !isNullOrUndefined(e.position)) ? e.position.Y : this.getDialogPosition()
31909
+ };
31742
31910
  if (isNullOrUndefined(e.close)) {
31743
31911
  e.close = this.close.bind(this);
31744
31912
  }
@@ -32945,10 +33113,10 @@ class EnterKeyAction {
32945
33113
  }
32946
33114
  const previousBlockNode = this.parent.formatter.editorManager.domNode.blockNodes()[0].previousSibling;
32947
33115
  const nextBlockNode = this.parent.formatter.editorManager.domNode.blockNodes()[0].nextSibling;
32948
- if (!isNullOrUndefined(previousBlockNode) && previousBlockNode.hasAttribute('style') && previousBlockNode.nodeName !== 'TABLE') {
33116
+ if (!isNullOrUndefined(previousBlockNode) && previousBlockNode.nodeName !== '#text' && previousBlockNode.hasAttribute('style') && previousBlockNode.nodeName !== 'TABLE') {
32949
33117
  insertElem.setAttribute('style', previousBlockNode.getAttribute('style'));
32950
33118
  }
32951
- if (isNullOrUndefined(previousBlockNode) && !isNullOrUndefined(nextBlockNode) && nextBlockNode.hasAttribute('style') && nextBlockNode.nodeName !== 'TABLE') {
33119
+ if (isNullOrUndefined(previousBlockNode) && !isNullOrUndefined(nextBlockNode) && nextBlockNode.nodeName !== '#text' && nextBlockNode.hasAttribute('style') && nextBlockNode.nodeName !== 'TABLE') {
32952
33120
  insertElem.setAttribute('style', nextBlockNode.getAttribute('style'));
32953
33121
  }
32954
33122
  return insertElem;
@@ -33812,11 +33980,14 @@ let RichTextEditor = class RichTextEditor extends Component {
33812
33980
  clientX: touch.clientX, clientY: touch.clientY }
33813
33981
  });
33814
33982
  if (this.inputElement && ((this.editorMode === 'HTML' && this.inputElement.textContent.length !== 0) ||
33815
- (this.editorMode === 'Markdown' && this.inputElement.value.length !== 0)) || (e.target && (e.target.nodeName === 'VIDEO'
33816
- || e.target.querySelectorAll('.' + CLS_VIDEOWRAP).length > 0) || (e.target && e.target.nodeName !== 'BR' &&
33817
- (e.target.classList.contains(CLS_AUDIOWRAP) ||
33818
- e.target.classList.contains(CLS_CLICKELEM) ||
33819
- e.target.classList.contains(CLS_VID_CLICK_ELEM))))) {
33983
+ (this.editorMode === 'Markdown' && this.inputElement.value.length !== 0)) ||
33984
+ (e.target && !isNullOrUndefined(closest(e.target, 'table'))) ||
33985
+ (e.target && (e.target.nodeName === 'VIDEO' ||
33986
+ e.target.querySelectorAll('.' + CLS_VIDEOWRAP).length > 0) ||
33987
+ (e.target && e.target.nodeName !== 'BR' &&
33988
+ (e.target.classList.contains(CLS_AUDIOWRAP) ||
33989
+ e.target.classList.contains(CLS_CLICKELEM) ||
33990
+ e.target.classList.contains(CLS_VID_CLICK_ELEM))))) {
33820
33991
  this.notify(toolbarRefresh, { args: e });
33821
33992
  }
33822
33993
  this.triggerEditArea(e);
@@ -34695,7 +34866,14 @@ let RichTextEditor = class RichTextEditor extends Component {
34695
34866
  // eslint-disable-next-line
34696
34867
  const imgPadding = 12;
34697
34868
  const imgResizeBorder = 2;
34698
- const editEle = this.contentModule.getEditPanel();
34869
+ let editEle = this.contentModule.getEditPanel();
34870
+ if (this.editorMode === "HTML" && !isNullOrUndefined(this.formatter.editorManager.nodeSelection) && !isNullOrUndefined(this.formatter.editorManager.nodeSelection.range)) {
34871
+ const currentRange = this.formatter.editorManager.nodeSelection.range;
34872
+ if (currentRange.startContainer.nodeType !== 3 && currentRange.startContainer.closest &&
34873
+ !isNullOrUndefined(currentRange.startContainer.closest('TD'))) {
34874
+ editEle = currentRange.startContainer;
34875
+ }
34876
+ }
34699
34877
  const eleStyle = window.getComputedStyle(editEle);
34700
34878
  const editEleMaxWidth = editEle.offsetWidth - (imgPadding + imgResizeBorder +
34701
34879
  parseFloat(eleStyle.paddingLeft.split('px')[0]) + parseFloat(eleStyle.paddingRight.split('px')[0]) +
@@ -35138,7 +35316,13 @@ let RichTextEditor = class RichTextEditor extends Component {
35138
35316
  blurHandler(e) {
35139
35317
  let trg = e.relatedTarget;
35140
35318
  if (trg) {
35141
- const rteElement = closest(trg, '.' + CLS_RTE);
35319
+ let rteElement = closest(trg, '.' + CLS_RTE);
35320
+ if (!rteElement && this.iframeSettings.enable) {
35321
+ const iframeElement = this.element.querySelector('#' + this.getID() + '_rte-view');
35322
+ if (iframeElement && iframeElement.contentWindow.document.body.contains(trg)) {
35323
+ rteElement = closest(iframeElement, '.' + CLS_RTE);
35324
+ }
35325
+ }
35142
35326
  if (rteElement && rteElement === this.element) {
35143
35327
  this.isBlur = false;
35144
35328
  if (trg === this.getToolbarElement()) {
@@ -35799,5 +35983,5 @@ RichTextEditor = __decorate$1([
35799
35983
  * Rich Text Editor component exported items
35800
35984
  */
35801
35985
 
35802
- export { Toolbar$2 as Toolbar, KeyboardEvents$1 as KeyboardEvents, BaseToolbar, BaseQuickToolbar, QuickToolbar, Count, ColorPickerInput, MarkdownToolbarStatus, ExecCommandCallBack, ToolbarAction, MarkdownEditor, HtmlEditor, PasteCleanup, Resize, DropDownButtons, FileManager$1 as FileManager, FullScreen, setAttributes, HtmlToolbarStatus, XhtmlValidation, FormatPainter, EmojiPicker, HTMLFormatter, Formatter, MarkdownFormatter, ContentRender, Render, ToolbarRenderer, Link, Image$1 as Image, Audio, Video, ViewSource, Table, DialogRenderer, IframeContentRender, MarkdownRender, PopupRenderer, RichTextEditor, RenderType, ToolbarType, DialogType, executeGroup, created, destroyed, tableclass, load, initialLoad, contentChanged, initialEnd, iframeMouseDown, destroy, toolbarClick, toolbarRefresh, refreshBegin, toolbarUpdated, bindOnEnd, renderColorPicker, htmlToolbarClick, markdownToolbarClick, destroyColorPicker, modelChanged, tableModulekeyUp, keyUp, keyDown, mouseUp, toolbarCreated, toolbarRenderComplete, enableFullScreen, disableFullScreen, dropDownSelect, beforeDropDownItemRender, execCommandCallBack, imageToolbarAction, audioToolbarAction, videoToolbarAction, linkToolbarAction, windowResize, resizeStart, onResize, resizeStop, undo, redo, insertLink, unLink, editLink, openLink, actionBegin, actionComplete, updatedToolbarStatus, actionSuccess, updateToolbarItem, insertImage, insertAudio, insertVideo, insertCompleted, imageLeft, imageRight, imageCenter, imageBreak, imageInline, imageLink, imageAlt, imageDelete, audioDelete, videoDelete, imageCaption, imageSize, videoSize, sourceCode, updateSource, toolbarOpen, beforeDropDownOpen, selectionSave, selectionRestore, expandPopupClick, count, contentFocus, contentBlur, mouseDown, sourceCodeMouseDown, editAreaClick, scroll, contentscroll, colorPickerChanged, tableColorPickerChanged, focusChange, selectAll$1 as selectAll, selectRange, getSelectedHtml, renderInlineToolbar, paste, imgModule, rtlMode, createTable, docClick, tableToolbarAction, checkUndo, readOnlyMode, moduleDestroy, pasteClean, enterHandler, beforeDialogOpen, clearDialogObj, dialogOpen, beforeDialogClose, dialogClose, beforeQuickToolbarOpen, quickToolbarOpen, quickToolbarClose, popupHide, imageSelected, imageUploading, imageUploadSuccess, imageUploadFailed, imageRemoving, fileSelected, fileUploading, fileUploadSuccess, fileUploadFailed, fileRemoving, afterImageDelete, afterMediaDelete, drop, xhtmlValidation, beforeImageUpload, beforeFileUpload, resizeInitialized, renderFileManager, beforeImageDrop, dynamicModule, beforePasteCleanup, afterPasteCleanup, updateTbItemsStatus, showLinkDialog, closeLinkDialog, showImageDialog, showAudioDialog, showVideoDialog, closeImageDialog, closeAudioDialog, closeVideoDialog, showTableDialog, closeTableDialog, bindCssClass, formatPainterClick, formatPainterDoubleClick, emojiPicker, destroyTooltip, hidePopup, cleanupResizeElements, afterKeyDown, updateValueOnIdle, documentClickClosedBy, blockEmptyNodes, inlineEmptyNodes, supportedUnits, conversionFactors, onHandleFontsizeChange, CLS_RTE, CLS_RTL, CLS_CONTENT, CLS_DISABLED, CLS_SCRIPT_SHEET, CLS_STYLE_SHEET, CLS_TOOLBAR, CLS_TB_FIXED, CLS_TB_FLOAT, CLS_TB_ABS_FLOAT, CLS_INLINE, CLS_TB_INLINE, CLS_RTE_EXPAND_TB, CLS_FULL_SCREEN, CLS_QUICK_TB, CLS_TEXT_QUICK_TB, CLS_POP, CLS_TB_STATIC, CLS_QUICK_POP, CLS_QUICK_DROPDOWN, CLS_IMAGE_POP, CLS_TEXT_POP, CLS_INLINE_POP, CLS_INLINE_DROPDOWN, CLS_DROPDOWN_POPUP, CLS_DROPDOWN_ICONS, CLS_DROPDOWN_ITEMS, CLS_DROPDOWN_BTN, CLS_RTE_CONTENT, CLS_TB_ITEM, CLS_TB_EXTENDED, CLS_TB_WRAP, CLS_POPUP, CLS_SEPARATOR, CLS_MINIMIZE, CLS_MAXIMIZE, CLS_BACK, CLS_SHOW, CLS_HIDE, CLS_VISIBLE, CLS_FOCUS, CLS_RM_WHITE_SPACE, CLS_IMGRIGHT, CLS_IMGLEFT, CLS_IMGCENTER, CLS_IMGBREAK, CLS_AUDIOBREAK, CLS_CLICKELEM, CLS_VID_CLICK_ELEM, CLS_AUDIOWRAP, CLS_VIDEOWRAP, CLS_VIDEOBREAK, CLS_CAPTION, CLS_RTE_CAPTION, CLS_CAPINLINE, CLS_IMGINLINE, CLS_AUDIOINLINE, CLS_VIDEOINLINE, CLS_COUNT, CLS_WARNING, CLS_ERROR, CLS_ICONS, CLS_ACTIVE, CLS_EXPAND_OPEN, CLS_RTE_ELEMENTS, CLS_TB_BTN, CLS_HR_SEPARATOR, CLS_TB_IOS_FIX, CLS_LIST_PRIMARY_CONTENT, CLS_NUMBERFORMATLIST_TB_BTN, CLS_BULLETFORMATLIST_TB_BTN, CLS_FORMATS_TB_BTN, CLS_FONT_NAME_TB_BTN, CLS_FONT_SIZE_TB_BTN, CLS_ALIGN_TB_BTN, CLS_FONT_COLOR_TARGET, CLS_BACKGROUND_COLOR_TARGET, CLS_COLOR_CONTENT, CLS_FONT_COLOR_DROPDOWN, CLS_BACKGROUND_COLOR_DROPDOWN, CLS_COLOR_PALETTE, CLS_FONT_COLOR_PICKER, CLS_BACKGROUND_COLOR_PICKER, CLS_RTE_READONLY, CLS_TABLE_SEL, CLS_TB_DASH_BOR, CLS_TB_ALT_BOR, CLS_TB_COL_RES, CLS_TB_ROW_RES, CLS_TB_BOX_RES, CLS_RTE_HIDDEN, CLS_RTE_PASTE_KEEP_FORMAT, CLS_RTE_PASTE_REMOVE_FORMAT, CLS_RTE_PASTE_PLAIN_FORMAT, CLS_RTE_PASTE_OK, CLS_RTE_PASTE_CANCEL, CLS_RTE_DIALOG_MIN_HEIGHT, CLS_RTE_RES_HANDLE, CLS_RTE_RES_EAST, CLS_RTE_IMAGE, CLS_RESIZE, CLS_IMG_FOCUS, CLS_AUD_FOCUS, CLS_VID_FOCUS, CLS_RTE_DRAG_IMAGE, CLS_RTE_UPLOAD_POPUP, CLS_POPUP_OPEN, CLS_IMG_RESIZE, CLS_DROPAREA, CLS_IMG_INNER, CLS_UPLOAD_FILES, CLS_RTE_DIALOG_UPLOAD, CLS_RTE_RES_CNT, CLS_CUSTOM_TILE, CLS_NOCOLOR_ITEM, CLS_TABLE, CLS_TABLE_BORDER, CLS_RTE_TABLE_RESIZE, CLS_RTE_FIXED_TB_EXPAND, CLS_RTE_TB_ENABLED, CLS_RTE_RES_WEST, CLS_RTE_SOURCE_CODE_TXTAREA, getIndex, hasClass, getDropDownValue, isIDevice, getFormattedFontSize, pageYOffset, getTooltipText, getTooltipTextDropdownItems, getQuickToolbarTooltipText, setToolbarStatus, getCollection, getTBarItemsIndex, updateUndoRedoStatus, dispatchEvent, parseHtml, getTextNodesUnder, toObjectLowerCase, getEditValue, updateTextNode, getDefaultValue, isEditableValueEmpty, decode, sanitizeHelper, convertToBlob, getLocaleFontFormat, updateDropDownFontFormatLocale, ServiceLocator, RendererFactory, EditorManager, IMAGE, AUDIO, VIDEO, TABLE, LINK, INSERT_ROW, INSERT_COLUMN, DELETEROW, DELETECOLUMN, REMOVETABLE, TABLEHEADER, TABLE_VERTICAL_ALIGN, TABLE_MERGE, TABLE_VERTICAL_SPLIT, TABLE_HORIZONTAL_SPLIT, TABLE_MOVE, ALIGNMENT_TYPE, INDENT_TYPE, DEFAULT_TAG, BLOCK_TAGS, IGNORE_BLOCK_TAGS, TABLE_BLOCK_TAGS, SELECTION_TYPE, INSERTHTML_TYPE, INSERT_TEXT_TYPE, CLEAR_TYPE, SELF_CLOSING_TAGS, PASTE_SOURCE, CLASS_IMAGE_RIGHT, CLASS_IMAGE_LEFT, CLASS_IMAGE_CENTER, CLASS_VIDEO_RIGHT, CLASS_VIDEO_LEFT, CLASS_VIDEO_CENTER, CLASS_IMAGE_BREAK, CLASS_AUDIO_BREAK, CLASS_VIDEO_BREAK, CLASS_CAPTION, CLASS_RTE_CAPTION, CLASS_CAPTION_INLINE, CLASS_IMAGE_INLINE, CLASS_AUDIO_INLINE, CLASS_CLICK_ELEM, CLASS_VIDEO_CLICK_ELEM, CLASS_AUDIO, CLASS_VIDEO, CLASS_AUDIO_WRAP, CLASS_VIDEO_WRAP, CLASS_EMBED_VIDEO_WRAP, CLASS_AUDIO_FOCUS, CLASS_VIDEO_FOCUS, CLASS_VIDEO_INLINE, Lists, markerClassName, DOMNode, Alignments, Indents, Formats, LinkCommand, InsertMethods, InsertTextExec, InsertHtmlExec, InsertHtml, IsFormatted, MsWordPaste, NodeCutter, ImageCommand, AudioCommand, VideoCommand, SelectionCommands, SelectionBasedExec, ClearFormatExec, UndoRedoManager, TableCommand, statusCollection, ToolbarStatus, FormatPainterActions, EmojiPickerAction, NodeSelection, MarkdownParser, LISTS_COMMAND, selectionCommand, LINK_COMMAND, CLEAR_COMMAND, MD_TABLE, INSERT_TEXT_COMMAND, ClearFormat, MDLists, MDFormats, MarkdownSelection, UndoRedoCommands, MDSelectionFormats, MDLink, MDTable, markdownFormatTags, markdownSelectionTags, markdownListsTags, htmlKeyConfig, markdownKeyConfig, pasteCleanupGroupingTags, listConversionFilters, selfClosingTags, KEY_DOWN, ACTION, FORMAT_TYPE, KEY_DOWN_HANDLER, LIST_TYPE, KEY_UP_HANDLER, KEY_UP, MODEL_CHANGED_PLUGIN, MODEL_CHANGED, MS_WORD_CLEANUP_PLUGIN, MS_WORD_CLEANUP, ON_BEGIN, SPACE_ACTION, FORMAT_PAINTER_ACTIONS, EMOJI_PICKER_ACTIONS, MOUSE_DOWN };
35986
+ export { Toolbar$2 as Toolbar, KeyboardEvents$1 as KeyboardEvents, BaseToolbar, BaseQuickToolbar, QuickToolbar, Count, ColorPickerInput, MarkdownToolbarStatus, ExecCommandCallBack, ToolbarAction, MarkdownEditor, HtmlEditor, PasteCleanup, Resize, DropDownButtons, FileManager$1 as FileManager, FullScreen, setAttributes, HtmlToolbarStatus, XhtmlValidation, FormatPainter, EmojiPicker, HTMLFormatter, Formatter, MarkdownFormatter, ContentRender, Render, ToolbarRenderer, Link, Image$1 as Image, Audio, Video, ViewSource, Table, DialogRenderer, IframeContentRender, MarkdownRender, PopupRenderer, RichTextEditor, RenderType, ToolbarType, DialogType, executeGroup, created, destroyed, tableclass, load, initialLoad, contentChanged, initialEnd, iframeMouseDown, destroy, toolbarClick, toolbarRefresh, refreshBegin, toolbarUpdated, bindOnEnd, renderColorPicker, htmlToolbarClick, markdownToolbarClick, destroyColorPicker, modelChanged, tableModulekeyUp, keyUp, keyDown, mouseUp, toolbarCreated, toolbarRenderComplete, enableFullScreen, disableFullScreen, dropDownSelect, beforeDropDownItemRender, execCommandCallBack, imageToolbarAction, audioToolbarAction, videoToolbarAction, linkToolbarAction, windowResize, resizeStart, onResize, resizeStop, undo, redo, insertLink, unLink, editLink, openLink, actionBegin, actionComplete, updatedToolbarStatus, actionSuccess, updateToolbarItem, insertImage, insertAudio, insertVideo, insertCompleted, imageLeft, imageRight, imageCenter, imageBreak, imageInline, imageLink, imageAlt, imageDelete, audioDelete, videoDelete, imageCaption, imageSize, videoSize, sourceCode, updateSource, toolbarOpen, beforeDropDownOpen, selectionSave, selectionRestore, expandPopupClick, count, contentFocus, contentBlur, mouseDown, sourceCodeMouseDown, editAreaClick, scroll, contentscroll, colorPickerChanged, tableColorPickerChanged, focusChange, selectAll$1 as selectAll, selectRange, getSelectedHtml, renderInlineToolbar, paste, imgModule, rtlMode, createTable, docClick, tableToolbarAction, checkUndo, readOnlyMode, moduleDestroy, pasteClean, enterHandler, beforeDialogOpen, clearDialogObj, dialogOpen, beforeDialogClose, dialogClose, beforeQuickToolbarOpen, quickToolbarOpen, quickToolbarClose, popupHide, imageSelected, imageUploading, imageUploadSuccess, imageUploadFailed, imageRemoving, fileSelected, fileUploading, fileUploadSuccess, fileUploadFailed, fileRemoving, afterImageDelete, afterMediaDelete, drop, xhtmlValidation, beforeImageUpload, beforeFileUpload, resizeInitialized, renderFileManager, beforeImageDrop, dynamicModule, beforePasteCleanup, afterPasteCleanup, updateTbItemsStatus, showLinkDialog, closeLinkDialog, showImageDialog, showAudioDialog, showVideoDialog, closeImageDialog, closeAudioDialog, closeVideoDialog, showTableDialog, closeTableDialog, bindCssClass, formatPainterClick, formatPainterDoubleClick, emojiPicker, destroyTooltip, hidePopup, cleanupResizeElements, afterKeyDown, updateValueOnIdle, documentClickClosedBy, showColorPicker, blockEmptyNodes, inlineEmptyNodes, supportedUnits, conversionFactors, onHandleFontsizeChange, CLS_RTE, CLS_RTL, CLS_CONTENT, CLS_DISABLED, CLS_SCRIPT_SHEET, CLS_STYLE_SHEET, CLS_TOOLBAR, CLS_TB_FIXED, CLS_TB_FLOAT, CLS_TB_ABS_FLOAT, CLS_INLINE, CLS_TB_INLINE, CLS_RTE_EXPAND_TB, CLS_FULL_SCREEN, CLS_QUICK_TB, CLS_TEXT_QUICK_TB, CLS_POP, CLS_TB_STATIC, CLS_QUICK_POP, CLS_QUICK_DROPDOWN, CLS_IMAGE_POP, CLS_TEXT_POP, CLS_INLINE_POP, CLS_INLINE_DROPDOWN, CLS_DROPDOWN_POPUP, CLS_DROPDOWN_ICONS, CLS_DROPDOWN_ITEMS, CLS_DROPDOWN_BTN, CLS_RTE_CONTENT, CLS_TB_ITEM, CLS_TB_EXTENDED, CLS_TB_WRAP, CLS_POPUP, CLS_SEPARATOR, CLS_MINIMIZE, CLS_MAXIMIZE, CLS_BACK, CLS_SHOW, CLS_HIDE, CLS_VISIBLE, CLS_FOCUS, CLS_RM_WHITE_SPACE, CLS_IMGRIGHT, CLS_IMGLEFT, CLS_IMGCENTER, CLS_IMGBREAK, CLS_AUDIOBREAK, CLS_CLICKELEM, CLS_VID_CLICK_ELEM, CLS_AUDIOWRAP, CLS_VIDEOWRAP, CLS_VIDEOBREAK, CLS_CAPTION, CLS_RTE_CAPTION, CLS_CAPINLINE, CLS_IMGINLINE, CLS_AUDIOINLINE, CLS_VIDEOINLINE, CLS_COUNT, CLS_WARNING, CLS_ERROR, CLS_ICONS, CLS_ACTIVE, CLS_EXPAND_OPEN, CLS_RTE_ELEMENTS, CLS_TB_BTN, CLS_HR_SEPARATOR, CLS_TB_IOS_FIX, CLS_LIST_PRIMARY_CONTENT, CLS_NUMBERFORMATLIST_TB_BTN, CLS_BULLETFORMATLIST_TB_BTN, CLS_FORMATS_TB_BTN, CLS_FONT_NAME_TB_BTN, CLS_FONT_SIZE_TB_BTN, CLS_ALIGN_TB_BTN, CLS_FONT_COLOR_TARGET, CLS_BACKGROUND_COLOR_TARGET, CLS_COLOR_CONTENT, CLS_FONT_COLOR_DROPDOWN, CLS_BACKGROUND_COLOR_DROPDOWN, CLS_COLOR_PALETTE, CLS_FONT_COLOR_PICKER, CLS_BACKGROUND_COLOR_PICKER, CLS_RTE_READONLY, CLS_TABLE_SEL, CLS_TB_DASH_BOR, CLS_TB_ALT_BOR, CLS_TB_COL_RES, CLS_TB_ROW_RES, CLS_TB_BOX_RES, CLS_RTE_HIDDEN, CLS_RTE_PASTE_KEEP_FORMAT, CLS_RTE_PASTE_REMOVE_FORMAT, CLS_RTE_PASTE_PLAIN_FORMAT, CLS_RTE_PASTE_OK, CLS_RTE_PASTE_CANCEL, CLS_RTE_DIALOG_MIN_HEIGHT, CLS_RTE_RES_HANDLE, CLS_RTE_RES_EAST, CLS_RTE_IMAGE, CLS_RESIZE, CLS_IMG_FOCUS, CLS_AUD_FOCUS, CLS_VID_FOCUS, CLS_RTE_DRAG_IMAGE, CLS_RTE_UPLOAD_POPUP, CLS_POPUP_OPEN, CLS_IMG_RESIZE, CLS_DROPAREA, CLS_IMG_INNER, CLS_UPLOAD_FILES, CLS_RTE_DIALOG_UPLOAD, CLS_RTE_RES_CNT, CLS_CUSTOM_TILE, CLS_NOCOLOR_ITEM, CLS_TABLE, CLS_TABLE_BORDER, CLS_RTE_TABLE_RESIZE, CLS_RTE_FIXED_TB_EXPAND, CLS_RTE_TB_ENABLED, CLS_RTE_RES_WEST, CLS_RTE_SOURCE_CODE_TXTAREA, getIndex, hasClass, getDropDownValue, isIDevice, getFormattedFontSize, pageYOffset, getTooltipText, getTooltipTextDropdownItems, getQuickToolbarTooltipText, setToolbarStatus, getCollection, getTBarItemsIndex, updateUndoRedoStatus, dispatchEvent, parseHtml, getTextNodesUnder, toObjectLowerCase, getEditValue, updateTextNode, getDefaultValue, isEditableValueEmpty, decode, sanitizeHelper, convertToBlob, getLocaleFontFormat, updateDropDownFontFormatLocale, ServiceLocator, RendererFactory, EditorManager, IMAGE, AUDIO, VIDEO, TABLE, LINK, INSERT_ROW, INSERT_COLUMN, DELETEROW, DELETECOLUMN, REMOVETABLE, TABLEHEADER, TABLE_VERTICAL_ALIGN, TABLE_MERGE, TABLE_VERTICAL_SPLIT, TABLE_HORIZONTAL_SPLIT, TABLE_MOVE, ALIGNMENT_TYPE, INDENT_TYPE, DEFAULT_TAG, BLOCK_TAGS, IGNORE_BLOCK_TAGS, TABLE_BLOCK_TAGS, SELECTION_TYPE, INSERTHTML_TYPE, INSERT_TEXT_TYPE, CLEAR_TYPE, SELF_CLOSING_TAGS, PASTE_SOURCE, CLASS_IMAGE_RIGHT, CLASS_IMAGE_LEFT, CLASS_IMAGE_CENTER, CLASS_VIDEO_RIGHT, CLASS_VIDEO_LEFT, CLASS_VIDEO_CENTER, CLASS_IMAGE_BREAK, CLASS_AUDIO_BREAK, CLASS_VIDEO_BREAK, CLASS_CAPTION, CLASS_RTE_CAPTION, CLASS_CAPTION_INLINE, CLASS_IMAGE_INLINE, CLASS_AUDIO_INLINE, CLASS_CLICK_ELEM, CLASS_VIDEO_CLICK_ELEM, CLASS_AUDIO, CLASS_VIDEO, CLASS_AUDIO_WRAP, CLASS_VIDEO_WRAP, CLASS_EMBED_VIDEO_WRAP, CLASS_AUDIO_FOCUS, CLASS_VIDEO_FOCUS, CLASS_VIDEO_INLINE, Lists, markerClassName, DOMNode, Alignments, Indents, Formats, LinkCommand, InsertMethods, InsertTextExec, InsertHtmlExec, InsertHtml, IsFormatted, MsWordPaste, NodeCutter, ImageCommand, AudioCommand, VideoCommand, SelectionCommands, SelectionBasedExec, ClearFormatExec, UndoRedoManager, TableCommand, statusCollection, ToolbarStatus, FormatPainterActions, EmojiPickerAction, NodeSelection, MarkdownParser, LISTS_COMMAND, selectionCommand, LINK_COMMAND, CLEAR_COMMAND, MD_TABLE, INSERT_TEXT_COMMAND, ClearFormat, MDLists, MDFormats, MarkdownSelection, UndoRedoCommands, MDSelectionFormats, MDLink, MDTable, markdownFormatTags, markdownSelectionTags, markdownListsTags, htmlKeyConfig, markdownKeyConfig, pasteCleanupGroupingTags, listConversionFilters, selfClosingTags, KEY_DOWN, ACTION, FORMAT_TYPE, KEY_DOWN_HANDLER, LIST_TYPE, KEY_UP_HANDLER, KEY_UP, MODEL_CHANGED_PLUGIN, MODEL_CHANGED, MS_WORD_CLEANUP_PLUGIN, MS_WORD_CLEANUP, ON_BEGIN, SPACE_ACTION, FORMAT_PAINTER_ACTIONS, EMOJI_PICKER_ACTIONS, MOUSE_DOWN };
35803
35987
  //# sourceMappingURL=ej2-richtexteditor.es2015.js.map