x-star-editor 0.2.2 → 0.2.4

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/dist/components/FileInput.js +2 -2
  2. package/dist/components/Toolbar.js +80 -67
  3. package/dist/icons/Blockquote.d.ts +4 -0
  4. package/dist/icons/Blockquote.js +16 -0
  5. package/dist/icons/Code.d.ts +4 -0
  6. package/dist/icons/Code.js +15 -0
  7. package/dist/icons/Delete.d.ts +4 -0
  8. package/dist/icons/Delete.js +15 -0
  9. package/dist/icons/Emphasis.d.ts +4 -0
  10. package/dist/icons/Emphasis.js +15 -0
  11. package/dist/icons/EnterFullscreen.d.ts +4 -0
  12. package/dist/icons/EnterFullscreen.js +15 -0
  13. package/dist/icons/ExitFullscreen.d.ts +4 -0
  14. package/dist/icons/ExitFullscreen.js +15 -0
  15. package/dist/icons/Heading.d.ts +4 -0
  16. package/dist/icons/Heading.js +15 -0
  17. package/dist/icons/Image.d.ts +4 -0
  18. package/dist/icons/Image.js +15 -0
  19. package/dist/icons/InlineCode.d.ts +4 -0
  20. package/dist/icons/InlineCode.js +19 -0
  21. package/dist/icons/InlineMath.d.ts +4 -0
  22. package/dist/icons/InlineMath.js +25 -0
  23. package/dist/icons/Link.d.ts +4 -0
  24. package/dist/icons/Link.js +15 -0
  25. package/dist/icons/Math.d.ts +4 -0
  26. package/dist/icons/Math.js +15 -0
  27. package/dist/icons/OrderedList.d.ts +4 -0
  28. package/dist/icons/OrderedList.js +15 -0
  29. package/dist/icons/Redo.d.ts +4 -0
  30. package/dist/icons/Redo.js +15 -0
  31. package/dist/icons/Strong.d.ts +4 -0
  32. package/dist/icons/Strong.js +15 -0
  33. package/dist/icons/Table.d.ts +4 -0
  34. package/dist/icons/Table.js +15 -0
  35. package/dist/icons/ThematicBreak.d.ts +4 -0
  36. package/dist/icons/ThematicBreak.js +15 -0
  37. package/dist/icons/ToHtml.d.ts +4 -0
  38. package/dist/icons/ToHtml.js +15 -0
  39. package/dist/icons/ToMarkdown.d.ts +4 -0
  40. package/dist/icons/ToMarkdown.js +15 -0
  41. package/dist/icons/Undo.d.ts +4 -0
  42. package/dist/icons/Undo.js +15 -0
  43. package/dist/icons/UnorderedList.d.ts +4 -0
  44. package/dist/icons/UnorderedList.js +15 -0
  45. package/dist/locales/en_US.d.ts +5 -0
  46. package/dist/locales/en_US.js +6 -1
  47. package/dist/locales/index.d.ts +20 -0
  48. package/dist/locales/zh_CN.d.ts +5 -0
  49. package/dist/locales/zh_CN.js +6 -1
  50. package/dist/styles/index.css +8 -69
  51. package/dist/utils/container.d.ts +2 -3
  52. package/dist/utils/container.js +2 -7
  53. package/dist/utils/markdown.d.ts +2 -2
  54. package/dist/utils/markdown.js +46 -20
  55. package/dist/x-star-editor/index.js +3 -3
  56. package/dist/x-star-md-editor/index.js +4 -3
  57. package/dist/x-star-md-viewer/index.js +32 -14
  58. package/package.json +9 -5
  59. package/dist/styles/icons/blockquote.svg +0 -18
  60. package/dist/styles/icons/code.svg +0 -18
  61. package/dist/styles/icons/delete.svg +0 -18
  62. package/dist/styles/icons/emphasis.svg +0 -18
  63. package/dist/styles/icons/fullscreen-enter.svg +0 -18
  64. package/dist/styles/icons/fullscreen-exit.svg +0 -18
  65. package/dist/styles/icons/heading.svg +0 -16
  66. package/dist/styles/icons/image.svg +0 -18
  67. package/dist/styles/icons/inline-code.svg +0 -19
  68. package/dist/styles/icons/inline-math.svg +0 -20
  69. package/dist/styles/icons/link.svg +0 -18
  70. package/dist/styles/icons/math.svg +0 -17
  71. package/dist/styles/icons/ordered-list.svg +0 -18
  72. package/dist/styles/icons/redo.svg +0 -18
  73. package/dist/styles/icons/strong.svg +0 -18
  74. package/dist/styles/icons/table.svg +0 -18
  75. package/dist/styles/icons/thematic-break.svg +0 -18
  76. package/dist/styles/icons/to-html.svg +0 -18
  77. package/dist/styles/icons/to-markdown.svg +0 -18
  78. package/dist/styles/icons/undo.svg +0 -18
  79. package/dist/styles/icons/unordered-list.svg +0 -18
