@uiw/react-md-editor 3.3.6 → 3.3.8

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 (83) hide show
  1. package/README.md +2 -8
  2. package/dist/markdown-editor.css +3 -7
  3. package/lib/cjs/Context.js +2 -8
  4. package/lib/cjs/Editor.js +54 -86
  5. package/lib/cjs/commands/bold.js +5 -9
  6. package/lib/cjs/commands/code.js +5 -11
  7. package/lib/cjs/commands/comment.js +5 -7
  8. package/lib/cjs/commands/divider.js +1 -1
  9. package/lib/cjs/commands/fullscreen.js +1 -5
  10. package/lib/cjs/commands/group.js +3 -10
  11. package/lib/cjs/commands/hr.js +1 -4
  12. package/lib/cjs/commands/image.js +5 -9
  13. package/lib/cjs/commands/index.d.ts +11 -12
  14. package/lib/cjs/commands/index.js +52 -87
  15. package/lib/cjs/commands/italic.js +5 -9
  16. package/lib/cjs/commands/link.js +5 -9
  17. package/lib/cjs/commands/list.js +7 -11
  18. package/lib/cjs/commands/preview.js +2 -5
  19. package/lib/cjs/commands/quote.js +3 -6
  20. package/lib/cjs/commands/strikeThrough.js +5 -9
  21. package/lib/cjs/commands/title.js +1 -6
  22. package/lib/cjs/commands/title1.js +1 -6
  23. package/lib/cjs/commands/title2.js +1 -6
  24. package/lib/cjs/commands/title3.js +1 -6
  25. package/lib/cjs/commands/title4.js +1 -6
  26. package/lib/cjs/commands/title5.js +1 -6
  27. package/lib/cjs/commands/title6.js +1 -6
  28. package/lib/cjs/components/DragBar/index.js +3 -14
  29. package/lib/cjs/components/TextArea/Markdown.js +8 -20
  30. package/lib/cjs/components/TextArea/Textarea.js +17 -36
  31. package/lib/cjs/components/TextArea/handleKeyDown.js +1 -19
  32. package/lib/cjs/components/TextArea/index.js +11 -27
  33. package/lib/cjs/components/TextArea/shortcuts.js +1 -17
  34. package/lib/cjs/components/Toolbar/Child.js +9 -18
  35. package/lib/cjs/components/Toolbar/index.js +14 -34
  36. package/lib/cjs/index.js +2 -11
  37. package/lib/cjs/utils/InsertTextAtPosition.js +28 -33
  38. package/lib/cjs/utils/getSurroundingWord.js +9 -12
  39. package/lib/cjs/utils/index.js +1 -1
  40. package/lib/cjs/utils/markdownUtils.js +12 -23
  41. package/lib/esm/Context.js +1 -1
  42. package/lib/esm/Editor.js +54 -71
  43. package/lib/esm/commands/bold.js +5 -5
  44. package/lib/esm/commands/code.js +5 -7
  45. package/lib/esm/commands/comment.js +5 -5
  46. package/lib/esm/commands/divider.js +1 -1
  47. package/lib/esm/commands/fullscreen.js +1 -2
  48. package/lib/esm/commands/group.js +3 -5
  49. package/lib/esm/commands/hr.js +1 -1
  50. package/lib/esm/commands/image.js +5 -5
  51. package/lib/esm/commands/index.d.ts +11 -12
  52. package/lib/esm/commands/index.js +8 -18
  53. package/lib/esm/commands/italic.js +5 -5
  54. package/lib/esm/commands/link.js +5 -5
  55. package/lib/esm/commands/list.js +5 -5
  56. package/lib/esm/commands/preview.js +1 -1
  57. package/lib/esm/commands/quote.js +3 -2
  58. package/lib/esm/commands/strikeThrough.js +5 -5
  59. package/lib/esm/commands/title.js +1 -1
  60. package/lib/esm/commands/title1.js +1 -3
  61. package/lib/esm/commands/title2.js +1 -3
  62. package/lib/esm/commands/title3.js +1 -3
  63. package/lib/esm/commands/title4.js +1 -3
  64. package/lib/esm/commands/title5.js +1 -3
  65. package/lib/esm/commands/title6.js +1 -3
  66. package/lib/esm/components/DragBar/index.js +3 -12
  67. package/lib/esm/components/TextArea/Markdown.js +9 -13
  68. package/lib/esm/components/TextArea/Textarea.js +17 -20
  69. package/lib/esm/components/TextArea/handleKeyDown.js +2 -14
  70. package/lib/esm/components/TextArea/index.css +1 -2
  71. package/lib/esm/components/TextArea/index.js +11 -14
  72. package/lib/esm/components/TextArea/shortcuts.js +1 -14
  73. package/lib/esm/components/Toolbar/Child.js +9 -10
  74. package/lib/esm/components/Toolbar/index.css +2 -5
  75. package/lib/esm/components/Toolbar/index.js +14 -25
  76. package/lib/esm/index.js +1 -1
  77. package/lib/esm/utils/InsertTextAtPosition.js +28 -31
  78. package/lib/esm/utils/getSurroundingWord.js +9 -10
  79. package/lib/esm/utils/index.js +1 -1
  80. package/lib/esm/utils/markdownUtils.js +10 -16
  81. package/package.json +14 -66
  82. package/src/commands/index.ts +17 -13
  83. package/src/components/Toolbar/index.tsx +2 -4
