@antv/dumi-theme-antv 0.7.5 → 0.7.6-beta.0

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
  }, {
@@ -18,7 +18,7 @@ import { Alert, Button, Dropdown, Menu, Modal, Popover } from 'antd';
18
18
  import cx from 'classnames';
19
19
  import { FormattedMessage, Link, useLocale, useSiteData } from 'dumi';
20
20
  import { get, map, size } from 'lodash-es';
21
- import React, { useEffect, useState } from 'react';
21
+ import React, { useEffect, useMemo, useState } from 'react';
22
22
  import { useMedia } from 'react-use';
23
23
  import { getPurePathname } from "../../utils/location";
24
24
  import { ic, icWithLocale } from "../hooks";
@@ -53,6 +53,9 @@ var HeaderComponent = function HeaderComponent(_ref) {
53
53
  showAntVProductsCard = _ref$showAntVProducts === void 0 ? true : _ref$showAntVProducts,
54
54
  _ref$showLanguageSwit = _ref.showLanguageSwitcher,
55
55
  showLanguageSwitcher = _ref$showLanguageSwit === void 0 ? true : _ref$showLanguageSwit,
56
+ _ref$showWeavefox = _ref.showWeavefox,
57
+ showWeavefox = _ref$showWeavefox === void 0 ? {} : _ref$showWeavefox,
58
+ isInternalUser = _ref.isInternalUser,
56
59
  logo = _ref.logo,
57
60
  onLanguageChange = _ref.onLanguageChange,
58
61
  _ref$showWxQrcode = _ref.showWxQrcode,
@@ -182,13 +185,25 @@ var HeaderComponent = function HeaderComponent(_ref) {
182
185
  var handleSwitchLanguage = function handleSwitchLanguage() {
183
186
  onLanguageChange === null || onLanguageChange === void 0 || onLanguageChange(lang);
184
187
  };
188
+ var weavefox = useMemo(function () {
189
+ var configKey = isInternalUser ? 'internal' : 'public';
190
+ var configValue = showWeavefox[configKey];
191
+ if (!configValue) return /*#__PURE__*/React.createElement(React.Fragment, null);
192
+ var defaultLink = isInternalUser ? 'https://weavefox.antgroup-inc.cn/agent/@huiyu.zjt/AntV' : 'https://weavefox.alipay.com/agent/@ufox-b8tydq-0758/202505AP7vfl00422922';
193
+ var href = typeof configValue === 'string' ? configValue : defaultLink;
194
+ return /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("a", {
195
+ href: href,
196
+ target: "_blank",
197
+ rel: "noreferrer"
198
+ }, "AI\u751F\u7801"));
199
+ }, [isInternalUser, showWeavefox]);
185
200
  var menu = /*#__PURE__*/React.createElement("ul", {
186
201
  className: cx(styles.menu, _defineProperty(_defineProperty({}, styles.popup, !isWide), styles.popupHidden, !popupMenuVisible))
187
202
  }, /** 最左侧的菜单,一般是 教程、API、示例,或者其他自定义,有配置文件中的 `navs` 决定 */
188
203
  size(navs) ? /*#__PURE__*/React.createElement(Navs, {
189
204
  navs: navs,
190
205
  path: pathname
191
- }) : null, /** 生态产品 */
206
+ }) : null, weavefox, /** 生态产品 */
192
207
  size(ecosystems) ? /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement(Dropdown, {
193
208
  className: styles.ecoSystems,
194
209
  overlay: /*#__PURE__*/React.createElement(Menu, null, map(ecosystems, function (_ref2) {
@@ -428,7 +443,8 @@ var Header = function Header(props) {
428
443
  docsearchOptions = themeConfig.docsearchOptions,
429
444
  announcement = themeConfig.announcement,
430
445
  petercat = themeConfig.petercat,
431
- links = themeConfig.links;
446
+ links = themeConfig.links,
447
+ showWeavefox = themeConfig.showWeavefox;
432
448
  var searchOptions = {
433
449
  docsearchOptions: docsearchOptions
434
450
  };
@@ -436,6 +452,10 @@ var Header = function Header(props) {
436
452
  pathname = _useLocation2.pathname;
437
453
  var isHomePage = ['/', ''].includes(getPurePathname(pathname));
438
454
  var lang = useLocale().id;
455
+ var _useState9 = useState(undefined),
456
+ _useState10 = _slicedToArray(_useState9, 2),
457
+ isInternalUser = _useState10[0],
458
+ setIsInternalUser = _useState10[1];
439
459
  var headerProps = {
440
460
  subTitle: icWithLocale(title, lang),
441
461
  subTitleHref: subTitleHref,
@@ -458,12 +478,10 @@ var Header = function Header(props) {
458
478
  isHomePage: isHomePage,
459
479
  transparent: isHomePage && isAntVSite,
460
480
  announcement: announcement,
461
- petercat: petercat
481
+ petercat: petercat,
482
+ showWeavefox: showWeavefox,
483
+ isInternalUser: isInternalUser
462
484
  };
463
- var _useState9 = useState(undefined),
464
- _useState10 = _slicedToArray(_useState9, 2),
465
- isInternalUser = _useState10[0],
466
- setIsInternalUser = _useState10[1];
467
485
  var isPetercatShow = petercat === null || petercat === void 0 ? void 0 : petercat.show;
468
486
  useEffect(function () {
469
487
  var checkUserType = /*#__PURE__*/function () {
@@ -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,244 @@ 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 clearPreviewContainer = useCallback(function () {
49
+ if (previewRef.current) {
50
+ previewRef.current.innerHTML = '';
51
+ }
52
+ }, []);
53
+ var showError = useCallback(function (message) {
54
+ if (previewRef.current) {
55
+ previewRef.current.innerHTML = "\n <div style=\"color: #fb1716; padding: 8px; border-left: 3px solid #ff0000; padding-left: 12px;\">\n ".concat(message, "\n </div>\n ");
56
+ }
57
+ }, []);
58
+ var renderResult = useCallback(function (value) {
59
+ var container = previewRef.current;
60
+ if (!container) {
61
+ console.warn('渲染结果时容器不存在');
62
+ return;
63
+ }
64
+ if (value instanceof HTMLElement || value instanceof SVGElement || value && _typeof(value) === 'object' && value.nodeType) {
65
+ container.appendChild(value);
66
+ } else if (value !== null && value !== undefined) {
67
+ var div = document.createElement('div');
68
+ div.textContent = String(value);
69
+ container.appendChild(div);
70
+ }
71
+ }, []);
71
72
 
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);
73
+ // Inject模式:编译并注入代码
74
+ var executeInjectMode = useCallback(function (code) {
75
+ // 编译代码
76
+ var compiledCode;
77
+ try {
78
+ compiledCode = compile(code, '', true);
79
+ } catch (compileError) {
80
+ var errorMessage = compileError instanceof Error ? compileError.message : String(compileError);
81
+ showError("Compile Error: ".concat(errorMessage));
82
+ return;
83
+ }
84
+
85
+ // 清理容器并注入代码
86
+ clearPreviewContainer();
87
+ var container = previewRef.current;
88
+ container.innerHTML = "<div id=\"".concat(containerId, "\" style=\"width: 100%; height: 100%;\"></div>");
89
+
90
+ // 创建并注入脚本
76
91
  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;
92
+ var modifiedCode = compiledCode.replace(/'container'|"container"/g, "'".concat(containerId, "'"));
93
+ script.textContent = "\n try {\n ".concat(modifiedCode, "\n } catch (error) {\n console.error('\u811A\u672C\u6267\u884C\u65F6\u53D1\u751F\u9519\u8BEF:', error);\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 ");
94
+ document.head.appendChild(script);
95
+
96
+ // 延迟清理脚本
97
+ setTimeout(function () {
98
+ if (script.parentNode) {
99
+ script.parentNode.removeChild(script);
100
+ }
101
+ }, 100);
102
+ }, [containerId, clearPreviewContainer, showError]);
103
+
104
+ // Direct模式:直接执行代码
105
+ var executeDirectMode = useCallback(function (code) {
106
+ clearPreviewContainer();
107
+ var result = safeEval(code);
108
+
109
+ // 处理Promise结果
110
+ if (result && typeof result.then === 'function') {
111
+ result.then(function (resolvedValue) {
112
+ renderResult(resolvedValue);
113
+ }).catch(function (error) {
114
+ showError("Promise Error: ".concat(error.message || String(error)));
115
+ });
116
+ } else {
117
+ renderResult(result);
118
+ }
119
+ }, [clearPreviewContainer, renderResult, showError]);
120
+
121
+ // 主执行函数
122
+ var execute = useCallback( /*#__PURE__*/function () {
123
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(code) {
124
+ var errorMessage;
88
125
  return _regeneratorRuntime().wrap(function _callee$(_context) {
89
126
  while (1) switch (_context.prev = _context.next) {
90
127
  case 0:
91
- setError(null);
92
- _context.prev = 1;
93
- _node = null;
94
- if (!autoMount) {
95
- _context.next = 10;
96
- break;
128
+ setExecutionState({
129
+ isLoading: true,
130
+ error: null
131
+ });
132
+ try {
133
+ if (inject) {
134
+ executeInjectMode(code);
135
+ } else {
136
+ executeDirectMode(code);
137
+ }
138
+ setExecutionState({
139
+ isLoading: false,
140
+ error: null
141
+ });
142
+ } catch (error) {
143
+ errorMessage = error instanceof Error ? error.message : String(error);
144
+ setExecutionState({
145
+ isLoading: false,
146
+ error: errorMessage
147
+ });
148
+ showError("Execution Error: ".concat(errorMessage));
97
149
  }
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:
150
+ case 2:
127
151
  case "end":
128
152
  return _context.stop();
129
153
  }
130
- }, _callee, null, [[1, 21]]);
154
+ }, _callee);
131
155
  }));
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';
139
- }
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
- }
156
+ return function (_x) {
157
+ return _ref.apply(this, arguments);
158
+ };
159
+ }(), [inject, executeInjectMode, executeDirectMode, showError]);
154
160
 
155
- // 执行代码
156
- useEffect(function () {
157
- execute(source);
158
- }, [source]);
161
+ // 工具栏高度更新
162
+ var updateToolbarHeight = useCallback(function () {
163
+ if (!toolbarRef.current || !previewRef.current || !codeRef.current) return;
164
+ var codeHeight = codeRef.current.clientHeight;
165
+ var previewHeight = previewRef.current.clientHeight;
166
+ toolbarRef.current.style.height = "".concat(codeHeight + previewHeight, "px");
167
+ }, []);
159
168
 
160
- // 更新 node(非 autoMount 模式)
161
- 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();
169
+ // 事件处理函数
170
+ var toggleCodeVisibility = useCallback(function () {
171
+ var visible = !isCodeVisible;
172
+ setIsCodeVisible(visible);
173
+ if (codeRef.current) {
174
+ codeRef.current.style.display = visible ? 'block' : 'none';
175
+ setTimeout(updateToolbarHeight, 0);
173
176
  }
174
- }, [node, autoMount]);
175
-
176
- // 销毁的时候调用 DOM 上的 clear 函数
177
- 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
- };
177
+ }, [isCodeVisible, updateToolbarHeight]);
178
+ var handleRunCode = useCallback(function () {
179
+ execute(sourceCode);
180
+ }, [execute, sourceCode]);
181
+ var handleSourceChange = useCallback(function (code) {
182
+ setSourceCode(code);
182
183
  }, []);
183
184
 
184
- // 是否需要隐藏代码
185
+ // Effects
185
186
  useEffect(function () {
186
- if (pin !== false) return;
187
- code.style.display = 'none';
188
- }, [pin, code]);
189
-
190
- // 暂时和隐藏 toolbar
187
+ execute(sourceCode);
188
+ }, [execute, sourceCode]);
191
189
  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
- }
190
+ setTimeout(updateToolbarHeight, 100);
191
+ }, [executionState, updateToolbarHeight]);
192
+ useEffect(function () {
193
+ if (!codeRef.current) return;
194
+ if (pin === false) {
195
+ codeRef.current.style.display = 'none';
196
+ setIsCodeVisible(false);
197
+ }
198
+ }, [pin]);
199
+ useEffect(function () {
200
+ var handleMouseEnter = function handleMouseEnter() {
201
+ if (!toolbarRef.current || !codeRef.current) return;
202
+ toolbarRef.current.style.display = 'block';
203
+ codeRef.current.style.borderRadius = '0px';
204
+ setTimeout(updateToolbarHeight, 0);
199
205
  };
200
- var leave = function leave() {
201
- if (ulRef.current) {
202
- ulRef.current.style.display = '';
203
- code.style.borderBottomLeftRadius = '';
204
- code.style.borderTopLeftRadius = '';
205
- }
206
+ var handleMouseLeave = function handleMouseLeave() {
207
+ if (!toolbarRef.current || !codeRef.current) return;
208
+ toolbarRef.current.style.display = '';
209
+ codeRef.current.style.borderRadius = '';
206
210
  };
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
- }
211
+ var codeEditor = codeRef.current;
212
+ var previewContainer = previewRef.current;
213
+ codeEditor === null || codeEditor === void 0 || codeEditor.addEventListener('mouseenter', handleMouseEnter);
214
+ codeEditor === null || codeEditor === void 0 || codeEditor.addEventListener('mouseleave', handleMouseLeave);
215
+ previewContainer === null || previewContainer === void 0 || previewContainer.addEventListener('mouseenter', handleMouseEnter);
216
+ previewContainer === null || previewContainer === void 0 || previewContainer.addEventListener('mouseleave', handleMouseLeave);
213
217
  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
- }
218
+ codeEditor === null || codeEditor === void 0 || codeEditor.removeEventListener('mouseenter', handleMouseEnter);
219
+ codeEditor === null || codeEditor === void 0 || codeEditor.removeEventListener('mouseleave', handleMouseLeave);
220
+ previewContainer === null || previewContainer === void 0 || previewContainer.removeEventListener('mouseenter', handleMouseEnter);
221
+ previewContainer === null || previewContainer === void 0 || previewContainer.removeEventListener('mouseleave', handleMouseLeave);
220
222
  };
