@antv/dumi-theme-antv 0.6.4-beta.3 → 0.6.4-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/builtins/Playground/index.js +1 -1
  2. package/dist/common/ClientOnly.js +21 -0
  3. package/dist/common/CommonHelmet.js +85 -0
  4. package/dist/common/InViewSuspense.js +29 -0
  5. package/dist/hooks/useLocale.js +11 -0
  6. package/dist/hooks/useMenu.js +68 -73
  7. package/dist/layouts/DocLayout.js +32 -23
  8. package/dist/layouts/IndexLayout/index.js +16 -0
  9. package/dist/layouts/{entry/Manual.js → ManualLayout/index.js} +6 -6
  10. package/dist/pages/404.js +5 -4
  11. package/dist/pages/Example/index.js +76 -53
  12. package/dist/pages/Examples/components/ExampleTopicMenu/index.js +3 -2
  13. package/dist/pages/Examples/index.js +28 -32
  14. package/dist/{slots → pages/Index/components}/Cases/index.js +1 -1
  15. package/dist/{slots → pages/Index/components}/Detail/News.js +1 -1
  16. package/dist/{slots → pages/Index/components}/Detail/index.js +1 -1
  17. package/dist/{slots → pages/Index/components}/Features/FeatureCard.js +1 -1
  18. package/dist/{slots → pages/Index/components}/Features/index.js +1 -1
  19. package/dist/pages/Index/components/_.less +119 -0
  20. package/dist/{layouts/entry/Index.js → pages/Index/index.js} +18 -22
  21. package/dist/plugin/index.js +52 -43
  22. package/dist/slots/CodeEditor/index.js +4 -3
  23. package/dist/slots/CodePreview/CodeHeader.js +3 -2
  24. package/dist/slots/CodePreview/index.js +3 -2
  25. package/dist/slots/CodeRunner/index.js +34 -29
  26. package/dist/slots/ExampleSider/index.js +3 -2
  27. package/dist/slots/Feedback/Contributors.js +3 -2
  28. package/dist/slots/Feedback/EditButton.js +3 -2
  29. package/dist/slots/Feedback/PageFeedback.js +4 -3
  30. package/dist/slots/Feedback/SectionFeedback.js +3 -2
  31. package/dist/slots/Feedback/index.js +12 -10
  32. package/dist/slots/Footer/index.js +3 -2
  33. package/dist/slots/Header/Navs.js +66 -6
  34. package/dist/slots/Header/Search/index.js +1 -1
  35. package/dist/slots/Header/index.js +64 -105
  36. package/dist/slots/ManualContent/Main.js +16 -17
  37. package/dist/slots/ManualContent/NavigatorBanner.js +4 -2
  38. package/dist/slots/ManualContent/ObPreview.js +17 -0
  39. package/dist/slots/ManualContent/index.js +11 -4
  40. package/dist/slots/ManualContent/usePreview.js +6 -1
  41. package/dist/slots/ManualContent/utils.js +3 -13
  42. package/dist/slots/global.js +4 -4
  43. package/dist/slots/hooks.js +0 -25
  44. package/dist/slots/utils.js +0 -7
  45. package/dist/utils/env.js +10 -0
  46. package/dist/utils/location.js +6 -0
  47. package/dist/utils/user.js +13 -25
  48. package/package.json +5 -4
  49. package/dist/common/SEO.js +0 -61
  50. package/dist/layouts/entry/API.js +0 -12
  51. package/dist/pages/Example/utils.js +0 -9
  52. package/dist/slots/Article/index.js +0 -9
  53. package/dist/slots/Article/index.module.less +0 -8
  54. package/dist/slots/CodePreview/CodeHeader.module.less +0 -0
  55. package/dist/slots/Header/Products/NavigatorBanner.js +0 -29
  56. package/dist/slots/Header/Products/NavigatorBanner.module.less +0 -39
  57. /package/dist/{slots → pages/Index/components}/Cases/index.module.less +0 -0
  58. /package/dist/{slots → pages/Index/components}/Companies/index.js +0 -0
  59. /package/dist/{slots → pages/Index/components}/Companies/index.module.less +0 -0
  60. /package/dist/{slots → pages/Index/components}/Detail/News.module.less +0 -0
  61. /package/dist/{slots → pages/Index/components}/Detail/index.module.less +0 -0
  62. /package/dist/{slots → pages/Index/components}/Features/FeatureCard.module.less +0 -0
  63. /package/dist/{slots → pages/Index/components}/Features/index.module.less +0 -0
