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.
- package/dist/components/FileInput.js +2 -2
- package/dist/components/Toolbar.js +80 -67
- package/dist/icons/Blockquote.d.ts +4 -0
- package/dist/icons/Blockquote.js +16 -0
- package/dist/icons/Code.d.ts +4 -0
- package/dist/icons/Code.js +15 -0
- package/dist/icons/Delete.d.ts +4 -0
- package/dist/icons/Delete.js +15 -0
- package/dist/icons/Emphasis.d.ts +4 -0
- package/dist/icons/Emphasis.js +15 -0
- package/dist/icons/EnterFullscreen.d.ts +4 -0
- package/dist/icons/EnterFullscreen.js +15 -0
- package/dist/icons/ExitFullscreen.d.ts +4 -0
- package/dist/icons/ExitFullscreen.js +15 -0
- package/dist/icons/Heading.d.ts +4 -0
- package/dist/icons/Heading.js +15 -0
- package/dist/icons/Image.d.ts +4 -0
- package/dist/icons/Image.js +15 -0
- package/dist/icons/InlineCode.d.ts +4 -0
- package/dist/icons/InlineCode.js +19 -0
- package/dist/icons/InlineMath.d.ts +4 -0
- package/dist/icons/InlineMath.js +25 -0
- package/dist/icons/Link.d.ts +4 -0
- package/dist/icons/Link.js +15 -0
- package/dist/icons/Math.d.ts +4 -0
- package/dist/icons/Math.js +15 -0
- package/dist/icons/OrderedList.d.ts +4 -0
- package/dist/icons/OrderedList.js +15 -0
- package/dist/icons/Redo.d.ts +4 -0
- package/dist/icons/Redo.js +15 -0
- package/dist/icons/Strong.d.ts +4 -0
- package/dist/icons/Strong.js +15 -0
- package/dist/icons/Table.d.ts +4 -0
- package/dist/icons/Table.js +15 -0
- package/dist/icons/ThematicBreak.d.ts +4 -0
- package/dist/icons/ThematicBreak.js +15 -0
- package/dist/icons/ToHtml.d.ts +4 -0
- package/dist/icons/ToHtml.js +15 -0
- package/dist/icons/ToMarkdown.d.ts +4 -0
- package/dist/icons/ToMarkdown.js +15 -0
- package/dist/icons/Undo.d.ts +4 -0
- package/dist/icons/Undo.js +15 -0
- package/dist/icons/UnorderedList.d.ts +4 -0
- package/dist/icons/UnorderedList.js +15 -0
- package/dist/locales/en_US.d.ts +5 -0
- package/dist/locales/en_US.js +6 -1
- package/dist/locales/index.d.ts +20 -0
- package/dist/locales/zh_CN.d.ts +5 -0
- package/dist/locales/zh_CN.js +6 -1
- package/dist/styles/index.css +8 -69
- package/dist/utils/container.d.ts +2 -3
- package/dist/utils/container.js +2 -7
- package/dist/utils/markdown.d.ts +2 -2
- package/dist/utils/markdown.js +46 -20
- package/dist/x-star-editor/index.js +3 -3
- package/dist/x-star-md-editor/index.js +4 -3
- package/dist/x-star-md-viewer/index.js +32 -14
- package/package.json +9 -5
- package/dist/styles/icons/blockquote.svg +0 -18
- package/dist/styles/icons/code.svg +0 -18
- package/dist/styles/icons/delete.svg +0 -18
- package/dist/styles/icons/emphasis.svg +0 -18
- package/dist/styles/icons/fullscreen-enter.svg +0 -18
- package/dist/styles/icons/fullscreen-exit.svg +0 -18
- package/dist/styles/icons/heading.svg +0 -16
- package/dist/styles/icons/image.svg +0 -18
- package/dist/styles/icons/inline-code.svg +0 -19
- package/dist/styles/icons/inline-math.svg +0 -20
- package/dist/styles/icons/link.svg +0 -18
- package/dist/styles/icons/math.svg +0 -17
- package/dist/styles/icons/ordered-list.svg +0 -18
- package/dist/styles/icons/redo.svg +0 -18
- package/dist/styles/icons/strong.svg +0 -18
- package/dist/styles/icons/table.svg +0 -18
- package/dist/styles/icons/thematic-break.svg +0 -18
- package/dist/styles/icons/to-html.svg +0 -18
- package/dist/styles/icons/to-markdown.svg +0 -18
- package/dist/styles/icons/undo.svg +0 -18
- package/dist/styles/icons/unordered-list.svg +0 -18
package/dist/utils/markdown.js
CHANGED
|
@@ -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
|
|
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].
|
|
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].
|
|
109
|
-
parentElement.append(stack[index].
|
|
110
|
-
stack[index].
|
|
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
|
-
|
|
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].
|
|
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].
|
|
169
|
+
stack[0].element.append("\u200B");
|
|
167
170
|
pushElement(0);
|
|
168
171
|
if (lines[i]) {
|
|
169
|
-
stack[stack.length - 1].
|
|
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
|
-
|
|
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].
|
|
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
|
|
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
|
|
286
|
-
|
|
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(
|
|
378
|
+
custom: function custom(_ref2) {
|
|
355
379
|
var _options$customBlocks;
|
|
356
|
-
var meta =
|
|
357
|
-
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(
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
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:
|
|
280
|
+
ref: containerRef,
|
|
280
281
|
className: classNames("".concat(prefix, "md-editor"), className),
|
|
281
282
|
style: _objectSpread(_objectSpread({}, style), {}, {
|
|
282
283
|
height: height
|