x-star-editor 0.2.2 → 0.2.3

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 +164 -107
  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 +6 -6
  54. package/dist/utils/markdown.js +146 -49
  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 +44 -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
@@ -39,14 +39,10 @@ export var getRange = function getRange(_ref) {
39
39
  /**
40
40
  * 获取一个可以设置文本和选区的容器
41
41
  *
42
+ * @param ref 容器挂载的 DOM 节点
42
43
  * @returns 容器
43
44
  */
44
- export var useContainer = function useContainer() {
45
- /**
46
- * 容器挂载的 DOM 节点
47
- */
48
- var ref = useRef(null);
49
-
45
+ export var useContainer = function useContainer(ref) {
50
46
  /**
51
47
  * 是否在遍历时忽略节点及其子节点
52
48
  *
@@ -362,7 +358,6 @@ export var useContainer = function useContainer() {
362
358
  }
363
359
  };
364
360
  return useRef({
365
- ref: ref,
366
361
  normalize: normalize,
367
362
  getText: getText,
368
363
  setText: setText,
@@ -15,14 +15,14 @@ declare const toHastProcessor: import("unified").FrozenProcessor<import("mdast")
15
15
  /**
16
16
  * Hast 根节点
17
17
  */
18
- export type HastRoot = ReturnType<(typeof toHastProcessor)['runSync']>;
18
+ export type HastRoot = Awaited<ReturnType<(typeof toHastProcessor)['run']>>;
19
19
  /**
20
20
  * 将 Markdown 文本转成 Hast 树
21
21
  *
22
22
  * @param sourceCode Markdown 文本
23
23
  * @returns Hast 树
24
24
  */
25
- export declare const preViewerRender: (sourceCode: string) => import("hast").Root;
25
+ export declare const preViewerRender: (sourceCode: string) => Promise<import("hast").Root>;
26
26
  /**
27
27
  * 过滤模式
28
28
  */
@@ -35,7 +35,7 @@ export declare const getDefaultSchema: () => Schema;
35
35
  * @param schema 过滤模式
36
36
  * @returns 新的 Hast 树
37
37
  */
38
- export declare const viewerRender: (root: HastRoot, schema: Schema) => import("hast").Root;
38
+ export declare const viewerRender: (root: HastRoot, schema: Schema) => Promise<import("hast").Root>;
39
39
  /**
40
40
  * 将 Hast 树映射到 React 虚拟 DOM 树
41
41
  *
@@ -50,19 +50,19 @@ export declare const postViewerRender: (root: HastRoot, options: ViewerOptions)
50
50
  * @param sourceCode Markdown 文本
51
51
  * @returns HTML 文本
52
52
  */
53
- export declare const toHTML: (sourceCode: string) => string;
53
+ export declare const toHTML: (sourceCode: string) => Promise<string>;
54
54
  /**
55
55
  * 将带有 HTML 的 Markdown 文本转成 Markdown 文本
56
56
  *
57
57
  * @param sourceCode 带有 HTML 的 Markdown 文本
58
58
  * @returns Markdown 文本
59
59
  */
60
- export declare const toMarkdown: (sourceCode: string) => string;
60
+ export declare const toMarkdown: (sourceCode: string) => Promise<string>;
61
61
  /**
62
62
  * 将 Markdown 文本转成纯文本
63
63
  *
64
64
  * @param sourceCode Markdown 文本
65
65
  * @returns 纯文本
66
66
  */
67
- export declare const toText: (sourceCode: string) => string;
67
+ export declare const toText: (sourceCode: string) => Promise<string>;
68
68
  export {};
@@ -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
  * 过滤模式
@@ -316,27 +340,43 @@ export var getDefaultSchema = function getDefaultSchema() {
316
340
  * @param schema 过滤模式
317
341
  * @returns 新的 Hast 树
318
342
  */
319
- export var viewerRender = function viewerRender(root, schema) {
320
- return unified().use(rehypeRaw).use(rehypeSanitize, schema).use(function () {
321
- return function (root) {
322
- var _iterator2 = _createForOfIteratorHelper(root.children),
323
- _step2;
324
- try {
325
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
326
- var node = _step2.value;
327
- if ('properties' in node && node.properties) {
328
- var _node$position4;
329
- node.properties['data-line'] = (_node$position4 = node.position) === null || _node$position4 === void 0 ? void 0 : _node$position4.start.line;
330
- }
331
- }
332
- } catch (err) {
333
- _iterator2.e(err);
334
- } finally {
335
- _iterator2.f();
343
+ export var viewerRender = /*#__PURE__*/function () {
344
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(root, schema) {
345
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
346
+ while (1) switch (_context2.prev = _context2.next) {
347
+ case 0:
348
+ _context2.next = 2;
349
+ return unified().use(rehypeRaw).use(rehypeSanitize, schema).use(function () {
350
+ return function (root) {
351
+ var _iterator2 = _createForOfIteratorHelper(root.children),
352
+ _step2;
353
+ try {
354
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
355
+ var node = _step2.value;
356
+ if ('properties' in node && node.properties) {
357
+ var _node$position4;
358
+ node.properties['data-line'] = (_node$position4 = node.position) === null || _node$position4 === void 0 ? void 0 : _node$position4.start.line;
359
+ }
360
+ }
361
+ } catch (err) {
362
+ _iterator2.e(err);
363
+ } finally {
364
+ _iterator2.f();
365
+ }
366
+ };
367
+ }).run(root);
368
+ case 2:
369
+ return _context2.abrupt("return", _context2.sent);
370
+ case 3:
371
+ case "end":
372
+ return _context2.stop();
336
373
  }
337
- };
338
- }).runSync(root);
339
- };
374
+ }, _callee2);
375
+ }));
376
+ return function viewerRender(_x2, _x3) {
377
+ return _ref2.apply(this, arguments);
378
+ };
379
+ }();
340
380
 
