@antv/dumi-theme-antv 0.7.6 → 0.7.7
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/locales/en.json +2 -0
- package/dist/locales/zh.json +2 -0
- package/dist/plugin/rehypeObservable.js +1 -1
- package/dist/slots/Footer/index.js +6 -2
- package/dist/slots/{ManualContent/Preview.js → LiveExample/index.js} +213 -199
- package/dist/slots/ManualContent/index.module.less +1 -0
- package/dist/slots/ManualContent/usePreview.js +30 -14
- package/dist/slots/ManualContent/utils.js +18 -1
- package/package.json +1 -1
- /package/dist/slots/{ManualContent/Preview.module.less → LiveExample/index.module.less} +0 -0
package/dist/locales/en.json
CHANGED
|
@@ -132,6 +132,7 @@
|
|
|
132
132
|
"React Hooks 库": "React Hooks Library",
|
|
133
133
|
"设计动效": "Motion Solution",
|
|
134
134
|
"社区": "Community",
|
|
135
|
+
"资源": "Resource",
|
|
135
136
|
"StackOverflow": "StackOverflow",
|
|
136
137
|
"体验科技专栏": "Ant Financial Experience Tech",
|
|
137
138
|
"帮助": "Help",
|
|
@@ -175,5 +176,6 @@
|
|
|
175
176
|
"语雀": "Yuque",
|
|
176
177
|
"企业级 Node 开发框架": "Enterprise-class Node development framework",
|
|
177
178
|
"Sketch 工具集": "Sketch Tool set",
|
|
179
|
+
"互动图形解决方案": "Interactive solution",
|
|
178
180
|
"蚂蚁体验科技": "Liven Experience technology"
|
|
179
181
|
}
|
package/dist/locales/zh.json
CHANGED
|
@@ -131,6 +131,7 @@
|
|
|
131
131
|
"React Hooks 库": "React Hooks 库",
|
|
132
132
|
"设计动效": "设计动效",
|
|
133
133
|
"社区": "社区",
|
|
134
|
+
"资源": "资源",
|
|
134
135
|
"StackOverflow": "StackOverflow",
|
|
135
136
|
"体验科技专栏": "体验科技专栏",
|
|
136
137
|
"帮助": "帮助",
|
|
@@ -174,5 +175,6 @@
|
|
|
174
175
|
"语雀": "语雀",
|
|
175
176
|
"企业级 Node 开发框架": "企业级 Node 开发框架",
|
|
176
177
|
"Sketch 工具集": "Sketch 工具集",
|
|
178
|
+
"互动图形解决方案": "互动图形解决方案",
|
|
177
179
|
"蚂蚁体验科技": "蚂蚁体验科技"
|
|
178
180
|
}
|
|
@@ -38,7 +38,9 @@ var Footer = function Footer(props) {
|
|
|
38
38
|
var getColumns = function getColumns() {
|
|
39
39
|
// 如果外部没有传入 columns,则默认展示 antv footer
|
|
40
40
|
var col1 = {
|
|
41
|
-
title:
|
|
41
|
+
title: /*#__PURE__*/React.createElement(FormattedMessage, {
|
|
42
|
+
id: "\u8D44\u6E90"
|
|
43
|
+
}),
|
|
42
44
|
items: [{
|
|
43
45
|
title: 'Ant Design',
|
|
44
46
|
url: 'https://ant.design',
|
|
@@ -178,7 +180,9 @@ var Footer = function Footer(props) {
|
|
|
178
180
|
alt: "Galacean"
|
|
179
181
|
}),
|
|
180
182
|
title: 'Galacean',
|
|
181
|
-
description:
|
|
183
|
+
description: /*#__PURE__*/React.createElement(FormattedMessage, {
|
|
184
|
+
id: "\u4E92\u52A8\u56FE\u5F62\u89E3\u51B3\u65B9\u6848"
|
|
185
|
+
}),
|
|
182
186
|
url: 'https://galacean.antgroup.com/',
|
|
183
187
|
openExternal: true
|
|
184
188
|
}, {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
1
|
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
3
2
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
4
3
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
4
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
5
5
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
6
6
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
7
7
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
@@ -9,233 +9,247 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
|
|
|
9
9
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
10
10
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
11
11
|
import { PlayCircleOutlined, PushpinOutlined } from '@ant-design/icons';
|
|
12
|
-
import
|
|
13
|
-
import styles from "./Preview.module.less";
|
|
14
|
-
import { safeEval } from "./utils";
|
|
15
|
-
import { compile } from "../CodeEditor/utils";
|
|
12
|
+
import SourceCodeEditor from 'dumi/theme-default/slots/SourceCodeEditor';
|
|
16
13
|
import { uniqueId } from 'lodash-es';
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
var
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
var
|
|
32
|
-
return d ? parseInt(d) : 0;
|
|
33
|
-
};
|
|
34
|
-
var style = getComputedStyle(dom);
|
|
35
|
-
var wrapperWidth = dom.clientWidth || parseInt10(style.width);
|
|
36
|
-
var wrapperHeight = dom.clientHeight || parseInt10(style.height);
|
|
37
|
-
return {
|
|
38
|
-
width: wrapperWidth,
|
|
39
|
-
height: wrapperHeight
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
export var Preview = function Preview(_ref) {
|
|
43
|
-
var source = _ref.source,
|
|
44
|
-
code = _ref.code,
|
|
45
|
-
_ref$pin = _ref.pin,
|
|
46
|
-
pin = _ref$pin === void 0 ? true : _ref$pin,
|
|
47
|
-
_ref$autoMount = _ref.autoMount,
|
|
48
|
-
autoMount = _ref$autoMount === void 0 ? false : _ref$autoMount;
|
|
49
|
-
var containerRef = useRef(null);
|
|
50
|
-
var ulRef = useRef(null);
|
|
51
|
-
var nodeRef = useRef(null);
|
|
52
|
-
var _useState = useState(false),
|
|
14
|
+
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
15
|
+
import { compile } from "../CodeEditor/utils";
|
|
16
|
+
import { safeEval } from "../ManualContent/utils";
|
|
17
|
+
import styles from "./index.module.less";
|
|
18
|
+
export default function LiveExample(props) {
|
|
19
|
+
var initialSource = props.source,
|
|
20
|
+
lang = props.lang,
|
|
21
|
+
_props$inject = props.inject,
|
|
22
|
+
inject = _props$inject === void 0 ? false : _props$inject,
|
|
23
|
+
_props$pin = props.pin,
|
|
24
|
+
pin = _props$pin === void 0 ? true : _props$pin;
|
|
25
|
+
var previewRef = useRef(null);
|
|
26
|
+
var codeRef = useRef(null);
|
|
27
|
+
var toolbarRef = useRef(null);
|
|
28
|
+
var _useState = useState(initialSource),
|
|
53
29
|
_useState2 = _slicedToArray(_useState, 2),
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
var _useState3 = useState(
|
|
30
|
+
sourceCode = _useState2[0],
|
|
31
|
+
setSourceCode = _useState2[1];
|
|
32
|
+
var _useState3 = useState({
|
|
33
|
+
isLoading: false,
|
|
34
|
+
error: null
|
|
35
|
+
}),
|
|
57
36
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
var _useState5 = useState(
|
|
37
|
+
executionState = _useState4[0],
|
|
38
|
+
setExecutionState = _useState4[1];
|
|
39
|
+
var _useState5 = useState(pin !== false),
|
|
61
40
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
var _useState7 = useState(
|
|
41
|
+
isCodeVisible = _useState6[0],
|
|
42
|
+
setIsCodeVisible = _useState6[1];
|
|
43
|
+
var _useState7 = useState(function () {
|
|
44
|
+
return "live-example-".concat(uniqueId());
|
|
45
|
+
}),
|
|
65
46
|
_useState8 = _slicedToArray(_useState7, 1),
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
47
|
+
containerId = _useState8[0];
|
|
48
|
+
var _useState9 = useState(false),
|
|
49
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
50
|
+
hasSuccessfulRender = _useState10[0],
|
|
51
|
+
setHasSuccessfulRender = _useState10[1];
|
|
52
|
+
var clearContainer = useCallback(function () {
|
|
53
|
+
if (previewRef.current) {
|
|
54
|
+
previewRef.current.innerHTML = '';
|
|
55
|
+
}
|
|
56
|
+
}, []);
|
|
57
|
+
var handleError = useCallback(function (message) {
|
|
58
|
+
if (hasSuccessfulRender) {
|
|
59
|
+
console.error('LiveExample Error:', message);
|
|
60
|
+
} else if (previewRef.current) {
|
|
61
|
+
previewRef.current.innerHTML = "\n <div style=\"color: #fb1716; padding: 8px; border-left: 3px solid #ff0000; padding-left: 12px;\">\n ".concat(message, "\n </div>\n ");
|
|
62
|
+
}
|
|
63
|
+
}, [hasSuccessfulRender]);
|
|
64
|
+
var renderResult = useCallback(function (value) {
|
|
65
|
+
var container = previewRef.current;
|
|
66
|
+
if (!container) return;
|
|
67
|
+
if (value instanceof HTMLElement || value instanceof SVGElement || value && _typeof(value) === 'object' && value.nodeType) {
|
|
68
|
+
container.appendChild(value);
|
|
69
|
+
} else if (value !== null && value !== undefined) {
|
|
70
|
+
var div = document.createElement('div');
|
|
71
|
+
div.textContent = String(value);
|
|
72
|
+
container.appendChild(div);
|
|
73
|
+
}
|
|
74
|
+
}, []);
|
|
75
|
+
|
|
76
|
+
// Inject模式:编译并注入代码
|
|
77
|
+
var executeInjectMode = useCallback(function (code) {
|
|
78
|
+
var compiledCode;
|
|
79
|
+
try {
|
|
80
|
+
compiledCode = compile(code, '', true);
|
|
81
|
+
} catch (compileError) {
|
|
82
|
+
var errorMessage = compileError instanceof Error ? compileError.message : String(compileError);
|
|
83
|
+
handleError("Compile Error: ".concat(errorMessage));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
71
86
|
|
|
72
|
-
//
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
87
|
+
// 清理容器并准备新的渲染
|
|
88
|
+
clearContainer();
|
|
89
|
+
var container = previewRef.current;
|
|
90
|
+
container.innerHTML = "<div id=\"".concat(containerId, "\" style=\"width: 100%; height: 100%;\"></div>");
|
|
91
|
+
|
|
92
|
+
// 生成唯一的执行ID并创建脚本
|
|
93
|
+
var executionId = "exec-".concat(Date.now(), "-").concat(Math.random().toString(36).substr(2, 9));
|
|
76
94
|
var script = document.createElement('script');
|
|
77
|
-
var modifiedCode =
|
|
78
|
-
script.innerHTML =
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
95
|
+
var modifiedCode = compiledCode.replace(/'container'|"container"/g, "'".concat(containerId, "'"));
|
|
96
|
+
script.textContent = "\n try {\n ".concat(modifiedCode, "\n const successElement = document.createElement('div');\n successElement.id = 'execution-success-").concat(executionId, "';\n successElement.style.display = 'none';\n document.body.appendChild(successElement);\n } catch (error) {\n console.error('\u811A\u672C\u6267\u884C\u65F6\u53D1\u751F\u9519\u8BEF:', error);\n const errorElement = document.createElement('div');\n errorElement.id = 'execution-error-").concat(executionId, "';\n errorElement.textContent = error.message;\n errorElement.style.display = 'none';\n document.body.appendChild(errorElement);\n\n if (!").concat(hasSuccessfulRender, ") {\n const errorContainer = document.getElementById('").concat(containerId, "');\n if (errorContainer) {\n errorContainer.innerHTML = '<div style=\"color: #fb1716; padding: 8px; border-left: 3px solid #ff0000; padding-left: 12px;\">Runtime Error: ' + error.message + '</div>';\n }\n }\n }\n ");
|
|
97
|
+
document.head.appendChild(script);
|
|
98
|
+
|
|
99
|
+
// 检查执行结果并清理
|
|
100
|
+
setTimeout(function () {
|
|
101
|
+
var successElement = document.getElementById("execution-success-".concat(executionId));
|
|
102
|
+
var errorElement = document.getElementById("execution-error-".concat(executionId));
|
|
103
|
+
if (successElement) {
|
|
104
|
+
setHasSuccessfulRender(true);
|
|
105
|
+
document.body.removeChild(successElement);
|
|
106
|
+
} else if (errorElement) {
|
|
107
|
+
var errorMsg = errorElement.textContent || 'Unknown error';
|
|
108
|
+
if (hasSuccessfulRender) {
|
|
109
|
+
console.error('LiveExample Runtime Error:', errorMsg);
|
|
110
|
+
}
|
|
111
|
+
document.body.removeChild(errorElement);
|
|
112
|
+
}
|
|
113
|
+
if (script.parentNode) {
|
|
114
|
+
script.parentNode.removeChild(script);
|
|
115
|
+
}
|
|
116
|
+
}, 100);
|
|
117
|
+
}, [containerId, clearContainer, handleError, hasSuccessfulRender]);
|
|
118
|
+
|
|
119
|
+
// Direct模式:直接执行代码
|
|
120
|
+
var executeDirectMode = useCallback(function (code) {
|
|
121
|
+
var executeAndRender = function executeAndRender(result) {
|
|
122
|
+
clearContainer();
|
|
123
|
+
renderResult(result);
|
|
124
|
+
setHasSuccessfulRender(true);
|
|
125
|
+
};
|
|
126
|
+
try {
|
|
127
|
+
var result = safeEval(code);
|
|
128
|
+
if (result && typeof result.then === 'function') {
|
|
129
|
+
result.then(executeAndRender).catch(function (error) {
|
|
130
|
+
handleError("Promise Error: ".concat(error.message || String(error)));
|
|
131
|
+
});
|
|
132
|
+
} else {
|
|
133
|
+
executeAndRender(result);
|
|
134
|
+
}
|
|
135
|
+
} catch (error) {
|
|
136
|
+
handleError("Execution Error: ".concat(error instanceof Error ? error.message : String(error)));
|
|
137
|
+
}
|
|
138
|
+
}, [clearContainer, renderResult, handleError]);
|
|
139
|
+
var execute = useCallback( /*#__PURE__*/function () {
|
|
140
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(code) {
|
|
88
141
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
89
142
|
while (1) switch (_context.prev = _context.next) {
|
|
90
143
|
case 0:
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
144
|
+
setExecutionState({
|
|
145
|
+
isLoading: true,
|
|
146
|
+
error: null
|
|
147
|
+
});
|
|
148
|
+
if (inject) {
|
|
149
|
+
executeInjectMode(code);
|
|
150
|
+
} else {
|
|
151
|
+
executeDirectMode(code);
|
|
97
152
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
_context.next = 17;
|
|
104
|
-
break;
|
|
105
|
-
case 10:
|
|
106
|
-
// 自执行函数
|
|
107
|
-
value = safeEval(source);
|
|
108
|
-
if (value instanceof Promise) setLoading(true);
|
|
109
|
-
rendered = normalizeValue(value);
|
|
110
|
-
_context.next = 15;
|
|
111
|
-
return rendered;
|
|
112
|
-
case 15:
|
|
113
|
-
n = _context.sent;
|
|
114
|
-
_node = normalizeDOM(n);
|
|
115
|
-
case 17:
|
|
116
|
-
setNode(_node);
|
|
117
|
-
setLoading(false);
|
|
118
|
-
_context.next = 26;
|
|
119
|
-
break;
|
|
120
|
-
case 21:
|
|
121
|
-
_context.prev = 21;
|
|
122
|
-
_context.t0 = _context["catch"](1);
|
|
123
|
-
setLoading(false);
|
|
124
|
-
setError(_context.t0);
|
|
125
|
-
console.error(_context.t0);
|
|
126
|
-
case 26:
|
|
153
|
+
setExecutionState({
|
|
154
|
+
isLoading: false,
|
|
155
|
+
error: null
|
|
156
|
+
});
|
|
157
|
+
case 3:
|
|
127
158
|
case "end":
|
|
128
159
|
return _context.stop();
|
|
129
160
|
}
|
|
130
|
-
}, _callee
|
|
161
|
+
}, _callee);
|
|
131
162
|
}));
|
|
132
|
-
return
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
163
|
+
return function (_x) {
|
|
164
|
+
return _ref.apply(this, arguments);
|
|
165
|
+
};
|
|
166
|
+
}(), [inject, executeInjectMode, executeDirectMode]);
|
|
167
|
+
var updateToolbarHeight = useCallback(function () {
|
|
168
|
+
if (!toolbarRef.current || !previewRef.current || !codeRef.current) return;
|
|
169
|
+
var codeHeight = codeRef.current.clientHeight;
|
|
170
|
+
var previewHeight = previewRef.current.clientHeight;
|
|
171
|
+
toolbarRef.current.style.height = "".concat(codeHeight + previewHeight, "px");
|
|
172
|
+
}, []);
|
|
173
|
+
var toggleCodeVisibility = useCallback(function () {
|
|
174
|
+
var visible = !isCodeVisible;
|
|
175
|
+
setIsCodeVisible(visible);
|
|
176
|
+
if (codeRef.current) {
|
|
177
|
+
codeRef.current.style.display = visible ? 'block' : 'none';
|
|
178
|
+
setTimeout(updateToolbarHeight, 0);
|
|
139
179
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
var _sizeOf = sizeOf(code),
|
|
148
|
-
codeHeight = _sizeOf.height;
|
|
149
|
-
var _sizeOf2 = sizeOf(containerRef.current),
|
|
150
|
-
nodeHeight = _sizeOf2.height;
|
|
151
|
-
var height = codeHeight + nodeHeight;
|
|
152
|
-
ulRef.current.style.height = height + 'px';
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// 执行代码
|
|
156
|
-
useEffect(function () {
|
|
157
|
-
execute(source);
|
|
158
|
-
}, [source]);
|
|
180
|
+
}, [isCodeVisible, updateToolbarHeight]);
|
|
181
|
+
var handleRunCode = useCallback(function () {
|
|
182
|
+
execute(sourceCode);
|
|
183
|
+
}, [execute, sourceCode]);
|
|
184
|
+
var handleSourceChange = useCallback(function (code) {
|
|
185
|
+
setSourceCode(code);
|
|
186
|
+
}, []);
|
|
159
187
|
|
|
160
|
-
//
|
|
188
|
+
// Effects
|
|
161
189
|
useEffect(function () {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
(_nodeRef$current = nodeRef.current) === null || _nodeRef$current === void 0 || (_nodeRef$current$clea = _nodeRef$current.clear) === null || _nodeRef$current$clea === void 0 || _nodeRef$current$clea.call(_nodeRef$current);
|
|
165
|
-
nodeRef.current = node;
|
|
166
|
-
var oldChild = containerRef.current.children[0];
|
|
167
|
-
if (oldChild) {
|
|
168
|
-
oldChild.replaceWith(node);
|
|
169
|
-
} else {
|
|
170
|
-
containerRef.current.appendChild(node);
|
|
171
|
-
}
|
|
172
|
-
updateToolHeight();
|
|
173
|
-
}
|
|
174
|
-
}, [node, autoMount]);
|
|
175
|
-
|
|
176
|
-
// 销毁的时候调用 DOM 上的 clear 函数
|
|
190
|
+
execute(sourceCode);
|
|
191
|
+
}, [execute, sourceCode]);
|
|
177
192
|
useEffect(function () {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
return (_nodeRef$current2 = nodeRef.current) === null || _nodeRef$current2 === void 0 || (_nodeRef$current2$cle = _nodeRef$current2.clear) === null || _nodeRef$current2$cle === void 0 ? void 0 : _nodeRef$current2$cle.call(_nodeRef$current2);
|
|
181
|
-
};
|
|
182
|
-
}, []);
|
|
183
|
-
|
|
184
|
-
// 是否需要隐藏代码
|
|
193
|
+
setTimeout(updateToolbarHeight, 100);
|
|
194
|
+
}, [executionState, updateToolbarHeight]);
|
|
185
195
|
useEffect(function () {
|
|
186
|
-
if (
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
196
|
+
if (!codeRef.current) return;
|
|
197
|
+
if (pin === false) {
|
|
198
|
+
codeRef.current.style.display = 'none';
|
|
199
|
+
setIsCodeVisible(false);
|
|
200
|
+
}
|
|
201
|
+
}, [pin]);
|
|
191
202
|
useEffect(function () {
|
|
192
|
-
var
|
|
193
|
-
if (
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
updateToolHeight();
|
|
198
|
-
}
|
|
203
|
+
var handleMouseEnter = function handleMouseEnter() {
|
|
204
|
+
if (!toolbarRef.current || !codeRef.current) return;
|
|
205
|
+
toolbarRef.current.style.display = 'block';
|
|
206
|
+
codeRef.current.style.borderRadius = '0px';
|
|
207
|
+
setTimeout(updateToolbarHeight, 0);
|
|
199
208
|
};
|
|
200
|
-
var
|
|
201
|
-
if (
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
code.style.borderTopLeftRadius = '';
|
|
205
|
-
}
|
|
209
|
+
var handleMouseLeave = function handleMouseLeave() {
|
|
210
|
+
if (!toolbarRef.current || !codeRef.current) return;
|
|
211
|
+
toolbarRef.current.style.display = '';
|
|
212
|
+
codeRef.current.style.borderRadius = '';
|
|
206
213
|
};
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
214
|
+
var codeEditor = codeRef.current;
|
|
215
|
+
var previewContainer = previewRef.current;
|
|
216
|
+
codeEditor === null || codeEditor === void 0 || codeEditor.addEventListener('mouseenter', handleMouseEnter);
|
|
217
|
+
codeEditor === null || codeEditor === void 0 || codeEditor.addEventListener('mouseleave', handleMouseLeave);
|
|
218
|
+
previewContainer === null || previewContainer === void 0 || previewContainer.addEventListener('mouseenter', handleMouseEnter);
|
|
219
|
+
previewContainer === null || previewContainer === void 0 || previewContainer.addEventListener('mouseleave', handleMouseLeave);
|
|
213
220
|
return function () {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
containerRef.current.removeEventListener('mouseleave', leave);
|
|
219
|
-
}
|
|
221
|
+
codeEditor === null || codeEditor === void 0 || codeEditor.removeEventListener('mouseenter', handleMouseEnter);
|
|
222
|
+
codeEditor === null || codeEditor === void 0 || codeEditor.removeEventListener('mouseleave', handleMouseLeave);
|
|
223
|
+
previewContainer === null || previewContainer === void 0 || previewContainer.removeEventListener('mouseenter', handleMouseEnter);
|
|
224
|
+
previewContainer === null || previewContainer === void 0 || previewContainer.removeEventListener('mouseleave', handleMouseLeave);
|
|
220
225
|
};
|
|
221
|
-
}, [
|
|
226
|
+
}, [updateToolbarHeight]);
|
|
222
227
|
return /*#__PURE__*/React.createElement("div", {
|
|
223
228
|
className: styles.preview
|
|
224
|
-
},
|
|
229
|
+
}, executionState.isLoading ? /*#__PURE__*/React.createElement("div", {
|
|
225
230
|
className: styles.loading
|
|
226
|
-
}, "
|
|
227
|
-
ref:
|
|
231
|
+
}, "Executing...") : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
232
|
+
ref: previewRef,
|
|
228
233
|
className: styles.main
|
|
229
|
-
},
|
|
230
|
-
className: styles.error
|
|
231
|
-
}, error.toString())), /*#__PURE__*/React.createElement("ul", {
|
|
234
|
+
}), /*#__PURE__*/React.createElement("ul", {
|
|
232
235
|
className: styles.ul,
|
|
233
|
-
ref:
|
|
236
|
+
ref: toolbarRef
|
|
234
237
|
}, /*#__PURE__*/React.createElement("li", {
|
|
235
|
-
onClick:
|
|
236
|
-
className: styles.li
|
|
238
|
+
onClick: toggleCodeVisibility,
|
|
239
|
+
className: styles.li,
|
|
240
|
+
title: "Toggle Code Editor"
|
|
237
241
|
}, /*#__PURE__*/React.createElement(PushpinOutlined, null)), /*#__PURE__*/React.createElement("li", {
|
|
238
|
-
onClick:
|
|
239
|
-
className: styles.li
|
|
240
|
-
|
|
241
|
-
}
|
|
242
|
+
onClick: handleRunCode,
|
|
243
|
+
className: styles.li,
|
|
244
|
+
title: "Run Code"
|
|
245
|
+
}, /*#__PURE__*/React.createElement(PlayCircleOutlined, null)))), /*#__PURE__*/React.createElement("div", {
|
|
246
|
+
ref: codeRef,
|
|
247
|
+
style: {
|
|
248
|
+
display: isCodeVisible ? 'block' : 'none'
|
|
249
|
+
}
|
|
250
|
+
}, /*#__PURE__*/React.createElement(SourceCodeEditor, {
|
|
251
|
+
onChange: handleSourceChange,
|
|
252
|
+
initialValue: sourceCode,
|
|
253
|
+
lang: lang
|
|
254
|
+
})));
|
|
255
|
+
}
|
|
@@ -3,17 +3,25 @@ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol
|
|
|
3
3
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
4
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
5
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
6
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
7
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
8
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
9
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
10
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
6
11
|
import React, { useEffect } from 'react';
|
|
7
12
|
import { createRoot } from 'react-dom/client';
|
|
8
|
-
import
|
|
13
|
+
import LiveExample from "dumi/theme/slots/LiveExample";
|
|
9
14
|
import { safeEval } from "./utils";
|
|
10
15
|
function optionsOf(p) {
|
|
11
16
|
try {
|
|
12
17
|
var _meta$match;
|
|
13
18
|
var meta = p.getAttribute('meta');
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
|
|
19
|
+
var lang = p.getAttribute('lang');
|
|
20
|
+
var matched = (_meta$match = meta.match(/\|\s*ob\s*({.*})/)) === null || _meta$match === void 0 ? void 0 : _meta$match[1];
|
|
21
|
+
var obOptions = matched ? safeEval(matched) : {};
|
|
22
|
+
return _objectSpread(_objectSpread({}, obOptions), {}, {
|
|
23
|
+
lang: lang
|
|
24
|
+
});
|
|
17
25
|
} catch (e) {
|
|
18
26
|
console.error(e);
|
|
19
27
|
return {};
|
|
@@ -21,12 +29,20 @@ function optionsOf(p) {
|
|
|
21
29
|
}
|
|
22
30
|
function sourceOf(block) {
|
|
23
31
|
var cloned = block.cloneNode(true);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
|
|
33
|
+
// 处理 Prism 语法高亮的 pre 元素
|
|
34
|
+
var preElement = cloned.querySelector('pre.prism-code');
|
|
35
|
+
if (preElement) {
|
|
36
|
+
var lines = Array.from(preElement.children);
|
|
37
|
+
var codeLines = lines.map(function (line) {
|
|
38
|
+
var lineElement = line;
|
|
39
|
+
return lineElement.innerText || lineElement.textContent || '';
|
|
40
|
+
});
|
|
41
|
+
var _code = codeLines.join('\n');
|
|
42
|
+
return _code.replace(/\n\s*\n\s*\n/g, '\n\n');
|
|
43
|
+
}
|
|
44
|
+
var code = cloned.textContent || '';
|
|
45
|
+
return code.replace(/\n\s*\n\s*\n/g, '\n\n');
|
|
30
46
|
}
|
|
31
47
|
function blockOf() {
|
|
32
48
|
if ((typeof document === "undefined" ? "undefined" : _typeof(document)) !== undefined && document) {
|
|
@@ -73,11 +89,11 @@ export function usePreview() {
|
|
|
73
89
|
var wrapper = document.createElement('div');
|
|
74
90
|
var _options = optionsOf(p);
|
|
75
91
|
var root = createRoot(wrapper);
|
|
76
|
-
root.render( /*#__PURE__*/React.createElement(
|
|
77
|
-
source: source
|
|
78
|
-
code: block
|
|
92
|
+
root.render( /*#__PURE__*/React.createElement(LiveExample, _extends({
|
|
93
|
+
source: source
|
|
79
94
|
}, _options)));
|
|
80
|
-
|
|
95
|
+
var container = block.parentElement;
|
|
96
|
+
container.replaceWith(wrapper);
|
|
81
97
|
W[i] = wrapper;
|
|
82
98
|
P[i] = p;
|
|
83
99
|
}
|
|
@@ -52,5 +52,22 @@ export function getNavigateUrl(pathname, first, siderbarMenu) {
|
|
|
52
52
|
return pathname;
|
|
53
53
|
}
|
|
54
54
|
export function safeEval(source) {
|
|
55
|
-
|
|
55
|
+
try {
|
|
56
|
+
// 如果代码以 (() => 或 (function 开头,说明是IIFE,直接执行
|
|
57
|
+
var trimmedSource = source.trim();
|
|
58
|
+
if (trimmedSource.startsWith('(') && (trimmedSource.includes('=>') || trimmedSource.includes('function'))) {
|
|
59
|
+
return new Function("return ".concat(source))();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// 尝试作为表达式执行
|
|
63
|
+
try {
|
|
64
|
+
return new Function("return ".concat(source))();
|
|
65
|
+
} catch (e) {
|
|
66
|
+
// 如果作为表达式失败,尝试作为语句执行
|
|
67
|
+
return new Function(source)();
|
|
68
|
+
}
|
|
69
|
+
} catch (error) {
|
|
70
|
+
console.error('代码执行错误:', error);
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
56
73
|
}
|
package/package.json
CHANGED
|
File without changes
|