@syncfusion/ej2-richtexteditor 24.2.8 → 25.1.35

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 (134) hide show
  1. package/CHANGELOG.md +34 -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 +955 -495
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +939 -484
  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 +13 -13
  13. package/src/common/config.d.ts +7 -0
  14. package/src/common/config.js +11 -0
  15. package/src/common/interface.d.ts +12 -0
  16. package/src/common/types.d.ts +6 -0
  17. package/src/editor-manager/plugin/dom-node.d.ts +5 -1
  18. package/src/editor-manager/plugin/dom-node.js +161 -12
  19. package/src/editor-manager/plugin/formats.js +1 -1
  20. package/src/editor-manager/plugin/image.js +12 -16
  21. package/src/editor-manager/plugin/inserthtml.d.ts +1 -0
  22. package/src/editor-manager/plugin/inserthtml.js +40 -1
  23. package/src/editor-manager/plugin/link.js +1 -1
  24. package/src/editor-manager/plugin/lists.js +24 -2
  25. package/src/editor-manager/plugin/ms-word-clean-up.d.ts +1 -0
  26. package/src/editor-manager/plugin/ms-word-clean-up.js +87 -58
  27. package/src/editor-manager/plugin/selection-commands.js +52 -3
  28. package/src/editor-manager/plugin/table.js +18 -3
  29. package/src/editor-manager/plugin/toolbar-status.d.ts +2 -2
  30. package/src/editor-manager/plugin/toolbar-status.js +17 -9
  31. package/src/rich-text-editor/actions/base-quick-toolbar.d.ts +3 -3
  32. package/src/rich-text-editor/actions/base-quick-toolbar.js +44 -10
  33. package/src/rich-text-editor/actions/base-toolbar.js +24 -30
  34. package/src/rich-text-editor/actions/dropdown-buttons.js +4 -4
  35. package/src/rich-text-editor/actions/emoji-picker.js +2 -2
  36. package/src/rich-text-editor/actions/enter-key.js +4 -3
  37. package/src/rich-text-editor/actions/full-screen.js +2 -2
  38. package/src/rich-text-editor/actions/html-editor.d.ts +0 -2
  39. package/src/rich-text-editor/actions/html-editor.js +18 -31
  40. package/src/rich-text-editor/actions/markdown-editor.js +3 -1
  41. package/src/rich-text-editor/actions/paste-clean-up.d.ts +1 -0
  42. package/src/rich-text-editor/actions/paste-clean-up.js +23 -0
  43. package/src/rich-text-editor/actions/quick-toolbar.d.ts +7 -0
  44. package/src/rich-text-editor/actions/quick-toolbar.js +24 -9
  45. package/src/rich-text-editor/actions/resize.js +2 -1
  46. package/src/rich-text-editor/actions/toolbar.d.ts +0 -2
  47. package/src/rich-text-editor/actions/toolbar.js +13 -85
  48. package/src/rich-text-editor/base/classes.d.ts +0 -5
  49. package/src/rich-text-editor/base/classes.js +0 -5
  50. package/src/rich-text-editor/base/constant.d.ts +5 -0
  51. package/src/rich-text-editor/base/constant.js +5 -0
  52. package/src/rich-text-editor/base/interface.d.ts +36 -2
  53. package/src/rich-text-editor/base/rich-text-editor-model.d.ts +2 -2
  54. package/src/rich-text-editor/base/rich-text-editor.d.ts +4 -3
  55. package/src/rich-text-editor/base/rich-text-editor.js +81 -58
  56. package/src/rich-text-editor/base/util.js +8 -2
  57. package/src/rich-text-editor/models/default-locale.js +15 -12
  58. package/src/rich-text-editor/models/toolbar-settings-model.d.ts +1 -1
  59. package/src/rich-text-editor/models/toolbar-settings.d.ts +1 -1
  60. package/src/rich-text-editor/models/toolbar-settings.js +1 -1
  61. package/src/rich-text-editor/renderer/iframe-content-renderer.js +2 -1
  62. package/src/rich-text-editor/renderer/image-module.d.ts +8 -1
  63. package/src/rich-text-editor/renderer/image-module.js +148 -155
  64. package/src/rich-text-editor/renderer/table-module.d.ts +2 -0
  65. package/src/rich-text-editor/renderer/table-module.js +71 -8
  66. package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +3 -0
  67. package/src/rich-text-editor/renderer/toolbar-renderer.js +61 -2
  68. package/src/rich-text-editor/renderer/video-module.js +7 -4
  69. package/src/rich-text-editor/renderer/view-source.js +7 -4
  70. package/styles/bootstrap-dark.css +57 -17
  71. package/styles/bootstrap.css +58 -18
  72. package/styles/bootstrap4.css +58 -18
  73. package/styles/bootstrap5-dark.css +64 -17
  74. package/styles/bootstrap5.css +64 -17
  75. package/styles/fabric-dark.css +57 -17
  76. package/styles/fabric.css +58 -18
  77. package/styles/fluent-dark.css +57 -17
  78. package/styles/fluent.css +57 -17
  79. package/styles/highcontrast-light.css +57 -17
  80. package/styles/highcontrast.css +58 -18
  81. package/styles/material-dark.css +57 -17
  82. package/styles/material.css +57 -17
  83. package/styles/material3-dark.css +59 -19
  84. package/styles/material3.css +59 -19
  85. package/styles/rich-text-editor/_bds-definition.scss +279 -0
  86. package/styles/rich-text-editor/_bootstrap-dark-definition.scss +1 -0
  87. package/styles/rich-text-editor/_bootstrap-definition.scss +1 -1
  88. package/styles/rich-text-editor/_bootstrap4-definition.scss +3 -2
  89. package/styles/rich-text-editor/_bootstrap5-definition.scss +1 -0
  90. package/styles/rich-text-editor/_fabric-dark-definition.scss +1 -0
  91. package/styles/rich-text-editor/_fabric-definition.scss +2 -1
  92. package/styles/rich-text-editor/_fluent-definition.scss +1 -0
  93. package/styles/rich-text-editor/_fusionnew-definition.scss +1 -0
  94. package/styles/rich-text-editor/_highcontrast-definition.scss +2 -1
  95. package/styles/rich-text-editor/_highcontrast-light-definition.scss +1 -0
  96. package/styles/rich-text-editor/_layout.scss +47 -13
  97. package/styles/rich-text-editor/_material-dark-definition.scss +1 -0
  98. package/styles/rich-text-editor/_material-definition.scss +1 -0
  99. package/styles/rich-text-editor/_material3-definition.scss +1 -0
  100. package/styles/rich-text-editor/_tailwind-definition.scss +4 -3
  101. package/styles/rich-text-editor/_theme.scss +18 -5
  102. package/styles/rich-text-editor/bootstrap-dark.css +57 -17
  103. package/styles/rich-text-editor/bootstrap.css +58 -18
  104. package/styles/rich-text-editor/bootstrap4.css +58 -18
  105. package/styles/rich-text-editor/bootstrap5-dark.css +64 -17
  106. package/styles/rich-text-editor/bootstrap5.css +64 -17
  107. package/styles/rich-text-editor/fabric-dark.css +57 -17
  108. package/styles/rich-text-editor/fabric.css +58 -18
  109. package/styles/rich-text-editor/fluent-dark.css +57 -17
  110. package/styles/rich-text-editor/fluent.css +57 -17
  111. package/styles/rich-text-editor/highcontrast-light.css +57 -17
  112. package/styles/rich-text-editor/highcontrast.css +58 -18
  113. package/styles/rich-text-editor/icons/_bds.scss +351 -0
  114. package/styles/rich-text-editor/icons/_bootstrap-dark.scss +7 -4
  115. package/styles/rich-text-editor/icons/_bootstrap.scss +7 -4
  116. package/styles/rich-text-editor/icons/_bootstrap4.scss +7 -4
  117. package/styles/rich-text-editor/icons/_bootstrap5.scss +7 -4
  118. package/styles/rich-text-editor/icons/_fabric-dark.scss +7 -4
  119. package/styles/rich-text-editor/icons/_fabric.scss +7 -4
  120. package/styles/rich-text-editor/icons/_fluent.scss +7 -4
  121. package/styles/rich-text-editor/icons/_highcontrast-light.scss +7 -4
  122. package/styles/rich-text-editor/icons/_highcontrast.scss +7 -4
  123. package/styles/rich-text-editor/icons/_material-dark.scss +7 -4
  124. package/styles/rich-text-editor/icons/_material.scss +7 -4
  125. package/styles/rich-text-editor/icons/_material3.scss +7 -4
  126. package/styles/rich-text-editor/icons/_tailwind.scss +7 -4
  127. package/styles/rich-text-editor/material-dark.css +57 -17
  128. package/styles/rich-text-editor/material.css +57 -17
  129. package/styles/rich-text-editor/material3-dark.css +59 -19
  130. package/styles/rich-text-editor/material3.css +59 -19
  131. package/styles/rich-text-editor/tailwind-dark.css +61 -21
  132. package/styles/rich-text-editor/tailwind.css +61 -21
  133. package/styles/tailwind-dark.css +61 -21
  134. package/styles/tailwind.css +61 -21
