jodit 4.2.14 → 4.2.15

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 (79) hide show
  1. package/es2015/jodit.css +115 -115
  2. package/es2015/jodit.fat.min.css +1 -1
  3. package/es2015/jodit.fat.min.js +2 -2
  4. package/es2015/jodit.js +525 -444
  5. package/es2015/jodit.min.css +1 -1
  6. package/es2015/jodit.min.js +2 -2
  7. package/es2015/plugins/debug/debug.js +1 -1
  8. package/es2015/plugins/debug/debug.min.js +1 -1
  9. package/es2015/plugins/speech-recognize/speech-recognize.css +1 -1
  10. package/es2015/plugins/speech-recognize/speech-recognize.js +1 -1
  11. package/es2015/plugins/speech-recognize/speech-recognize.min.js +1 -1
  12. package/es2018/jodit.css +115 -115
  13. package/es2018/jodit.fat.min.css +1 -1
  14. package/es2018/jodit.fat.min.js +2 -2
  15. package/es2018/jodit.js +525 -444
  16. package/es2018/jodit.min.css +1 -1
  17. package/es2018/jodit.min.js +2 -2
  18. package/es2018/plugins/debug/debug.js +1 -1
  19. package/es2018/plugins/debug/debug.min.js +1 -1
  20. package/es2018/plugins/speech-recognize/speech-recognize.css +1 -1
  21. package/es2018/plugins/speech-recognize/speech-recognize.js +1 -1
  22. package/es2018/plugins/speech-recognize/speech-recognize.min.js +1 -1
  23. package/es2021/jodit.css +115 -115
  24. package/es2021/jodit.fat.min.css +1 -1
  25. package/es2021/jodit.fat.min.js +2 -2
  26. package/es2021/jodit.js +519 -440
  27. package/es2021/jodit.min.css +1 -1
  28. package/es2021/jodit.min.js +2 -2
  29. package/es2021/plugins/debug/debug.js +1 -1
  30. package/es2021/plugins/debug/debug.min.js +1 -1
  31. package/es2021/plugins/speech-recognize/speech-recognize.css +1 -1
  32. package/es2021/plugins/speech-recognize/speech-recognize.js +1 -1
  33. package/es2021/plugins/speech-recognize/speech-recognize.min.js +1 -1
  34. package/es2021.en/jodit.css +115 -115
  35. package/es2021.en/jodit.fat.min.css +1 -1
  36. package/es2021.en/jodit.fat.min.js +2 -2
  37. package/es2021.en/jodit.js +519 -440
  38. package/es2021.en/jodit.min.css +1 -1
  39. package/es2021.en/jodit.min.js +2 -2
  40. package/es2021.en/plugins/debug/debug.js +1 -1
  41. package/es2021.en/plugins/debug/debug.min.js +1 -1
  42. package/es2021.en/plugins/speech-recognize/speech-recognize.css +1 -1
  43. package/es2021.en/plugins/speech-recognize/speech-recognize.js +1 -1
  44. package/es2021.en/plugins/speech-recognize/speech-recognize.min.js +1 -1
  45. package/es5/jodit.css +129 -129
  46. package/es5/jodit.fat.min.css +1 -1
  47. package/es5/jodit.fat.min.js +2 -2
  48. package/es5/jodit.js +542 -460
  49. package/es5/jodit.min.css +3 -3
  50. package/es5/jodit.min.js +2 -2
  51. package/es5/plugins/debug/debug.js +1 -1
  52. package/es5/plugins/debug/debug.min.js +1 -1
  53. package/es5/plugins/speech-recognize/speech-recognize.css +1 -1
  54. package/es5/plugins/speech-recognize/speech-recognize.js +1 -1
  55. package/es5/plugins/speech-recognize/speech-recognize.min.js +1 -1
  56. package/esm/core/constants.js +1 -1
  57. package/esm/core/selection/helpers/index.d.ts +9 -3
  58. package/esm/core/selection/helpers/index.js +48 -0
  59. package/esm/core/selection/selection.d.ts +6 -1
  60. package/esm/core/selection/selection.js +95 -117
  61. package/esm/index.d.ts +6 -1
  62. package/esm/index.js +3 -2
  63. package/esm/modules/table/table.d.ts +3 -1
  64. package/esm/modules/table/table.js +38 -33
  65. package/esm/modules/uploader/helpers/send-files.js +33 -29
  66. package/esm/plugins/backspace/cases/check-remove-char.js +65 -55
  67. package/esm/plugins/drag-and-drop/drag-and-drop.d.ts +2 -0
  68. package/esm/plugins/drag-and-drop/drag-and-drop.js +43 -36
  69. package/esm/plugins/link/link.js +71 -64
  70. package/esm/plugins/search/helpers/highlight-text-ranges.d.ts +0 -4
  71. package/esm/plugins/search/helpers/highlight-text-ranges.js +58 -49
  72. package/esm/plugins/table-keyboard-navigation/table-keyboard-navigation.js +35 -29
  73. package/package.json +1 -1
  74. package/types/core/selection/helpers/index.d.ts +9 -3
  75. package/types/core/selection/selection.d.ts +6 -1
  76. package/types/index.d.ts +6 -1
  77. package/types/modules/table/table.d.ts +3 -1
  78. package/types/plugins/drag-and-drop/drag-and-drop.d.ts +2 -0
  79. package/types/plugins/search/helpers/highlight-text-ranges.d.ts +0 -4
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * jodit - Jodit is an awesome and useful wysiwyg editor with filebrowser
3
3
  * Author: Chupurnov <chupurnov@gmail.com> (https://xdsoft.net/jodit/)
4
- * Version: v4.2.14
4
+ * Version: v4.2.15
5
5
  * Url: https://xdsoft.net/jodit/
6
6
  * License(s): MIT
7
7
  */
@@ -1737,7 +1737,7 @@ __webpack_require__.r(__webpack_exports__);
1737
1737
  * Released under MIT see LICENSE.txt in the project root for license information.
1738
1738
  * Copyright (c) 2013-2024 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
1739
1739
  */
1740
- const APP_VERSION = "4.2.14";
1740
+ const APP_VERSION = "4.2.15";
1741
1741
  // prettier-ignore
1742
1742
  const ES = "es2021";
1743
1743
  const IS_ES_MODERN = true;
@@ -9823,10 +9823,14 @@ class Response {
9823
9823
 
9824
9824
  "use strict";
9825
9825
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9826
- /* harmony export */ W: function() { return /* reexport safe */ _move_node_inside_start__WEBPACK_IMPORTED_MODULE_0__.W; }
9826
+ /* harmony export */ Qe: function() { return /* binding */ cursorInTheEdgeOfString; },
9827
+ /* harmony export */ W8: function() { return /* reexport safe */ _move_node_inside_start__WEBPACK_IMPORTED_MODULE_2__.W; },
9828
+ /* harmony export */ dY: function() { return /* binding */ findCorrectCurrentNode; }
9827
9829
  /* harmony export */ });