@@ -13,21 +13,22 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
13
13
  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; }
14
14
  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; } }
15
15
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
16
- import { CaretDownFilled, CheckOutlined, DownOutlined, GithubOutlined, LinkOutlined, MenuOutlined, WechatOutlined } from '@ant-design/icons';
16
+ import { CaretDownFilled, DownOutlined, GithubOutlined, LinkOutlined, MenuOutlined, WechatOutlined } from '@ant-design/icons';
17
17
  import { Alert, Button, Dropdown, Menu, Modal, Popover, Select } from 'antd';
18
18
  import cx from 'classnames';
19
- import { FormattedMessage, useLocale, useSiteData } from 'dumi';
20
- import { get, isBoolean, map, size } from 'lodash-es';
21
- import React, { useEffect, useMemo, useState } from 'react';
22
- import { useNavigate } from 'react-router-dom';
19
+ import { FormattedMessage, Link, useLocale, useSiteData } from 'dumi';
20
+ import { get, map, size } from 'lodash-es';
21
+ import React, { useEffect, useState } from 'react';
23
22
  import { useMedia } from 'react-use';
24
- import { ic } from "../hooks";
23
+ import { getPurePathname } from "../../utils/location";
24
+ import { ic, icWithLocale } from "../hooks";
25
25
  import { Navs } from "./Navs";
26
26
  import { Products } from "./Products";
27
27
  import { Search } from "./Search";
28
- import { findVersion, getLangUrl } from "./utils";
28
+ import { findVersion } from "./utils";
29
29
  import { Assistant } from '@petercatai/assistant';
30
30
  import '@petercatai/assistant/style';
31
+ import { useLocation } from 'react-router-dom';
31
32
  import { determineUserType } from "../../utils/user";
32
33
  import styles from "./index.module.less";