@@ -1,83 +1,77 @@
1
1
  import getSurroundingWord from './getSurroundingWord';
2
2
  export function selectWord(_ref) {
3
3
  var text = _ref.text,
4
- selection = _ref.selection;
5
-
4
+ selection = _ref.selection;
6
5
  if (text && text.length && selection.start === selection.end) {
7
6
  // the user is pointing to a word
8
7
  return getSurroundingWord(text, selection.start);
9
8
  }
10
-
11
9
  return selection;
12
10
  }
11
+
13
12
  /**
14
13
  * Gets the number of line-breaks that would have to be inserted before the given 'startPosition'
15
14
  * to make sure there's an empty line between 'startPosition' and the previous text
16
15
  */
17
-
18
16
  export function getBreaksNeededForEmptyLineBefore() {
19
17
  var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
20
18
  var startPosition = arguments.length > 1 ? arguments[1] : undefined;
21
- if (startPosition === 0) return 0; // rules:
19
+ if (startPosition === 0) return 0;
20
+
21
+ // rules:
22
22
  // - If we're in the first line, no breaks are needed
23
23
  // - Otherwise there must be 2 breaks before the previous character. Depending on how many breaks exist already, we
24
24
  // may need to insert 0, 1 or 2 breaks
25
25
 
26
26
  var neededBreaks = 2;
27
27
  var isInFirstLine = true;
28
-
29
28
  for (var i = startPosition - 1; i >= 0 && neededBreaks >= 0; i--) {
30
29
  switch (text.charCodeAt(i)) {
31
30
  case 32:
32
31
  // blank space
33
32
  continue;
34
-
35
33
  case 10:
36
34
  // line break
37
35
  neededBreaks--;
38
36
  isInFirstLine = false;
39
37
  break;
40
-
41
38
  default:
42
39
  return neededBreaks;
43
40
  }
44
41
  }
45
-
46
42
  return isInFirstLine ? 0 : neededBreaks;
47
43
  }
44
+
48
45
  /**
49
46
  * Gets the number of line-breaks that would have to be inserted after the given 'startPosition'
50
47
  * to make sure there's an empty line between 'startPosition' and the next text
51
48
  */
52
-
53
49
  export function getBreaksNeededForEmptyLineAfter() {
54
50
  var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
55
51
  var startPosition = arguments.length > 1 ? arguments[1] : undefined;
56
- if (startPosition === text.length - 1) return 0; // rules:
52
+ if (startPosition === text.length - 1) return 0;
53
+
54
+ // rules:
57
55
  // - If we're in the first line, no breaks are needed
58
56
  // - Otherwise there must be 2 breaks before the previous character. Depending on how many breaks exist already, we
59
57
  // may need to insert 0, 1 or 2 breaks
60
58
 
61
59
  var neededBreaks = 2;
62
60
  var isInLastLine = true;
63
-
64
61
  for (var i = startPosition; i < text.length && neededBreaks >= 0; i++) {
65
62
  switch (text.charCodeAt(i)) {
66
63
  case 32:
67
64
  continue;
68
-
69
65
  case 10:
70
66
  {
71
67
  neededBreaks--;
72
68
  isInLastLine = false;
73
69
  break;
74
70
  }
75
-
76
71
  default:
77
72
  return neededBreaks;
78
73
  }
79
74
  }
80
-
81
75
  return isInLastLine ? 0 : neededBreaks;
82
76
  }
