@syncfusion/ej2-richtexteditor 25.1.35 → 25.1.37

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 (53) hide show
  1. package/CHANGELOG.md +14 -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 +28 -15
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +29 -16
  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 +9 -9
  13. package/src/editor-manager/plugin/dom-node.js +2 -1
  14. package/src/editor-manager/plugin/lists.js +12 -0
  15. package/src/editor-manager/plugin/ms-word-clean-up.js +2 -2
  16. package/src/editor-manager/plugin/selection-commands.js +4 -0
  17. package/src/rich-text-editor/base/rich-text-editor.js +2 -4
  18. package/src/rich-text-editor/renderer/toolbar-renderer.js +7 -9
  19. package/styles/bootstrap-dark.css +4 -0
  20. package/styles/bootstrap.css +4 -0
  21. package/styles/bootstrap4.css +4 -0
  22. package/styles/bootstrap5-dark.css +4 -0
  23. package/styles/bootstrap5.css +4 -0
  24. package/styles/fabric-dark.css +4 -0
  25. package/styles/fabric.css +4 -0
  26. package/styles/fluent-dark.css +4 -0
  27. package/styles/fluent.css +4 -0
  28. package/styles/highcontrast-light.css +4 -0
  29. package/styles/highcontrast.css +4 -0
  30. package/styles/material-dark.css +4 -0
  31. package/styles/material.css +4 -0
  32. package/styles/material3-dark.css +4 -0
  33. package/styles/material3.css +4 -0
  34. package/styles/rich-text-editor/_layout.scss +4 -4
  35. package/styles/rich-text-editor/bootstrap-dark.css +4 -0
  36. package/styles/rich-text-editor/bootstrap.css +4 -0
  37. package/styles/rich-text-editor/bootstrap4.css +4 -0
  38. package/styles/rich-text-editor/bootstrap5-dark.css +4 -0
  39. package/styles/rich-text-editor/bootstrap5.css +4 -0
  40. package/styles/rich-text-editor/fabric-dark.css +4 -0
  41. package/styles/rich-text-editor/fabric.css +4 -0
  42. package/styles/rich-text-editor/fluent-dark.css +4 -0
  43. package/styles/rich-text-editor/fluent.css +4 -0
  44. package/styles/rich-text-editor/highcontrast-light.css +4 -0
  45. package/styles/rich-text-editor/highcontrast.css +4 -0
  46. package/styles/rich-text-editor/material-dark.css +4 -0
  47. package/styles/rich-text-editor/material.css +4 -0
  48. package/styles/rich-text-editor/material3-dark.css +4 -0
  49. package/styles/rich-text-editor/material3.css +4 -0
  50. package/styles/rich-text-editor/tailwind-dark.css +4 -4
  51. package/styles/rich-text-editor/tailwind.css +4 -4
  52. package/styles/tailwind-dark.css +4 -4
  53. package/styles/tailwind.css +4 -4