33
34
  function redirectChinaMirror(chinaMirrorOrigin) {
@@ -39,6 +40,7 @@ var ANNOUNCEMENT_LOCALSTORAGE_ID = 'ANNOUNCEMENT_LOCALSTORAGE_ID';
39
40
  * 头部菜单
40
41
  */
41
42
  var HeaderComponent = function HeaderComponent(_ref) {
43
+ var _announcement$link;
42
44
  var _ref$subTitle = _ref.subTitle,
43
45
  subTitle = _ref$subTitle === void 0 ? '' : _ref$subTitle,
44
46
  _ref$navs = _ref.navs,
@@ -82,6 +84,8 @@ var HeaderComponent = function HeaderComponent(_ref) {
82
84
  _useState4 = _slicedToArray(_useState3, 2),
83
85
  chinaMirrorHintVisible = _useState4[0],
84
86
  updateChinaMirrorHintVisible = _useState4[1];
87
+ var locale = useLocale();
88
+ var lang = locale.id;
85
89
  useEffect(function () {
86
90
  var timeout = setTimeout(function () {
87
91
  if (showChinaMirror && lang === 'zh' && !localStorage.getItem('china-mirror-no-more-hint') && window.location.host.includes('antv.vision')) {
@@ -92,18 +96,8 @@ var HeaderComponent = function HeaderComponent(_ref) {
92
96
  clearTimeout(timeout);
93
97
  };
94
98
  });
95
- var locale = useLocale();
96
- var nav = useNavigate();
97
- var _useState5 = useState(locale.id),
98
- _useState6 = _slicedToArray(_useState5, 2),
99
- lang = _useState6[0],
100
- setLang = _useState6[1];
101
- var announcementTitle = useMemo(function () {
102
- return get(announcement, ['title', lang]);
103
- }, [announcement, lang]);
104
- var announcementLinkTitle = useMemo(function () {
105
- return get(announcement, ['link', 'text', lang]);
106
- }, [announcement, lang]);
99
+ var announcementTitle = icWithLocale(announcement === null || announcement === void 0 ? void 0 : announcement.title, lang);
100
+ var announcementLinkTitle = icWithLocale(announcement === null || announcement === void 0 || (_announcement$link = announcement.link) === null || _announcement$link === void 0 ? void 0 : _announcement$link.text, lang);
107
101
  useEffect(function () {
108
102
  setBannerVisible(!!announcementTitle && localStorage.getItem(ANNOUNCEMENT_LOCALSTORAGE_ID) !== 'true');
109
103
  }, [announcementTitle]);
@@ -111,10 +105,10 @@ var HeaderComponent = function HeaderComponent(_ref) {
111
105
  localStorage.setItem(ANNOUNCEMENT_LOCALSTORAGE_ID, 'true');
112
106
  setBannerVisible(false);
113
107
  }
114
- var _useState7 = useState(false),
115
- _useState8 = _slicedToArray(_useState7, 2),
116
- productMenuVisible = _useState8[0],
117
- setProductMenuVisible = _useState8[1];
108
+ var _useState5 = useState(false),
109
+ _useState6 = _slicedToArray(_useState5, 2),
110
+ productMenuVisible = _useState6[0],
111
+ setProductMenuVisible = _useState6[1];
118
112
  var productMenuHovering = false;
119
113
  var onProductMouseEnter = function onProductMouseEnter(e) {
120
114
  productMenuHovering = true;
@@ -138,10 +132,10 @@ var HeaderComponent = function HeaderComponent(_ref) {
138
132
  var onToggleProductMenuVisible = function onToggleProductMenuVisible() {
139
133
  setProductMenuVisible(!productMenuVisible);
140
134
  };
141
- var _useState9 = useState(false),
142
- _useState10 = _slicedToArray(_useState9, 2),
143
- popupMenuVisible = _useState10[0],
144
- setPopupMenuVisible = _useState10[1];
135
+ var _useState7 = useState(false),
136
+ _useState8 = _slicedToArray(_useState7, 2),
137
+ popupMenuVisible = _useState8[0],
138
+ setPopupMenuVisible = _useState8[1];
145
139
  var onTogglePopupMenuVisible = function onTogglePopupMenuVisible() {
146
140
  setPopupMenuVisible(!popupMenuVisible);
147
141
  };
@@ -154,11 +148,13 @@ var HeaderComponent = function HeaderComponent(_ref) {
154
148
  }, logo),
155
149
  img = _img$link$logo.img,
156
150
  link = _img$link$logo.link;
151
+ var _useLocation = useLocation(),
152
+ pathname = _useLocation.pathname;
157
153
  useEffect(function () {
158
154
  if (popupMenuVisible) {
159
155
  setPopupMenuVisible(false);
160
156
  }
161
- }, [window.location.pathname]);
157
+ }, [pathname]);
162
158
 
163
159
  // 移动端下弹出菜单时,禁止页面滚动
164
160
  useEffect(function () {
@@ -183,12 +179,15 @@ var HeaderComponent = function HeaderComponent(_ref) {
183
179
  } : {
184
180
  onClick: onToggleProductMenuVisible
185
181
  };
182
+ var handleSwitchLanguage = function handleSwitchLanguage() {
183
+ onLanguageChange === null || onLanguageChange === void 0 || onLanguageChange(lang);
184
+ };
186
185
  var menu = /*#__PURE__*/React.createElement("ul", {
187
186
  className: cx(styles.menu, _defineProperty(_defineProperty({}, styles.popup, !isWide), styles.popupHidden, !popupMenuVisible))
188
187
  }, /** 最左侧的菜单,一般是 教程、API、示例,或者其他自定义,有配置文件中的 `navs` 决定 */
189
188
  size(navs) ? /*#__PURE__*/React.createElement(Navs, {
190
189
  navs: navs,
191
- path: window.location.pathname
190
+ path: pathname
192
191
  }) : null, /** 生态产品 */
193
192
  size(ecosystems) ? /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement(Dropdown, {
194
193
  className: styles.ecoSystems,
@@ -242,7 +241,7 @@ var HeaderComponent = function HeaderComponent(_ref) {
242
241
  updateChinaMirrorHintVisible(false);
243
242
  }
244
243
  }, "\u4E0D\u518D\u63D0\u9192"))),
245
- visible: chinaMirrorHintVisible,
244
+ open: chinaMirrorHintVisible,
246
245
  placement: "bottomRight",
247
246
  align: {
248
247
  offset: [-12, -16]
@@ -258,7 +257,7 @@ var HeaderComponent = function HeaderComponent(_ref) {
258
257
  marginLeft: '6px'
259
258
  }
260
259
  })))) : null, showChinaMirror && !isWide && /*#__PURE__*/React.createElement(Modal, {
261
- visible: chinaMirrorHintVisible,
260
+ open: chinaMirrorHintVisible,
262
261
  cancelText: "\u4E0D\u518D\u63D0\u9192",
263
262
  okText: "\u7ACB\u5373\u524D\u5F80",
264
263
  onCancel: function onCancel() {
@@ -332,45 +331,9 @@ var HeaderComponent = function HeaderComponent(_ref) {
332
331
  }))), /** 切换网站语言 */
333
332
  showLanguageSwitcher && /*#__PURE__*/React.createElement("li", {
334
333
  className: cx(styles.navIcon, styles.languageSwitcher)
335
- }, /*#__PURE__*/React.createElement(Dropdown, {
336
- placement: "bottomRight",
337
- overlay: /*#__PURE__*/React.createElement(Menu, {
338
- defaultSelectedKeys: [lang],
339
- selectable: true,
340
- onSelect: function onSelect(_ref3) {
341
- var key = _ref3.key;
342
- if (key === lang) {
343
- return;
344
- }
345
- setLang(key);
346
- if (onLanguageChange) {
347
- onLanguageChange(key.toString());
348
- return;
349
- }
350
- var newUrl = getLangUrl(window.location.href, key);
351
- nav(newUrl.replace(window.location.origin, ''));
352
- }
353
- }, /*#__PURE__*/React.createElement(Menu.Item, {
354
- key: "en"
355
- }, /*#__PURE__*/React.createElement(CheckOutlined, {
356
- style: {
357
- visibility: lang === 'en' ? 'visible' : 'hidden',
358
- color: '#52c41a'
359
- }
360
- }), "English"), /*#__PURE__*/React.createElement(Menu.Item, {
361
- key: "zh"
362
- }, /*#__PURE__*/React.createElement(CheckOutlined, {
363
- style: {
364
- visibility: lang === 'zh' ? 'visible' : 'hidden',
365
- color: '#52c41a'
366
- }
367
- }), "\u7B80\u4F53\u4E2D\u6587")),
368
- className: styles.translation
369
- }, /*#__PURE__*/React.createElement("a", {
370
- className: "ant-dropdown-link",
371
- onClick: function onClick(e) {
372
- return e.preventDefault();
373
- }
334
+ }, /*#__PURE__*/React.createElement(Link, {
335
+ to: lang === 'zh' ? '/en' : '/',
336
+ onClick: handleSwitchLanguage
374
337
  }, /*#__PURE__*/React.createElement("svg", {
375
338
  className: styles.translation,
376
339
  xmlns: "http://www.w3.org/2000/svg",
@@ -379,7 +342,7 @@ var HeaderComponent = function HeaderComponent(_ref) {
379
342
  viewBox: "0 0 24 24"
380
343
  }, /*#__PURE__*/React.createElement("path", {
381
344
  d: "M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"
382
- }))))), /** 微信公众号 */
345
+ })))), /** 微信公众号 */
383
346
  showWxQrcode && /*#__PURE__*/React.createElement("li", {
384
347
  className: cx(styles.navIcon, styles.wxQrcode)
385
348
  }, /*#__PURE__*/React.createElement(Popover, {
@@ -412,10 +375,10 @@ var HeaderComponent = function HeaderComponent(_ref) {
412
375
  className: styles.banner,
413
376
  message: /*#__PURE__*/React.createElement("div", {
414
377
  className: styles.topAlert
415
- }, announcement.icon && /*#__PURE__*/React.createElement("img", {
378
+ }, (announcement === null || announcement === void 0 ? void 0 : announcement.icon) && /*#__PURE__*/React.createElement("img", {
416
379
  src: announcement.icon
417
380
  }), /*#__PURE__*/React.createElement("div", null, announcementTitle), announcementLinkTitle && /*#__PURE__*/React.createElement("a", {
418
- href: announcement.link.url
381
+ href: announcement === null || announcement === void 0 ? void 0 : announcement.link.url
419
382
  }, announcementLinkTitle)),
420
383
  type: "info",
421
384
  banner: true,
@@ -433,14 +396,14 @@ var HeaderComponent = function HeaderComponent(_ref) {
433
396
  }), /*#__PURE__*/React.createElement("h2", {
434
397
  className: styles.subProduceName
435
398
  }, /*#__PURE__*/React.createElement("a", {
436
- href: window.location.pathname.startsWith('/en') ? '/en' : '/'
399
+ href: pathname.startsWith('/en') ? '/en' : '/'
437
400
  }, subTitle))), showSearch && !isAntVHome && /*#__PURE__*/React.createElement(Search, null)), /*#__PURE__*/React.createElement("nav", {
438
401
  className: styles.nav
439
402
  }, menu, menuIcon)));