@@ -26,7 +26,7 @@ var DropDownButtons = /** @class */ (function () {
26
26
  addClass([args.element], item.cssClass);
27
27
  }
28
28
  if (item.command === 'Images' || item.command === 'Videos' || item.command === 'Audios' || item.command === 'Table') {
29
- args.element.setAttribute('title', getQuickToolbarTooltipText(item.text));
29
+ args.element.setAttribute('title', getQuickToolbarTooltipText(item.text) !== '' ? getQuickToolbarTooltipText(item.text) : item.text);
30
30
  }
31
31
  if (item.command === 'Alignments' || item.subCommand === 'JustifyLeft'
32
32
  || item.subCommand === 'JustifyRight' || item.subCommand === 'JustifyCenter') {
@@ -36,13 +36,13 @@ var DropDownButtons = /** @class */ (function () {
36
36
  args.element.setAttribute('title', getTooltipTextDropdownItems(item.subCommand.toLocaleLowerCase(), this.locator, formatsLocale));
37
37
  }
38
38
  if (item.command === 'Font') {
39
- args.element.setAttribute('title', getTooltipTextDropdownItems(item.value.toLocaleLowerCase(), this.locator, fontNameLocale));
39
+ args.element.setAttribute('title', getTooltipTextDropdownItems(item.text.toLocaleLowerCase(), this.locator, fontNameLocale) !== '' ? getTooltipTextDropdownItems(item.text.toLocaleLowerCase(), this.locator, fontNameLocale) : item.text);
40
40
  }
41
41
  if (item.subCommand === 'BulletFormatList') {
42
- args.element.setAttribute('title', getTooltipTextDropdownItems(item.value.toLocaleLowerCase(), this.locator, bulletFormatListLocale));
42
+ args.element.setAttribute('title', getTooltipTextDropdownItems(item.text.toLocaleLowerCase(), this.locator, bulletFormatListLocale) !== '' ? getTooltipTextDropdownItems(item.text.toLocaleLowerCase(), this.locator, bulletFormatListLocale) : item.text);
43
43
  }
44
44
  if (item.subCommand === 'NumberFormatList') {
45
- args.element.setAttribute('title', getTooltipTextDropdownItems(item.text.replace(/\s/g, '').toLocaleLowerCase(), this.locator, numberFormatListLocale));
45
+ args.element.setAttribute('title', (getTooltipTextDropdownItems(item.text.toLocaleLowerCase(), this.locator, numberFormatListLocale)) !== '' ? getTooltipTextDropdownItems(item.text.toLocaleLowerCase(), this.locator, numberFormatListLocale) : item.text);
46
46
  }
47
47
  if (item.subCommand === 'FontSize') {
48
48
  args.element.setAttribute('title', getTooltipTextDropdownItems(item.value.toLocaleLowerCase(), null, null, this.parent));
@@ -61,10 +61,10 @@ var EmojiPicker = /** @class */ (function () {
61
61
  }
62
62
  this.popDiv = this.parent.createElement('div', { className: 'e-rte-emojipicker-popup', id: this.parent.getID() + '_emojiPicker' });
63
63
  if (!isNOU(this.parent.getToolbar()) && !this.parent.inlineMode.enable) {
64
- this.parent.getToolbar().appendChild(this.popDiv);
64
+ this.parent.getToolbar().parentElement.appendChild(this.popDiv);
65
65
  }
66
66
  else if (this.parent.inlineMode.enable) {
67
- this.parent.inputElement.appendChild(this.popDiv);
67
+ this.parent.element.appendChild(this.popDiv);
68
68
  }
69
69
  EventHandler.add(this.popDiv, 'keydown', this.onKeyDown, this);
70
70
  EventHandler.add(this.popDiv, 'keyup', this.searchFilter, this);
@@ -50,7 +50,8 @@ var EnterKeyAction = /** @class */ (function () {
50
50
  isTableEnter = blockElement.tagName === 'TD' || blockElement.tagName === 'TBODY' ? false : true;
51
51
  }
52
52
  if (e.args.which === 13 && !e.args.ctrlKey && (!Browser.isDevice ? e.args.code === 'Enter' : e.args.key === 'Enter')) {
53
- if (isNOU(this.startNode.closest('LI, UL, OL')) && isNOU(this.endNode.closest('LI, UL, OL')) && isTableEnter &&
53
+ if (isNOU(this.startNode.closest('LI, UL, OL')) && isNOU(this.endNode.closest('LI, UL, OL')) &&
54
+ isNOU(this.startNode.closest('.e-img-inner')) && isTableEnter &&
54
55
  isNOU(this.startNode.closest('PRE')) && isNOU(this.endNode.closest('PRE'))) {
55
56
  var shiftKey_1 = e.args.shiftKey;
56
57
  var actionBeginArgs = {
@@ -485,10 +486,10 @@ var EnterKeyAction = /** @class */ (function () {
485
486
  }
486
487
  var previousBlockNode = this.parent.formatter.editorManager.domNode.blockNodes()[0].previousSibling;
487
488
  var nextBlockNode = this.parent.formatter.editorManager.domNode.blockNodes()[0].nextSibling;
488
- if (!isNOU(previousBlockNode) && previousBlockNode.hasAttribute('style') && previousBlockNode.nodeName !== 'TABLE') {
489
+ if (!isNOU(previousBlockNode) && previousBlockNode.nodeName !== '#text' && previousBlockNode.hasAttribute('style') && previousBlockNode.nodeName !== 'TABLE') {
489
490
  insertElem.setAttribute('style', previousBlockNode.getAttribute('style'));
490
491
  }
491
- if (isNOU(previousBlockNode) && !isNOU(nextBlockNode) && nextBlockNode.hasAttribute('style') && nextBlockNode.nodeName !== 'TABLE') {
492
+ if (isNOU(previousBlockNode) && !isNOU(nextBlockNode) && nextBlockNode.nodeName !== '#text' && nextBlockNode.hasAttribute('style') && nextBlockNode.nodeName !== 'TABLE') {
492
493
  insertElem.setAttribute('style', nextBlockNode.getAttribute('style'));
493
494
  }
494
495
  return insertElem;
@@ -46,7 +46,7 @@ var FullScreen = /** @class */ (function () {
46
46
  _this.parent.element.classList.add(classes.CLS_FULL_SCREEN);
47
47
  _this.toggleParentOverflow(true);
48
48
  var isExpand = _this.parent.element.querySelectorAll('.e-toolbar-extended.e-popup-open').length > 0 ? true : false;
49
- _this.parent.setContentHeight(null, isExpand);
49
+ _this.parent.setContentHeight('Maximize', isExpand);
50
50
  if (_this.parent.toolbarModule) {
51
51
  if (!_this.parent.getBaseToolbarObject().toolbarObj.items[0].properties) {
52
52
  _this.parent.getBaseToolbarObject().toolbarObj.removeItems(0);
@@ -98,7 +98,7 @@ var FullScreen = /** @class */ (function () {
98
98
  removeClass([elem[i]], ['e-rte-overflow']);
99
99
  }
100
100
  var isExpand = _this.parent.element.querySelectorAll('.e-toolbar-extended.e-popup-open').length > 0 ? true : false;
101
- _this.parent.setContentHeight(null, isExpand);
101
+ _this.parent.setContentHeight('Minimize', isExpand);
102
102
  if (_this.parent.toolbarModule) {
103
103
  if (!_this.parent.getBaseToolbarObject().toolbarObj.items[0].properties) {
104
104
  _this.parent.getBaseToolbarObject().toolbarObj.removeItems(0);
@@ -22,7 +22,6 @@ export declare class HtmlEditor {
22
22
  private saveSelection;
23
23
  xhtmlValidation: XhtmlValidation;
24
24
  private clickTimeout;
25
- private tooltipTargetEle;
26
25
  constructor(parent?: IRichTextEditor, serviceLocator?: ServiceLocator);
27
26
  /**
28
27
  * Destroys the Markdown.
@@ -59,7 +58,6 @@ export declare class HtmlEditor {
59
58
  private getRangeLiNode;
60
59
  private onPaste;
61
60
  private spaceLink;
62
- private mouseOutHandler;
63
61
  private onToolbarClick;
64
62
  private renderColorPicker;
65
63
  private instantiateRenderer;
@@ -1,5 +1,5 @@
1
1
  import * as events from '../base/constant';
2
- import { isNullOrUndefined, closest, attributes, removeClass, addClass, Browser, detach, EventHandler } from '@syncfusion/ej2-base';
2
+ import { isNullOrUndefined, closest, attributes, removeClass, addClass, Browser, detach } from '@syncfusion/ej2-base';
3
3
  import { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';
4
4
  import { HTMLFormatter } from '../formatter/html-formatter';
5
5
  import { RenderType } from '../base/enum';
@@ -425,9 +425,9 @@ var HtmlEditor = /** @class */ (function () {
425
425
  var liElement = this.getRangeLiNode(currentRange.startContainer);
426
426
  if (liElement.previousElementSibling && liElement.previousElementSibling.childElementCount > 0) {
427
427
  this.oldRangeElement = liElement.previousElementSibling.lastElementChild.nodeName === 'BR' ?
428
- liElement.previousElementSibling : liElement.previousElementSibling.lastElementChild;
428
+ liElement.previousElementSibling : liElement.previousElementSibling.lastChild;
429
429
  if (!isNOU(liElement.lastElementChild) && liElement.lastElementChild.nodeName !== 'BR' &&
430
- isNOU(liElement.lastElementChild.previousSibling)) {
430
+ isNOU(liElement.lastElementChild.previousSibling) && liElement.lastChild.nodeName !== "#text") {
431
431
  this.rangeElement = liElement.lastElementChild;
432
432
  isLiElement = true;
433
433
  }
@@ -452,7 +452,7 @@ var HtmlEditor = /** @class */ (function () {
452
452
  ? this.oldRangeElement.lastElementChild.lastElementChild :
453
453
  this.oldRangeElement.lastElementChild;
454
454
  }
455
- var lastNode = this.oldRangeElement.lastChild;
455
+ var lastNode = this.oldRangeElement.lastChild ? this.oldRangeElement.lastChild : this.oldRangeElement;
456
456
  while (lastNode.nodeType !== 3 && lastNode.nodeName !== '#text' &&
457
457
  lastNode.nodeName !== 'BR') {
458
458
  lastNode = lastNode.lastChild;
@@ -460,12 +460,17 @@ var HtmlEditor = /** @class */ (function () {
460
460
  this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(),
461
461
  // eslint-disable-next-line
462
462
  lastNode, lastNode.textContent.length);
463
- if (this.oldRangeElement.querySelectorAll('BR').length === 1) {
463
+ if (this.oldRangeElement.nodeName !== '#text' && this.oldRangeElement.querySelectorAll('BR').length === 1) {
464
464
  detach(this.oldRangeElement.querySelector('BR'));
465
465
  }
466
466
  if (!isNOU(this.rangeElement) && this.oldRangeElement !== this.rangeElement) {
467
467
  while (this.rangeElement.firstChild) {
468
- this.oldRangeElement.appendChild(this.rangeElement.childNodes[0]);
468
+ if (this.oldRangeElement.nodeName === '#text') {
469
+ this.oldRangeElement.parentElement.appendChild(this.rangeElement.childNodes[0]);
470
+ }
471
+ else {
472
+ this.oldRangeElement.appendChild(this.rangeElement.childNodes[0]);
473
+ }
469
474
  }
470
475
  // eslint-disable-next-line
471
476
  !isLiElement ? detach(this.rangeElement) : detach(this.rangeElement.parentElement);
@@ -502,7 +507,11 @@ var HtmlEditor = /** @class */ (function () {
502
507
  (!isNullOrUndefined(this.deleteRangeElement.nextElementSibling) && this.deleteRangeElement.nextElementSibling.tagName === 'TABLE'))) {
503
508
  return;
504
509
  }
505
- if (this.getCaretIndex(currentRange, this.deleteRangeElement) === this.deleteRangeElement.textContent.length) {
510
+ var isImgWithEmptyBlockNode = false;
511
+ if (this.deleteRangeElement.querySelectorAll('img').length > 0 && this.deleteRangeElement.textContent.trim() === '') {
512
+ isImgWithEmptyBlockNode = true;
513
+ }
514
+ if (this.getCaretIndex(currentRange, this.deleteRangeElement) === this.deleteRangeElement.textContent.length && !isImgWithEmptyBlockNode) {
506
515
  if (!isNullOrUndefined(liElement)) {
507
516
  if (isLiElement || !isNullOrUndefined(liElement.nextElementSibling)) {
508
517
  this.deleteOldRangeElement = this.getRangeElement(liElement.nextElementSibling);
@@ -694,19 +703,6 @@ var HtmlEditor = /** @class */ (function () {
694
703
  }, e, value);
695
704
  }
696
705
  };
697
- HtmlEditor.prototype.mouseOutHandler = function () {
698
- if (!isNOU(this.tooltipTargetEle)) {
699
- this.tooltipTargetEle.setAttribute('title', this.tooltipTargetEle.getAttribute('data-title'));
700
- }
701
- else {
702
- var currentDocument = this.parent.iframeSettings.enable ? this.parent.contentModule.getPanel().ownerDocument :
703
- this.parent.contentModule.getDocument();
704
- this.tooltipTargetEle = currentDocument.querySelector('[data-title]');
705
- this.tooltipTargetEle.setAttribute('title', this.tooltipTargetEle.getAttribute('data-title'));
706
- }
707
- this.tooltipTargetEle.removeAttribute('data-title');
708
- EventHandler.remove(this.tooltipTargetEle, 'mouseout', this.mouseOutHandler);
709
- };
710
706
  HtmlEditor.prototype.onToolbarClick = function (args) {
711
707
  var _this = this;
712
708
  var save;
@@ -714,17 +710,8 @@ var HtmlEditor = /** @class */ (function () {
714
710
  var selectParentEle;
715
711
  var item = args.item;
716
712
  var closestElement = closest(args.originalEvent.target, '.e-rte-quick-popup');
717
- var currentDocument = this.parent.iframeSettings.enable ? this.parent.contentModule.getPanel().ownerDocument :
718
- this.parent.contentModule.getDocument();
719
- this.tooltipTargetEle = closest(args.originalEvent.target, '[data-tooltip-id]');
720
- if (!isNOU(this.tooltipTargetEle) && this.parent.showTooltip && !isNOU(currentDocument.querySelector('.e-tooltip-wrap'))) {
721
- this.parent.notify(events.destroyTooltip, { args: event });
722
- if (!this.tooltipTargetEle.closest('.e-rte-quick-popup')) {
723
- this.tooltipTargetEle.setAttribute('data-title', this.tooltipTargetEle.getAttribute('title'));
724
- this.tooltipTargetEle.removeAttribute('title');
725
- EventHandler.add(this.tooltipTargetEle, 'mouseout', this.mouseOutHandler, this);
726
- }
727
- }
713
+ var target = args.originalEvent.target;
714
+ this.parent.notify(events.closeTooltip, { target: target });
728
715
  if (item.command !== 'FormatPainter') {
729
716
  if (closestElement && !closestElement.classList.contains('e-rte-inline-popup') && !closestElement.classList.contains('e-rte-text-popup')) {
730
717
  if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview' ||
@@ -74,7 +74,9 @@ var MarkdownEditor = /** @class */ (function () {
74
74
  MarkdownEditor.prototype.onToolbarClick = function (args) {
75
75
  var item = args.item;
76
76
  var textArea = this.parent.contentModule.getEditPanel();
77
- textArea.focus();
77
+ if (item.command !== 'Formats') {
78
+ textArea.focus();
79
+ }
78
80
  var startOffset = textArea.selectionStart;
79
81
  var endOffset = textArea.selectionEnd;
80
82
  var text = textArea.value.substring(startOffset, endOffset);
@@ -77,6 +77,7 @@ export declare class PasteCleanup {
77
77
  private deniedAttributes;
78
78
  private allowedStyle;
79
79
  private findLastElement;
80
+ private processPictureElement;
80
81
  /**
81
82
  * For internal use only - Get the module name.
82
83
  *
@@ -679,6 +679,9 @@ var PasteCleanup = /** @class */ (function () {
679
679
  this.setImageProperties(allImg[i]);
680
680
  }
681
681
  this.addTempClass(clipBoardElem);
682
+ if (clipBoardElem.querySelectorAll('picture').length > 0) {
683
+ this.processPictureElement(clipBoardElem);
684
+ }
682
685
  if (clipBoardElem.textContent !== '' || !isNOU(clipBoardElem.querySelector('img')) ||
683
686
  !isNOU(clipBoardElem.querySelector('table'))) {
684
687
  var tempWrapperElem = this.parent.createElement('div');
@@ -1138,6 +1141,26 @@ var PasteCleanup = /** @class */ (function () {
1138
1141
  }
1139
1142
  return null;
1140
1143
  };
1144
+ PasteCleanup.prototype.processPictureElement = function (clipBoardElem) {
1145
+ var pictureElems = clipBoardElem.querySelectorAll('picture');
1146
+ for (var i = 0; i < pictureElems.length; i++) {
1147
+ var imgElem = pictureElems[i].querySelector('img');
1148
+ var sourceElems = pictureElems[i].querySelectorAll('source');
1149
+ if (imgElem && imgElem.getAttribute('src')) {
1150
+ var srcValue = imgElem.getAttribute('src');
1151
+ var url = new URL(srcValue);
1152
+ for (var j = 0; j < sourceElems.length; j++) {
1153
+ var srcset = sourceElems[j].getAttribute('srcset');
1154
+ if (srcset) {
1155
+ if (srcset.indexOf('http') === -1) {
1156
+ var fullPath = url.origin + srcset;
1157
+ sourceElems[j].setAttribute('srcset', fullPath);
1158
+ }
1159
+ }
1160
+ }
1161
+ }
1162
+ }
1163
+ };
1141
1164
  /**
1142
1165
  * For internal use only - Get the module name.
1143
1166
  *
@@ -137,4 +137,11 @@ export declare class QuickToolbar {
137
137
  * @hidden
138
138
  */
139
139
  private getModuleName;
140
+ /**
141
+ *
142
+ * @returns {BaseQuickToolbar[]} - specifies the quick toolbar instance.
143
+ * @hidden
144
+ * @private
145
+ */
146
+ getQuickToolbarInstance(): BaseQuickToolbar[];
140
147
  }
@@ -149,7 +149,7 @@ var QuickToolbar = /** @class */ (function () {
149
149
 
150
150
  */
151
151
  QuickToolbar.prototype.showInlineQTBar = function (x, y, target) {
152
- if (isNOU(this.parent) || this.parent.readonly || target.tagName.toLowerCase() === 'img') {
152
+ if (isNOU(this.parent) || this.parent.readonly || target.tagName.toLowerCase() === 'img' || this.inlineQTBar.element.querySelector('.e-rte-color-content')) {
153
153
  return;
154
154
  }
155
155
  this.inlineQTBar.showPopup(x, y, target);
@@ -238,6 +238,9 @@ var QuickToolbar = /** @class */ (function () {
238
238
  }
239
239
  }
240
240
  if (!isNOU(this.textQTBar) && !isNOU(this.parent.quickToolbarSettings.text) && !this.parent.inlineMode.enable) {
241
+ if (!isNOU(e) && !isNOU(e.name) && e.name === 'sourceCodeMouseDown') {
242
+ return;
243
+ }
241
244
  var args = e.args.touches ?
242
245
  e.args.changedTouches[0] : e.args;
243
246
  var target = e.args.target;
@@ -248,7 +251,7 @@ var QuickToolbar = /** @class */ (function () {
248
251
  this.offsetY = pageYOffset(args, this.parent.element, this.parent.iframeSettings.enable);
249
252
  var range = this.parent.getRange();
250
253
  if ((range.endContainer.parentElement.tagName === range.startContainer.parentElement.tagName && (range.startContainer.parentElement.tagName === 'A' && range.endContainer.parentElement.tagName === 'A')) ||
251
- (target.tagName === 'IMG') || (target.tagName === 'VIDEO') || (target.tagName === 'AUDIO') || (target.childNodes[0].nodeType === 1 && target.childNodes[0].classList.contains('e-rte-audio')) ||
254
+ (target.tagName === 'IMG') || (target.tagName === 'VIDEO') || (target.tagName === 'AUDIO') || (target.childNodes[0] && target.childNodes[0].nodeType === 1 && target.childNodes[0].classList.contains('e-rte-audio')) ||
252
255
  (this.parent.getRange().startOffset === this.parent.getRange().endOffset)) {
253
256
  return;
254
257
  }
@@ -256,13 +259,16 @@ var QuickToolbar = /** @class */ (function () {
256
259
  this.textQTBar.showPopup(this.offsetX, this.offsetY, target, 'text');
257
260
  }
258
261
  };
259
- QuickToolbar.prototype.keyDownHandler = function () {
260
- if ((this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice()))
261
- && !isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {
262
- this.hideInlineQTBar();
263
- }
264
- if (this.textQTBar && !hasClass(this.textQTBar.element, 'e-popup-close')) {
265
- this.textQTBar.hidePopup();
262
+ QuickToolbar.prototype.keyDownHandler = function (e) {
263
+ var preventHide = e.args.altKey;
264
+ if (!preventHide) {
265
+ if ((this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice()))
266
+ && !isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {
267
+ this.hideInlineQTBar();
268
+ }
269
+ if (this.textQTBar && !hasClass(this.textQTBar.element, 'e-popup-close')) {
270
+ this.textQTBar.hidePopup();
271
+ }
266
272
  }
267
273
  };
268
274
  QuickToolbar.prototype.inlineQTBarMouseDownHandler = function () {
@@ -590,6 +596,15 @@ var QuickToolbar = /** @class */ (function () {
590
596
  QuickToolbar.prototype.getModuleName = function () {
591
597
  return 'quickToolbar';
592
598
  };
599
+ /**
600
+ *
601
+ * @returns {BaseQuickToolbar[]} - specifies the quick toolbar instance.
602
+ * @hidden
603
+ * @private
604
+ */
605
+ QuickToolbar.prototype.getQuickToolbarInstance = function () {
606
+ return [this.linkQTBar, this.imageQTBar, this.audioQTBar, this.videoQTBar, this.tableQTBar, this.textQTBar, this.inlineQTBar];
607
+ };
593
608
  return QuickToolbar;
594
609
  }());
595
610
  export { QuickToolbar };
@@ -71,7 +71,8 @@ var Resize = /** @class */ (function () {
71
71
  this.parent.element.style.width = (!this.parent.enableRtl) ? eventType.clientX - boundRect.left + 'px' : boundRect.right - eventType.clientX + 'px';
72
72
  }
73
73
  if (!this.parent.toolbarSettings.enable) {
74
- this.parent.setContentHeight('', false);
74
+ var isExpand = this.parent.element.querySelectorAll('.e-toolbar-extended.e-popup-open').length > 0 ? true : false;
75
+ this.parent.setContentHeight('Resize', isExpand);
75
76
  }
76
77
  this.parent.refreshUI();
77
78
  };
@@ -151,8 +151,6 @@ export declare class Toolbar {
151
151
  */
152
152
  destroy(): void;
153
153
  private moduleDestroy;
154
- private scrollHandler;
155
- private getDOMVisibility;
156
154
  private mouseDownHandler;
157
155
  private focusChangeHandler;
158
156
  private dropDownBeforeOpenHandler;
@@ -150,72 +150,14 @@ var Toolbar = /** @class */ (function () {
150
150
  }
151
151
  };
152
152
  Toolbar.prototype.toggleFloatClass = function (e) {
153
- var topValue;
154
- var isBody = false;
155
- var isFloat = false;
156
- var scrollParent;
157
153
  var floatOffset = this.parent.floatingToolbarOffset;
158
- if (e && this.parent.iframeSettings.enable && this.parent.inputElement.ownerDocument === e.target) {
159
- scrollParent = e.target.body;
160
- }
161
- else if (e && e.target !== document) {
162
- scrollParent = e.target;
163
- }
164
- else {
165
- isBody = true;
166
- scrollParent = document.body;
167
- }
168
- var tbHeight = this.getToolbarHeight() + this.getExpandTBarPopHeight();
169
- if (this.isTransformChild) {
170
- topValue = 0;
171
- var scrollParentRelativeTop = 0;
172
- var trgHeight = this.parent.element.offsetHeight;
173
- if (isBody) {
174
- var bodyStyle = window.getComputedStyle(scrollParent);
175
- scrollParentRelativeTop = parseFloat(bodyStyle.marginTop.split('px')[0]) + parseFloat(bodyStyle.paddingTop.split('px')[0]);
176
- }
177
- var targetTop = this.parent.element.getBoundingClientRect().top;
178
- var scrollParentYOffset = (Browser.isMSPointer && isBody) ? window.pageYOffset : scrollParent.parentElement.scrollTop;
179
- var scrollParentRect = scrollParent.getBoundingClientRect();
180
- var scrollParentTop = (!isBody) ? scrollParentRect.top : (scrollParentRect.top + scrollParentYOffset);
181
- var outOfRange = ((targetTop - ((!isBody) ? scrollParentTop : 0))
182
- + trgHeight > tbHeight + floatOffset) ? false : true;
183
- if (targetTop > (scrollParentTop + floatOffset) || targetTop < -trgHeight || ((targetTop < 0) ? outOfRange : false)) {
184
- isFloat = false;
185
- removeClass([this.tbElement], [classes.CLS_TB_ABS_FLOAT]);
186
- }
187
- else if (targetTop < (scrollParentTop + floatOffset)) {
188
- if (targetTop < 0) {
189
- topValue = (-targetTop) + scrollParentTop;
190
- }
191
- else {
192
- topValue = scrollParentTop - targetTop;
193
- }
194
- topValue = (isBody) ? topValue - scrollParentRelativeTop : topValue;
195
- addClass([this.tbElement], [classes.CLS_TB_ABS_FLOAT]);
196
- isFloat = true;
197
- }
198
- }
199
- else {
200
- var parent_1 = this.parent.element.getBoundingClientRect();
201
- if (window.innerHeight < parent_1.top) {
202
- return;
203
- }
204
- topValue = (e && e.target !== document) ? scrollParent.getBoundingClientRect().top : 0;
205
- if ((parent_1.bottom < (floatOffset + tbHeight + topValue)) || parent_1.bottom < 0 || parent_1.top > floatOffset + topValue) {
206
- isFloat = false;
207
- }
208
- else if (parent_1.top < floatOffset || parent_1.top < floatOffset + topValue) {
209
- isFloat = true;
210
- }
211
- }
212
- if (!isFloat) {
213
- removeClass([this.tbElement], [classes.CLS_TB_FLOAT]);
214
- setStyleAttribute(this.tbElement, { top: 0 + 'px', width: '100%' });
154
+ if (this.parent.toolbarSettings.enableFloating) {
155
+ addClass([this.tbElement.parentElement], [classes.CLS_TB_FLOAT]);
156
+ setStyleAttribute(this.tbElement.parentElement, { top: (floatOffset) + 'px' });
215
157
  }
216
158
  else {
217
- addClass([this.tbElement], [classes.CLS_TB_FLOAT]);
218
- setStyleAttribute(this.tbElement, { width: this.parent.element.offsetWidth + 'px', top: (floatOffset + topValue) + 'px' });
159
+ removeClass([this.tbElement.parentElement], [classes.CLS_TB_FLOAT]);
160
+ setStyleAttribute(this.tbElement.parentElement, { top: '' });
219
161
  }
220
162
  };
221
163
  Toolbar.prototype.renderToolbar = function () {
@@ -521,19 +463,6 @@ var Toolbar = /** @class */ (function () {
521
463
  this.toolbarActionModule.parent = null;
522
464
  this.dropDownModule.parent = null;
523
465
  };
524
- Toolbar.prototype.scrollHandler = function (e) {
525
- if (!this.parent.inlineMode.enable) {
526
- if (this.parent.toolbarSettings.enableFloating && this.getDOMVisibility(this.tbElement)) {
527
- this.toggleFloatClass(e.args);
528
- }
529
- }
530
- };
531
- Toolbar.prototype.getDOMVisibility = function (el) {
532
- if (!el.offsetParent && el.offsetWidth === 0 && el.offsetHeight === 0) {
533
- return false;
534
- }
535
- return true;
536
- };
537
466
  Toolbar.prototype.mouseDownHandler = function () {
538
467
  if (Browser.isDevice && this.parent.inlineMode.enable && !isIDevice()) {
539
468
  this.showFixedTBar();
@@ -570,11 +499,6 @@ var Toolbar = /** @class */ (function () {
570
499
  };
571
500
  Toolbar.prototype.adjustContentHeight = function (trg, isKeyboard) {
572
501
  if (trg && this.parent.toolbarSettings.type === ToolbarType.Expand && !isNOU(trg)) {
573
- var extendedTbar = this.tbElement.querySelector('.e-toolbar-extended');
574
- if (!isNOU(extendedTbar)) {
575
- setStyleAttribute(extendedTbar, { maxHeight: '', display: 'block' });
576
- setStyleAttribute(extendedTbar, { maxHeight: extendedTbar.offsetHeight + 'px', display: '' });
577
- }
578
502
  var hasActiveClass = trg.classList.contains('e-nav-active');
579
503
  var isExpand = isKeyboard ? (hasActiveClass ? false : true) : (hasActiveClass ? true : false);
580
504
  if (isExpand) {
@@ -583,7 +507,7 @@ var Toolbar = /** @class */ (function () {
583
507
  else {
584
508
  removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);
585
509
  }
586
- this.parent.setContentHeight('toolbar', isExpand);
510
+ this.parent.setContentHeight('Toolbar', isExpand);
587
511
  }
588
512
  else if (Browser.isDevice || this.parent.inlineMode.enable) {
589
513
  this.isToolbar = true;
@@ -608,7 +532,6 @@ var Toolbar = /** @class */ (function () {
608
532
  this.dropDownModule = new DropDownButtons(this.parent, this.locator);
609
533
  this.toolbarActionModule = new ToolbarAction(this.parent);
610
534
  this.parent.on(events.initialEnd, this.renderToolbar, this);
611
- this.parent.on(events.scroll, this.scrollHandler, this);
612
535
  this.parent.on(events.bindOnEnd, this.toolbarBindEvent, this);
613
536
  this.parent.on(events.toolbarUpdated, this.updateToolbarStatus, this);
614
537
  this.parent.on(events.modelChanged, this.onPropertyChanged, this);
@@ -633,7 +556,6 @@ var Toolbar = /** @class */ (function () {
633
556
  return;
634
557
  }
635
558
  this.parent.off(events.initialEnd, this.renderToolbar);
636
- this.parent.off(events.scroll, this.scrollHandler);
637
559
  this.parent.off(events.bindOnEnd, this.toolbarBindEvent);
638
560
  this.parent.off(events.toolbarUpdated, this.updateToolbarStatus);
639
561
  this.parent.off(events.modelChanged, this.onPropertyChanged);
@@ -668,7 +590,8 @@ var Toolbar = /** @class */ (function () {
668
590
  if (!this.parent.inlineMode.enable) {
669
591
  this.refreshToolbarOverflow();
670
592
  }
671
- this.parent.setContentHeight('', true);
593
+ var isExpand = this.parent.element.querySelectorAll('.e-toolbar-extended.e-popup-open').length > 0 ? true : false;
594
+ this.parent.setContentHeight('Refresh', isExpand);
672
595
  };
673
596
  /**
674
597
  * Called internally if any of the property value changed.
@@ -689,6 +612,11 @@ var Toolbar = /** @class */ (function () {
689
612
  }
690
613
  }
691
614
  }
615
+ if (!isNullOrUndefined(e.newProp.toolbarSettings)) {
616
+ if (!isNullOrUndefined(e.newProp.toolbarSettings.enableFloating)) {
617
+ this.toggleFloatClass();
618
+ }
619
+ }
692
620
  if (e.module !== this.getModuleName()) {
693
621
  return;
694
622
  }
@@ -49,11 +49,6 @@ export declare const CLS_TB_FLOAT: string;
49
49
  /**
50
50
  * @hidden
51
51
 
52
- */
53
- export declare const CLS_TB_ABS_FLOAT: string;
54
- /**
55
- * @hidden
56
-
57
52
  */
58
53
  export declare const CLS_INLINE: string;
59
54
  /**
@@ -49,11 +49,6 @@ export var CLS_TB_FLOAT = 'e-rte-tb-float';
49
49
  /**
50
50
  * @hidden
51
51
 
52
- */
53
- export var CLS_TB_ABS_FLOAT = 'e-rte-tb-abs-float';
54
- /**
55
- * @hidden
56
-
57
52
  */
58
53
  export var CLS_INLINE = 'e-rte-inline';
59
54
  /**
@@ -764,6 +764,11 @@ export declare const showColorPicker: string;
764
764
  /**
765
765
  * @hidden
766
766
 
767
+ */
768
+ export declare const closeTooltip: string;
769
+ /**
770
+ * @hidden
771
+
767
772
  */
768
773
  export declare const blockEmptyNodes: string;
769
774
  /**
@@ -764,6 +764,11 @@ export var showColorPicker = 'showColorPicker';
764
764
  /**
765
765
  * @hidden
766
766
 
767
+ */
768
+ export var closeTooltip = 'closeTooltip';
769
+ /**
770
+ * @hidden
771
+
767
772
  */
768
773
  export var blockEmptyNodes = "address:empty, article:empty, aside:empty, blockquote:empty,\n details:empty, dd:empty, div:empty, dl:empty, dt:empty, fieldset:empty, footer:empty,form:empty, h1:empty,\n h2:empty, h3:empty, h4:empty, h5:empty, h6:empty, header:empty, hgroup:empty, li:empty, main:empty, nav:empty,\n noscript:empty, output:empty, p:empty, pre:empty, section:empty, td:empty, th:empty";
769
774
  /**
@@ -8,7 +8,7 @@ import { ClickEventArgs } from '@syncfusion/ej2-navigations';
8
8
  import { BaseToolbar } from '../actions/base-toolbar';
9
9
  import { BaseQuickToolbar } from '../actions/base-quick-toolbar';
10
10
  import { NodeSelection } from '../../selection/selection';
11
- import { EditorMode, EnterKey, ShiftEnterKey } from './../../common/types';
11
+ import { ContentHeightSource, EditorMode, EnterKey, ShiftEnterKey } from './../../common/types';
12
12
  import { MarkdownSelection } from './../../markdown-parser/plugin/markdown-selection';
13
13
  import { ToolbarSettingsModel, IFrameSettingsModel, ImageSettingsModel, AudioSettingsModel, VideoSettingsModel, TableSettingsModel, FormatPainterSettingsModel, EmojiSettingsModel } from '../models/models';
14
14
  import { QuickToolbarSettingsModel, InlineModeModel, PasteCleanupSettingsModel, FileManagerSettingsModel } from '../models/models';
@@ -163,7 +163,7 @@ export interface IRichTextEditor extends Component<HTMLElement> {
163
163
  getText(): string;
164
164
  updateValueData?(): void;
165
165
  getBaseToolbarObject(): BaseToolbar;
166
- setContentHeight(target?: string, isExpand?: boolean): void;
166
+ setContentHeight(target: ContentHeightSource, isExpand?: boolean): void;
167
167
  keyConfig?: {
168
168
  [key: string]: string;
169
169
  };
@@ -667,6 +667,10 @@ export interface IToolsItemConfigs {
667
667
  subCommand?: string;
668
668
  value?: string;
669
669
  }
670
+ /**
671
+ * @hidden
672
+
673
+ */
670
674
  export interface IListDropDownModel extends DropDownItemModel {
671
675
  cssClass?: string;
672
676
  command?: string;
@@ -676,6 +680,10 @@ export interface IListDropDownModel extends DropDownItemModel {
676
680
  listStyle?: string;
677
681
  listImage?: string;
678
682
  }
683
+ /**
684
+ * @hidden
685
+
686
+ */
679
687
  export interface IDropDownItemModel extends DropDownItemModel {
680
688
  cssClass?: string;
681
689
  command?: string;
@@ -1378,3 +1386,29 @@ export interface CleanupResizeElemArgs {
1378
1386
  value: string;
1379
1387
  callBack(value: string): void;
1380
1388
  }
1389
+ /**
1390
+ * @hidden
1391
+ * @private
1392
+ */
1393
+ export interface IBaseQuickToolbar {
1394
+ /**
1395
+ * Instance of the Quick Toolabr Popup.
1396
+ */
1397
+ popupObj: Popup;
1398
+ /**
1399
+ * Parent Element of the Quick Toolbar.
1400
+ */
1401
+ element: HTMLElement;
1402
+ /**
1403
+ * Boolean to check whether the quick toolbar is rendered in the DOM.
1404
+ */
1405
+ isRendered: boolean;
1406
+ /**
1407
+ * Instance of the Toolbar rendered inside the Popup.
1408
+ */
1409
+ quickTBarObj: BaseToolbar;
1410
+ /**
1411
+ * Element of the Toolbar rendered inside the Popup.
1412
+ */
1413
+ toolbarElement: HTMLElement;
1414
+ }