9828
- /* harmony import */ var _move_node_inside_start__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5298);
9829
- /* harmony import */ var _move_the_node_along_the_edge_outward__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83541);
9830
+ /* harmony import */ var jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17352);
9831
+ /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(55186);
9832
+ /* harmony import */ var _move_node_inside_start__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5298);
9833
+ /* harmony import */ var _move_the_node_along_the_edge_outward__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(83541);
9830
9834
  /*!
9831
9835
  * Jodit Editor (https://xdsoft.net/jodit/)
9832
9836
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -9839,6 +9843,54 @@ class Response {
9839
9843
 
9840
9844
 
9841
9845
 
9846
+ /**
9847
+ * Check if the cursor is at the edge of the string
9848
+ * @private
9849
+ */
9850
+ function cursorInTheEdgeOfString(container, offset, start, end) {
9851
+ const text = container.nodeValue?.length ? container.nodeValue : '';
9852
+ if (end && text.replace((0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_END)(), '').length > offset) {
9853
+ return true;
9854
+ }
9855
+ const inv = (0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_START)().exec(text);
9856
+ return start && ((inv && inv[0].length < offset) || (!inv && offset > 0));
9857
+ }
9858
+ function findCorrectCurrentNode(node, range, rightMode, isCollapsed, checkChild, child) {
9859
+ node = range.startContainer.childNodes[range.startOffset];
9860
+ if (!node) {
9861
+ node = range.startContainer.childNodes[range.startOffset - 1];
9862
+ rightMode = true;
9863
+ }
9864
+ if (node && isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(node)) {
9865
+ // test Current method - Cursor in the left of some SPAN
9866
+ if (!rightMode && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(node.previousSibling)) {
9867
+ node = node.previousSibling;
9868
+ }
9869
+ else if (checkChild) {
9870
+ let current = child(node);
9871
+ while (current) {
9872
+ if (current && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current)) {
9873
+ node = current;
9874
+ break;
9875
+ }
9876
+ current = child(current);
9877
+ }
9878
+ }
9879
+ }
9880
+ if (node && !isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(node)) {
9881
+ let leftChild = node, rightChild = node;
9882
+ do {
9883
+ leftChild = leftChild.firstChild;
9884
+ rightChild = rightChild.lastChild;
9885
+ } while (leftChild && rightChild && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(leftChild));
9886
+ if (leftChild === rightChild && leftChild && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(leftChild)) {
9887
+ node = leftChild;
9888
+ }
9889
+ }
9890
+ return { node, rightMode };
9891
+ }
9892
+
9893
+
9842
9894
  /***/ }),
9843
9895
 
9844
9896
  /***/ 5298:
@@ -9959,7 +10011,7 @@ function moveTheNodeAlongTheEdgeOutward(node, start, root) {
9959
10011
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9960
10012
  /* harmony export */ L: function() { return /* binding */ Selection; }
9961
10013
  /* harmony export */ });
9962
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(31635);
10014
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(31635);
9963
10015
  /* harmony import */ var jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17352);
9964
10016
  /* harmony import */ var jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(22664);
9965
10017
  /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(55186);
@@ -9969,6 +10021,7 @@ function moveTheNodeAlongTheEdgeOutward(node, start, root) {
9969
10021
  /* harmony import */ var jodit_core_helpers_utils_assert__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(jodit_core_helpers_utils_assert__WEBPACK_IMPORTED_MODULE_5__);
9970
10022
  /* harmony import */ var jodit_core_selection_helpers_move_the_node_along_the_edge_outward__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(83541);
9971
10023
  /* harmony import */ var _style_commit_style__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(8757);
10024
+ /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(46602);
9972
10025
  /*!
9973
10026
  * Jodit Editor (https://xdsoft.net/jodit/)
9974
10027
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -9985,6 +10038,7 @@ function moveTheNodeAlongTheEdgeOutward(node, start, root) {
9985
10038
 
9986
10039
 
9987
10040
 
10041
+
9988
10042
  class Selection {
9989
10043
  constructor(jodit) {
9990
10044
  this.jodit = jodit;
@@ -10367,63 +10421,35 @@ class Selection {
10367
10421
  * Returns the current element under the cursor inside editor
10368
10422
  */
10369
10423
  current(checkChild = true) {
10370
- if (this.j.getRealMode() === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.MODE_WYSIWYG) {
10371
- const sel = this.sel;
10372
- if (!sel || sel.rangeCount === 0) {
10373
- return null;
10374
- }
10375
- const range = sel.getRangeAt(0);
10376
- let node = range.startContainer, rightMode = false;
10377
- const child = (nd) => rightMode ? nd.lastChild : nd.firstChild;
10378
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(node, 'br') && sel.isCollapsed) {
10379
- return node;
10380
- }
10381
- if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10382
- node = range.startContainer.childNodes[range.startOffset];
10383
- if (!node) {
10384
- node =
10385
- range.startContainer.childNodes[range.startOffset - 1];
10386
- rightMode = true;
10387
- }
10388
- if (node && sel.isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10389
- // test Current method - Cursor in the left of some SPAN
10390
- if (!rightMode && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node.previousSibling)) {
10391
- node = node.previousSibling;
10392
- }
10393
- else if (checkChild) {
10394
- let current = child(node);
10395
- while (current) {
10396
- if (current && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(current)) {
10397
- node = current;
10398
- break;
10399
- }
10400
- current = child(current);
10401
- }
10402
- }
10403
- }
10404
- if (node && !sel.isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10405
- let leftChild = node, rightChild = node;
10406
- do {
10407
- leftChild = leftChild.firstChild;
10408
- rightChild = rightChild.lastChild;
10409
- } while (leftChild && rightChild && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(leftChild));
10410
- if (leftChild === rightChild &&
10411
- leftChild &&
10412
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(leftChild)) {
10413
- node = leftChild;
10414
- }
10415
- }
10416
- }
10417
- // check - cursor inside editor
10418
- if (node && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.area, node)) {
10419
- return node;
10420
- }
10424
+ if (this.j.getRealMode() !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.MODE_WYSIWYG) {
10425
+ return null;
10426
+ }
10427
+ const sel = this.sel;
10428
+ if (!sel || sel.rangeCount === 0) {
10429
+ return null;
10430
+ }
10431
+ const range = sel.getRangeAt(0);
10432
+ let node = range.startContainer;
10433
+ let rightMode = false;
10434
+ const child = (nd) => rightMode ? nd.lastChild : nd.firstChild;
10435
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(node, 'br') && sel.isCollapsed) {
10436
+ return node;
10437
+ }
10438
+ if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10439
+ const ret = (0,_helpers__WEBPACK_IMPORTED_MODULE_8__/* .findCorrectCurrentNode */ .dY)(node, range, rightMode, sel.isCollapsed, checkChild, child);
10440
+ node = ret.node;
10441
+ rightMode = ret.rightMode;
10442
+ }
10443
+ // check - cursor inside editor
10444
+ if (node && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.area, node)) {
10445
+ return node;
10421
10446
  }
10422
10447
  return null;
10423
10448
  }
10424
10449
  /**
10425
10450
  * Insert element in editor
10426
10451
  *
10452
+ * @param node - Node for insert
10427
10453
  * @param insertCursorAfter - After insert, cursor will move after element
10428
10454
  * @param fireChange - After insert, editor fire change event. You can prevent this behavior
10429
10455
  */