440
403
  };
441
- export var Header = function Header(props) {
442
- var _useSiteData = useSiteData(),
443
- themeConfig = _useSiteData.themeConfig;
404
+ var Header = function Header(props) {
405
+ var _ref3 = useSiteData(),
406
+ themeConfig = _ref3.themeConfig;
444
407
  var title = themeConfig.title,
445
408
  siteUrl = themeConfig.siteUrl,
446
409
  githubUrl = themeConfig.githubUrl,
@@ -461,15 +424,16 @@ export var Header = function Header(props) {
461
424
  docsearchOptions = themeConfig.docsearchOptions,
462
425
  announcement = themeConfig.announcement,
463
426
  petercat = themeConfig.petercat,
464
- isLinksShow = themeConfig.links;
427
+ links = themeConfig.links;
465
428
  var searchOptions = {
466
429
  docsearchOptions: docsearchOptions
467
430
  };
468
- var locale = useLocale();
469
- var path = window.location.pathname;
470
- var isHomePage = path === '/' || path === "/".concat(locale.id) || path === "/".concat(locale.id, "/");
431
+ var _useLocation2 = useLocation(),
432
+ pathname = _useLocation2.pathname;
433
+ var isHomePage = ['/', ''].includes(getPurePathname(pathname));
434
+ var lang = useLocale().id;
471
435
  var headerProps = {
472
- subTitle: title,
436
+ subTitle: icWithLocale(title, lang),
473
437
  subTitleHref: subTitleHref,
474
438
  githubUrl: githubUrl,
475
439
  isAntVSite: isAntVSite,
@@ -492,10 +456,11 @@ export var Header = function Header(props) {
492
456
  announcement: announcement,
493
457
  petercat: petercat
494
458
  };
495
- var _useState11 = useState(undefined),
496
- _useState12 = _slicedToArray(_useState11, 2),
497
- isInternalUser = _useState12[0],
498
- setIsInternalUser = _useState12[1];
459
+ var _useState9 = useState(undefined),
460
+ _useState10 = _slicedToArray(_useState9, 2),
461
+ isInternalUser = _useState10[0],
462
+ setIsInternalUser = _useState10[1];
463
+ var isPetercatShow = petercat === null || petercat === void 0 ? void 0 : petercat.show;
499
464
  useEffect(function () {
500
465
  var checkUserType = /*#__PURE__*/function () {
501
466
  var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
@@ -521,28 +486,22 @@ export var Header = function Header(props) {
521
486
  checkUserType();
522
487
  }, []);
523
488
  useEffect(function () {
524
- var scriptId = 'links-widget-script';
525
- var script = document.getElementById(scriptId);
526
- if (isInternalUser && isLinksShow) {
527
- if (!script) {
528
- script = document.createElement('script');
529
- script.id = scriptId;
530
- script.src = 'https://links.alipay.com/widgetInit/67a96a296b6fa80490bdf892';
531
- script.async = true;
532
- document.body.appendChild(script);
533
- }
534
- } else {
489
+ var script = null;
490
+ if (isInternalUser && links) {
491
+ script = document.createElement('script');
492
+ script.src = 'https://links.alipay.com/widgetInit/67a96a296b6fa80490bdf892';
493
+ script.async = true;
494
+ document.body.appendChild(script);
495
+ }
496
+ return function () {
535
497
  if (script) {
536
498
  document.body.removeChild(script);
537
499
  }
538
- }
539
- }, [isInternalUser, isLinksShow]);
540
-
541
- // 当 petercat.show 为 true 且以下任一条件满足时展示 Petercat Assistant:
542
- // 1. 外部用户访问
543
- // 2. 不显示 links 研发小蜜
544
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(HeaderComponent, Object.assign({}, headerProps, props)), (petercat === null || petercat === void 0 ? void 0 : petercat.show) && (isBoolean(isInternalUser) && !isInternalUser || !isLinksShow) && /*#__PURE__*/React.createElement(Assistant, {
500
+ };
501
+ }, [isInternalUser]);
502
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(HeaderComponent, Object.assign({}, headerProps, props)), isPetercatShow && isInternalUser === false && /*#__PURE__*/React.createElement(Assistant, {
545
503
  token: petercat === null || petercat === void 0 ? void 0 : petercat.token,
546
504
  apiDomain: "https://api.petercat.ai"
547
505
  }));
548
- };
506
+ };
507
+ export default Header;
@@ -1,23 +1,22 @@
1
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
- 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."); }
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
- 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
- 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; } }
6
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
1
  import { VerticalAlignTopOutlined } from '@ant-design/icons';
8
2
  import { BackTop, Layout } from 'antd';
9
3
  import { useRouteMeta } from 'dumi';
10
- import React from 'react';
4
+ import React, { lazy } from 'react';
11
5
  import { useMedia } from 'react-use';
12
6
  import readingTime from 'reading-time';
13
- import { useMenu } from "../../hooks/useMenu";
7
+ import ClientOnly from "../../common/ClientOnly";
8
+ import InViewSuspense from "../../common/InViewSuspense";
14
9
  import { ContentTable } from "dumi/theme/slots/ContentTable";
15
10
  import { Feedback } from "dumi/theme/slots/Feedback";
16
- import { PageFeedback } from "../Feedback/PageFeedback";
17
11
  import styles from "./index.module.less";
18
12
  import { PrevAndNext } from "./PrevAndNext";
19
13
  import ReadingTime from "./ReadingTime";
20
- import { usePreview } from "./usePreview";
14
+ var PageFeedback = /*#__PURE__*/lazy(function () {
15
+ return import("../Feedback/PageFeedback");
16
+ });
17
+ var ObPreview = /*#__PURE__*/lazy(function () {
18
+ return import("./ObPreview");
19
+ });
21
20
  export var Main = function Main(_ref) {
22
21
  var children = _ref.children;
23
22
  var meta = useRouteMeta();
@@ -26,13 +25,9 @@ export var Main = function Main(_ref) {
26
25
  }, '');
27
26
  var _readingTime = readingTime(text),
28
27
  time = _readingTime.time;
29
- var _useMenu = useMenu(),
30
- _useMenu2 = _slicedToArray(_useMenu, 2),
31
- selectedKey = _useMenu2[1];
32
28
  var is991Wide = useMedia('(min-width: 991.99px)', true);
33
29
  var showToc = is991Wide && meta.frontmatter.showToc !== false;
34
- usePreview({}, selectedKey);
35
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Layout.Content, {
30
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ClientOnly, null, /*#__PURE__*/React.createElement(ObPreview, null)), /*#__PURE__*/React.createElement(Layout.Content, {
36
31
  className: styles.content
37
32
  }, /*#__PURE__*/React.createElement("div", {
38
33
  className: styles.main
@@ -45,7 +40,11 @@ export var Main = function Main(_ref) {
45
40
  className: styles.readtime
46
41
  })), /*#__PURE__*/React.createElement("div", {
47
42
  className: styles.markdown
48
- }, children), /*#__PURE__*/React.createElement(Feedback, null), /*#__PURE__*/React.createElement(PrevAndNext, null)), /*#__PURE__*/React.createElement(BackTop, {
43
+ }, children), /*#__PURE__*/React.createElement("div", {
44
+ style: {
45
+ marginTop: '40px'
46
+ }
47
+ }, /*#__PURE__*/React.createElement(Feedback, null)), /*#__PURE__*/React.createElement(PrevAndNext, null)), /*#__PURE__*/React.createElement(BackTop, {
49
48
  style: {
50
49
  right: 24
51
50
  }
@@ -56,5 +55,5 @@ export var Main = function Main(_ref) {
56
55
  width: 260
57
56
  }, /*#__PURE__*/React.createElement("div", {
58
57
  className: styles.toc
59
- }, /*#__PURE__*/React.createElement(PageFeedback, null), /*#__PURE__*/React.createElement(ContentTable, null))));
58
+ }, /*#__PURE__*/React.createElement(InViewSuspense, null, /*#__PURE__*/React.createElement(PageFeedback, null)), /*#__PURE__*/React.createElement(ContentTable, null))));
60
59
  };