@@ -1,10 +1,13 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
2
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
4
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
5
  import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
4
6
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
5
7
  import { toJsxRuntime } from 'hast-util-to-jsx-runtime';
6
8
  import { Fragment, jsx, jsxs } from 'react/jsx-runtime';
7
9
  import rehypeKatex from 'rehype-katex';
10
+ import rehypeMermaid from 'rehype-mermaidjs';
8
11
  import rehypePrism from 'rehype-prism-plus';
9
12
  import rehypeRaw from 'rehype-raw';
10
13
  import rehypeRemark from 'rehype-remark';
@@ -77,7 +80,7 @@ export var editorRender = function editorRender(sourceCode) {
77
80
  /**
78
81
  * DOM 树根元素
79
82
  */
80
- var el = document.createElement('div');
83
+ var root = document.createElement('div');
81
84
 
82
85
  /**
83
86
  * 判断一个 Mdast 节点的子节点是否为流内容
@@ -98,16 +101,16 @@ export var editorRender = function editorRender(sourceCode) {
98
101
  var node = stack[index].node;
99
102
 
100
103
  // 如果节点为流内容,则将样式添加到该行的 `<div>` 元素上,否则添加到该节点的元素上
101
- var styleElement = stack[index && !isFlowContent(stack[index - 1].node) ? index : 0].el;
104
+ var styleElement = stack[index && !isFlowContent(stack[index - 1].node) ? index : 0].element;
102
105
  styleElement.classList.add("".concat(mdPrefix).concat(node.type));
103
106
  if (node.type === 'heading') {
104
107
  styleElement.classList.add("".concat(mdPrefix, "heading-").concat(node.depth));
105
108
  }
106
109
 
107
110
  // 如果索引为 0,则父节点为块级元素,否则为前一个索引的 DOM 元素
108
- var parentElement = index ? stack[index - 1].el : block;
109
- parentElement.append(stack[index].el);
110
- stack[index].el = document.createElement(index ? 'span' : 'div');
111
+ var parentElement = index ? stack[index - 1].element : block;
112
+ parentElement.append(stack[index].element);
113
+ stack[index].element = document.createElement(index ? 'span' : 'div');
111
114
  stack[index].counter++;
112
115
  };
113
116
 
@@ -115,7 +118,7 @@ export var editorRender = function editorRender(sourceCode) {
115
118
  * 将块级元素推到 DOM 树根元素中
116
119
  */
117
120
  var pushBlock = function pushBlock() {
118
- el.append(block);
121
+ root.append(block);
119
122
  block = document.createElement('div');
120
123
  };
121
124
 
@@ -157,16 +160,16 @@ export var editorRender = function editorRender(sourceCode) {
157
160
  if (stack.length) {
158
161
  // 如果栈不为空,说明为块级元素内的文本,每一行都应推到块级元素中
159
162
  if (lines[0]) {
160
- stack[stack.length - 1].el.append(delimiter ? createDelimiter(lines[0]) : lines[0]);
163
+ stack[stack.length - 1].element.append(delimiter ? createDelimiter(lines[0]) : lines[0]);
161
164
  }
162
165
  for (var i = 1; i < lines.length; i++) {
163
166
  for (var j = stack.length - 1; j; j--) {
164
167
  pushElement(j);
165
168
  }
166
- stack[0].el.append("\u200B");
169
+ stack[0].element.append("\u200B");
167
170
  pushElement(0);
168
171
  if (lines[i]) {
169
- stack[stack.length - 1].el.append(delimiter ? createDelimiter(lines[i]) : lines[i]);
172
+ stack[stack.length - 1].element.append(delimiter ? createDelimiter(lines[i]) : lines[i]);
170
173
  }
171
174
  }
172
175
  scanOffset += text.length;
@@ -213,7 +216,7 @@ export var editorRender = function editorRender(sourceCode) {
213
216
  // 为 Mdast 节点创建 DOM 元素
214
217
  stack.push({
215
218
  node: node,
216
- el: document.createElement(stack.length ? 'span' : 'div'),
219
+ element: document.createElement(stack.length ? 'span' : 'div'),
217
220
  counter: 0
218
221
  });
219
222
  if ('children' in node) {
@@ -226,7 +229,7 @@ export var editorRender = function editorRender(sourceCode) {
226
229
  } else {
227
230
  var _node$position3;
228
231
  // 如果栈大小为 1,说明为块级元素终点
229
- stack[0].el.append("\u200B");
232
+ stack[0].element.append("\u200B");
230
233
  pushElement(0);
231
234
  block.dataset.line = "".concat((_node$position3 = node.position) === null || _node$position3 === void 0 ? void 0 : _node$position3.start.line);
232
235
  pushBlock();
@@ -249,7 +252,7 @@ export var editorRender = function editorRender(sourceCode) {
249
252
  block.append(createLine(sourceCode.slice(scanOffset)));
250
253
  pushBlock();
251
254
  }
252
- return el;
255
+ return root;
253
256
  };
254
257
 
255
258
  /**
@@ -268,6 +271,11 @@ var toHastProcessor = unified().use(remarkBreaks).use(remarkRehype, {
268
271
  );
269
272
  }
270
273
  }
274
+ }).use(rehypeMermaid, {
275
+ errorFallback: function errorFallback(element) {
276
+ return element;
277
+ },
278
+ strategy: 'img-svg'
271
279
  }).use(rehypePrism, {
272
280
  ignoreMissing: true
273
281
  }).use(rehypeKatex).freeze();
@@ -282,9 +290,25 @@ var toHastProcessor = unified().use(remarkBreaks).use(remarkRehype, {
282
290
  * @param sourceCode Markdown 文本
283
291
  * @returns Hast 树
284
292
  */
285
- export var preViewerRender = function preViewerRender(sourceCode) {
286
- return toHastProcessor.runSync(cachedParse(sourceCode));
287
- };
293
+ export var preViewerRender = /*#__PURE__*/function () {
294
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(sourceCode) {
295
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
296
+ while (1) switch (_context.prev = _context.next) {
297
+ case 0:
298
+ _context.next = 2;
299
+ return toHastProcessor.run(cachedParse(sourceCode));
300
+ case 2:
301
+ return _context.abrupt("return", _context.sent);
302
+ case 3:
303
+ case "end":
304
+ return _context.stop();
305
+ }
306
+ }, _callee);
307
+ }));
308
+ return function preViewerRender(_x) {
309
+ return _ref.apply(this, arguments);
310
+ };
311
+ }();
288
312
 
289
313
  /**
290
314
  * 过滤模式
@@ -351,10 +375,10 @@ export var postViewerRender = function postViewerRender(root, options) {
351
375
  jsx: jsx,
352
376
  jsxs: jsxs,
353
377
  components: _objectSpread(_objectSpread({}, options.customHTMLElements), {}, {
354
- custom: function custom(_ref) {
378
+ custom: function custom(_ref2) {
355
379
  var _options$customBlocks;
356
- var meta = _ref.meta,
357
- value = _ref.value;
380
+ var meta = _ref2.meta,
381
+ value = _ref2.value;
358
382
  return jsx((_options$customBlocks = options.customBlocks[meta]) !== null && _options$customBlocks !== void 0 ? _options$customBlocks : 'div', {
359
383
  children: value
360
384
  });
@@ -362,7 +386,7 @@ export var postViewerRender = function postViewerRender(root, options) {
362
386
  })
363
387
  });
364
388
  };
365
- var toHTMLProcessor = unified().use(remarkParse).use(remarkGfm).use(remarkBreaks).use(remarkRehype, {
389
+ var toHTMLProcessor = unified().use(remarkParse).use(remarkGfm).use(remarkRehype, {
366
390
  allowDangerousHtml: true
367
391
  }).use(rehypeRaw).use(rehypeStringify).freeze();
368
392
 
@@ -375,7 +399,9 @@ var toHTMLProcessor = unified().use(remarkParse).use(remarkGfm).use(remarkBreaks
375
399
  export var toHTML = function toHTML(sourceCode) {
376
400
  return toHTMLProcessor.processSync(sourceCode).toString();
377
401
  };
378
- var toMarkdownProcessor = unified().use(rehypeRemark).use(remarkGfm).use(remarkStringify).freeze();
402
+ var toMarkdownProcessor = unified().use(rehypeRemark, {
403
+ newlines: true
404
+ }).use(remarkGfm).use(remarkStringify).freeze();
379
405
 
380
406
  /**
381
407
  * 将带有 HTML 的 Markdown 文本转成 Markdown 文本
@@ -19,11 +19,11 @@ var XStarEditor = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
19
19
  onInsertFile = _ref.onInsertFile;
20
20
  var editorRef = useMdEditorRef();
21
21
  var viewerRef = useMdViewerRef();
22
- var container = useRef(null);
22
+ var containerRef = useRef(null);
23
23
  useImperativeHandle(ref, function () {
24
24
  return _objectSpread(_objectSpread(_objectSpread({}, editorRef.current), viewerRef.current), {}, {
25
25
  getContainer: function getContainer() {
26
- return container.current;
26
+ return containerRef.current;
27
27
  }
28
28
  });
29
29
  }, []);
@@ -135,7 +135,7 @@ var XStarEditor = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
135
135
  value = _useState2[0],
136
136
  setValue = _useState2[1];
137
137
  return /*#__PURE__*/React.createElement("div", {
138
- ref: container,
138
+ ref: containerRef,
139
139
  className: classNames("".concat(prefix, "editor"), className),
140
140
  style: style
141
141
  }, /*#__PURE__*/React.createElement(XStarMdEditor, _extends({
@@ -19,7 +19,8 @@ var XStarMdEditor = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
19
19
  plugins = _ref.plugins,
20
20
  onChange = _ref.onChange,
21
21
  onInsertFile = _ref.onInsertFile;
22
- var container = useContainer();
22
+ var containerRef = useRef(null);
23
+ var container = useContainer(containerRef);
23
24
  var _useHistory = useHistory(initialValue),
24
25
  history = _useHistory.history,
25
26
  sourceCode = _useHistory.sourceCode,
@@ -78,7 +79,7 @@ var XStarMdEditor = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
78
79
  return {
79
80
  exec: exec,
80
81
  getEditorContainer: function getEditorContainer() {
81
- return container.ref.current;
82
+ return containerRef.current;
82
83
  }
83
84
  };
84
85
  }, []);
@@ -276,7 +277,7 @@ var XStarMdEditor = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
276
277
  items: options.toolbarItems,
277
278
  exec: exec
278
279
  }), /*#__PURE__*/React.createElement("div", {
279
- ref: container.ref,
280
+ ref: containerRef,
280
281
  className: classNames("".concat(prefix, "md-editor"), className),
281
282
  style: _objectSpread(_objectSpread({}, style), {}, {
282
283
  height: height