83
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9tYXJrZG93blV0aWxzLnRzIl0sIm5hbWVzIjpbImdldFN1cnJvdW5kaW5nV29yZCIsInNlbGVjdFdvcmQiLCJ0ZXh0Iiwic2VsZWN0aW9uIiwibGVuZ3RoIiwic3RhcnQiLCJlbmQiLCJnZXRCcmVha3NOZWVkZWRGb3JFbXB0eUxpbmVCZWZvcmUiLCJzdGFydFBvc2l0aW9uIiwibmVlZGVkQnJlYWtzIiwiaXNJbkZpcnN0TGluZSIsImkiLCJjaGFyQ29kZUF0IiwiZ2V0QnJlYWtzTmVlZGVkRm9yRW1wdHlMaW5lQWZ0ZXIiLCJpc0luTGFzdExpbmUiXSwibWFwcGluZ3MiOiJBQUNBLE9BQU9BLGtCQUFQLE1BQStCLHNCQUEvQjtBQU9BLE9BQU8sU0FBU0MsVUFBVCxPQUFpRTtBQUFBLE1BQTNDQyxJQUEyQyxRQUEzQ0EsSUFBMkM7QUFBQSxNQUFyQ0MsU0FBcUMsUUFBckNBLFNBQXFDOztBQUN0RSxNQUFJRCxJQUFJLElBQUlBLElBQUksQ0FBQ0UsTUFBYixJQUF1QkQsU0FBUyxDQUFDRSxLQUFWLEtBQW9CRixTQUFTLENBQUNHLEdBQXpELEVBQThEO0FBQzVEO0FBQ0EsV0FBT04sa0JBQWtCLENBQUNFLElBQUQsRUFBT0MsU0FBUyxDQUFDRSxLQUFqQixDQUF6QjtBQUNEOztBQUNELFNBQU9GLFNBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE9BQU8sU0FBU0ksaUNBQVQsR0FBcUY7QUFBQSxNQUExQ0wsSUFBMEMsdUVBQW5DLEVBQW1DO0FBQUEsTUFBL0JNLGFBQStCO0FBQzFGLE1BQUlBLGFBQWEsS0FBSyxDQUF0QixFQUF5QixPQUFPLENBQVAsQ0FEaUUsQ0FHMUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBSUMsWUFBWSxHQUFHLENBQW5CO0FBQ0EsTUFBSUMsYUFBYSxHQUFHLElBQXBCOztBQUNBLE9BQUssSUFBSUMsQ0FBQyxHQUFHSCxhQUFhLEdBQUcsQ0FBN0IsRUFBZ0NHLENBQUMsSUFBSSxDQUFMLElBQVVGLFlBQVksSUFBSSxDQUExRCxFQUE2REUsQ0FBQyxFQUE5RCxFQUFrRTtBQUNoRSxZQUFRVCxJQUFJLENBQUNVLFVBQUwsQ0FBZ0JELENBQWhCLENBQVI7QUFDRSxXQUFLLEVBQUw7QUFBUztBQUNQOztBQUNGLFdBQUssRUFBTDtBQUFTO0FBQ1BGLFFBQUFBLFlBQVk7QUFDWkMsUUFBQUEsYUFBYSxHQUFHLEtBQWhCO0FBQ0E7O0FBQ0Y7QUFDRSxlQUFPRCxZQUFQO0FBUko7QUFVRDs7QUFDRCxTQUFPQyxhQUFhLEdBQUcsQ0FBSCxHQUFPRCxZQUEzQjtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsT0FBTyxTQUFTSSxnQ0FBVCxHQUFvRjtBQUFBLE1BQTFDWCxJQUEwQyx1RUFBbkMsRUFBbUM7QUFBQSxNQUEvQk0sYUFBK0I7QUFDekYsTUFBSUEsYUFBYSxLQUFLTixJQUFJLENBQUNFLE1BQUwsR0FBYyxDQUFwQyxFQUF1QyxPQUFPLENBQVAsQ0FEa0QsQ0FHekY7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBSUssWUFBWSxHQUFHLENBQW5CO0FBQ0EsTUFBSUssWUFBWSxHQUFHLElBQW5COztBQUNBLE9BQUssSUFBSUgsQ0FBQyxHQUFHSCxhQUFiLEVBQTRCRyxDQUFDLEdBQUdULElBQUksQ0FBQ0UsTUFBVCxJQUFtQkssWUFBWSxJQUFJLENBQS9ELEVBQWtFRSxDQUFDLEVBQW5FLEVBQXVFO0FBQ3JFLFlBQVFULElBQUksQ0FBQ1UsVUFBTCxDQUFnQkQsQ0FBaEIsQ0FBUjtBQUNFLFdBQUssRUFBTDtBQUNFOztBQUNGLFdBQUssRUFBTDtBQUFTO0FBQ1BGLFVBQUFBLFlBQVk7QUFDWkssVUFBQUEsWUFBWSxHQUFHLEtBQWY7QUFDQTtBQUNEOztBQUNEO0FBQ0UsZUFBT0wsWUFBUDtBQVRKO0FBV0Q7O0FBQ0QsU0FBT0ssWUFBWSxHQUFHLENBQUgsR0FBT0wsWUFBMUI7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRleHRSYW5nZSB9IGZyb20gJy4uL2NvbW1hbmRzJztcbmltcG9ydCBnZXRTdXJyb3VuZGluZ1dvcmQgZnJvbSAnLi9nZXRTdXJyb3VuZGluZ1dvcmQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRTZWN0aW9uIHtcbiAgdGV4dDogc3RyaW5nO1xuICBzZWxlY3Rpb246IFRleHRSYW5nZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdFdvcmQoeyB0ZXh0LCBzZWxlY3Rpb24gfTogVGV4dFNlY3Rpb24pOiBUZXh0UmFuZ2Uge1xuICBpZiAodGV4dCAmJiB0ZXh0Lmxlbmd0aCAmJiBzZWxlY3Rpb24uc3RhcnQgPT09IHNlbGVjdGlvbi5lbmQpIHtcbiAgICAvLyB0aGUgdXNlciBpcyBwb2ludGluZyB0byBhIHdvcmRcbiAgICByZXR1cm4gZ2V0U3Vycm91bmRpbmdXb3JkKHRleHQsIHNlbGVjdGlvbi5zdGFydCk7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdGlvbjtcbn1cblxuLyoqXG4gKiAgR2V0cyB0aGUgbnVtYmVyIG9mIGxpbmUtYnJlYWtzIHRoYXQgd291bGQgaGF2ZSB0byBiZSBpbnNlcnRlZCBiZWZvcmUgdGhlIGdpdmVuICdzdGFydFBvc2l0aW9uJ1xuICogIHRvIG1ha2Ugc3VyZSB0aGVyZSdzIGFuIGVtcHR5IGxpbmUgYmV0d2VlbiAnc3RhcnRQb3NpdGlvbicgYW5kIHRoZSBwcmV2aW91cyB0ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcmVha3NOZWVkZWRGb3JFbXB0eUxpbmVCZWZvcmUodGV4dCA9ICcnLCBzdGFydFBvc2l0aW9uOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoc3RhcnRQb3NpdGlvbiA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgLy8gcnVsZXM6XG4gIC8vIC0gSWYgd2UncmUgaW4gdGhlIGZpcnN0IGxpbmUsIG5vIGJyZWFrcyBhcmUgbmVlZGVkXG4gIC8vIC0gT3RoZXJ3aXNlIHRoZXJlIG11c3QgYmUgMiBicmVha3MgYmVmb3JlIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIuIERlcGVuZGluZyBvbiBob3cgbWFueSBicmVha3MgZXhpc3QgYWxyZWFkeSwgd2VcbiAgLy8gICAgICBtYXkgbmVlZCB0byBpbnNlcnQgMCwgMSBvciAyIGJyZWFrc1xuXG4gIGxldCBuZWVkZWRCcmVha3MgPSAyO1xuICBsZXQgaXNJbkZpcnN0TGluZSA9IHRydWU7XG4gIGZvciAobGV0IGkgPSBzdGFydFBvc2l0aW9uIC0gMTsgaSA+PSAwICYmIG5lZWRlZEJyZWFrcyA+PSAwOyBpLS0pIHtcbiAgICBzd2l0Y2ggKHRleHQuY2hhckNvZGVBdChpKSkge1xuICAgICAgY2FzZSAzMjogLy8gYmxhbmsgc3BhY2VcbiAgICAgICAgY29udGludWU7XG4gICAgICBjYXNlIDEwOiAvLyBsaW5lIGJyZWFrXG4gICAgICAgIG5lZWRlZEJyZWFrcy0tO1xuICAgICAgICBpc0luRmlyc3RMaW5lID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG5lZWRlZEJyZWFrcztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlzSW5GaXJzdExpbmUgPyAwIDogbmVlZGVkQnJlYWtzO1xufVxuXG4vKipcbiAqICBHZXRzIHRoZSBudW1iZXIgb2YgbGluZS1icmVha3MgdGhhdCB3b3VsZCBoYXZlIHRvIGJlIGluc2VydGVkIGFmdGVyIHRoZSBnaXZlbiAnc3RhcnRQb3NpdGlvbidcbiAqICB0byBtYWtlIHN1cmUgdGhlcmUncyBhbiBlbXB0eSBsaW5lIGJldHdlZW4gJ3N0YXJ0UG9zaXRpb24nIGFuZCB0aGUgbmV4dCB0ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcmVha3NOZWVkZWRGb3JFbXB0eUxpbmVBZnRlcih0ZXh0ID0gJycsIHN0YXJ0UG9zaXRpb246IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChzdGFydFBvc2l0aW9uID09PSB0ZXh0Lmxlbmd0aCAtIDEpIHJldHVybiAwO1xuXG4gIC8vIHJ1bGVzOlxuICAvLyAtIElmIHdlJ3JlIGluIHRoZSBmaXJzdCBsaW5lLCBubyBicmVha3MgYXJlIG5lZWRlZFxuICAvLyAtIE90aGVyd2lzZSB0aGVyZSBtdXN0IGJlIDIgYnJlYWtzIGJlZm9yZSB0aGUgcHJldmlvdXMgY2hhcmFjdGVyLiBEZXBlbmRpbmcgb24gaG93IG1hbnkgYnJlYWtzIGV4aXN0IGFscmVhZHksIHdlXG4gIC8vICAgICAgbWF5IG5lZWQgdG8gaW5zZXJ0IDAsIDEgb3IgMiBicmVha3NcblxuICBsZXQgbmVlZGVkQnJlYWtzID0gMjtcbiAgbGV0IGlzSW5MYXN0TGluZSA9IHRydWU7XG4gIGZvciAobGV0IGkgPSBzdGFydFBvc2l0aW9uOyBpIDwgdGV4dC5sZW5ndGggJiYgbmVlZGVkQnJlYWtzID49IDA7IGkrKykge1xuICAgIHN3aXRjaCAodGV4dC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDMyOlxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGNhc2UgMTA6IHtcbiAgICAgICAgbmVlZGVkQnJlYWtzLS07XG4gICAgICAgIGlzSW5MYXN0TGluZSA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuZWVkZWRCcmVha3M7XG4gICAgfVxuICB9XG4gIHJldHVybiBpc0luTGFzdExpbmUgPyAwIDogbmVlZGVkQnJlYWtzO1xufVxuIl19
77
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRTdXJyb3VuZGluZ1dvcmQiLCJzZWxlY3RXb3JkIiwidGV4dCIsInNlbGVjdGlvbiIsImxlbmd0aCIsInN0YXJ0IiwiZW5kIiwiZ2V0QnJlYWtzTmVlZGVkRm9yRW1wdHlMaW5lQmVmb3JlIiwic3RhcnRQb3NpdGlvbiIsIm5lZWRlZEJyZWFrcyIsImlzSW5GaXJzdExpbmUiLCJpIiwiY2hhckNvZGVBdCIsImdldEJyZWFrc05lZWRlZEZvckVtcHR5TGluZUFmdGVyIiwiaXNJbkxhc3RMaW5lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL21hcmtkb3duVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGV4dFJhbmdlIH0gZnJvbSAnLi4vY29tbWFuZHMnO1xuaW1wb3J0IGdldFN1cnJvdW5kaW5nV29yZCBmcm9tICcuL2dldFN1cnJvdW5kaW5nV29yZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dFNlY3Rpb24ge1xuICB0ZXh0OiBzdHJpbmc7XG4gIHNlbGVjdGlvbjogVGV4dFJhbmdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0V29yZCh7IHRleHQsIHNlbGVjdGlvbiB9OiBUZXh0U2VjdGlvbik6IFRleHRSYW5nZSB7XG4gIGlmICh0ZXh0ICYmIHRleHQubGVuZ3RoICYmIHNlbGVjdGlvbi5zdGFydCA9PT0gc2VsZWN0aW9uLmVuZCkge1xuICAgIC8vIHRoZSB1c2VyIGlzIHBvaW50aW5nIHRvIGEgd29yZFxuICAgIHJldHVybiBnZXRTdXJyb3VuZGluZ1dvcmQodGV4dCwgc2VsZWN0aW9uLnN0YXJ0KTtcbiAgfVxuICByZXR1cm4gc2VsZWN0aW9uO1xufVxuXG4vKipcbiAqICBHZXRzIHRoZSBudW1iZXIgb2YgbGluZS1icmVha3MgdGhhdCB3b3VsZCBoYXZlIHRvIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgZ2l2ZW4gJ3N0YXJ0UG9zaXRpb24nXG4gKiAgdG8gbWFrZSBzdXJlIHRoZXJlJ3MgYW4gZW1wdHkgbGluZSBiZXR3ZWVuICdzdGFydFBvc2l0aW9uJyBhbmQgdGhlIHByZXZpb3VzIHRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJyZWFrc05lZWRlZEZvckVtcHR5TGluZUJlZm9yZSh0ZXh0ID0gJycsIHN0YXJ0UG9zaXRpb246IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChzdGFydFBvc2l0aW9uID09PSAwKSByZXR1cm4gMDtcblxuICAvLyBydWxlczpcbiAgLy8gLSBJZiB3ZSdyZSBpbiB0aGUgZmlyc3QgbGluZSwgbm8gYnJlYWtzIGFyZSBuZWVkZWRcbiAgLy8gLSBPdGhlcndpc2UgdGhlcmUgbXVzdCBiZSAyIGJyZWFrcyBiZWZvcmUgdGhlIHByZXZpb3VzIGNoYXJhY3Rlci4gRGVwZW5kaW5nIG9uIGhvdyBtYW55IGJyZWFrcyBleGlzdCBhbHJlYWR5LCB3ZVxuICAvLyAgICAgIG1heSBuZWVkIHRvIGluc2VydCAwLCAxIG9yIDIgYnJlYWtzXG5cbiAgbGV0IG5lZWRlZEJyZWFrcyA9IDI7XG4gIGxldCBpc0luRmlyc3RMaW5lID0gdHJ1ZTtcbiAgZm9yIChsZXQgaSA9IHN0YXJ0UG9zaXRpb24gLSAxOyBpID49IDAgJiYgbmVlZGVkQnJlYWtzID49IDA7IGktLSkge1xuICAgIHN3aXRjaCAodGV4dC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDMyOiAvLyBibGFuayBzcGFjZVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGNhc2UgMTA6IC8vIGxpbmUgYnJlYWtcbiAgICAgICAgbmVlZGVkQnJlYWtzLS07XG4gICAgICAgIGlzSW5GaXJzdExpbmUgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbmVlZGVkQnJlYWtzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaXNJbkZpcnN0TGluZSA/IDAgOiBuZWVkZWRCcmVha3M7XG59XG5cbi8qKlxuICogIEdldHMgdGhlIG51bWJlciBvZiBsaW5lLWJyZWFrcyB0aGF0IHdvdWxkIGhhdmUgdG8gYmUgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIGdpdmVuICdzdGFydFBvc2l0aW9uJ1xuICogIHRvIG1ha2Ugc3VyZSB0aGVyZSdzIGFuIGVtcHR5IGxpbmUgYmV0d2VlbiAnc3RhcnRQb3NpdGlvbicgYW5kIHRoZSBuZXh0IHRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJyZWFrc05lZWRlZEZvckVtcHR5TGluZUFmdGVyKHRleHQgPSAnJywgc3RhcnRQb3NpdGlvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHN0YXJ0UG9zaXRpb24gPT09IHRleHQubGVuZ3RoIC0gMSkgcmV0dXJuIDA7XG5cbiAgLy8gcnVsZXM6XG4gIC8vIC0gSWYgd2UncmUgaW4gdGhlIGZpcnN0IGxpbmUsIG5vIGJyZWFrcyBhcmUgbmVlZGVkXG4gIC8vIC0gT3RoZXJ3aXNlIHRoZXJlIG11c3QgYmUgMiBicmVha3MgYmVmb3JlIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIuIERlcGVuZGluZyBvbiBob3cgbWFueSBicmVha3MgZXhpc3QgYWxyZWFkeSwgd2VcbiAgLy8gICAgICBtYXkgbmVlZCB0byBpbnNlcnQgMCwgMSBvciAyIGJyZWFrc1xuXG4gIGxldCBuZWVkZWRCcmVha3MgPSAyO1xuICBsZXQgaXNJbkxhc3RMaW5lID0gdHJ1ZTtcbiAgZm9yIChsZXQgaSA9IHN0YXJ0UG9zaXRpb247IGkgPCB0ZXh0Lmxlbmd0aCAmJiBuZWVkZWRCcmVha3MgPj0gMDsgaSsrKSB7XG4gICAgc3dpdGNoICh0ZXh0LmNoYXJDb2RlQXQoaSkpIHtcbiAgICAgIGNhc2UgMzI6XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgY2FzZSAxMDoge1xuICAgICAgICBuZWVkZWRCcmVha3MtLTtcbiAgICAgICAgaXNJbkxhc3RMaW5lID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG5lZWRlZEJyZWFrcztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlzSW5MYXN0TGluZSA/IDAgOiBuZWVkZWRCcmVha3M7XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBLE9BQU9BLGtCQUFrQixNQUFNLHNCQUFzQjtBQU9yRCxPQUFPLFNBQVNDLFVBQVUsT0FBOEM7RUFBQSxJQUEzQ0MsSUFBSSxRQUFKQSxJQUFJO0lBQUVDLFNBQVMsUUFBVEEsU0FBUztFQUMxQyxJQUFJRCxJQUFJLElBQUlBLElBQUksQ0FBQ0UsTUFBTSxJQUFJRCxTQUFTLENBQUNFLEtBQUssS0FBS0YsU0FBUyxDQUFDRyxHQUFHLEVBQUU7SUFDNUQ7SUFDQSxPQUFPTixrQkFBa0IsQ0FBQ0UsSUFBSSxFQUFFQyxTQUFTLENBQUNFLEtBQUssQ0FBQztFQUNsRDtFQUNBLE9BQU9GLFNBQVM7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNJLGlDQUFpQyxHQUEyQztFQUFBLElBQTFDTCxJQUFJLHVFQUFHLEVBQUU7RUFBQSxJQUFFTSxhQUFxQjtFQUNoRixJQUFJQSxhQUFhLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQzs7RUFFakM7RUFDQTtFQUNBO0VBQ0E7O0VBRUEsSUFBSUMsWUFBWSxHQUFHLENBQUM7RUFDcEIsSUFBSUMsYUFBYSxHQUFHLElBQUk7RUFDeEIsS0FBSyxJQUFJQyxDQUFDLEdBQUdILGFBQWEsR0FBRyxDQUFDLEVBQUVHLENBQUMsSUFBSSxDQUFDLElBQUlGLFlBQVksSUFBSSxDQUFDLEVBQUVFLENBQUMsRUFBRSxFQUFFO0lBQ2hFLFFBQVFULElBQUksQ0FBQ1UsVUFBVSxDQUFDRCxDQUFDLENBQUM7TUFDeEIsS0FBSyxFQUFFO1FBQUU7UUFDUDtNQUNGLEtBQUssRUFBRTtRQUFFO1FBQ1BGLFlBQVksRUFBRTtRQUNkQyxhQUFhLEdBQUcsS0FBSztRQUNyQjtNQUNGO1FBQ0UsT0FBT0QsWUFBWTtJQUFDO0VBRTFCO0VBQ0EsT0FBT0MsYUFBYSxHQUFHLENBQUMsR0FBR0QsWUFBWTtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0ksZ0NBQWdDLEdBQTJDO0VBQUEsSUFBMUNYLElBQUksdUVBQUcsRUFBRTtFQUFBLElBQUVNLGFBQXFCO0VBQy9FLElBQUlBLGFBQWEsS0FBS04sSUFBSSxDQUFDRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQzs7RUFFL0M7RUFDQTtFQUNBO0VBQ0E7O0VBRUEsSUFBSUssWUFBWSxHQUFHLENBQUM7RUFDcEIsSUFBSUssWUFBWSxHQUFHLElBQUk7RUFDdkIsS0FBSyxJQUFJSCxDQUFDLEdBQUdILGFBQWEsRUFBRUcsQ0FBQyxHQUFHVCxJQUFJLENBQUNFLE1BQU0sSUFBSUssWUFBWSxJQUFJLENBQUMsRUFBRUUsQ0FBQyxFQUFFLEVBQUU7SUFDckUsUUFBUVQsSUFBSSxDQUFDVSxVQUFVLENBQUNELENBQUMsQ0FBQztNQUN4QixLQUFLLEVBQUU7UUFDTDtNQUNGLEtBQUssRUFBRTtRQUFFO1VBQ1BGLFlBQVksRUFBRTtVQUNkSyxZQUFZLEdBQUcsS0FBSztVQUNwQjtRQUNGO01BQ0E7UUFDRSxPQUFPTCxZQUFZO0lBQUM7RUFFMUI7RUFDQSxPQUFPSyxZQUFZLEdBQUcsQ0FBQyxHQUFHTCxZQUFZO0FBQ3hDIn0=
package/package.json CHANGED
@@ -1,33 +1,12 @@
1
1
  {
2
2
  "name": "@uiw/react-md-editor",
3
- "version": "3.3.6",
3
+ "version": "3.3.8",
4
4
  "description": "A markdown editor with preview, implemented with React.js and TypeScript.",
5
5
  "homepage": "https://uiwjs.github.io/react-md-editor/",
6
6
  "author": "kenny wang <wowohoo@qq.com>",
7
7
  "main": "lib/cjs/index.js",
8
8
  "module": "lib/esm/index.js",
9
9
  "typings": "lib/cjs/index.d.ts",
10
- "scripts": {
11
- "prepare": "npm run build",
12
- "test": "tsbb test --env=jsdom",
13
- "coverage": "tsbb test --env=jsdom --coverage",
14
- "released": "npm run build && npm run doc",
15
- "doc": "kkt build --app-src ./website",
16
- "start": "kkt start --app-src ./website",
17
- "build": "npm run ts:build && npm run types:esm && npm run types:cjs && npm run css:build && npm run css:build:dist",
18
- "watch": "npm run ts:watch & npm run types:watch & npm run css:watch",
19
- "types:build": "tsbb types --sourceRoot src --target ESNEXT",
20
- "types:watch": "npm run types:esm -- --watch & npm run types:cjs -- --watch",
21
- "types:esm": "npm run types:build -- --outDir ../lib/esm",
22
- "types:cjs": "npm run types:build -- --outDir ../lib/cjs",
23
- "css:build": "compile-less -d src -o lib/esm",
24
- "css:watch": "compile-less -d src -o lib/esm --watch",
25
- "css:build:dist": "compile-less -d src --combine dist/markdown-editor.css --rm-global",
26
- "ts:watch": "tsbb watch --env-name esm:dev --env-name cjs --target react",
27
- "ts:build": "tsbb build --target react",
28
- "prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'",
29
- "map": "source-map-explorer build/static/js/*.js --html build/website-result.html"
30
- },
31
10
  "repository": {
32
11
  "type": "git",
33
12
  "url": "https://github.com/uiwjs/react-md-editor"
@@ -43,39 +22,34 @@
43
22
  "react-dom": ">=16.8.0"
44
23
  },
45
24
  "devDependencies": {
46
- "@kkt/less-modules": "6.9.0",
47
- "@kkt/raw-modules": "6.9.0",
48
- "@kkt/scope-plugin-options": "6.9.0",
25
+ "@kkt/less-modules": "6.10.4",
26
+ "@kkt/raw-modules": "6.10.4",
27
+ "@kkt/scope-plugin-options": "6.10.4",
49
28
  "@types/katex": "0.11.0",
50
29
  "@types/node": "14.14.36",
51
- "@types/react": "17.0.8",
52
- "@types/react-dom": "17.0.5",
30
+ "@types/react": "17.0.11",
31
+ "@types/react-dom": "17.0.8",
53
32
  "@types/react-test-renderer": "17.0.1",
54
- "@uiw/react-github-corners": "1.2.0",
33
+ "@uiw/react-github-corners": "1.4.0",
55
34
  "@uiw/react-codesandbox": "1.1.0",
56
35
  "@uiw/react-shields": "1.1.1",
57
- "compile-less-cli": "1.7.0",
36
+ "compile-less-cli": "1.8.0",
58
37
  "katex": "0.13.11",
59
- "husky": "4.3.8",
60
- "kkt": "6.9.0",
38
+ "husky": "6.0.0",
39
+ "kkt": "6.10.4",
61
40
  "lint-staged": "11.0.0",
62
- "prettier": "2.3.0",
41
+ "prettier": "2.3.1",
63
42
  "react": "17.0.2",
64
43
  "react-dom": "17.0.2",
65
44
  "react-test-renderer": "17.0.2",
66
45
  "source-map-explorer": "2.5.2",
67
- "tsbb": "2.1.2"
46
+ "tsbb": "2.2.1"
68
47
  },
69
48
  "dependencies": {
70
- "@babel/runtime": "^7.14.0",
49
+ "@babel/runtime": "^7.14.6",
71
50
  "@uiw/react-markdown-preview": "3.1.1",
72
51
  "rehype": "11.0.0"
73
52
  },
74
- "husky": {
75
- "hooks": {
76
- "pre-commit": "lint-staged"
77
- }
78
- },
79
53
  "keywords": [
80
54
  "react",
81
55
  "editor",
@@ -89,31 +63,5 @@
89
63
  "uiw",
90
64
  "uiwjs",
91
65
  "code"
92
- ],
93
- "lint-staged": {
94
- "*.{js,jsx,less,md,json}": [
95
- "prettier --write"
96
- ],
97
- "*.ts?(x)": [
98
- "prettier --parser=typescript --write"
99
- ]
100
- },
101
- "eslintConfig": {
102
- "extends": [
103
- "react-app",
104
- "react-app/jest"
105
- ]
106
- },
107
- "browserslist": {
108
- "production": [
109
- ">0.2%",
110
- "not dead",
111
- "not op_mini all"
112
- ],
113
- "development": [
114
- "last 1 chrome version",
115
- "last 1 firefox version",
116
- "last 1 safari version"
117
- ]
118
- }
66
+ ]
119
67
  }