@@ -4035,8 +4035,6 @@ class ToolbarRenderer {
4035
4035
  target: colorPicker.element.parentElement, cssClass: css,
4036
4036
  enablePersistence: this.parent.enablePersistence, enableRtl: this.parent.enableRtl,
4037
4037
  beforeOpen: (dropDownArgs) => {
4038
- colorPicker.inline = true;
4039
- colorPicker.dataBind();
4040
4038
  if (proxy.parent.readonly || !proxy.parent.enabled) {
4041
4039
  dropDownArgs.cancel = true;
4042
4040
  return;
@@ -4174,14 +4172,18 @@ class ToolbarRenderer {
4174
4172
  const colorPicker = new ColorPicker({
4175
4173
  enablePersistence: this.parent.enablePersistence,
4176
4174
  enableRtl: this.parent.enableRtl,
4177
- inline: false,
4178
- value: '#fff',
4175
+ inline: true,
4176
+ value: null,
4177
+ cssClass: ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER) + ' ' + args.cssClass + ' ' + 'e-rte-picker-init',
4179
4178
  created: () => {
4180
4179
  const value = (item === 'backgroundcolor') ? proxy.parent.backgroundColor.default : proxy.parent.fontColor.default;
4181
- colorPicker.setProperties({ value: value });
4180
+ colorPicker.cssClass = ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER) + ' ' + args.cssClass;
4181
+ colorPicker.value = value;
4182
4182
  },
4183
4183
  mode: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.mode : proxy.parent.fontColor.mode),
4184
4184
  modeSwitcher: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.modeSwitcher : proxy.parent.fontColor.modeSwitcher),
4185
+ presetColors: (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode : this.parent.fontColor.colorCode,
4186
+ columns: (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns,
4185
4187
  beforeTileRender: (args) => {
4186
4188
  args.element.classList.add(CLS_COLOR_PALETTE);
4187
4189
  args.element.classList.add(CLS_CUSTOM_TILE);
@@ -4226,10 +4228,6 @@ class ToolbarRenderer {
4226
4228
  }
4227
4229
  });
4228
4230
  colorPicker.isStringTemplate = true;
4229
- colorPicker.columns = (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns;
4230
- colorPicker.presetColors = (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode :
4231
- this.parent.fontColor.colorCode;
4232
- colorPicker.cssClass = ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER) + ' ' + args.cssClass;
4233
4231
  colorPicker.createElement = this.parent.createElement;
4234
4232
  colorPicker.appendTo(document.getElementById(args.target));
4235
4233
  return colorPicker;
@@ -11857,7 +11855,8 @@ class DOMNode {
11857
11855
  }
11858
11856
  }
11859
11857
  else {
11860
- if (start.tagName === 'IMG') {
11858
+ let tagName = !isNullOrUndefined(start.parentElement) ? start.parentElement.tagName.toLocaleLowerCase() : '';
11859
+ if (start.tagName === 'IMG' && tagName !== 'p' && tagName !== 'div') {
11861
11860
  const parNode = document.createElement('p');
11862
11861
  start.parentElement.insertBefore(parNode, start);
11863
11862
  parNode.appendChild(start);
@@ -12935,8 +12934,17 @@ class Lists {
12935
12934
  }
12936
12935
  cleanNode() {
12937
12936
  const liParents = this.parent.editableElement.querySelectorAll('ol + ol, ul + ul');
12937
+ let listStyleType;
12938
+ let firstNodeOL;
12938
12939
  for (let c = 0; c < liParents.length; c++) {
12939
12940
  const node = liParents[c];
12941
+ let toFindtopOlUl = true;
12942
+ if (toFindtopOlUl && (liParents[c].parentElement.parentElement.nodeName === 'OL' || liParents[c].parentElement.parentElement.nodeName === 'UL')) {
12943
+ toFindtopOlUl = false;
12944
+ const preElement = liParents[c].parentElement.parentElement;
12945
+ listStyleType = preElement.style.listStyleType;
12946
+ firstNodeOL = node.previousElementSibling;
12947
+ }
12940
12948
  if (this.domNode.isList(node.previousElementSibling) &&
12941
12949
  this.domNode.openTagString(node) === this.domNode.openTagString(node.previousElementSibling)) {
12942
12950
  const contentNodes = this.domNode.contents(node);
@@ -12951,6 +12959,9 @@ class Lists {
12951
12959
  }
12952
12960
  }
12953
12961
  }
12962
+ if (firstNodeOL) {
12963
+ firstNodeOL.style.listStyleType = listStyleType;
12964
+ }
12954
12965
  }
12955
12966
  findUnSelected(temp, elements) {
12956
12967
  temp = temp.slice().reverse();
@@ -17147,11 +17158,15 @@ class SelectionCommands {
17147
17158
  && range.endOffset === range.startContainer.length)) {
17148
17159
  const nodeIndex = [];
17149
17160
  let cloneNode = nodes[index];
17161
+ const clonedElement = cloneNode;
17150
17162
  do {
17151
17163
  nodeIndex.push(domSelection.getIndex(cloneNode));
17152
17164
  cloneNode = cloneNode.parentNode;
17153
17165
  } while (cloneNode && (cloneNode !== formatNode));
17154
17166
  if (nodes[index].nodeName !== 'BR') {
17167
+ if (clonedElement.nodeName === '#text' && clonedElement.textContent.includes('\u200B')) {
17168
+ clonedElement.remove();
17169
+ }
17155
17170
  cloneNode = splitNode = (isCursor && (formatNode.textContent.length - 1) === range.startOffset) ?
17156
17171
  nodeCutter.SplitNode(range, formatNode, true)
17157
17172
  : nodeCutter.GetSpliceNode(range, formatNode);
@@ -18470,7 +18485,7 @@ class MsWordPaste {
18470
18485
  'x', 'xi', 'xii', 'xiii', 'xiv', 'xv', 'xvi', 'xvii', 'xviii', 'xix', 'xx'];
18471
18486
  this.lowerGreekNumber = ['α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ',
18472
18487
  'μ', 'ν', 'ξ', 'ο', 'π', 'ρ', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω'];
18473
- this.removableElements = ['o:p', 'style'];
18488
+ this.removableElements = ['o:p', 'style', 'w:sdt'];
18474
18489
  this.listContents = [];
18475
18490
  this.cropImageDimensions = [];
18476
18491
  this.parent = parent;
@@ -18835,7 +18850,7 @@ class MsWordPaste {
18835
18850
  let innerElement = elm.innerHTML;
18836
18851
  for (let i = 0; i < this.removableElements.length; i++) {
18837
18852
  // eslint-disable-next-line security/detect-non-literal-regexp
18838
- const regExpStartElem = new RegExp('<' + this.removableElements[i] + '>', 'g');
18853
+ const regExpStartElem = new RegExp('<' + this.removableElements[i] + '\\s*[^>]*>', 'g');
18839
18854
  // eslint-disable-next-line security/detect-non-literal-regexp
18840
18855
  const regExpEndElem = new RegExp('</' + this.removableElements[i] + '>', 'g');
18841
18856
  innerElement = innerElement.replace(regExpStartElem, '');
@@ -35883,9 +35898,7 @@ let RichTextEditor = class RichTextEditor extends Component {
35883
35898
  }
35884
35899
  else if (this.iframeSettings.enable) {
35885
35900
  const iframeElement = this.element.querySelector('#' + this.getID() + '_rte-view');
35886
- setTimeout(() => {
35887
- this.setAutoHeight(iframeElement);
35888
- }, 100);
35901
+ this.setAutoHeight(iframeElement);
35889
35902
  this.inputElement.style.overflow = 'hidden';
35890
35903
  }
35891
35904
  }