341
381
  /**
342
382
  * 将 Hast 树映射到 React 虚拟 DOM 树
@@ -351,10 +391,10 @@ export var postViewerRender = function postViewerRender(root, options) {
351
391
  jsx: jsx,
352
392
  jsxs: jsxs,
353
393
  components: _objectSpread(_objectSpread({}, options.customHTMLElements), {}, {
354
- custom: function custom(_ref) {
394
+ custom: function custom(_ref3) {
355
395
  var _options$customBlocks;
356
- var meta = _ref.meta,
357
- value = _ref.value;
396
+ var meta = _ref3.meta,
397
+ value = _ref3.value;
358
398
  return jsx((_options$customBlocks = options.customBlocks[meta]) !== null && _options$customBlocks !== void 0 ? _options$customBlocks : 'div', {
359
399
  children: value
360
400
  });
@@ -362,7 +402,7 @@ export var postViewerRender = function postViewerRender(root, options) {
362
402
  })
363
403
  });
364
404
  };
365
- var toHTMLProcessor = unified().use(remarkParse).use(remarkGfm).use(remarkBreaks).use(remarkRehype, {
405
+ var toHTMLProcessor = unified().use(remarkParse).use(remarkGfm).use(remarkRehype, {
366
406
  allowDangerousHtml: true
367
407
  }).use(rehypeRaw).use(rehypeStringify).freeze();
368
408
 
@@ -372,10 +412,28 @@ var toHTMLProcessor = unified().use(remarkParse).use(remarkGfm).use(remarkBreaks
372
412
  * @param sourceCode Markdown 文本
373
413
  * @returns HTML 文本
374
414
  */
375
- export var toHTML = function toHTML(sourceCode) {
376
- return toHTMLProcessor.processSync(sourceCode).toString();
377
- };
378
- var toMarkdownProcessor = unified().use(rehypeRemark).use(remarkGfm).use(remarkStringify).freeze();
415
+ export var toHTML = /*#__PURE__*/function () {
416
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(sourceCode) {
417
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
418
+ while (1) switch (_context3.prev = _context3.next) {
419
+ case 0:
420
+ _context3.next = 2;
421
+ return toHTMLProcessor.process(sourceCode);
422
+ case 2:
423
+ return _context3.abrupt("return", _context3.sent.toString());
424
+ case 3:
425
+ case "end":
426
+ return _context3.stop();
427
+ }
428
+ }, _callee3);
429
+ }));
430
+ return function toHTML(_x4) {
431
+ return _ref4.apply(this, arguments);
432
+ };
433
+ }();
434
+ var toMarkdownProcessor = unified().use(rehypeRemark, {
435
+ newlines: true
436
+ }).use(remarkGfm).use(remarkStringify).freeze();
379
437
 
380
438
  /**
381
439
  * 将带有 HTML 的 Markdown 文本转成 Markdown 文本
@@ -383,9 +441,32 @@ var toMarkdownProcessor = unified().use(rehypeRemark).use(remarkGfm).use(remarkS
383
441
  * @param sourceCode 带有 HTML 的 Markdown 文本
384
442
  * @returns Markdown 文本
385
443
  */
386
- export var toMarkdown = function toMarkdown(sourceCode) {
387
- return toMarkdownProcessor.stringify(toMarkdownProcessor.runSync(toHTMLProcessor.runSync(toHTMLProcessor.parse(sourceCode))));
388
- };
444
+ export var toMarkdown = /*#__PURE__*/function () {
445
+ var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(sourceCode) {
446
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
447
+ while (1) switch (_context4.prev = _context4.next) {
448
+ case 0:
449
+ _context4.t0 = toMarkdownProcessor;
450
+ _context4.t1 = toMarkdownProcessor;
451
+ _context4.next = 4;
452
+ return toHTMLProcessor.run(toHTMLProcessor.parse(sourceCode));
453
+ case 4:
454
+ _context4.t2 = _context4.sent;
455
+ _context4.next = 7;
456
+ return _context4.t1.run.call(_context4.t1, _context4.t2);
457
+ case 7:
458
+ _context4.t3 = _context4.sent;
459
+ return _context4.abrupt("return", _context4.t0.stringify.call(_context4.t0, _context4.t3));
460
+ case 9:
461
+ case "end":
462
+ return _context4.stop();
463
+ }
464
+ }, _callee4);
465
+ }));
466
+ return function toMarkdown(_x5) {
467
+ return _ref5.apply(this, arguments);
468
+ };
469
+ }();
389
470
  var toTextProcessor = unified().use(remarkParse).use(remarkGfm).use(strip).use(remarkStringify).freeze();
390
471
 
391
472
  /**
@@ -394,6 +475,22 @@ var toTextProcessor = unified().use(remarkParse).use(remarkGfm).use(strip).use(r
394
475
  * @param sourceCode Markdown 文本
395
476
  * @returns 纯文本
396
477
  */
397
- export var toText = function toText(sourceCode) {
398
- return toTextProcessor.processSync(sourceCode).toString();
399
- };
478
+ export var toText = /*#__PURE__*/function () {
479
+ var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(sourceCode) {
480
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
481
+ while (1) switch (_context5.prev = _context5.next) {
482
+ case 0:
483
+ _context5.next = 2;
484
+ return toTextProcessor.process(sourceCode);
485
+ case 2:
486
+ return _context5.abrupt("return", _context5.sent.toString());
487
+ case 3:
488
+ case "end":
489
+ return _context5.stop();
490
+ }
491
+ }, _callee5);
492
+ }));
493
+ return function toText(_x6) {
494
+ return _ref6.apply(this, arguments);
495
+ };
496
+ }();
@@ -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