@@ -25,19 +25,22 @@ import { ContextStore, ExecuteCommandState } from '../Context';
25
25
  export interface CommandOrchestrator {
26
26
  executeCommand(command: ICommand): void;
27
27
  }
28
- export type ICommandChildHandleParam = {
29
- getState?: TextAreaCommandOrchestrator['getState'];
30
- textApi?: TextAreaTextApi;
31
- };
32
- export type ICommandChildHandle = {
33
- children?: (handle: { close: () => void; execute: () => void } & ICommandChildHandleParam) => React.ReactElement;
34
- };
35
- export type ICommandChildCommands<T = string> = {
28
+
29
+ export interface ICommandChildHandle<T = string> extends ICommandBase<T> {
30
+ children?: (handle: {
31
+ close: () => void;
32
+ execute: () => void;
33
+ getState?: TextAreaCommandOrchestrator['getState'];
34
+ textApi?: TextAreaTextApi;
35
+ }) => React.ReactElement;
36
+ }
37
+
38
+ export interface ICommandChildCommands<T = string> extends ICommandBase<T> {
36
39
  children?: Array<ICommand<T>>;
37
- };
40
+ }
38
41
 
39
- export type ICommand<T = string> = {
40
- parent?: ICommand;
42
+ export interface ICommandBase<T> {
43
+ parent?: ICommand<any>;
41
44
  keyCommand?: string;
42
45
  name?: string;
43
46
  shortcuts?: string;
@@ -53,8 +56,9 @@ export type ICommand<T = string> = {
53
56
  dispatch?: React.Dispatch<ContextStore>,
54
57
  executeCommandState?: ExecuteCommandState,
55
58
  ) => void;
56
- } & ICommandChildCommands &
57
- ICommandChildHandle;
59
+ }
60
+
61
+ export type ICommand<T = string> = ICommandChildCommands<T> | ICommandChildHandle<T>;
58
62
 
59
63
  export interface TextRange {
60
64
  start: number;
@@ -60,7 +60,7 @@ export function ToolbarItems(props: IToolbarProps) {
60
60
  const activeBtn =
61
61
  (fullscreen && item.keyCommand === 'fullscreen') || (item.keyCommand === 'preview' && preview === item.value);
62
62
  const childNode =
63
- typeof item.children === 'function'
63
+ item.children && typeof item.children === 'function'
64
64
  ? item.children({
65
65
  getState: () => commandOrchestrator!.getState(),
66
66
  textApi: commandOrchestrator ? commandOrchestrator!.textApi : undefined,
@@ -92,9 +92,7 @@ export function ToolbarItems(props: IToolbarProps) {
92
92
  groupName={item.groupName}
93
93
  prefixCls={prefixCls}
94
94
  children={childNode}
95
- commands={
96
- Array.isArray(item.children) && typeof item.children !== 'function' ? item.children : undefined
97
- }
95
+ commands={Array.isArray(item.children) ? item.children : undefined}
98
96
  />
99
97
  )}
100
98
  </li>