@syncfusion/ej2-richtexteditor 25.1.35 → 25.1.38

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 (61) 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 +71 -50
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +71 -50
  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 +10 -10
  13. package/src/editor-manager/plugin/dom-node.js +2 -1
  14. package/src/editor-manager/plugin/inserthtml.js +16 -19
  15. package/src/editor-manager/plugin/lists.js +31 -11
  16. package/src/editor-manager/plugin/ms-word-clean-up.js +2 -2
  17. package/src/editor-manager/plugin/selection-commands.js +4 -0
  18. package/src/rich-text-editor/actions/html-editor.js +0 -3
  19. package/src/rich-text-editor/actions/quick-toolbar.js +4 -0
  20. package/src/rich-text-editor/base/rich-text-editor.js +2 -4
  21. package/src/rich-text-editor/renderer/toolbar-renderer.js +10 -10
  22. package/styles/bootstrap-dark.css +14 -7
  23. package/styles/bootstrap.css +7 -3
  24. package/styles/bootstrap4.css +4 -0
  25. package/styles/bootstrap5-dark.css +4 -0
  26. package/styles/bootstrap5.css +4 -0
  27. package/styles/fabric-dark.css +4 -0
  28. package/styles/fabric.css +4 -0
  29. package/styles/fluent-dark.css +21 -5
  30. package/styles/fluent.css +21 -5
  31. package/styles/highcontrast-light.css +4 -0
  32. package/styles/highcontrast.css +4 -0
  33. package/styles/material-dark.css +5 -1
  34. package/styles/material.css +5 -1
  35. package/styles/material3-dark.css +4 -0
  36. package/styles/material3.css +4 -0
  37. package/styles/rich-text-editor/_bootstrap-dark-definition.scss +4 -4
  38. package/styles/rich-text-editor/_bootstrap-definition.scss +2 -2
  39. package/styles/rich-text-editor/_fluent-definition.scss +5 -5
  40. package/styles/rich-text-editor/_layout.scss +7 -7
  41. package/styles/rich-text-editor/_tailwind-definition.scss +5 -5
  42. package/styles/rich-text-editor/_theme.scss +21 -0
  43. package/styles/rich-text-editor/bootstrap-dark.css +14 -7
  44. package/styles/rich-text-editor/bootstrap.css +7 -3
  45. package/styles/rich-text-editor/bootstrap4.css +4 -0
  46. package/styles/rich-text-editor/bootstrap5-dark.css +4 -0
  47. package/styles/rich-text-editor/bootstrap5.css +4 -0
  48. package/styles/rich-text-editor/fabric-dark.css +4 -0
  49. package/styles/rich-text-editor/fabric.css +4 -0
  50. package/styles/rich-text-editor/fluent-dark.css +21 -5
  51. package/styles/rich-text-editor/fluent.css +21 -5
  52. package/styles/rich-text-editor/highcontrast-light.css +4 -0
  53. package/styles/rich-text-editor/highcontrast.css +4 -0
  54. package/styles/rich-text-editor/material-dark.css +5 -1
  55. package/styles/rich-text-editor/material.css +5 -1
  56. package/styles/rich-text-editor/material3-dark.css +4 -0
  57. package/styles/rich-text-editor/material3.css +4 -0
  58. package/styles/rich-text-editor/tailwind-dark.css +13 -13
  59. package/styles/rich-text-editor/tailwind.css +13 -13
  60. package/styles/tailwind-dark.css +13 -13
  61. package/styles/tailwind.css +13 -13