221
- }, [code]);
223
+ }, [updateToolbarHeight]);
222
224
  return /*#__PURE__*/React.createElement("div", {
223
225
  className: styles.preview
224
- }, loading ? /*#__PURE__*/React.createElement("div", {
226
+ }, executionState.isLoading ? /*#__PURE__*/React.createElement("div", {
225
227
  className: styles.loading
226
- }, "running...") : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
227
- ref: containerRef,
228
+ }, "Executing...") : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
229
+ ref: previewRef,
228
230
  className: styles.main
229
- }, error && /*#__PURE__*/React.createElement("span", {
230
- className: styles.error
231
- }, error.toString())), /*#__PURE__*/React.createElement("ul", {
231
+ }), /*#__PURE__*/React.createElement("ul", {
232
232
  className: styles.ul,
233
- ref: ulRef
233
+ ref: toolbarRef
234
234
  }, /*#__PURE__*/React.createElement("li", {
235
- onClick: onPin,
236
- className: styles.li
235
+ onClick: toggleCodeVisibility,
236
+ className: styles.li,
237
+ title: "Toggle Code Editor"
237
238
  }, /*#__PURE__*/React.createElement(PushpinOutlined, null)), /*#__PURE__*/React.createElement("li", {
238
- onClick: onRun,
239
- className: styles.li
240
- }, /*#__PURE__*/React.createElement(PlayCircleOutlined, null)))));
241
- };
239
+ onClick: handleRunCode,
240
+ className: styles.li,
241
+ title: "Run Code"
242
+ }, /*#__PURE__*/React.createElement(PlayCircleOutlined, null)))), /*#__PURE__*/React.createElement("div", {
243
+ ref: codeRef,
244
+ style: {
245
+ display: isCodeVisible ? 'block' : 'none'
246
+ }
247
+ }, /*#__PURE__*/React.createElement(SourceCodeEditor, {
248
+ onChange: handleSourceChange,
249
+ initialValue: sourceCode,
250
+ lang: lang
251
+ })));
252
+ }
@@ -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.5",
3
+ "version": "0.7.6-beta.0",
4
4
  "description": "AntV website theme based on dumi2.",
5
5
  "keywords": [
6
6
  "dumi",
@@ -145,7 +145,8 @@
145
145
  "react-dom": ">=16.9.0"
146
146
  },
147
147
  "publishConfig": {
148
- "access": "public"
148
+ "access": "public",
149
+ "tag": "beta"
149
150
  },
150
151
  "authors": [
151
152
  "dumi",