@antv/dumi-theme-antv 0.6.3 → 0.6.4-alpha.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.
- package/dist/builtins/Playground/index.js +1 -1
- package/dist/common/ClientOnly.js +21 -0
- package/dist/common/InViewSuspense.js +26 -0
- package/dist/common/SEO.js +3 -1
- package/dist/hooks/useLocale.js +8 -0
- package/dist/hooks/useMenu.js +1 -1
- package/dist/layouts/DocLayout.js +15 -11
- package/dist/layouts/IndexLayout/index.js +16 -0
- package/dist/layouts/{entry/Manual.js → ManualLayout/index.js} +5 -4
- package/dist/pages/404.js +3 -2
- package/dist/pages/Example/components/ExampleSider/index.js +190 -0
- package/dist/pages/Example/index.js +70 -51
- package/dist/pages/Examples/components/ExampleTopicMenu/index.js +3 -2
- package/dist/pages/Examples/index.js +26 -30
- package/dist/{slots → pages/Index/components}/Cases/index.js +1 -1
- package/dist/{slots → pages/Index/components}/Detail/News.js +1 -1
- package/dist/{slots → pages/Index/components}/Detail/index.js +1 -1
- package/dist/{slots → pages/Index/components}/Features/FeatureCard.js +1 -1
- package/dist/{slots → pages/Index/components}/Features/index.js +1 -1
- package/dist/pages/Index/components/_.less +119 -0
- package/dist/{layouts/entry/Index.js → pages/Index/index.js} +15 -19
- package/dist/plugin/index.js +52 -43
- package/dist/slots/CodeEditor/index.js +4 -3
- package/dist/slots/CodePreview/CodeHeader.js +3 -2
- package/dist/slots/CodePreview/index.js +3 -2
- package/dist/slots/CodeRunner/index.js +34 -29
- package/dist/slots/ExampleSider/index.js +3 -2
- package/dist/slots/Feedback/Contributors.js +3 -2
- package/dist/slots/Feedback/EditButton.js +3 -2
- package/dist/slots/Feedback/PageFeedback.js +4 -3
- package/dist/slots/Feedback/SectionFeedback.js +3 -2
- package/dist/slots/Feedback/index.js +12 -10
- package/dist/slots/Footer/index.js +3 -2
- package/dist/slots/Header/Search/index.js +1 -1
- package/dist/slots/Header/index.js +17 -12
- package/dist/slots/ManualContent/Main.js +17 -17
- package/dist/slots/ManualContent/NavigatorBanner.js +4 -2
- package/dist/slots/ManualContent/ObPreview.js +17 -0
- package/dist/slots/ManualContent/index.js +2 -4
- package/dist/slots/ManualContent/usePreview.js +7 -1
- package/dist/slots/ManualContent/utils.js +3 -13
- package/dist/slots/global.js +4 -4
- package/dist/slots/hooks.js +0 -25
- package/dist/slots/utils.js +0 -7
- package/dist/utils/env.js +10 -0
- package/dist/utils/location.js +3 -0
- package/package.json +6 -5
- package/dist/layouts/entry/API.js +0 -12
- package/dist/pages/Example/utils.js +0 -9
- package/dist/slots/Article/index.js +0 -9
- package/dist/slots/Article/index.module.less +0 -8
- package/dist/slots/CodePreview/CodeHeader.module.less +0 -0
- package/dist/slots/Header/Products/NavigatorBanner.js +0 -29
- package/dist/slots/Header/Products/NavigatorBanner.module.less +0 -39
- /package/dist/{slots → pages/Index/components}/Cases/index.module.less +0 -0
- /package/dist/{slots → pages/Index/components}/Companies/index.js +0 -0
- /package/dist/{slots → pages/Index/components}/Companies/index.module.less +0 -0
- /package/dist/{slots → pages/Index/components}/Detail/News.module.less +0 -0
- /package/dist/{slots → pages/Index/components}/Detail/index.module.less +0 -0
- /package/dist/{slots → pages/Index/components}/Features/FeatureCard.module.less +0 -0
- /package/dist/{slots → pages/Index/components}/Features/index.module.less +0 -0
|
@@ -9,7 +9,7 @@ import { get } from 'lodash-es';
|
|
|
9
9
|
import React, { useContext } from 'react';
|
|
10
10
|
import { ErrorBoundary } from 'react-error-boundary';
|
|
11
11
|
import { ThemeAntVContext } from "../../context";
|
|
12
|
-
import
|
|
12
|
+
import CodeRunner from "dumi/theme/slots/CodeRunner";
|
|
13
13
|
import styles from "./index.module.less";
|
|
14
14
|
/**
|
|
15
15
|
* Markdown 标签插件 Playground
|
|
@@ -0,0 +1,21 @@
|
|
|
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 { useLayoutEffect, useState } from 'react';
|
|
8
|
+
var ClientOnly = function ClientOnly(_ref) {
|
|
9
|
+
var children = _ref.children,
|
|
10
|
+
_ref$fallback = _ref.fallback,
|
|
11
|
+
fallback = _ref$fallback === void 0 ? null : _ref$fallback;
|
|
12
|
+
var _useState = useState(false),
|
|
13
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
14
|
+
clientReady = _useState2[0],
|
|
15
|
+
setClientReady = _useState2[1];
|
|
16
|
+
useLayoutEffect(function () {
|
|
17
|
+
setClientReady(true);
|
|
18
|
+
}, []);
|
|
19
|
+
return clientReady ? children : fallback;
|
|
20
|
+
};
|
|
21
|
+
export default ClientOnly;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Skeleton } from 'antd';
|
|
2
|
+
import React, { Suspense } from 'react';
|
|
3
|
+
import { InView } from 'react-intersection-observer';
|
|
4
|
+
var InViewSuspense = function InViewSuspense(_ref) {
|
|
5
|
+
var children = _ref.children,
|
|
6
|
+
_ref$fallback = _ref.fallback,
|
|
7
|
+
fallback = _ref$fallback === void 0 ? /*#__PURE__*/React.createElement(Skeleton.Input, {
|
|
8
|
+
active: true,
|
|
9
|
+
size: "small"
|
|
10
|
+
}) : _ref$fallback,
|
|
11
|
+
_ref$delay = _ref.delay,
|
|
12
|
+
delay = _ref$delay === void 0 ? 200 : _ref$delay;
|
|
13
|
+
return /*#__PURE__*/React.createElement(InView, {
|
|
14
|
+
triggerOnce: true,
|
|
15
|
+
delay: delay
|
|
16
|
+
}, function (_ref2) {
|
|
17
|
+
var inView = _ref2.inView,
|
|
18
|
+
ref = _ref2.ref;
|
|
19
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
20
|
+
ref: ref
|
|
21
|
+
}, /*#__PURE__*/React.createElement(Suspense, {
|
|
22
|
+
fallback: fallback
|
|
23
|
+
}, inView ? children : /*#__PURE__*/React.createElement("span", null)));
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
export default InViewSuspense;
|
package/dist/common/SEO.js
CHANGED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { useLocale as useDumiLocale } from 'dumi';
|
|
2
|
+
var useLocale = function useLocale(localeMap) {
|
|
3
|
+
var _useDumiLocale = useDumiLocale(),
|
|
4
|
+
id = _useDumiLocale.id;
|
|
5
|
+
var localeType = id === 'zh' ? 'zh' : 'en';
|
|
6
|
+
return [localeMap === null || localeMap === void 0 ? void 0 : localeMap[localeType], localeType];
|
|
7
|
+
};
|
|
8
|
+
export default useLocale;
|
package/dist/hooks/useMenu.js
CHANGED
|
@@ -23,7 +23,7 @@ export var useMenu = function useMenu() {
|
|
|
23
23
|
_useSiteData$themeCon = _useSiteData.themeConfig,
|
|
24
24
|
docs = _useSiteData$themeCon.docs,
|
|
25
25
|
navs = _useSiteData$themeCon.navs;
|
|
26
|
-
var baseRoute = getBaseRoute();
|
|
26
|
+
var baseRoute = getBaseRoute(pathname);
|
|
27
27
|
var navigate = useNavigate();
|
|
28
28
|
var locale = useLocale();
|
|
29
29
|
var currentLocale = locale.id;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { useLocation, useOutlet, useSiteData } from 'dumi';
|
|
2
2
|
import React, { useEffect } from 'react';
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
3
|
+
import { getPurePathname } from "../utils/location";
|
|
4
|
+
import IndexLayout from "./IndexLayout";
|
|
5
|
+
import ManualLayout from "./ManualLayout";
|
|
6
6
|
|
|
7
7
|
// 用户手动添加自己的
|
|
8
8
|
import "../slots/_.less";
|
|
9
9
|
import "../slots/global";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* DocLayout 是 dumi2 的内置 layout 入口,在这里使用页面路径进行区分成自己不同的 Layout。
|
|
13
13
|
*/
|
|
14
14
|
export default (function () {
|
|
15
15
|
var _useSiteData = useSiteData(),
|
|
@@ -22,8 +22,10 @@ export default (function () {
|
|
|
22
22
|
console.log('%cAntV 让数据栩栩如生', 'color:#5B7102; font-size: 20px;'), console.log('%c新一代数据可视化解决方案', 'color:#5B7102;'), console.log('--------------------------'), console.log('%c关注我们的微信公众号 %c“数据可视化 AntV”%c,获取我们团队最新的进展、动态、分享,也欢迎加入我们!', 'color: red', 'color: pink', 'color: red');
|
|
23
23
|
}, []);
|
|
24
24
|
var outlet = useOutlet();
|
|
25
|
-
var
|
|
26
|
-
|
|
25
|
+
var location = useLocation();
|
|
26
|
+
var pathname = location.pathname,
|
|
27
|
+
hash = location.hash;
|
|
28
|
+
var purePathname = getPurePathname(pathname);
|
|
27
29
|
|
|
28
30
|
// 监听 hash 变更,跳转到锚点位置
|
|
29
31
|
// 同时监听页面 loading 状态,因为路由按需加载时需要等待页面渲染完毕才能找到锚点位置
|
|
@@ -34,9 +36,11 @@ export default (function () {
|
|
|
34
36
|
if (elm) document.documentElement.scrollTo(0, elm.offsetTop - 80);
|
|
35
37
|
}
|
|
36
38
|
}, [loading, hash]);
|
|
37
|
-
|
|
39
|
+
|
|
38
40
|
// 首页
|
|
39
|
-
if (
|
|
41
|
+
if (['/', ''].includes(purePathname)) {
|
|
42
|
+
return /*#__PURE__*/React.createElement(IndexLayout, null, outlet);
|
|
43
|
+
}
|
|
40
44
|
|
|
41
45
|
// 匹配 navs 中的 docs 路由
|
|
42
46
|
var docsRoutes = navs.filter(function (nav) {
|
|
@@ -46,10 +50,10 @@ export default (function () {
|
|
|
46
50
|
return item !== 'docs';
|
|
47
51
|
});
|
|
48
52
|
});
|
|
49
|
-
if (docsRoutes.some(function (
|
|
50
|
-
return
|
|
53
|
+
if (docsRoutes.some(function (slug) {
|
|
54
|
+
return purePathname.startsWith("/".concat(slug)) || purePathname.startsWith("/docs/".concat(slug));
|
|
51
55
|
})) {
|
|
52
|
-
return /*#__PURE__*/React.createElement(
|
|
56
|
+
return /*#__PURE__*/React.createElement(ManualLayout, null, outlet);
|
|
53
57
|
}
|
|
54
58
|
return outlet;
|
|
55
59
|
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Footer from "dumi/theme/slots/Footer";
|
|
3
|
+
import Header from "dumi/theme/slots/Header";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 首页布局
|
|
7
|
+
*/
|
|
8
|
+
var IndexLayout = function IndexLayout(props) {
|
|
9
|
+
var children = props.children;
|
|
10
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Header, null), /*#__PURE__*/React.createElement("div", {
|
|
11
|
+
style: {
|
|
12
|
+
minHeight: '100vh'
|
|
13
|
+
}
|
|
14
|
+
}, children), /*#__PURE__*/React.createElement(Footer, null));
|
|
15
|
+
};
|
|
16
|
+
export default IndexLayout;
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import SEO from "../../common/SEO";
|
|
3
|
-
import
|
|
4
|
-
import
|
|
3
|
+
import Footer from "dumi/theme/slots/Footer";
|
|
4
|
+
import Header from "dumi/theme/slots/Header";
|
|
5
5
|
import { ManualContent } from "dumi/theme/slots/ManualContent";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Manual 路由下的入口
|
|
9
9
|
*/
|
|
10
|
-
|
|
10
|
+
var ManualLayout = function ManualLayout(_ref) {
|
|
11
11
|
var children = _ref.children;
|
|
12
12
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SEO, null), /*#__PURE__*/React.createElement(Header, {
|
|
13
13
|
isHomePage: false
|
|
14
14
|
}), /*#__PURE__*/React.createElement(ManualContent, null, children), /*#__PURE__*/React.createElement(Footer, {
|
|
15
15
|
isDynamicFooter: true
|
|
16
16
|
}));
|
|
17
|
-
};
|
|
17
|
+
};
|
|
18
|
+
export default ManualLayout;
|
package/dist/pages/404.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import SEO from "../common/SEO";
|
|
3
3
|
import { NotFound as NotFoundPage } from "dumi/theme/slots/404";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
4
|
+
import Footer from "dumi/theme/slots/Footer";
|
|
5
|
+
import Header from "dumi/theme/slots/Header";
|
|
6
|
+
|
|
6
7
|
/**
|
|
7
8
|
* 404 页面
|
|
8
9
|
*/
|
|
@@ -0,0 +1,190 @@
|
|
|
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
|
+
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; }
|
|
3
|
+
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; }
|
|
4
|
+
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; }
|
|
5
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
6
|
+
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); }
|
|
7
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
8
|
+
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."); }
|
|
9
|
+
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); }
|
|
10
|
+
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; }
|
|
11
|
+
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; } }
|
|
12
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
13
|
+
import { createFromIconfontCN, SearchOutlined, VerticalAlignTopOutlined } from '@ant-design/icons';
|
|
14
|
+
import { Input, Menu, Tooltip } from 'antd';
|
|
15
|
+
import classNames from 'classnames';
|
|
16
|
+
import { FormattedMessage, useIntl, useLocale } from 'dumi';
|
|
17
|
+
import { cloneDeep } from 'lodash-es';
|
|
18
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
19
|
+
import styles from "./index.module.less";
|
|
20
|
+
|
|
21
|
+
// menu icon
|
|
22
|
+
var MenuIcon = createFromIconfontCN({
|
|
23
|
+
scriptUrl: '//at.alicdn.com/t/font_470089_1lnym745udm.js' // generated by iconfont.cn
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* DEMO 预览页面的菜单
|
|
27
|
+
*/
|
|
28
|
+
var ExampleSider = function ExampleSider(props) {
|
|
29
|
+
var currentDemo = props.currentDemo,
|
|
30
|
+
onDemoClicked = props.onDemoClicked,
|
|
31
|
+
exampleTopics = props.exampleTopics;
|
|
32
|
+
// 菜单栏展开keys
|
|
33
|
+
var _useState = useState([]),
|
|
34
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
35
|
+
openKeys = _useState2[0],
|
|
36
|
+
setOpenKeys = _useState2[1];
|
|
37
|
+
var menuRef = useRef(null);
|
|
38
|
+
|
|
39
|
+
// 初始化点击进来的示例按钮a的dom
|
|
40
|
+
var _useState3 = useState(),
|
|
41
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
42
|
+
aRef = _useState4[0],
|
|
43
|
+
setARef = _useState4[1];
|
|
44
|
+
|
|
45
|
+
// input 搜索框的value
|
|
46
|
+
var _useState5 = useState(''),
|
|
47
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
48
|
+
searchValue = _useState6[0],
|
|
49
|
+
setSearchValue = _useState6[1];
|
|
50
|
+
var locale = useLocale();
|
|
51
|
+
var intl = useIntl();
|
|
52
|
+
var getCurrentTopics = function getCurrentTopics() {
|
|
53
|
+
var res = filterTreeNode({
|
|
54
|
+
id: 'FAKE_ID',
|
|
55
|
+
childrenKey: 'exampleTopics',
|
|
56
|
+
title: {
|
|
57
|
+
zh: 'FAKE_TITLE',
|
|
58
|
+
en: 'FAKE_TITLE'
|
|
59
|
+
},
|
|
60
|
+
exampleTopics: cloneDeep(exampleTopics)
|
|
61
|
+
}, searchValue, locale.id);
|
|
62
|
+
return (res === null || res === void 0 ? void 0 : res.exampleTopics) || [];
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// 初始化菜单栏展开keys
|
|
66
|
+
useEffect(function () {
|
|
67
|
+
var targetExample = currentDemo.targetExample,
|
|
68
|
+
targetTopic = currentDemo.targetTopic;
|
|
69
|
+
var keys = ["TOPIC-".concat(targetTopic === null || targetTopic === void 0 ? void 0 : targetTopic.id), "EXAMPLE-".concat(targetTopic.id, "-").concat(targetExample === null || targetExample === void 0 ? void 0 : targetExample.id)];
|
|
70
|
+
setOpenKeys(keys);
|
|
71
|
+
}, [currentDemo]);
|
|
72
|
+
|
|
73
|
+
// 初始化滚动到中间
|
|
74
|
+
useEffect(function () {
|
|
75
|
+
if (aRef) {
|
|
76
|
+
aRef.scrollIntoView({
|
|
77
|
+
block: 'center',
|
|
78
|
+
behavior: 'smooth'
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}, [aRef]);
|
|
82
|
+
|
|
83
|
+
// 获取搜索后的文本结构 左文本 + 搜索文本 + 右文本
|
|
84
|
+
var getSearchValueTitle = function getSearchValueTitle(title) {
|
|
85
|
+
return searchValue && title.match(searchValue) ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", null, title.replace(new RegExp("".concat(searchValue, ".*")), '')), /*#__PURE__*/React.createElement("span", {
|
|
86
|
+
className: styles.searchValue
|
|
87
|
+
}, searchValue), /*#__PURE__*/React.createElement("span", null, title.replace(new RegExp(".*?".concat(searchValue)), ''))) : title;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
// 图例按钮 + img + tooltip文本
|
|
91
|
+
var renderExampleDemoCard = function renderExampleDemoCard(demo) {
|
|
92
|
+
return /*#__PURE__*/React.createElement(Tooltip, {
|
|
93
|
+
placement: "right",
|
|
94
|
+
title: getSearchValueTitle(demo.title[locale.id] || ''),
|
|
95
|
+
key: demo.id
|
|
96
|
+
}, /*#__PURE__*/React.createElement("a", {
|
|
97
|
+
ref: function ref(dom) {
|
|
98
|
+
// TODO: DEAL WITH ME
|
|
99
|
+
// if (dom && !aRef && item.value === getPath(currentExample)) {
|
|
100
|
+
// setARef(dom);
|
|
101
|
+
// }
|
|
102
|
+
},
|
|
103
|
+
className: classNames(styles.card, _defineProperty({}, styles.current, currentDemo.id === demo.id))
|
|
104
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
105
|
+
className: classNames(styles.screenshot),
|
|
106
|
+
style: {
|
|
107
|
+
backgroundImage: "url(".concat(demo.screenshot || 'https://gw.alipayobjects.com/os/s/prod/antv/assets/image/screenshot-placeholder-b8e70.png', ")")
|
|
108
|
+
},
|
|
109
|
+
title: demo.title[locale.id]
|
|
110
|
+
})));
|
|
111
|
+
};
|
|
112
|
+
var renderSubMenu = function renderSubMenu() {
|
|
113
|
+
return getCurrentTopics().map(function (topic) {
|
|
114
|
+
return /*#__PURE__*/React.createElement(Menu.SubMenu, {
|
|
115
|
+
key: "TOPIC-".concat(topic.id),
|
|
116
|
+
title: /*#__PURE__*/React.createElement("div", null, topic.icon && /*#__PURE__*/React.createElement(MenuIcon, {
|
|
117
|
+
className: styles.menuIcon,
|
|
118
|
+
type: "icon-".concat(topic.icon)
|
|
119
|
+
}), /*#__PURE__*/React.createElement("span", {
|
|
120
|
+
className: classNames(styles.menuTitleContent, styles.subMenuTitleContent)
|
|
121
|
+
}, topic.title && getSearchValueTitle(topic.title[locale.id])))
|
|
122
|
+
}, topic.examples.map(function (example) {
|
|
123
|
+
return /*#__PURE__*/React.createElement(Menu.SubMenu, {
|
|
124
|
+
key: "EXAMPLE-".concat(topic.id, "-").concat(example.id),
|
|
125
|
+
title: example.title[locale.id]
|
|
126
|
+
}, example.demos.map(function (demo) {
|
|
127
|
+
return /*#__PURE__*/React.createElement(Menu.Item, {
|
|
128
|
+
key: "DEMO-".concat(topic.id, "-").concat(example.id, "-").concat(demo.id),
|
|
129
|
+
style: {
|
|
130
|
+
height: 70,
|
|
131
|
+
padding: 0,
|
|
132
|
+
cursor: 'pointer'
|
|
133
|
+
},
|
|
134
|
+
onClick: function onClick() {
|
|
135
|
+
onDemoClicked(_objectSpread(_objectSpread({}, demo), {}, {
|
|
136
|
+
targetExample: example,
|
|
137
|
+
targetTopic: topic
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
141
|
+
className: styles.menuTitleContent
|
|
142
|
+
}, renderExampleDemoCard(demo)));
|
|
143
|
+
}));
|
|
144
|
+
}));
|
|
145
|
+
});
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// 搜索栏
|
|
149
|
+
var renderSearchBar = function renderSearchBar() {
|
|
150
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
151
|
+
className: styles.searchSider
|
|
152
|
+
}, /*#__PURE__*/React.createElement(Input, {
|
|
153
|
+
size: "small",
|
|
154
|
+
placeholder: intl.formatMessage({
|
|
155
|
+
id: '搜索…'
|
|
156
|
+
}),
|
|
157
|
+
prefix: /*#__PURE__*/React.createElement(SearchOutlined, null),
|
|
158
|
+
value: searchValue,
|
|
159
|
+
onChange: function onChange(e) {
|
|
160
|
+
return setSearchValue(e.target.value);
|
|
161
|
+
}
|
|
162
|
+
}), /*#__PURE__*/React.createElement(Tooltip, {
|
|
163
|
+
placement: "right",
|
|
164
|
+
title: /*#__PURE__*/React.createElement(FormattedMessage, {
|
|
165
|
+
id: "\u6536\u8D77\u6240\u6709"
|
|
166
|
+
})
|
|
167
|
+
}, /*#__PURE__*/React.createElement(VerticalAlignTopOutlined, {
|
|
168
|
+
className: styles.searchSiderIcon,
|
|
169
|
+
onClick: function onClick() {
|
|
170
|
+
return setOpenKeys([]);
|
|
171
|
+
}
|
|
172
|
+
})));
|
|
173
|
+
};
|
|
174
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
175
|
+
className: classNames(styles.shadowWrapper)
|
|
176
|
+
}, renderSearchBar(), /*#__PURE__*/React.createElement(Menu, {
|
|
177
|
+
ref: menuRef,
|
|
178
|
+
mode: "inline",
|
|
179
|
+
style: {
|
|
180
|
+
width: '100%'
|
|
181
|
+
},
|
|
182
|
+
className: styles.sideBarMenu,
|
|
183
|
+
openKeys: openKeys,
|
|
184
|
+
selectedKeys: ["DEMO-".concat(currentDemo.id)],
|
|
185
|
+
onOpenChange: function onOpenChange(keys) {
|
|
186
|
+
setOpenKeys(keys);
|
|
187
|
+
}
|
|
188
|
+
}, renderSubMenu()));
|
|
189
|
+
};
|
|
190
|
+
export default ExampleSider;
|
|
@@ -1,77 +1,96 @@
|
|
|
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 { Layout } from 'antd';
|
|
8
2
|
import { useLocale, useSiteData } from 'dumi';
|
|
9
3
|
import { every, find, get } from 'lodash-es';
|
|
10
|
-
import React, { useContext
|
|
4
|
+
import React, { useContext } from 'react';
|
|
11
5
|
import { useLocation, useNavigate, useParams } from 'react-router-dom';
|
|
12
6
|
import { useSnapshot } from 'valtio';
|
|
7
|
+
import InViewSuspense from "../../common/InViewSuspense";
|
|
13
8
|
import SEO from "../../common/SEO";
|
|
14
9
|
import { ThemeAntVContext } from "../../context";
|
|
15
10
|
import { store } from "../../model";
|
|
16
11
|
import { API } from "dumi/theme/slots/API";
|
|
17
|
-
import
|
|
12
|
+
import CodeRunner from "dumi/theme/slots/CodeRunner";
|
|
18
13
|
import { getDemoInfo } from "../../slots/CodeRunner/utils";
|
|
19
|
-
import { ExampleSider } from "dumi/theme/slots/ExampleSider";
|
|
20
|
-
import { Header } from "dumi/theme/slots/Header";
|
|
21
14
|
import { CollapsedIcon } from "./components/CollapsedIcon";
|
|
22
15
|
import styles from "./index.module.less";
|
|
23
|
-
import { getCurrentTitle } from "./utils";
|
|
24
16
|
var Sider = Layout.Sider,
|
|
25
17
|
Content = Layout.Content;
|
|
18
|
+
var Header = /*#__PURE__*/React.lazy(function () {
|
|
19
|
+
return import("dumi/theme/slots/Header");
|
|
20
|
+
});
|
|
21
|
+
var ExampleSider = /*#__PURE__*/React.lazy(function () {
|
|
22
|
+
return import("dumi/theme/slots/ExampleSider");
|
|
23
|
+
});
|
|
26
24
|
/**
|
|
27
|
-
*
|
|
25
|
+
* 解析 Example 页面的元数据
|
|
28
26
|
*/
|
|
29
|
-
var
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
var
|
|
27
|
+
var useExampleMeta = function useExampleMeta() {
|
|
28
|
+
/** 示例页面的元数据信息 */
|
|
29
|
+
var metaData = useContext(ThemeAntVContext);
|
|
30
|
+
var exampleTopics = metaData.meta.exampleTopics;
|
|
33
31
|
var _useParams = useParams(),
|
|
34
32
|
topic = _useParams.topic,
|
|
35
33
|
example = _useParams.example;
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
var _useLocation = useLocation(),
|
|
35
|
+
hash = _useLocation.hash;
|
|
36
|
+
var examples = get(exampleTopics, ['0', 'examples']);
|
|
37
|
+
var exampleDemo = find(examples, function (_ref) {
|
|
38
|
+
var id = _ref.id;
|
|
39
|
+
return id === example;
|
|
40
|
+
});
|
|
41
|
+
// examples/case/id hash 为空,可以默认第一个 example 对应的 demo
|
|
42
|
+
var demo = hash.slice(1) || get(exampleDemo, ['demos', '0', 'id']);
|
|
43
|
+
var locale = useLocale();
|
|
44
|
+
var exampleTitle = get(exampleDemo, ['title', locale.id]);
|
|
45
|
+
var currentDemo = getDemoInfo(exampleTopics, topic, example, demo);
|
|
46
|
+
var demoTitle = get(currentDemo, ['title', locale.id]);
|
|
47
|
+
return {
|
|
48
|
+
// all example topics
|
|
49
|
+
exampleTopics: exampleTopics,
|
|
50
|
+
// topic id
|
|
51
|
+
topic: topic,
|
|
52
|
+
// example id
|
|
53
|
+
example: example,
|
|
54
|
+
// example title
|
|
55
|
+
exampleTitle: exampleTitle,
|
|
56
|
+
// demo id
|
|
57
|
+
demo: demo,
|
|
58
|
+
// current demo info
|
|
59
|
+
currentDemo: currentDemo,
|
|
60
|
+
// demo title
|
|
61
|
+
demoTitle: demoTitle
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* 具体单个案例的页面
|
|
67
|
+
*/
|
|
68
|
+
var Example = function Example() {
|
|
69
|
+
var state = useSnapshot(store);
|
|
70
|
+
var navigate = useNavigate();
|
|
38
71
|
var locale = useLocale();
|
|
72
|
+
var _useExampleMeta = useExampleMeta(),
|
|
73
|
+
exampleTopics = _useExampleMeta.exampleTopics,
|
|
74
|
+
exampleTitle = _useExampleMeta.exampleTitle,
|
|
75
|
+
currentDemo = _useExampleMeta.currentDemo,
|
|
76
|
+
topic = _useExampleMeta.topic,
|
|
77
|
+
example = _useExampleMeta.example,
|
|
78
|
+
demo = _useExampleMeta.demo,
|
|
79
|
+
demoTitle = _useExampleMeta.demoTitle;
|
|
39
80
|
var _useSiteData = useSiteData(),
|
|
40
81
|
themeConfig = _useSiteData.themeConfig;
|
|
41
|
-
var exampleTopics = metaData.meta.exampleTopics;
|
|
42
|
-
var demo = useMemo(function () {
|
|
43
|
-
var examples = get(exampleTopics, ['0', 'examples']);
|
|
44
|
-
var exampleDemo = find(examples, function (_ref) {
|
|
45
|
-
var id = _ref.id;
|
|
46
|
-
return id === example;
|
|
47
|
-
});
|
|
48
|
-
// examples/case/id hash 为空,可以默认第一个 example 对应的 demo
|
|
49
|
-
return hash.slice(1) || get(exampleDemo, ['demos', '0', 'id']);
|
|
50
|
-
}, [hash, exampleTopics, example]);
|
|
51
|
-
var _useState = useState(),
|
|
52
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
53
|
-
currentDemo = _useState2[0],
|
|
54
|
-
setCurrentDemo = _useState2[1];
|
|
55
|
-
var state = useSnapshot(store);
|
|
56
|
-
var _useState3 = useState({}),
|
|
57
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
58
|
-
title = _useState4[0],
|
|
59
|
-
setTitle = _useState4[1];
|
|
60
|
-
useEffect(function () {
|
|
61
|
-
if (topic && example && demo) {
|
|
62
|
-
var targetDemoInfo = getDemoInfo(exampleTopics, topic, example, demo);
|
|
63
|
-
setCurrentDemo(targetDemoInfo);
|
|
64
|
-
setTitle(getCurrentTitle(exampleTopics, topic, example));
|
|
65
|
-
}
|
|
66
|
-
}, [topic, example, hash]);
|
|
67
82
|
var showAPI = every([get(themeConfig, 'showAPIDoc'), topic, example], Boolean);
|
|
83
|
+
if (!currentDemo) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
68
86
|
return /*#__PURE__*/React.createElement("div", {
|
|
69
87
|
className: styles.example
|
|
70
88
|
}, /*#__PURE__*/React.createElement(SEO, {
|
|
71
|
-
title:
|
|
72
|
-
|
|
89
|
+
title: exampleTitle,
|
|
90
|
+
description: demoTitle
|
|
91
|
+
}), /*#__PURE__*/React.createElement(InViewSuspense, null, /*#__PURE__*/React.createElement(Header, {
|
|
73
92
|
isHomePage: false
|
|
74
|
-
}), /*#__PURE__*/React.createElement(Layout, {
|
|
93
|
+
})), /*#__PURE__*/React.createElement(Layout, {
|
|
75
94
|
className: styles.container
|
|
76
95
|
}, /*#__PURE__*/React.createElement(Sider, {
|
|
77
96
|
collapsedWidth: 0,
|
|
@@ -81,7 +100,7 @@ var Example = function Example() {
|
|
|
81
100
|
collapsed: state.hideMenu,
|
|
82
101
|
className: styles.menuSider,
|
|
83
102
|
theme: "light"
|
|
84
|
-
},
|
|
103
|
+
}, /*#__PURE__*/React.createElement(InViewSuspense, null, /*#__PURE__*/React.createElement(ExampleSider, {
|
|
85
104
|
showExampleDemoTitle: true,
|
|
86
105
|
currentDemo: currentDemo,
|
|
87
106
|
onDemoClicked: function onDemoClicked(example) {
|
|
@@ -90,10 +109,10 @@ var Example = function Example() {
|
|
|
90
109
|
targetTopic = example.targetTopic;
|
|
91
110
|
// eg: /zh/examples/case/area/#area1
|
|
92
111
|
var newURL = "/".concat(locale.id, "/examples/").concat(targetTopic === null || targetTopic === void 0 ? void 0 : targetTopic.id, "/").concat(targetExample === null || targetExample === void 0 ? void 0 : targetExample.id, "/#").concat(demoId);
|
|
93
|
-
|
|
112
|
+
navigate(newURL);
|
|
94
113
|
},
|
|
95
114
|
exampleTopics: exampleTopics
|
|
96
|
-
}), /*#__PURE__*/React.createElement(CollapsedIcon, {
|
|
115
|
+
})), /*#__PURE__*/React.createElement(CollapsedIcon, {
|
|
97
116
|
isCollapsed: state.hideMenu,
|
|
98
117
|
onClick: function onClick(show) {
|
|
99
118
|
store.hideMenu = show;
|
|
@@ -104,7 +123,7 @@ var Example = function Example() {
|
|
|
104
123
|
}
|
|
105
124
|
})), /*#__PURE__*/React.createElement(Content, {
|
|
106
125
|
className: styles.content
|
|
107
|
-
},
|
|
126
|
+
}, /*#__PURE__*/React.createElement(CodeRunner, {
|
|
108
127
|
exampleTopics: exampleTopics,
|
|
109
128
|
topic: topic,
|
|
110
129
|
example: example,
|
|
@@ -18,7 +18,7 @@ import { LeftMenu } from "./components/LeftMenu";
|
|
|
18
18
|
* @param {LeftMenuProps} props 相关参数,详见类型定义
|
|
19
19
|
* @returns {React.FC} React.FC
|
|
20
20
|
*/
|
|
21
|
-
|
|
21
|
+
var ExampleTopicMenu = function ExampleTopicMenu(props) {
|
|
22
22
|
var exampleTopics = props.exampleTopics;
|
|
23
23
|
var isWide = useMedia('(min-width: 767.99px)', true);
|
|
24
24
|
var _useState = useState(false),
|
|
@@ -51,4 +51,5 @@ export var ExampleTopicMenu = function ExampleTopicMenu(props) {
|
|
|
51
51
|
}, /*#__PURE__*/React.createElement(LeftMenu, {
|
|
52
52
|
exampleTopics: exampleTopics
|
|
53
53
|
})));
|
|
54
|
-
};
|
|
54
|
+
};
|
|
55
|
+
export default ExampleTopicMenu;
|