@@ -3944,9 +3944,11 @@ var ToolbarRenderer = /** @__PURE__ @class */ (function () {
3944
3944
  for (var index = 0; index < args.element.childNodes.length; index++) {
3945
3945
  if (currentListStyle === args.element.childNodes[index].innerHTML.split(' ').join('').toLocaleLowerCase()) {
3946
3946
  addClass([args.element.childNodes[index]], 'e-active');
3947
+ break;
3947
3948
  }
3948
- else if (currentListStyle === '') {
3949
+ else if (currentListStyle === '' && args.element.childNodes[index].innerHTML !== 'None') {
3949
3950
  addClass([args.element.childNodes[index]], 'e-active');
3951
+ break;
3950
3952
  }
3951
3953
  }
3952
3954
  }
@@ -4035,8 +4037,6 @@ var ToolbarRenderer = /** @__PURE__ @class */ (function () {
4035
4037
  target: colorPicker.element.parentElement, cssClass: css,
4036
4038
  enablePersistence: this.parent.enablePersistence, enableRtl: this.parent.enableRtl,
4037
4039
  beforeOpen: function (dropDownArgs) {
4038
- colorPicker.inline = true;
4039
- colorPicker.dataBind();
4040
4040
  if (proxy.parent.readonly || !proxy.parent.enabled) {
4041
4041
  dropDownArgs.cancel = true;
4042
4042
  return;
@@ -4175,14 +4175,18 @@ var ToolbarRenderer = /** @__PURE__ @class */ (function () {
4175
4175
  var colorPicker = new ColorPicker({
4176
4176
  enablePersistence: this.parent.enablePersistence,
4177
4177
  enableRtl: this.parent.enableRtl,
4178
- inline: false,
4179
- value: '#fff',
4178
+ inline: true,
4179
+ value: null,
4180
+ cssClass: ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER) + ' ' + args.cssClass + ' ' + 'e-rte-picker-init',
4180
4181
  created: function () {
4181
4182
  var value = (item === 'backgroundcolor') ? proxy.parent.backgroundColor.default : proxy.parent.fontColor.default;
4182
- colorPicker.setProperties({ value: value });
4183
+ colorPicker.cssClass = ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER) + ' ' + args.cssClass;
4184
+ colorPicker.value = value;
4183
4185
  },
4184
4186
  mode: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.mode : proxy.parent.fontColor.mode),
4185
4187
  modeSwitcher: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.modeSwitcher : proxy.parent.fontColor.modeSwitcher),
4188
+ presetColors: (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode : this.parent.fontColor.colorCode,
4189
+ columns: (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns,
4186
4190
  beforeTileRender: function (args) {
4187
4191
  args.element.classList.add(CLS_COLOR_PALETTE);
4188
4192
  args.element.classList.add(CLS_CUSTOM_TILE);
@@ -4227,10 +4231,6 @@ var ToolbarRenderer = /** @__PURE__ @class */ (function () {
4227
4231
  }
4228
4232
  });
4229
4233
  colorPicker.isStringTemplate = true;
4230
- colorPicker.columns = (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns;
4231
- colorPicker.presetColors = (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode :
4232
- this.parent.fontColor.colorCode;
4233
- colorPicker.cssClass = ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER) + ' ' + args.cssClass;
4234
4234
  colorPicker.createElement = this.parent.createElement;
4235
4235
  colorPicker.appendTo(document.getElementById(args.target));
4236
4236
  return colorPicker;
@@ -7116,6 +7116,10 @@ var QuickToolbar = /** @__PURE__ @class */ (function () {
7116
7116
  };
7117
7117
  QuickToolbar.prototype.keyDownHandler = function (e) {
7118
7118
  var preventHide = e.args.altKey;
7119
+ if (this.parent.inlineMode.enable && e.args.metaKey && e.args.keyCode === 65) {
7120
+ this.showInlineQTBar(this.offsetX, this.offsetY, e.args.target);
7121
+ return;
7122
+ }
7119
7123
  if (!preventHide) {
7120
7124
  if ((this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice()))
7121
7125
  && !isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {
@@ -11949,7 +11953,8 @@ var DOMNode = /** @__PURE__ @class */ (function () {
11949
11953
  }
11950
11954
  }
11951
11955
  else {
11952
- if (start.tagName === 'IMG') {
11956
+ var tagName = !isNullOrUndefined(start.parentElement) ? start.parentElement.tagName.toLocaleLowerCase() : '';
11957
+ if (start.tagName === 'IMG' && tagName !== 'p' && tagName !== 'div') {
11953
11958
  var parNode = document.createElement('p');
11954
11959
  start.parentElement.insertBefore(parNode, start);
11955
11960
  parNode.appendChild(start);
@@ -12501,6 +12506,7 @@ var Lists = /** @__PURE__ @class */ (function () {
12501
12506
  endNode = endNode.nodeName === 'BR' ? endNode.parentElement : endNode;
12502
12507
  startNode = startNode.nodeName !== 'LI' && !isNullOrUndefined(startNode.closest('LI')) ? startNode.closest('LI') : startNode;
12503
12508
  endNode = endNode.nodeName !== 'LI' && endNode.nodeName !== '#text' && !isNullOrUndefined(endNode.closest('LI')) ? endNode.closest('LI') : endNode;
12509
+ var parentList = (range.startContainer.nodeName === '#text') ? range.startContainer.parentElement.closest('li') : range.startContainer.closest('li');
12504
12510
  if (((range.commonAncestorContainer.nodeName === 'OL' || range.commonAncestorContainer.nodeName === 'UL' || range.commonAncestorContainer.nodeName === 'LI') &&
12505
12511
  isNullOrUndefined(endNode.nextElementSibling) && endNode.textContent.length === range.endOffset &&
12506
12512
  isNullOrUndefined(startNode.previousElementSibling) && range.startOffset === 0) ||
@@ -12517,6 +12523,12 @@ var Lists = /** @__PURE__ @class */ (function () {
12517
12523
  }
12518
12524
  e.event.preventDefault();
12519
12525
  }
12526
+ else if (!isNullOrUndefined(parentList) && parentList.textContent === range.startContainer.textContent && parentList.closest('li').previousElementSibling === null) {
12527
+ range.deleteContents();
12528
+ this.parent.editableElement.querySelectorAll('li:empty').forEach(function (e) { return e.remove(); });
12529
+ this.parent.editableElement.querySelectorAll('ol:empty').forEach(function (e) { return e.remove(); });
12530
+ e.event.preventDefault();
12531
+ }
12520
12532
  };
12521
12533
  Lists.prototype.onKeyUp = function () {
12522
12534
  if (!isNullOrUndefined(this.commonLIParent) && !isNullOrUndefined(this.commonLIParent.querySelector('.removeList'))) {
@@ -12556,7 +12568,7 @@ var Lists = /** @__PURE__ @class */ (function () {
12556
12568
  if (e.event.which === 8) {
12557
12569
  this.backspaceList(e);
12558
12570
  }
12559
- if (e.event.which === 46 && e.event.action === 'delete') {
12571
+ if ((e.event.which === 46 && e.event.action === 'delete') || (e.event.which === 88 && e.event.action === 'cut')) {
12560
12572
  var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);
12561
12573
  var commonAncestor = range.commonAncestorContainer;
12562
12574
  var startEle = range.startContainer;
@@ -13028,8 +13040,17 @@ var Lists = /** @__PURE__ @class */ (function () {
13028
13040
  };
13029
13041
  Lists.prototype.cleanNode = function () {
13030
13042
  var liParents = this.parent.editableElement.querySelectorAll('ol + ol, ul + ul');
13043
+ var listStyleType;
13044
+ var firstNodeOL;
13031
13045
  for (var c = 0; c < liParents.length; c++) {
13032
13046
  var node = liParents[c];
13047
+ var toFindtopOlUl = true;
13048
+ if (toFindtopOlUl && (liParents[c].parentElement.parentElement.nodeName === 'OL' || liParents[c].parentElement.parentElement.nodeName === 'UL')) {
13049
+ toFindtopOlUl = false;
13050
+ var preElement = liParents[c].parentElement.parentElement;
13051
+ listStyleType = preElement.style.listStyleType;
13052
+ firstNodeOL = node.previousElementSibling;
13053
+ }
13033
13054
  if (this.domNode.isList(node.previousElementSibling) &&
13034
13055
  this.domNode.openTagString(node) === this.domNode.openTagString(node.previousElementSibling)) {
13035
13056
  var contentNodes = this.domNode.contents(node);
@@ -13044,6 +13065,9 @@ var Lists = /** @__PURE__ @class */ (function () {
13044
13065
  }
13045
13066
  }
13046
13067
  }
13068
+ if (firstNodeOL) {
13069
+ firstNodeOL.style.listStyleType = listStyleType;
13070
+ }
13047
13071
  };
13048
13072
  Lists.prototype.findUnSelected = function (temp, elements) {
13049
13073
  temp = temp.slice().reverse();
@@ -13134,17 +13158,18 @@ var Lists = /** @__PURE__ @class */ (function () {
13134
13158
  var wrapperclass = isNullOrUndefined(className) ? ' class="e-rte-wrap-inner"' :
13135
13159
  ' class="' + className + ' e-rte-wrap-inner"';
13136
13160
  var parentElement = parentNode;
13137
- if (!isNullOrUndefined(parentElement.style.listStyleType)) {
13138
- parentNode.style.removeProperty("list-style-type");
13139
- }
13140
- if (!isNullOrUndefined(parentElement.style.listStyleImage)) {
13141
- parentNode.style.removeProperty("list-style-image");
13142
- }
13143
- if (parentElement.style.length === 0) {
13144
- parentNode.removeAttribute("style");
13161
+ if (elements.length === parentElement.querySelectorAll('li').length) {
13162
+ if (!isNullOrUndefined(parentElement.style.listStyleType)) {
13163
+ parentNode.style.removeProperty('list-style-type');
13164
+ }
13165
+ if (!isNullOrUndefined(parentElement.style.listStyleImage)) {
13166
+ parentNode.style.removeProperty('list-style-image');
13167
+ }
13168
+ if (parentElement.style.length === 0) {
13169
+ parentNode.removeAttribute('style');
13170
+ }
13145
13171
  }
13146
- var wrapper = '<' + DEFAULT_TAG + wrapperclass +
13147
- this.domNode.attributes(parentElement) + '></' + DEFAULT_TAG + '>';
13172
+ var wrapper = '<' + DEFAULT_TAG + wrapperclass + '></' + DEFAULT_TAG + '>';
13148
13173
  if (e.enterAction !== 'BR') {
13149
13174
  this.domNode.wrapInner(element, this.domNode.parseHTMLFragment(wrapper));
13150
13175
  }
@@ -14105,25 +14130,22 @@ var InsertHtml = /** @__PURE__ @class */ (function () {
14105
14130
  TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) !== -1))
14106
14131
  || (node.nodeName.toLowerCase() === 'table' && closestParentNode &&
14107
14132
  TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) === -1))) {
14108
- if (isCollapsed) {
14109
- preNode = nodeCutter.SplitNode(range, closestParentNode, true);
14110
- }
14111
- else {
14112
- preNode = nodeCutter.SplitNode(range, closestParentNode, false);
14113
- }
14114
- sibNode = isNullOrUndefined(preNode.previousSibling) ? preNode.parentNode.previousSibling : preNode.previousSibling;
14115
- if (nodes.length === 1) {
14116
- nodeSelection.setSelectionContents(docElement, preNode);
14117
- range = nodeSelection.getRange(docElement);
14118
- isSingleNode = true;
14119
- }
14120
- else {
14121
- lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1].parentElement);
14122
- lasNode = isNullOrUndefined(lasNode) ? preNode : lasNode;
14123
- nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?
14124
- lasNode.textContent.length : lasNode.childNodes.length);
14125
- range = nodeSelection.getRange(docElement);
14126
- isSingleNode = false;
14133
+ preNode = nodeCutter.GetSpliceNode(range, closestParentNode);
14134
+ if (!isNullOrUndefined(preNode)) {
14135
+ sibNode = isNullOrUndefined(preNode.previousSibling) ? preNode.parentNode.previousSibling : preNode.previousSibling;
14136
+ if (nodes.length === 1) {
14137
+ nodeSelection.setSelectionContents(docElement, preNode);
14138
+ range = nodeSelection.getRange(docElement);
14139
+ isSingleNode = true;
14140
+ }
14141
+ else {
14142
+ lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1].parentElement);
14143
+ lasNode = isNullOrUndefined(lasNode) ? preNode : lasNode;
14144
+ nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?
14145
+ lasNode.textContent.length : lasNode.childNodes.length);
14146
+ range = nodeSelection.getRange(docElement);
14147
+ isSingleNode = false;
14148
+ }
14127
14149
  }
14128
14150
  }
14129
14151
  var containsBlockNode = false;
@@ -17266,11 +17288,15 @@ var SelectionCommands = /** @__PURE__ @class */ (function () {
17266
17288
  && range.endOffset === range.startContainer.length)) {
17267
17289
  var nodeIndex = [];
17268
17290
  var cloneNode = nodes[index];
17291
+ var clonedElement = cloneNode;
17269
17292
  do {
17270
17293
  nodeIndex.push(domSelection.getIndex(cloneNode));
17271
17294
  cloneNode = cloneNode.parentNode;
17272
17295
  } while (cloneNode && (cloneNode !== formatNode));
17273
17296
  if (nodes[index].nodeName !== 'BR') {
17297
+ if (clonedElement.nodeName === '#text' && clonedElement.textContent.includes('\u200B')) {
17298
+ clonedElement.remove();
17299
+ }
17274
17300
  cloneNode = splitNode = (isCursor && (formatNode.textContent.length - 1) === range.startOffset) ?
17275
17301
  nodeCutter.SplitNode(range, formatNode, true)
17276
17302
  : nodeCutter.GetSpliceNode(range, formatNode);
@@ -18598,7 +18624,7 @@ var MsWordPaste = /** @__PURE__ @class */ (function () {
18598
18624
  'x', 'xi', 'xii', 'xiii', 'xiv', 'xv', 'xvi', 'xvii', 'xviii', 'xix', 'xx'];
18599
18625
  this.lowerGreekNumber = ['α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ',
18600
18626
  'μ', 'ν', 'ξ', 'ο', 'π', 'ρ', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω'];
18601
- this.removableElements = ['o:p', 'style'];
18627
+ this.removableElements = ['o:p', 'style', 'w:sdt'];
18602
18628
  this.listContents = [];
18603
18629
  this.cropImageDimensions = [];
18604
18630
  this.parent = parent;
@@ -18963,7 +18989,7 @@ var MsWordPaste = /** @__PURE__ @class */ (function () {
18963
18989
  var innerElement = elm.innerHTML;
18964
18990
  for (var i = 0; i < this.removableElements.length; i++) {
18965
18991
  // eslint-disable-next-line security/detect-non-literal-regexp
18966
- var regExpStartElem = new RegExp('<' + this.removableElements[i] + '>', 'g');
18992
+ var regExpStartElem = new RegExp('<' + this.removableElements[i] + '\\s*[^>]*>', 'g');
18967
18993
  // eslint-disable-next-line security/detect-non-literal-regexp
18968
18994
  var regExpEndElem = new RegExp('</' + this.removableElements[i] + '>', 'g');
18969
18995
  innerElement = innerElement.replace(regExpStartElem, '');
@@ -21514,9 +21540,6 @@ var HtmlEditor = /** @__PURE__ @class */ (function () {
21514
21540
  };
21515
21541
  HtmlEditor.prototype.onSelectionRestore = function (e) {
21516
21542
  this.parent.isBlur = false;
21517
- if (isNullOrUndefined(this.saveSelection) || isNullOrUndefined(closest(this.saveSelection.range.startContainer.parentElement, ".e-img-caption")) ? true : !(closest(this.saveSelection.range.startContainer.parentElement, ".e-img-caption").getAttribute("contenteditable") == "false")) {
21518
- this.contentRenderer.getEditPanel().focus();
21519
- }
21520
21543
  if (isNullOrUndefined(e.items) || e.items) {
21521
21544
  this.saveSelection.restore();
21522
21545
  }
@@ -36202,10 +36225,8 @@ var RichTextEditor = /** @__PURE__ @class */ (function (_super) {
36202
36225
  }, 0);
36203
36226
  }
36204
36227
  else if (this.iframeSettings.enable) {
36205
- var iframeElement_1 = this.element.querySelector('#' + this.getID() + '_rte-view');
36206
- setTimeout(function () {
36207
- _this.setAutoHeight(iframeElement_1);
36208
- }, 100);
36228
+ var iframeElement = this.element.querySelector('#' + this.getID() + '_rte-view');
36229
+ this.setAutoHeight(iframeElement);
36209
36230
  this.inputElement.style.overflow = 'hidden';
36210
36231
  }
36211
36232
  }