@@ -10485,6 +10511,7 @@ class Selection {
10485
10511
  * Inserts in the current cursor position some HTML snippet
10486
10512
  *
10487
10513
  * @param html - HTML The text to be inserted into the document
10514
+ * @param insertCursorAfter - After insert, cursor will move after element
10488
10515
  * @example
10489
10516
  * ```javascript
10490
10517
  * parent.s.insertHTML('<img src="image.png"/>');
@@ -10528,6 +10555,7 @@ class Selection {
10528
10555
  *
10529
10556
  * @param url - URL for image, or HTMLImageElement
10530
10557
  * @param styles - If specified, it will be applied <code>$(image).css(styles)</code>
10558
+ * @param defaultWidth - If specified, it will be applied <code>css('width', defaultWidth)</code>
10531
10559
  */
10532
10560
  insertImage(url, styles = null, defaultWidth = null) {
10533
10561
  const image = (0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_4__/* .isString */ .Kg)(url) ? this.j.createInside.element('img') : url;
@@ -10582,74 +10610,81 @@ class Selection {
10582
10610
  */
10583
10611
  eachSelection(callback) {
10584
10612
  const sel = this.sel;
10585
- if (sel && sel.rangeCount) {
10586
- const range = sel.getRangeAt(0);
10587
- let root = range.commonAncestorContainer;
10588
- if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isHTMLElement(root)) {
10589
- root = root.parentElement;
10590
- }
10591
- const nodes = [], startOffset = range.startOffset, length = root.childNodes.length, elementOffset = startOffset < length ? startOffset : length - 1;
10592
- let start = range.startContainer === this.area
10593
- ? root.childNodes[elementOffset]
10594
- : range.startContainer, end = range.endContainer === this.area
10595
- ? root.childNodes[range.endOffset - 1]
10596
- : range.endContainer;
10597
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(start) &&
10598
- start === range.startContainer &&
10599
- range.startOffset === start.nodeValue?.length &&
10600
- start.nextSibling) {
10601
- start = start.nextSibling;
10602
- }
10603
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(end) &&
10604
- end === range.endContainer &&
10605
- range.endOffset === 0 &&
10606
- end.previousSibling) {
10607
- end = end.previousSibling;
10608
- }
10609
- const checkElm = (node) => {
10610
- if (node &&
10611
- node !== root &&
10612
- !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(node) &&
10613
- !(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_4__/* .isMarker */ .rg)(node)) {
10614
- nodes.push(node);
10615
- }
10616
- };
10617
- checkElm(start);
10618
- if (start !== end && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(root, start, true)) {
10619
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.find(start, node => {
10620
- checkElm(node);
10621
- // checks parentElement as well because partial selections are not equal to entire element
10622
- return (node === end ||
10623
- (node && node.contains && node.contains(end)));
10624
- }, root, true, false);
10625
- }
10626
- const forEvery = (current) => {
10627
- if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.j.editor, current, true)) {
10628
- return;
10629
- }
10630
- if (current.nodeName.match(/^(UL|OL)$/)) {
10631
- return (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.toArray)(current.childNodes).forEach(forEvery);
10613
+ if (!sel || !sel.rangeCount) {
10614
+ return;
10615
+ }
10616
+ const range = sel.getRangeAt(0);
10617
+ let root = range.commonAncestorContainer;
10618
+ if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isHTMLElement(root)) {
10619
+ root = root.parentElement;
10620
+ }
10621
+ const nodes = [];
10622
+ const startOffset = range.startOffset;
10623
+ const length = root.childNodes.length;
10624
+ const elementOffset = startOffset < length ? startOffset : length - 1;
10625
+ let start = range.startContainer === this.area
10626
+ ? root.childNodes[elementOffset]
10627
+ : range.startContainer;
10628
+ let end = range.endContainer === this.area
10629
+ ? root.childNodes[range.endOffset - 1]
10630
+ : range.endContainer;
10631
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(start) &&
10632
+ start === range.startContainer &&
10633
+ range.startOffset === start.nodeValue?.length &&
10634
+ start.nextSibling) {
10635
+ start = start.nextSibling;
10636
+ }
10637
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(end) &&
10638
+ end === range.endContainer &&
10639
+ range.endOffset === 0 &&
10640
+ end.previousSibling) {
10641
+ end = end.previousSibling;
10642
+ }
10643
+ const checkElm = (node) => {
10644
+ if (node &&
10645
+ node !== root &&
10646
+ !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(node) &&
10647
+ !(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_4__/* .isMarker */ .rg)(node)) {
10648
+ nodes.push(node);
10649
+ }
10650
+ };
10651
+ checkElm(start);
10652
+ if (start !== end && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(root, start, true)) {
10653
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.find(start, node => {
10654
+ checkElm(node);
10655
+ // checks parentElement as well because partial selections are not equal to entire element
10656
+ return (node === end ||
10657
+ (node && node.contains && node.contains(end)));
10658
+ }, root, true, false);
10659
+ }
10660
+ const forEvery = (current) => {
10661
+ if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.j.editor, current, true)) {
10662
+ return;
10663
+ }
10664
+ if (current.nodeName.match(/^(UL|OL)$/)) {
10665
+ return (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.toArray)(current.childNodes).forEach(forEvery);
10666
+ }
10667
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(current, 'li')) {
10668
+ if (current.firstChild) {
10669
+ current = current.firstChild;
10632
10670
  }
10633
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(current, 'li')) {
10634
- if (current.firstChild) {
10635
- current = current.firstChild;
10636
- }
10637
- else {
10638
- const currentB = this.j.createInside.text(jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE);
10639
- current.appendChild(currentB);
10640
- current = currentB;
10641
- }
10671
+ else {
10672
+ const currentB = this.j.createInside.text(jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE);
10673
+ current.appendChild(currentB);
10674
+ current = currentB;
10642
10675
  }
10643
- callback(current);
10644
- };
10645
- if (nodes.length === 0 && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(start)) {
10676
+ }
10677
+ callback(current);
10678
+ };
10679
+ if (nodes.length === 0) {
10680
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(start)) {
10646
10681
  nodes.push(start);
10647
10682
  }
10648
- if (nodes.length === 0 && start.firstChild) {
10683
+ if (start.firstChild) {
10649
10684
  nodes.push(start.firstChild);
10650
10685
  }
10651
- nodes.forEach(forEvery);
10652
10686
  }
10687
+ nodes.forEach(forEvery);
10653
10688
  }
10654
10689
  /**
10655
10690
  * Checks if the cursor is at the end(start) block
@@ -10676,13 +10711,7 @@ class Selection {
10676
10711
  this.j.e.fire('isInvisibleForCursor', elm) === true));
10677
10712
  // check right offset
10678
10713
  if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(container)) {
10679
- const text = container.nodeValue?.length ? container.nodeValue : '';
10680
- if (end && text.replace((0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_END)(), '').length > offset) {
10681
- return false;
10682
- }
10683
- const inv = (0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_START)().exec(text);
10684
- if (start &&
10685
- ((inv && inv[0].length < offset) || (!inv && offset > 0))) {
10714
+ if ((0,_helpers__WEBPACK_IMPORTED_MODULE_8__/* .cursorInTheEdgeOfString */ .Qe)(container, offset, start, end)) {
10686
10715
  return false;
10687
10716
  }
10688
10717
  }
@@ -10770,6 +10799,7 @@ class Selection {
10770
10799
  }
10771
10800
  /**
10772
10801
  * Set cursor in the node
10802
+ * @param node - Node element
10773
10803
  * @param inStart - set cursor in start of element
10774
10804
  */
10775
10805
  setCursorIn(node, inStart = false) {
@@ -10830,6 +10860,7 @@ class Selection {
10830
10860
  }
10831
10861
  /**
10832
10862
  * Select node
10863
+ * @param node - Node element
10833
10864
  * @param inward - select all inside
10834
10865
  */
10835
10866
  select(node, inward = false) {
@@ -11103,19 +11134,19 @@ class Selection {
11103
11134
  return this;
11104
11135
  }
11105
11136
  }
11106
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11137
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11107
11138
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11108
11139
  ], Selection.prototype, "createRange", null);
11109
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11140
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11110
11141
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11111
11142
  ], Selection.prototype, "focus", null);
11112
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11143
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11113
11144
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11114
11145
  ], Selection.prototype, "setCursorAfter", null);
11115
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11146
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11116
11147
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11117
11148
  ], Selection.prototype, "setCursorBefore", null);
11118
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11149
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11119
11150
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11120
11151
  ], Selection.prototype, "setCursorIn", null);
11121
11152
 
@@ -22276,6 +22307,7 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22276
22307
  }
22277
22308
  /**
22278
22309
  * Generate formal table martix columns*rows
22310
+ * @param table - Working table
22279
22311
  * @param callback - if return false cycle break
22280
22312
  */
22281
22313
  formalMatrix(table, callback) {
@@ -22344,7 +22376,6 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22344
22376
  * @param line - Insert a new line after/before this
22345
22377
  * line contains the selected cell
22346
22378
  * @param after - Insert a new line after line contains the selected cell
22347
- * @param create - Instance of Create class
22348
22379
  */
22349
22380
  appendRow(table, line, after) {
22350
22381
  return Table.__appendRow(table, line, after, this.j.createInside);
@@ -22513,13 +22544,36 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22513
22544
  return Table.__getSelectedBound(table, selectedCells);
22514
22545
  }
22515
22546
  static __normalizeTable(table) {
22516
- let i, j, min, not;
22517
22547
  const __marked = [], box = Table.__formalMatrix(table);
22518
- // remove extra colspans
22519
- for (j = 0; j < box[0].length; j += 1) {
22520
- min = 1000000;
22521
- not = false;
22522
- for (i = 0; i < box.length; i += 1) {
22548
+ Table.__removeExtraColspans(box, __marked);
22549
+ Table.__removeExtraRowspans(box, __marked);
22550
+ // remove rowspans and colspans equal 1 and empty class
22551
+ for (let i = 0; i < box.length; i += 1) {
22552
+ for (let j = 0; j < box[i].length; j += 1) {
22553
+ if (box[i][j] === undefined) {
22554
+ continue; // broken table
22555
+ }
22556
+ if (box[i][j].hasAttribute('rowspan') &&
22557
+ box[i][j].rowSpan === 1) {
22558
+ (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'rowspan', null);
22559
+ }
22560
+ if (box[i][j].hasAttribute('colspan') &&
22561
+ box[i][j].colSpan === 1) {
22562
+ (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'colspan', null);
22563
+ }
22564
+ if (box[i][j].hasAttribute('class') &&
22565
+ !(0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class')) {
22566
+ (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class', null);
22567
+ }
22568
+ }
22569
+ }
22570
+ Table.__unmark(__marked);
22571
+ }
22572
+ static __removeExtraColspans(box, __marked) {
22573
+ for (let j = 0; j < box[0].length; j += 1) {
22574
+ let min = 1000000;
22575
+ let not = false;
22576
+ for (let i = 0; i < box.length; i += 1) {
22523
22577
  if (box[i][j] === undefined) {
22524
22578
  continue; // broken table
22525
22579
  }
@@ -22530,7 +22584,7 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22530
22584
  min = Math.min(min, box[i][j].colSpan);
22531
22585
  }
22532
22586
  if (!not) {
22533
- for (i = 0; i < box.length; i += 1) {
22587
+ for (let i = 0; i < box.length; i += 1) {
22534
22588
  if (box[i][j] === undefined) {
22535
22589
  continue; // broken table
22536
22590
  }
@@ -22538,10 +22592,13 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22538
22592
  }
22539
22593
  }
22540
22594
  }
22541
- // remove extra rowspans
22595
+ }
22596
+ static __removeExtraRowspans(box, marked) {
22597
+ let i = 0;
22598
+ let j = 0;
22542
22599
  for (i = 0; i < box.length; i += 1) {
22543
- min = 1000000;
22544
- not = false;
22600
+ let min = 1000000;
22601
+ let not = false;
22545
22602
  for (j = 0; j < box[i].length; j += 1) {
22546
22603
  if (box[i][j] === undefined) {
22547
22604
  continue; // broken table
@@ -22557,31 +22614,10 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22557
22614
  if (box[i][j] === undefined) {
22558
22615
  continue; // broken table
22559
22616
  }
22560
- Table.__mark(box[i][j], 'rowspan', box[i][j].rowSpan - min + 1, __marked);
22617
+ Table.__mark(box[i][j], 'rowspan', box[i][j].rowSpan - min + 1, marked);
22561
22618
  }
22562
22619
  }
22563
22620
  }
22564
- // remove rowspans and colspans equal 1 and empty class
22565
- for (i = 0; i < box.length; i += 1) {
22566
- for (j = 0; j < box[i].length; j += 1) {
22567
- if (box[i][j] === undefined) {
22568
- continue; // broken table
22569
- }
22570
- if (box[i][j].hasAttribute('rowspan') &&
22571
- box[i][j].rowSpan === 1) {
22572
- (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'rowspan', null);
22573
- }
22574
- if (box[i][j].hasAttribute('colspan') &&
22575
- box[i][j].colSpan === 1) {
22576
- (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'colspan', null);
22577
- }
22578
- if (box[i][j].hasAttribute('class') &&
22579
- !(0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class')) {
22580
- (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class', null);
22581
- }
22582
- }
22583
- }
22584
- Table.__unmark(__marked);
22585
22621
  }
22586
22622
  /**
22587
22623
  * Try recalculate all coluns and rows after change
@@ -23999,34 +24035,7 @@ function sendFiles(uploader, files, handlerSuccess, handlerError, process) {
23999
24035
  }
24000
24036
  const promises = [];
24001
24037
  if (o.insertImageAsBase64URI) {
24002
- let file, i;
24003
- for (i = 0; i < fileList.length; i += 1) {
24004
- file = fileList[i];
24005
- if (file && file.type) {
24006
- const mime = file.type.match(/\/([a-z0-9]+)/i);
24007
- const extension = mime[1] ? mime[1].toLowerCase() : '';
24008
- if (o.imagesExtensions.includes(extension)) {
24009
- const reader = new FileReader();
24010
- promises.push(uploader.j.async.promise((resolve, reject) => {
24011
- reader.onerror = reject;
24012
- reader.onloadend = () => {
24013
- const resp = {
24014
- baseurl: '',
24015
- files: [reader.result],
24016
- isImages: [true]
24017
- };
24018
- const handler = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_0__.isFunction)(handlerSuccess)
24019
- ? handlerSuccess
24020
- : o.defaultHandlerSuccess;
24021
- handler.call(uploader, resp);
24022
- resolve(resp);
24023
- };
24024
- reader.readAsDataURL(file);
24025
- }));
24026
- fileList[i] = null;
24027
- }
24028
- }
24029
- }
24038
+ readImagesWithReader(fileList, o.imagesExtensions, promises, uploader, handlerSuccess, o.defaultHandlerSuccess);
24030
24039
  }
24031
24040
  fileList = fileList.filter(a => a);
24032
24041
  if (fileList.length) {
@@ -24037,7 +24046,7 @@ function sendFiles(uploader, files, handlerSuccess, handlerError, process) {
24037
24046
  for (let i = 0; i < fileList.length; i += 1) {
24038
24047
  file = fileList[i];
24039
24048
  if (file) {
24040
- const hasRealExtension = /\.[\d\w]+$/.test(file.name);
24049
+ const hasRealExtension = /\.\w+$/.test(file.name);
24041
24050
  const mime = file.type.match(/\/([a-z0-9]+)/i);
24042
24051
  const extension = mime && mime[1] ? mime[1].toLowerCase() : '';
24043
24052
  let newName = fileList[i].name ||
@@ -24086,6 +24095,37 @@ function sendFiles(uploader, files, handlerSuccess, handlerError, process) {
24086
24095
  }
24087
24096
  return Promise.all(promises);
24088
24097
  }
24098
+ function readImagesWithReader(fileList, imagesExtensions, promises, uploader, handlerSuccess, defaultHandlerSuccess) {
24099
+ let file, i;
24100
+ for (i = 0; i < fileList.length; i += 1) {
24101
+ file = fileList[i];
24102
+ if (file && file.type) {
24103
+ const mime = file.type.match(/\/([a-z0-9]+)/i);
24104
+ const extension = mime[1] ? mime[1].toLowerCase() : '';
24105
+ if (!imagesExtensions.includes(extension)) {
24106
+ continue;
24107
+ }
24108
+ const reader = new FileReader();
24109
+ promises.push(uploader.j.async.promise((resolve, reject) => {
24110
+ reader.onerror = reject;
24111
+ reader.onloadend = () => {
24112
+ const resp = {
24113
+ baseurl: '',
24114
+ files: [reader.result],
24115
+ isImages: [true]
24116
+ };
24117
+ const handler = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_0__.isFunction)(handlerSuccess)
24118
+ ? handlerSuccess
24119
+ : defaultHandlerSuccess;
24120
+ handler.call(uploader, resp);
24121
+ resolve(resp);
24122
+ };
24123
+ reader.readAsDataURL(file);
24124
+ }));
24125
+ fileList[i] = null;
24126
+ }
24127
+ }
24128
+ }
24089
24129
 
24090
24130
 
24091
24131
  /***/ }),
@@ -25651,7 +25691,7 @@ class backspace extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_3__/* .Plugin
25651
25691
  if (jodit.e.fire('backSpaceBeforeCases', backspace, fakeNode)) {
25652
25692
  return false;
25653
25693
  }
25654
- (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_4__/* .moveNodeInsideStart */ .W)(jodit, fakeNode, backspace);
25694
+ (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_4__/* .moveNodeInsideStart */ .W8)(jodit, fakeNode, backspace);
25655
25695
  if (_cases__WEBPACK_IMPORTED_MODULE_6__/* .cases */ .C.some((func) => {
25656
25696
  if ((0,jodit_core_helpers_checker_is_function__WEBPACK_IMPORTED_MODULE_8__/* .isFunction */ .T)(func) &&
25657
25697
  func(jodit, fakeNode, backspace, mode)) {
@@ -25911,19 +25951,12 @@ function checkNotCollapsed(jodit) {
25911
25951
  function checkRemoveChar(jodit, fakeNode, backspace, mode) {
25912
25952
  const step = backspace ? -1 : 1;
25913
25953
  const anotherSibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(fakeNode, !backspace);
25914
- let sibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(fakeNode, backspace), removeNeighbor = null;
25915
- let charRemoved = false, removed;
25916
- const getNextInlineSibling = (sibling) => {
25917
- let nextSibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(sibling, backspace);
25918
- if (!nextSibling &&
25919
- sibling.parentNode &&
25920
- sibling.parentNode !== jodit.editor) {
25921
- nextSibling = (0,jodit_plugins_backspace_helpers__WEBPACK_IMPORTED_MODULE_3__/* .findMostNestedNeighbor */ .s)(sibling, !backspace, jodit.editor, true);
25922
- }
25923
- return nextSibling;
25924
- };
25954
+ let sibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(fakeNode, backspace);
25955
+ let removeNeighbor = null;
25956
+ let charRemoved = false;
25957
+ let removed;
25925
25958
  if (!sibling) {
25926
- sibling = getNextInlineSibling(fakeNode);
25959
+ sibling = getNextInlineSibling(fakeNode, backspace, jodit.editor);
25927
25960
  }
25928
25961
  while (sibling && (jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(sibling) || jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isInlineBlock(sibling))) {
25929
25962
  while (jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isInlineBlock(sibling)) {
@@ -25933,57 +25966,17 @@ function checkRemoveChar(jodit, fakeNode, backspace, mode) {
25933
25966
  break;
25934
25967
  }
25935
25968
  if (sibling.nodeValue?.length) {
25936
- // For Unicode escapes
25937
- let value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.toArray)(sibling.nodeValue);
25938
- const length = value.length;
25939
- let index = backspace ? length - 1 : 0;
25940
- if (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
25941
- while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
25942
- index += step;
25943
- }
25944
- }
25945
- removed = value[index];
25946
- if (value[index + step] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
25947
- index += step;
25948
- while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
25949
- index += step;
25950
- }
25951
- index += backspace ? 1 : -1;
25952
- }
25953
- if (backspace && index < 0) {
25954
- value = [];
25955
- }
25956
- else {
25957
- value = value.slice(backspace ? 0 : index + 1, backspace ? index : length);
25958
- }
25959
- if (!anotherSibling ||
25960
- !jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(anotherSibling) ||
25961
- (!backspace ? / $/ : /^ /).test(anotherSibling.nodeValue ?? '') ||
25962
- !(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.trimInv)(anotherSibling.nodeValue || '').length) {
25963
- for (let i = backspace ? value.length - 1 : 0; backspace ? i >= 0 : i < value.length; i += backspace ? -1 : 1) {
25964
- if (value[i] === ' ') {
25965
- value[i] = jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE;
25966
- }
25967
- else {
25968
- break;
25969
- }
25970
- }
25971
- }
25972
- sibling.nodeValue = value.join('');
25969
+ removed = tryRemoveChar(sibling, backspace, step, anotherSibling);
25973
25970
  }
25974
25971
  if (!sibling.nodeValue?.length) {
25975
25972
  removeNeighbor = sibling;
25976
25973
  }
25977
25974
  if (!(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.isVoid)(removed) && removed !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
25975
+ checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed, jodit);
25978
25976
  charRemoved = true;
25979
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.call)(backspace ? jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.after : jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.before, sibling, fakeNode);
25980
- if (mode === 'sentence' ||
25981
- (mode === 'word' && removed !== ' ' && removed !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE)) {
25982
- checkRemoveChar(jodit, fakeNode, backspace, mode);
25983
- }
25984
25977
  break;
25985
25978
  }
25986
- const nextSibling = getNextInlineSibling(sibling);
25979
+ const nextSibling = getNextInlineSibling(sibling, backspace, jodit.editor);
25987
25980
  if (removeNeighbor) {
25988
25981
  jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.safeRemove(removeNeighbor);
25989
25982
  removeNeighbor = null;
@@ -26005,6 +25998,13 @@ function checkRemoveChar(jodit, fakeNode, backspace, mode) {
26005
25998
  }
26006
25999
  return charRemoved;
26007
26000
  }
26001
+ function getNextInlineSibling(sibling, backspace, root) {
26002
+ let nextSibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(sibling, backspace);
26003
+ if (!nextSibling && sibling.parentNode && sibling.parentNode !== root) {
26004
+ nextSibling = (0,jodit_plugins_backspace_helpers__WEBPACK_IMPORTED_MODULE_3__/* .findMostNestedNeighbor */ .s)(sibling, !backspace, root, true);
26005
+ }
26006
+ return nextSibling;
26007
+ }
26008
26008
  /**
26009
26009
  * Helper removes all empty inline parents
26010
26010
  */
@@ -26029,6 +26029,56 @@ function addBRInsideEmptyBlock(jodit, node) {
26029
26029
  jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.after(node, jodit.createInside.element('br'));
26030
26030
  }
26031
26031
  }
26032
+ function tryRemoveChar(sibling, backspace, step, anotherSibling) {
26033
+ // For Unicode escapes
26034
+ let value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.toArray)(sibling.nodeValue);
26035
+ const length = value.length;
26036
+ let index = backspace ? length - 1 : 0;
26037
+ if (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26038
+ while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26039
+ index += step;
26040
+ }
26041
+ }
26042
+ const removed = value[index];
26043
+ if (value[index + step] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26044
+ index += step;
26045
+ while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26046
+ index += step;
26047
+ }
26048
+ index += backspace ? 1 : -1;
26049
+ }
26050
+ if (backspace && index < 0) {
26051
+ value = [];
26052
+ }
26053
+ else {
26054
+ value = value.slice(backspace ? 0 : index + 1, backspace ? index : length);
26055
+ }
26056
+ replaceSpaceOnNBSP(anotherSibling, backspace, value);
26057
+ sibling.nodeValue = value.join('');
26058
+ return removed;
26059
+ }
26060
+ function replaceSpaceOnNBSP(anotherSibling, backspace, value) {
26061
+ if (!anotherSibling ||
26062
+ !jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(anotherSibling) ||
26063
+ (!backspace ? / $/ : /^ /).test(anotherSibling.nodeValue ?? '') ||
26064
+ !(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.trimInv)(anotherSibling.nodeValue || '').length) {
26065
+ for (let i = backspace ? value.length - 1 : 0; backspace ? i >= 0 : i < value.length; i += backspace ? -1 : 1) {
26066
+ if (value[i] === ' ') {
26067
+ value[i] = jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE;
26068
+ }
26069
+ else {
26070
+ break;
26071
+ }
26072
+ }
26073
+ }
26074
+ }
26075
+ function checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed, jodit) {
26076
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.call)(backspace ? jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.after : jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.before, sibling, fakeNode);
26077
+ if (mode === 'sentence' ||
26078
+ (mode === 'word' && removed !== ' ' && removed !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE)) {
26079
+ checkRemoveChar(jodit, fakeNode, backspace, mode);
26080
+ }
26081
+ }
26032
26082
 
26033
26083
 
26034
26084
  /***/ }),
@@ -26066,7 +26116,7 @@ function checkRemoveContentNotEditable(jodit, fakeNode, backspace) {
26066
26116
  !jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.isContentEditable(neighbor, jodit.editor)) {
26067
26117
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_1__.call)(backspace ? jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.before : jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.after, neighbor, fakeNode);
26068
26118
  jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.safeRemove(neighbor);
26069
- (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_2__/* .moveNodeInsideStart */ .W)(jodit, fakeNode, backspace);
26119
+ (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_2__/* .moveNodeInsideStart */ .W8)(jodit, fakeNode, backspace);
26070
26120
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_1__.call)(backspace ? jodit.s.setCursorBefore : jodit.s.setCursorAfter, fakeNode);
26071
26121
  return true;
26072
26122
  }
@@ -28525,45 +28575,11 @@ class dragAndDrop extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_5__/* .Plug
28525
28575
  const sel = this.j.s.sel;
28526
28576
  const range = this.bufferRange ||
28527
28577
  (sel && sel.rangeCount ? sel.getRangeAt(0) : null);
28528
- let fragment = null;
28529
- if (!this.draggable && range) {
28530
- fragment = this.isCopyMode
28531
- ? range.cloneContents()
28532
- : range.extractContents();
28533
- }
28534
- else if (this.draggable) {
28535
- if (this.isCopyMode) {
28536
- const [tagName, field] = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, '-is-file') === '1'
28537
- ? ['a', 'href']
28538
- : ['img', 'src'];
28539
- fragment = this.j.createInside.element(tagName);
28540
- fragment.setAttribute(field, (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'data-src') ||
28541
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'src') ||
28542
- '');
28543
- if (tagName === 'a') {
28544
- fragment.textContent = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(fragment, field) || '';
28545
- }
28546
- }
28547
- else {
28548
- fragment = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.dataBind)(this.draggable, 'target');
28549
- }
28550
- }
28551
- else if (this.getText(event)) {
28552
- fragment = this.j.createInside.fromHTML(this.getText(event));
28553
- }
28578
+ const fragment = this.__getWorkFragment(range, event);
28554
28579
  sel && sel.removeAllRanges();
28555
28580
  this.j.s.insertCursorAtPoint(event.clientX, event.clientY);
28556
28581
  if (fragment) {
28557
- this.j.s.insertNode(fragment, false, false);
28558
- if (range && fragment.firstChild && fragment.lastChild) {
28559
- range.setStartBefore(fragment.firstChild);
28560
- range.setEndAfter(fragment.lastChild);
28561
- this.j.s.selectRange(range);
28562
- this.j.e.fire('synchro');
28563
- }
28564
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(fragment, 'img') && this.j.events) {
28565
- this.j.e.fire('afterInsertImage', fragment);
28566
- }
28582
+ this.__insertFragment.call(this, fragment, range);
28567
28583
  }
28568
28584
  event.preventDefault();
28569
28585
  event.stopPropagation();
@@ -28571,6 +28587,47 @@ class dragAndDrop extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_5__/* .Plug
28571
28587
  this.isFragmentFromEditor = false;
28572
28588
  this.removeDragListeners();
28573
28589
  }
28590
+ __getWorkFragment(range, event) {
28591
+ let fragment = null;
28592
+ if (!this.draggable && range) {
28593
+ fragment = this.isCopyMode
28594
+ ? range.cloneContents()
28595
+ : range.extractContents();
28596
+ }
28597
+ else if (this.draggable) {
28598
+ if (this.isCopyMode) {
28599
+ const [tagName, field] = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, '-is-file') === '1'
28600
+ ? ['a', 'href']
28601
+ : ['img', 'src'];
28602
+ fragment = this.j.createInside.element(tagName);
28603
+ fragment.setAttribute(field, (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'data-src') ||
28604
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'src') ||
28605
+ '');
28606
+ if (tagName === 'a') {
28607
+ fragment.textContent = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(fragment, field) || '';
28608
+ }
28609
+ }
28610
+ else {
28611
+ fragment = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.dataBind)(this.draggable, 'target');
28612
+ }
28613
+ }
28614
+ else if (this.getText(event)) {
28615
+ fragment = this.j.createInside.fromHTML(this.getText(event));
28616
+ }
28617
+ return fragment;
28618
+ }
28619
+ __insertFragment(fragment, range) {
28620
+ this.j.s.insertNode(fragment, false, false);
28621
+ if (range && fragment.firstChild && fragment.lastChild) {
28622
+ range.setStartBefore(fragment.firstChild);
28623
+ range.setEndAfter(fragment.lastChild);
28624
+ this.j.s.selectRange(range);
28625
+ this.j.e.fire('synchro');
28626
+ }
28627
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(fragment, 'img') && this.j.events) {
28628
+ this.j.e.fire('afterInsertImage', fragment);
28629
+ }
28630
+ }
28574
28631
  /** @override */
28575
28632
  beforeDestruct() {
28576
28633
  this.onDragEnd();
@@ -33884,35 +33941,7 @@ class link extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .
33884
33941
  if (link) {
33885
33942
  url_input.value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'href') || '';
33886
33943
  if (modeClassName) {
33887
- switch (modeClassName) {
33888
- case 'input':
33889
- if (className_input) {
33890
- className_input.value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
33891
- }
33892
- break;
33893
- case 'select':
33894
- if (className_select) {
33895
- for (let i = 0; i < className_select.selectedOptions.length; i++) {
33896
- const option = className_select.options.item(i);
33897
- if (option) {
33898
- option.selected = false;
33899
- }
33900
- }
33901
- const classNames = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
33902
- classNames.split(' ').forEach(className => {
33903
- if (className) {
33904
- for (let i = 0; i < className_select.options.length; i++) {
33905
- const option = className_select.options.item(i);
33906
- if (option?.value &&
33907
- option.value === className) {
33908
- option.selected = true;
33909
- }
33910
- }
33911
- }
33912
- });
33913
- }
33914
- break;
33915
- }
33944
+ readClassnames(modeClassName, className_input, link, className_select);
33916
33945
  }
33917
33946
  if (openInNewTabCheckbox && target_checkbox) {
33918
33947
  target_checkbox.checked = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'target') === '_blank';
@@ -33974,42 +34003,9 @@ class link extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .
33974
34003
  }
33975
34004
  links.forEach(a => {
33976
34005
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'href', url_input.value);
33977
- if (modeClassName && (className_input ?? className_select)) {
33978
- if (modeClassName === 'input') {
33979
- if (className_input.value === '' &&
33980
- a.hasAttribute('class')) {
33981
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
33982
- }
33983
- if (className_input.value !== '') {
33984
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', className_input.value);
33985
- }
33986
- }
33987
- else if (modeClassName === 'select') {
33988
- if (a.hasAttribute('class')) {
33989
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
33990
- }
33991
- for (let i = 0; i < className_select.selectedOptions.length; i++) {
33992
- const className = className_select.selectedOptions.item(i)?.value;
33993
- if (className) {
33994
- a.classList.add(className);
33995
- }
33996
- }
33997
- }
33998
- }
34006
+ writeClasses(modeClassName, className_input, className_select, a);
33999
34007
  if (!isImageContent) {
34000
- let newContent = a.textContent;
34001
- if (content_input.value.trim().length) {
34002
- if (textWasChanged) {
34003
- newContent = content_input.value;
34004
- }
34005
- }
34006
- else {
34007
- newContent = url_input.value;
34008
- }
34009
- const content = a.textContent;
34010
- if (newContent !== content) {
34011
- a.textContent = newContent;
34012
- }
34008
+ writeImage(a, content_input, textWasChanged, url_input);
34013
34009
  }
34014
34010
  if (openInNewTabCheckbox && target_checkbox) {
34015
34011
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'target', target_checkbox.checked ? '_blank' : null);
@@ -34054,6 +34050,74 @@ class link extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .
34054
34050
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_0__.autobind
34055
34051
  ], link.prototype, "__generateForm", null);
34056
34052
  jodit_core_global__WEBPACK_IMPORTED_MODULE_2__/* .pluginSystem */ .fg.add('link', link);
34053
+ function writeClasses(modeClassName, className_input, className_select, a) {
34054
+ if (modeClassName && (className_input ?? className_select)) {
34055
+ if (modeClassName === 'input') {
34056
+ if (className_input.value === '' && a.hasAttribute('class')) {
34057
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
34058
+ }
34059
+ if (className_input.value !== '') {
34060
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', className_input.value);
34061
+ }
34062
+ }
34063
+ else if (modeClassName === 'select') {
34064
+ if (a.hasAttribute('class')) {
34065
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
34066
+ }
34067
+ for (let i = 0; i < className_select.selectedOptions.length; i++) {
34068
+ const className = className_select.selectedOptions.item(i)?.value;
34069
+ if (className) {
34070
+ a.classList.add(className);
34071
+ }
34072
+ }
34073
+ }
34074
+ }
34075
+ }
34076
+ function readClassnames(modeClassName, className_input, link, className_select) {
34077
+ switch (modeClassName) {
34078
+ case 'input':
34079
+ if (className_input) {
34080
+ className_input.value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
34081
+ }
34082
+ break;
34083
+ case 'select':
34084
+ if (className_select) {
34085
+ for (let i = 0; i < className_select.selectedOptions.length; i++) {
34086
+ const option = className_select.options.item(i);
34087
+ if (option) {
34088
+ option.selected = false;
34089
+ }
34090
+ }
34091
+ const classNames = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
34092
+ classNames.split(' ').forEach(className => {
34093
+ if (className) {
34094
+ for (let i = 0; i < className_select.options.length; i++) {
34095
+ const option = className_select.options.item(i);
34096
+ if (option?.value && option.value === className) {
34097
+ option.selected = true;
34098
+ }
34099
+ }
34100
+ }
34101
+ });
34102
+ }
34103
+ break;
34104
+ }
34105
+ }
34106
+ function writeImage(a, content_input, textWasChanged, url_input) {
34107
+ let newContent = a.textContent;
34108
+ if (content_input.value.trim().length) {
34109
+ if (textWasChanged) {
34110
+ newContent = content_input.value;
34111
+ }
34112
+ }
34113
+ else {
34114
+ newContent = url_input.value;
34115
+ }
34116
+ const content = a.textContent;
34117
+ if (newContent !== content) {
34118
+ a.textContent = newContent;
34119
+ }
34120
+ }
34057
34121
 
34058
34122
 
34059
34123
  /***/ }),
@@ -36891,7 +36955,6 @@ jodit_config__WEBPACK_IMPORTED_MODULE_2__/* .Config */ .T.prototype.controls.fin
36891
36955
  /* harmony export */ _B: function() { return /* binding */ highlightTextRanges; },
36892
36956
  /* harmony export */ zy: function() { return /* binding */ getSelectionWrappers; }
36893
36957
  /* harmony export */ });
36894
- /* unused harmony export isSelectionWrapper */
36895
36958
  /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(55186);
36896
36959
  /* harmony import */ var jodit_core_helpers_utils_selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58720);
36897
36960
  /*!
@@ -36913,60 +36976,14 @@ function highlightTextRanges(jodit, rng, restRanges, ci, root) {
36913
36976
  rng.endContainer.nodeValue == null) {
36914
36977
  return;
36915
36978
  }
36916
- if (jodit.o.search.useCustomHighlightAPI &&
36917
- // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
36918
- typeof window.Highlight !== 'undefined') {
36919
- const ranges = [rng, ...restRanges].map(rng => {
36920
- const range = jodit.selection.createRange();
36921
- range.setStart(rng.startContainer, rng.startOffset);
36922
- range.setEnd(rng.endContainer, rng.endOffset);
36923
- return range;
36924
- });
36925
- // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
36926
- const searchHighlight = new Highlight(...ranges);
36927
- // @ts-ignore
36928
- CSS.highlights.clear();
36929
- // @ts-ignore
36930
- CSS.highlights.set('jodit-search-result', searchHighlight);
36931
- restRanges.length = 0;
36979
+ if (checkNativeSelectionMethod(jodit, rng, restRanges)) {
36932
36980
  return;
36933
36981
  }
36934
36982
  const span = ci.element('span', {
36935
36983
  [TMP_ATTR]: true
36936
36984
  });
36937
36985
  jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.markTemporary(span);
36938
- const startText = rng.startContainer.nodeValue;
36939
- let diff = 0;
36940
- if (rng.startOffset !== 0) {
36941
- const text = ci.text(startText.substring(0, rng.startOffset));
36942
- rng.startContainer.nodeValue = startText.substring(rng.startOffset);
36943
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.before(rng.startContainer, text);
36944
- if (rng.startContainer === rng.endContainer) {
36945
- diff = rng.startOffset;
36946
- rng.endOffset -= diff;
36947
- }
36948
- rng.startOffset = 0;
36949
- }
36950
- const endText = rng.endContainer.nodeValue;
36951
- if (rng.endOffset !== endText.length) {
36952
- const text = ci.text(endText.substring(rng.endOffset));
36953
- rng.endContainer.nodeValue = endText.substring(0, rng.endOffset);
36954
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.after(rng.endContainer, text);
36955
- for (const range of restRanges) {
36956
- if (range.startContainer === rng.endContainer) {
36957
- range.startContainer = text;
36958
- range.startOffset = range.startOffset - rng.endOffset - diff;
36959
- if (range.endContainer === rng.endContainer) {
36960
- range.endContainer = text;
36961
- range.endOffset = range.endOffset - rng.endOffset - diff;
36962
- }
36963
- }
36964
- else {
36965
- break;
36966
- }
36967
- }
36968
- rng.endOffset = rng.endContainer.nodeValue.length;
36969
- }
36986
+ normalizeRanges(rng, restRanges, ci);
36970
36987
  let next = rng.startContainer;
36971
36988
  do {
36972
36989
  if (!next) {
@@ -37012,6 +37029,61 @@ function clearSelectionWrappersFromHTML(root) {
37012
37029
  function isSelectionWrapper(node) {
37013
37030
  return jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.isElement(node) && node.hasAttribute(TMP_ATTR);
37014
37031
  }
37032
+ function checkNativeSelectionMethod(jodit, rng, restRanges) {
37033
+ if (jodit.o.search.useCustomHighlightAPI &&
37034
+ // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
37035
+ typeof window.Highlight !== 'undefined') {
37036
+ const ranges = [rng, ...restRanges].map(rng => {
37037
+ const range = jodit.selection.createRange();
37038
+ range.setStart(rng.startContainer, rng.startOffset);
37039
+ range.setEnd(rng.endContainer, rng.endOffset);
37040
+ return range;
37041
+ });
37042
+ // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
37043
+ const searchHighlight = new Highlight(...ranges);
37044
+ // @ts-ignore
37045
+ CSS.highlights.clear();
37046
+ // @ts-ignore
37047
+ CSS.highlights.set('jodit-search-result', searchHighlight);
37048
+ restRanges.length = 0;
37049
+ return true;
37050
+ }
37051
+ return false;
37052
+ }
37053
+ function normalizeRanges(rng, restRanges, ci) {
37054
+ const startText = rng.startContainer.nodeValue;
37055
+ let diff = 0;
37056
+ if (rng.startOffset !== 0) {
37057
+ const text = ci.text(startText.substring(0, rng.startOffset));
37058
+ rng.startContainer.nodeValue = startText.substring(rng.startOffset);
37059
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.before(rng.startContainer, text);
37060
+ if (rng.startContainer === rng.endContainer) {
37061
+ diff = rng.startOffset;
37062
+ rng.endOffset -= diff;
37063
+ }
37064
+ rng.startOffset = 0;
37065
+ }
37066
+ const endText = rng.endContainer.nodeValue;
37067
+ if (rng.endOffset !== endText.length) {
37068
+ const text = ci.text(endText.substring(rng.endOffset));
37069
+ rng.endContainer.nodeValue = endText.substring(0, rng.endOffset);
37070
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.after(rng.endContainer, text);
37071
+ for (const range of restRanges) {
37072
+ if (range.startContainer === rng.endContainer) {
37073
+ range.startContainer = text;
37074
+ range.startOffset = range.startOffset - rng.endOffset - diff;
37075
+ if (range.endContainer === rng.endContainer) {
37076
+ range.endContainer = text;
37077
+ range.endOffset = range.endOffset - rng.endOffset - diff;
37078
+ }
37079
+ }
37080
+ else {
37081
+ break;
37082
+ }
37083
+ }
37084
+ rng.endOffset = rng.endContainer.nodeValue.length;
37085
+ }
37086
+ }
37015
37087
 
37016
37088
 
37017
37089
  /***/ }),
@@ -40393,38 +40465,10 @@ function tableKeyboardNavigation(editor) {
40393
40465
  .off('.tableKeyboardNavigation')
40394
40466
  .on('keydown.tableKeyboardNavigation', (event) => {
40395
40467
  const { key } = event;
40396
- if (!WORK_KEYS.has(key)) {
40397
- return;
40398
- }
40399
- const current = editor.s.current();
40400
- if (!current) {
40401
- return;
40402
- }
40403
- const cell = jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.up(current, jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isCell, editor.editor);
40468
+ const cell = findCell(editor, key);
40404
40469
  if (!cell) {
40405
40470
  return;
40406
40471
  }
40407
- const { range } = editor.s;
40408
- if (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_TAB && current !== cell) {
40409
- const isNextDirection = key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_RIGHT || key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN;
40410
- const hasNext = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.call)(!isNextDirection ? jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.prev : jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.next, current, elm => key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP || key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN
40411
- ? jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isTag(elm, 'br')
40412
- : Boolean(elm), cell);
40413
- if ((!isNextDirection &&
40414
- (hasNext ||
40415
- (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP &&
40416
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
40417
- range.startOffset !== 0))) ||
40418
- (isNextDirection &&
40419
- (hasNext ||
40420
- (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN &&
40421
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
40422
- current.nodeValue &&
40423
- range.startOffset !==
40424
- current.nodeValue.length)))) {
40425
- return;
40426
- }
40427
- }
40428
40472
  const tableModule = editor.getInstance(jodit_modules_table_table__WEBPACK_IMPORTED_MODULE_4__/* .Table */ .X, editor.o);
40429
40473
  const table = jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.closest(cell, 'table', editor.editor);
40430
40474
  let next = null;
@@ -40482,6 +40526,40 @@ function tableKeyboardNavigation(editor) {
40482
40526
  });
40483
40527
  }
40484
40528
  jodit_core_global__WEBPACK_IMPORTED_MODULE_2__/* .pluginSystem */ .fg.add('tableKeyboardNavigation', tableKeyboardNavigation);
40529
+ function findCell(editor, key) {
40530
+ if (!WORK_KEYS.has(key)) {
40531
+ return;
40532
+ }
40533
+ const current = editor.s.current();
40534
+ if (!current) {
40535
+ return;
40536
+ }
40537
+ const cell = jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.up(current, jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isCell, editor.editor);
40538
+ if (!cell) {
40539
+ return;
40540
+ }
40541
+ const { range } = editor.s;
40542
+ if (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_TAB && current !== cell) {
40543
+ const isNextDirection = key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_RIGHT || key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN;
40544
+ const hasNext = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.call)(!isNextDirection ? jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.prev : jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.next, current, elm => key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP || key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN
40545
+ ? jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isTag(elm, 'br')
40546
+ : Boolean(elm), cell);
40547
+ if ((!isNextDirection &&
40548
+ (hasNext ||
40549
+ (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP &&
40550
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
40551
+ range.startOffset !== 0))) ||
40552
+ (isNextDirection &&
40553
+ (hasNext ||
40554
+ (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN &&
40555
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
40556
+ current.nodeValue &&
40557
+ range.startOffset !== current.nodeValue.length)))) {
40558
+ return;
40559
+ }
40560
+ }
40561
+ return cell;
40562
+ }
40485
40563
 
40486
40564
 
40487
40565
  /***/ }),
@@ -42397,16 +42475,16 @@ var __webpack_exports__ = {};
42397
42475
  __webpack_require__.r(__webpack_exports__);
42398
42476
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
42399
42477
  /* harmony export */ CommitMode: function() { return /* binding */ CommitMode; },
42400
- /* harmony export */ Jodit: function() { return /* reexport safe */ _jodit__WEBPACK_IMPORTED_MODULE_6__.x; }
42478
+ /* harmony export */ Jodit: function() { return /* reexport safe */ _jodit__WEBPACK_IMPORTED_MODULE_0__.x; }
42401
42479
  /* harmony export */ });
42402
- /* harmony import */ var jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9823);
42403
- /* harmony import */ var jodit_plugins_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88222);
42480
+ /* harmony import */ var _jodit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(46173);
42481
+ /* harmony import */ var jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9823);
42404
42482
  /* harmony import */ var _core_constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17352);
42405
42483
  /* harmony import */ var _core_decorators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22664);
42406
42484
  /* harmony import */ var _modules___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(37435);
42407
42485
  /* harmony import */ var _styles_icons___WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(79721);
42408
- /* harmony import */ var _jodit__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(46173);
42409
- /* harmony import */ var _languages__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(74470);
42486
+ /* harmony import */ var _languages__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(74470);
42487
+ /* harmony import */ var jodit_plugins_index__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(88222);
42410
42488
  /*!
42411
42489
  * Jodit Editor (https://xdsoft.net/jodit/)
42412
42490
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -42417,6 +42495,7 @@ __webpack_require__.r(__webpack_exports__);
42417
42495
  * @packageDocumentation
42418
42496
  * @module jodit
42419
42497
  */
42498
+ // eslint-disable-next-line simple-import-sort/imports
42420
42499
 
42421
42500
 
42422
42501
 
@@ -42429,7 +42508,7 @@ __webpack_require__.r(__webpack_exports__);
42429
42508
 
42430
42509
  // copy constants in Jodit
42431
42510
  Object.keys(_core_constants__WEBPACK_IMPORTED_MODULE_2__).forEach((key) => {
42432
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x[key] = _core_constants__WEBPACK_IMPORTED_MODULE_2__[key];
42511
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x[key] = _core_constants__WEBPACK_IMPORTED_MODULE_2__[key];
42433
42512
  });
42434
42513
  const esFilter = (key) => key !== '__esModule';
42435
42514
  // Icons
@@ -42444,32 +42523,32 @@ Object.keys(_modules___WEBPACK_IMPORTED_MODULE_4__)
42444
42523
  .forEach((key) => {
42445
42524
  // @ts-ignore
42446
42525
  const module = _modules___WEBPACK_IMPORTED_MODULE_4__[key];
42447
- const name = (0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__/* .isFunction */ .Tn)(module.prototype?.className)
42526
+ const name = (0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_1__/* .isFunction */ .Tn)(module.prototype?.className)
42448
42527
  ? module.prototype.className()
42449
42528
  : key;
42450
- if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__/* .isString */ .Kg)(name)) {
42529
+ if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_1__/* .isString */ .Kg)(name)) {
42451
42530
  console.warn('Module name must be a string', key);
42452
42531
  return;
42453
42532
  }
42454
42533
  // @ts-ignore
42455
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x.modules[name] = module;
42534
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x.modules[name] = module;
42456
42535
  });
42457
42536
  // Decorators
42458
42537
  Object.keys(_core_decorators__WEBPACK_IMPORTED_MODULE_3__)
42459
42538
  .filter(esFilter)
42460
42539
  .forEach((key) => {
42461
42540
  // @ts-ignore
42462
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x.decorators[key] = _core_decorators__WEBPACK_IMPORTED_MODULE_3__[key];
42541
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x.decorators[key] = _core_decorators__WEBPACK_IMPORTED_MODULE_3__[key];
42463
42542
  });
42464
42543
  ['Confirm', 'Alert', 'Prompt'].forEach((key) => {
42465
42544
  // @ts-ignore
42466
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x[key] = _modules___WEBPACK_IMPORTED_MODULE_4__[key];
42545
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x[key] = _modules___WEBPACK_IMPORTED_MODULE_4__[key];
42467
42546
  });
42468
42547
  // Languages
42469
- Object.keys(_languages__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A)
42548
+ Object.keys(_languages__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)
42470
42549
  .filter(esFilter)
42471
42550
  .forEach((key) => {
42472
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x.lang[key] = _languages__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A[key];
42551
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x.lang[key] = _languages__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A[key];
42473
42552
  });
42474
42553
 
42475
42554
  class CommitMode {