@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.
@@ -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
  }
@@ -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
  }
@@ -61,7 +61,7 @@ function rehypeObservable() {
61
61
  type: "element",
62
62
  tagName: "p",
63
63
  // @ts-ignore
64
- properties: { meta: node.data.meta },
64
+ properties: { meta: node.data.meta, ...node.properties },
65
65
  children: []
66
66
  },
67
67
  // @ts-ignore
@@ -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: 'Resources',
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 React, { useEffect, useRef, useState } from 'react';
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
- function normalizeValue(node) {
18
- return node instanceof Promise ? node : Promise.resolve(node);
19
- }
20
- function normalizeDOM(node) {
21
- if (node instanceof HTMLElement || node instanceof SVGElement) return node;
22
- var span = document.createElement('span');
23
- span.textContent = node.toString();
24
- return span;
25
- }
26
- function sizeOf(dom) {
27
- if (dom.style.display === 'none') return {
28
- width: 0,
29
- height: 0
30
- };
31
- var parseInt10 = function parseInt10(d) {
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
- loading = _useState2[0],
55
- setLoading = _useState2[1];
56
- var _useState3 = useState(null),
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
- error = _useState4[0],
59
- setError = _useState4[1];
60
- var _useState5 = useState(null),
37
+ executionState = _useState4[0],
38
+ setExecutionState = _useState4[1];
39
+ var _useState5 = useState(pin !== false),
61
40
  _useState6 = _slicedToArray(_useState5, 2),
62
- node = _useState6[0],
63
- setNode = _useState6[1];
64
- var _useState7 = useState("container_".concat(uniqueId())),
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
- uniqueContainerId = _useState8[0];
67
- function executeScript(code, scriptContainerId) {
68
- if (!containerRef.current) return null;
69
- var containerDiv = document.createElement('div');
70
- containerDiv.id = scriptContainerId;
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
- // 使用唯一ID作为容器ID,确保多个Preview组件不会冲突
73
- containerDiv.innerHTML = "<div id=\"".concat(uniqueContainerId, "\" class=\"playgroundCodeContainer\" style=\"width: 100%; height: 100%\"></div>");
74
- containerRef.current.innerHTML = '';
75
- containerRef.current.appendChild(containerDiv);
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 = code.replace(/'container'|"container"/g, "'".concat(uniqueContainerId, "'"));
78
- script.innerHTML = modifiedCode;
79
- containerDiv.appendChild(script);
80
- return containerDiv;
81
- }
82
- function execute(_x) {
83
- return _execute.apply(this, arguments);
84
- }
85
- function _execute() {
86
- _execute = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(source) {
87
- var _node, compiledCode, scriptContainerId, containerNode, value, rendered, n;
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
- setError(null);
92
- _context.prev = 1;
93
- _node = null;
94
- if (!autoMount) {
95
- _context.next = 10;
96
- break;
144
+ setExecutionState({
145
+ isLoading: true,
146
+ error: null
147
+ });
148
+ if (inject) {
149
+ executeInjectMode(code);
150
+ } else {
151
+ executeDirectMode(code);
97
152
  }
98
- // 手动执行,自动挂载到 DOM 上
99
- compiledCode = compile(source, '', true); // 为每个脚本容器生成唯一ID
100
- scriptContainerId = "script_container_".concat(uniqueId());
101
- containerNode = executeScript(compiledCode, scriptContainerId);
102
- _node = containerNode;
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, null, [[1, 21]]);
161
+ }, _callee);
131
162
  }));
132
- return _execute.apply(this, arguments);
133
- }
134
- function onPin() {
135
- if (code.style.display === 'block' || code.style.display === '') {
136
- code.style.display = 'none';
137
- } else {
138
- code.style.display = 'block';
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
- updateToolHeight();
141
- }
142
- function onRun() {
143
- execute(source);
144
- }
145
- function updateToolHeight() {
146
- if (!ulRef.current || !containerRef.current) return;
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
- // 更新 node(非 autoMount 模式)
188
+ // Effects
161
189
  useEffect(function () {
162
- if (containerRef.current && node && !autoMount) {
163
- var _nodeRef$current, _nodeRef$current$clea;
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
- return function () {
179
- var _nodeRef$current2, _nodeRef$current2$cle;
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 (pin !== false) return;
187
- code.style.display = 'none';
188
- }, [pin, code]);
189
-
190
- // 暂时和隐藏 toolbar
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 enter = function enter() {
193
- if (ulRef.current) {
194
- ulRef.current.style.display = 'block';
195
- code.style.borderBottomLeftRadius = '0px';
196
- code.style.borderTopLeftRadius = '0px';
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 leave = function leave() {
201
- if (ulRef.current) {
202
- ulRef.current.style.display = '';
203
- code.style.borderBottomLeftRadius = '';
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
- code.addEventListener('mouseenter', enter);
208
- code.addEventListener('mouseleave', leave);
209
- if (containerRef.current) {
210
- containerRef.current.addEventListener('mouseenter', enter);
211
- containerRef.current.addEventListener('mouseleave', leave);
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
- code.removeEventListener('mouseenter', enter);
215
- code.removeEventListener('mouseleave', leave);
216
- if (containerRef.current) {
217
- containerRef.current.removeEventListener('mouseenter', enter);
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
- }, [code]);
226
+ }, [updateToolbarHeight]);
222
227
  return /*#__PURE__*/React.createElement("div", {
223
228
  className: styles.preview
224
- }, loading ? /*#__PURE__*/React.createElement("div", {
229
+ }, executionState.isLoading ? /*#__PURE__*/React.createElement("div", {
225
230
  className: styles.loading
226
- }, "running...") : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
227
- ref: containerRef,
231
+ }, "Executing...") : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
232
+ ref: previewRef,
228
233
  className: styles.main
229
- }, error && /*#__PURE__*/React.createElement("span", {
230
- className: styles.error
231
- }, error.toString())), /*#__PURE__*/React.createElement("ul", {
234
+ }), /*#__PURE__*/React.createElement("ul", {
232
235
  className: styles.ul,
233
- ref: ulRef
236
+ ref: toolbarRef
234
237
  }, /*#__PURE__*/React.createElement("li", {
235
- onClick: onPin,
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: onRun,
239
- className: styles.li
240
- }, /*#__PURE__*/React.createElement(PlayCircleOutlined, null)))));
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
+ }
@@ -88,6 +88,7 @@
88
88
 
89
89
  pre[class*='language-'] {
90
90
  background-color: rgba(0, 0, 0, 0.03);
91
+ width: 100%;
91
92
  }
92
93
 
93
94
  code {
@@ -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 { Preview } from "./Preview";
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 options = (_meta$match = meta.match(/\|\s*ob\s*({.*})/)) === null || _meta$match === void 0 ? void 0 : _meta$match[1];
15
- if (!options) return {};
16
- return safeEval(options);
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
- // 去掉 comments
25
- var comments = Array.from(cloned.querySelectorAll('.comment'));
26
- comments.forEach(function (comment) {
27
- return comment.remove();
28
- });
29
- return cloned.textContent;
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(Preview, _extends({
77
- source: source,
78
- code: block
92
+ root.render( /*#__PURE__*/React.createElement(LiveExample, _extends({
93
+ source: source
79
94
  }, _options)));
80
- p.replaceWith(wrapper);
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
- return new Function("return ".concat(source))();
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antv/dumi-theme-antv",
3
- "version": "0.7.6",
3
+ "version": "0.7.7",
4
4
  "description": "AntV website theme based on dumi2.",
5
5
  "keywords": [
6
6
  "dumi",