@@ -1,11 +1,13 @@
1
1
  import classNames from 'classnames';
2
- import { FormattedMessage, history } from 'dumi';
2
+ import { history, useIntl } from 'dumi';
3
3
  import React from 'react';
4
4
  import { useScrollToTop } from "../hooks";
5
5
  import styles from "./NavigatorBanner.module.less";
6
6
  export var NavigatorBanner = function NavigatorBanner(_ref) {
7
7
  var post = _ref.post,
8
8
  type = _ref.type;
9
+ var _useIntl = useIntl(),
10
+ formatMessage = _useIntl.formatMessage;
9
11
  if (!post) {
10
12
  return /*#__PURE__*/React.createElement("div", {
11
13
  className: classNames(styles.button, styles.hidden)
@@ -25,7 +27,7 @@ export var NavigatorBanner = function NavigatorBanner(_ref) {
25
27
  onClick: go
26
28
  }, /*#__PURE__*/React.createElement("div", {
27
29
  className: styles.label
28
- }, /*#__PURE__*/React.createElement(FormattedMessage, {
30
+ }, formatMessage({
29
31
  id: type === 'prev' ? '上一篇' : '下一篇'
30
32
  })), /*#__PURE__*/React.createElement("div", {
31
33
  className: styles.title
@@ -0,0 +1,17 @@
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+ 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."); }
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
+ 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
+ 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; } }
6
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
+ import React from 'react';
8
+ import { useMenu } from "../../hooks/useMenu";
9
+ import { usePreview } from "./usePreview";
10
+ var ObPreview = function ObPreview() {
11
+ var _useMenu = useMenu(),
12
+ _useMenu2 = _slicedToArray(_useMenu, 2),
13
+ selectedKey = _useMenu2[1];
14
+ usePreview({}, selectedKey);
15
+ return /*#__PURE__*/React.createElement("div", null);
16
+ };
17
+ export default ObPreview;
@@ -1,14 +1,21 @@
1
1
  import { Layout } from 'antd';
2
- import React, { Suspense } from 'react';
2
+ import { useRouteMeta } from 'dumi';
3
+ import React from 'react';
4
+ import CommonHelmet from "../../common/CommonHelmet";
3
5
  import styles from "./index.module.less";
4
6
  import { Main } from "./Main";
5
7
  import { Sidebar } from "./Sidebar";
6
8
  export var ManualContent = function ManualContent(_ref) {
7
9
  var children = _ref.children;
10
+ var meta = useRouteMeta();
11
+ var _meta$frontmatter = meta.frontmatter,
12
+ title = _meta$frontmatter.title,
13
+ description = _meta$frontmatter.description;
8
14
  return /*#__PURE__*/React.createElement(Layout, {
9
15
  hasSider: true,
10
16
  className: styles.layout
11
- }, /*#__PURE__*/React.createElement(Sidebar, null), /*#__PURE__*/React.createElement(Suspense, {
12
- fallback: null
13
- }, /*#__PURE__*/React.createElement(Main, null, children)));
17
+ }, /*#__PURE__*/React.createElement(CommonHelmet, {
18
+ title: title,
19
+ description: description
20
+ }), /*#__PURE__*/React.createElement(Sidebar, null), /*#__PURE__*/React.createElement(Main, null, children));
14
21
  };
@@ -2,6 +2,7 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
2
2
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
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
+ 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
6
  import React, { useEffect } from 'react';
6
7
  import { createRoot } from 'react-dom/client';
7
8
  import { Preview } from "./Preview";
@@ -28,7 +29,11 @@ function sourceOf(block) {
28
29
  return cloned.textContent;
29
30
  }
30
31
  function blockOf() {
31
- return Array.from(document.querySelectorAll('.ob-codeblock .dumi-default-source-code'));
32
+ if ((typeof document === "undefined" ? "undefined" : _typeof(document)) !== undefined && document) {
33
+ var blocks = Array.from(document.querySelectorAll('.ob-codeblock .dumi-default-source-code'));
34
+ return blocks;
35
+ }
36
+ return [];
32
37
  }
33
38
  export function usePreview() {
34
39
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -1,27 +1,17 @@
1
1
  import { isEmpty } from 'lodash-es';
2
- export function getOpenKeys() {
3
- var pathname = window.location.pathname.replace('/docs/', '/').replace('/zh/', '/');
4
- var pathArr = pathname.split('/');
5
- var openKeys = [];
6
- for (var i = pathArr.length; i > 0; i--) {
7
- var tem = pathArr.slice(0, i);
8
- openKeys.push(tem.join('/'));
9
- }
10
- return openKeys;
11
- }
12
2
 
13
3
  /**
14
4
  * /api/xxx --> /api
15
5
  * /en/api --> /en/api
16
6
  */
17
- export function getBaseRoute() {
18
- var matchRoute = window.location.pathname;
7
+ export function getBaseRoute(pathname) {
8
+ var matchRoute = pathname;
19
9
  // 兼容 zh
20
10
  matchRoute = matchRoute.replace('/zh/', '/');
21
11
  // 兼容带有docs的route
22
12
  matchRoute = matchRoute.replace('/docs', '');
23
13
  // 查找 baseRoute
24
- var reg = window.location.pathname.startsWith('/en') ? /(\/[A-z]*\/?\/[A-z]*)\/?/ : /(\/[A-z]*)\/?/;
14
+ var reg = pathname.startsWith('/en') ? /(\/[A-z]*\/?\/[A-z]*)\/?/ : /(\/[A-z]*)\/?/;
25
15
  var mainRoute = matchRoute.match(reg);
26
16
  return mainRoute[1];
27
17
  }
@@ -1,8 +1,8 @@
1
1
  import insertCss from 'insert-css';
2
2
  import * as _ from 'lodash-es';
3
-
4
- // 挂载一些全局变量
5
- if (window) {
3
+ import { safeWindow } from "../utils/env";
4
+ safeWindow(function (window) {
5
+ // 挂载一些全局变量
6
6
  window.lodash = _;
7
7
  window.insertCss = insertCss;
8
- }
8
+ });
@@ -49,31 +49,6 @@ export var useLogoLink = function useLogoLink(_ref) {
49
49
  }, []);
50
50
  return [giteeLogoLink || defaultLogoLink];
51
51
  };
52
- export var usePrevAndNext = function usePrevAndNext() {
53
- var _useState5 = useState([]),
54
- _useState6 = _slicedToArray(_useState5, 2),
55
- prevAndNext = _useState6[0],
56
- setPrevAndNext = _useState6[1];
57
- useEffect(function () {
58
- var menuNodes = document.querySelectorAll('aside .ant-menu-item a');
59
- var currentMenuNode = document.querySelector('aside .ant-menu-item-selected a');
60
- var currentIndex = Array.from(menuNodes).findIndex(function (node) {
61
- return node === currentMenuNode;
62
- });
63
- var prevNode = currentIndex - 1 >= 0 ? menuNodes[currentIndex - 1] : undefined;
64
- var nextNode = currentIndex + 1 < menuNodes.length ? menuNodes[currentIndex + 1] : undefined;
65
- var prev = prevNode ? {
66
- slug: prevNode.getAttribute('href') || undefined,
67
- title: prevNode.textContent || undefined
68
- } : undefined;
69
- var next = nextNode ? {
70
- slug: nextNode.getAttribute('href') || undefined,
71
- title: nextNode.textContent || undefined
72
- } : undefined;
73
- setPrevAndNext([prev, next]);
74
- }, []);
75
- return prevAndNext;
76
- };
77
52
 
78
53
  /**
79
54
  * i18n .umirc config
@@ -9,13 +9,6 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
9
9
  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); } }
10
10
  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); }); }; }
11
11
  import { icWithLocale } from "./hooks";
12
-
13
- /**
14
- * 统一去掉中英文前缀
15
- */
16
- export function getCurrentPathname() {
17
- return window.location.pathname.replace('/zh/', '/').replace('/en/', '/');
18
- }
19
12
  export function ping() {
20
13
  return _ping.apply(this, arguments);
21
14
  }
@@ -0,0 +1,10 @@
1
+ // 判断是否在浏览器环境
2
+ export var isBrowser = function isBrowser() {
3
+ return typeof window !== 'undefined' && window;
4
+ };
5
+
6
+ // 安全访问浏览器 API
7
+ // eslint-disable-next-line no-unused-vars
8
+ export var safeWindow = function safeWindow(fn) {
9
+ if (isBrowser()) fn(window);
10
+ };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 统一去掉中英文前缀
3
+ */
4
+ export function getPurePathname(pathname) {
5
+ return pathname.replace('/zh', '').replace('/en', '');
6
+ }