dumi 2.0.0-alpha.2 → 2.0.0-alpha.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.
- package/dist/client/pages/404.d.ts +1 -0
- package/dist/client/pages/404.js +2 -0
- package/dist/client/pages/Demo.d.ts +3 -0
- package/dist/client/pages/Demo.js +17 -0
- package/dist/client/theme-api/DumiDemo.js +8 -5
- package/dist/client/theme-api/DumiDemoGrid.d.ts +1 -1
- package/dist/client/theme-api/DumiDemoGrid.js +9 -8
- package/dist/client/theme-api/context.d.ts +7 -4
- package/dist/client/theme-api/context.js +8 -4
- package/dist/client/theme-api/index.d.ts +8 -5
- package/dist/client/theme-api/index.js +7 -5
- package/dist/client/theme-api/types.d.ts +77 -9
- package/dist/client/theme-api/useLocale.d.ts +1 -0
- package/dist/client/theme-api/useLocale.js +31 -0
- package/dist/client/theme-api/useNavData.d.ts +6 -0
- package/dist/client/theme-api/useNavData.js +78 -0
- package/dist/client/theme-api/{useMatchedRouteMeta.d.ts → useRouteMeta.d.ts} +1 -1
- package/dist/client/theme-api/{useMatchedRouteMeta.js → useRouteMeta.js} +6 -3
- package/dist/client/theme-api/useSidebarData.d.ts +8 -0
- package/dist/client/theme-api/useSidebarData.js +131 -0
- package/dist/client/theme-api/utils.d.ts +2 -0
- package/dist/client/theme-api/utils.js +44 -0
- package/dist/client/tsconfig.json +2 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +3 -0
- package/dist/features/compile.js +1 -1
- package/dist/features/configPlugins/index.js +2 -1
- package/dist/features/configPlugins/schema.js +2 -1
- package/dist/features/exports.d.ts +3 -0
- package/dist/features/exports.js +45 -0
- package/dist/features/locales.js +18 -10
- package/dist/features/meta.js +2 -2
- package/dist/features/routes.js +29 -2
- package/dist/features/theme/index.js +6 -6
- package/dist/index.d.ts +4 -3
- package/dist/index.js +1 -0
- package/dist/loaders/markdown/index.js +4 -2
- package/dist/loaders/markdown/transformer/index.d.ts +5 -2
- package/dist/loaders/markdown/transformer/index.js +4 -2
- package/dist/loaders/markdown/transformer/rehypeDemo.d.ts +3 -0
- package/dist/loaders/markdown/transformer/rehypeDemo.js +14 -6
- package/dist/loaders/markdown/transformer/rehypeEmbed.d.ts +9 -1
- package/dist/loaders/markdown/transformer/rehypeEmbed.js +16 -4
- package/dist/loaders/markdown/transformer/rehypeRaw.js +2 -2
- package/dist/loaders/markdown/transformer/rehypeSlug.d.ts +4 -0
- package/dist/loaders/markdown/transformer/rehypeSlug.js +105 -0
- package/dist/loaders/markdown/transformer/remarkMeta.d.ts +4 -2
- package/dist/loaders/markdown/transformer/remarkMeta.js +24 -3
- package/dist/preset.js +1 -0
- package/dist/types.d.ts +8 -2
- package/package.json +16 -1
- package/theme-default/builtins/{Previewer.d.ts → Previewer/index.d.ts} +2 -1
- package/theme-default/builtins/Previewer/index.js +162 -0
- package/theme-default/builtins/Previewer/index.less +297 -0
- package/theme-default/builtins/SourceCode/index.d.ts +9 -0
- package/theme-default/builtins/SourceCode/index.js +87 -0
- package/theme-default/builtins/SourceCode/index.less +50 -0
- package/theme-default/layouts/DocLayout/index.d.ts +1 -0
- package/theme-default/layouts/DocLayout/index.js +28 -6
- package/theme-default/layouts/DocLayout/index.less +17 -0
- package/theme-default/locales/en-US.json +9 -1
- package/theme-default/locales/zh-CN.json +9 -1
- package/theme-default/slots/Content/heti.scss +3 -0
- package/theme-default/slots/Content/index.d.ts +2 -0
- package/theme-default/slots/Content/index.js +6 -5
- package/theme-default/slots/Content/index.less +31 -0
- package/theme-default/slots/Header/index.d.ts +1 -0
- package/theme-default/slots/Header/index.js +10 -7
- package/theme-default/slots/Header/index.less +22 -0
- package/theme-default/slots/LangSwitch/index.d.ts +4 -0
- package/theme-default/slots/LangSwitch/index.js +81 -0
- package/theme-default/slots/LangSwitch/index.less +13 -0
- package/theme-default/slots/Logo/index.d.ts +1 -0
- package/theme-default/slots/Logo/index.js +13 -1
- package/theme-default/slots/Logo/index.less +16 -0
- package/theme-default/slots/Navbar/index.d.ts +1 -0
- package/theme-default/slots/Navbar/index.js +20 -1
- package/theme-default/slots/Navbar/index.less +33 -0
- package/theme-default/slots/NotFound/index.d.ts +4 -0
- package/theme-default/slots/NotFound/index.js +20 -0
- package/theme-default/slots/NotFound/index.less +26 -0
- package/theme-default/slots/SearchBar/index.d.ts +1 -0
- package/theme-default/slots/SearchBar/index.js +32 -4
- package/theme-default/slots/SearchBar/index.less +61 -0
- package/theme-default/slots/Sidebar/index.d.ts +1 -0
- package/theme-default/slots/Sidebar/index.js +23 -8
- package/theme-default/slots/Sidebar/index.less +57 -0
- package/theme-default/slots/Toc/index.d.ts +4 -0
- package/theme-default/slots/Toc/index.js +30 -0
- package/theme-default/slots/Toc/index.less +31 -0
- package/theme-default/styles/utils.less +46 -0
- package/theme-default/styles/variables.less +13 -0
- package/theme-default/builtins/Previewer.js +0 -11
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
|
|
3
|
+
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."); }
|
|
4
|
+
|
|
5
|
+
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); }
|
|
6
|
+
|
|
7
|
+
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; }
|
|
8
|
+
|
|
9
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
10
|
+
|
|
11
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
12
|
+
|
|
13
|
+
import { useIntl, useLocale, useLocation, useSiteData } from 'dumi';
|
|
14
|
+
import React, { useEffect, useState } from 'react';
|
|
15
|
+
import "./index.less";
|
|
16
|
+
|
|
17
|
+
function getTargetLocalePath(_ref) {
|
|
18
|
+
var pathname = _ref.pathname,
|
|
19
|
+
current = _ref.current,
|
|
20
|
+
target = _ref.target;
|
|
21
|
+
var clearPath = 'base' in current ? pathname.replace(current.base.replace(/\/$/, ''), '') : pathname.replace(new RegExp("".concat(current.suffix, "$")), '');
|
|
22
|
+
return 'base' in target ? "".concat(target.base).concat(clearPath).replace(/^\/\//, '/') : "".concat(clearPath).concat(target.suffix);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var SingleSwitch = function SingleSwitch(_ref2) {
|
|
26
|
+
var locale = _ref2.locale;
|
|
27
|
+
|
|
28
|
+
var _useLocation = useLocation(),
|
|
29
|
+
pathname = _useLocation.pathname;
|
|
30
|
+
|
|
31
|
+
var current = useLocale();
|
|
32
|
+
|
|
33
|
+
var _useState = useState(function () {
|
|
34
|
+
return getTargetLocalePath({
|
|
35
|
+
pathname: pathname,
|
|
36
|
+
current: current,
|
|
37
|
+
target: locale
|
|
38
|
+
});
|
|
39
|
+
}),
|
|
40
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
41
|
+
path = _useState2[0],
|
|
42
|
+
setPath = _useState2[1];
|
|
43
|
+
|
|
44
|
+
useEffect(function () {
|
|
45
|
+
setPath(getTargetLocalePath({
|
|
46
|
+
pathname: pathname,
|
|
47
|
+
current: current,
|
|
48
|
+
target: locale
|
|
49
|
+
}));
|
|
50
|
+
}, [pathname, current.id, locale.id]); // TODO: use Link (without page refresh)
|
|
51
|
+
|
|
52
|
+
return /*#__PURE__*/React.createElement("a", {
|
|
53
|
+
className: "dumi-default-lang-switch",
|
|
54
|
+
href: path
|
|
55
|
+
}, locale.name);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
var LangSwitch = function LangSwitch() {
|
|
59
|
+
var _useSiteData = useSiteData(),
|
|
60
|
+
locales = _useSiteData.locales;
|
|
61
|
+
|
|
62
|
+
var _useIntl = useIntl(),
|
|
63
|
+
locale = _useIntl.locale; // do not render in single language
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
if (locales.length <= 1) return null;
|
|
67
|
+
return locales.length > 2 ?
|
|
68
|
+
/*#__PURE__*/
|
|
69
|
+
// TODO: multiple languages select
|
|
70
|
+
React.createElement(React.Fragment, null, "WIP") :
|
|
71
|
+
/*#__PURE__*/
|
|
72
|
+
// single language switch
|
|
73
|
+
React.createElement(SingleSwitch, {
|
|
74
|
+
locale: locales.find(function (_ref3) {
|
|
75
|
+
var id = _ref3.id;
|
|
76
|
+
return id !== locale;
|
|
77
|
+
})
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export default LangSwitch;
|
|
@@ -1,7 +1,19 @@
|
|
|
1
|
+
import { Link, useLocale, useSiteData } from 'dumi';
|
|
1
2
|
import React from 'react';
|
|
3
|
+
import "./index.less";
|
|
2
4
|
|
|
3
5
|
var Logo = function Logo() {
|
|
4
|
-
|
|
6
|
+
var _useSiteData = useSiteData(),
|
|
7
|
+
themeConfig = _useSiteData.themeConfig;
|
|
8
|
+
|
|
9
|
+
var locale = useLocale();
|
|
10
|
+
return /*#__PURE__*/React.createElement(Link, {
|
|
11
|
+
className: "dumi-default-logo",
|
|
12
|
+
to: 'base' in locale ? locale.base : '/'
|
|
13
|
+
}, /*#__PURE__*/React.createElement("img", {
|
|
14
|
+
src: themeConfig.logo || 'data:image/png;base64,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',
|
|
15
|
+
alt: themeConfig.name
|
|
16
|
+
}), themeConfig.name);
|
|
5
17
|
};
|
|
6
18
|
|
|
7
19
|
export default Logo;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
@import (reference) '../../styles/variables.less';
|
|
2
|
+
|
|
3
|
+
.@{prefix}-logo {
|
|
4
|
+
display: flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
color: @c-text;
|
|
7
|
+
font-size: 22px;
|
|
8
|
+
line-height: 1;
|
|
9
|
+
font-weight: 500;
|
|
10
|
+
text-decoration: none;
|
|
11
|
+
|
|
12
|
+
img {
|
|
13
|
+
margin-right: 10px;
|
|
14
|
+
height: 40px;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,7 +1,26 @@
|
|
|
1
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
+
|
|
3
|
+
import { Link, useLocation, useNavData } from 'dumi';
|
|
1
4
|
import React from 'react';
|
|
5
|
+
import "./index.less";
|
|
2
6
|
|
|
3
7
|
var Navbar = function Navbar() {
|
|
4
|
-
|
|
8
|
+
var nav = useNavData();
|
|
9
|
+
|
|
10
|
+
var _useLocation = useLocation(),
|
|
11
|
+
pathname = _useLocation.pathname;
|
|
12
|
+
|
|
13
|
+
return /*#__PURE__*/React.createElement("ul", {
|
|
14
|
+
className: "dumi-default-navbar"
|
|
15
|
+
}, nav.map(function (item) {
|
|
16
|
+
return /*#__PURE__*/React.createElement("li", {
|
|
17
|
+
key: item.link
|
|
18
|
+
}, /*#__PURE__*/React.createElement(Link, _extends({
|
|
19
|
+
to: item.link
|
|
20
|
+
}, pathname.startsWith(item.activePath || item.link) ? {
|
|
21
|
+
className: 'active'
|
|
22
|
+
} : {}), item.title));
|
|
23
|
+
}));
|
|
5
24
|
};
|
|
6
25
|
|
|
7
26
|
export default Navbar;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
@import (reference) '../../styles/variables.less';
|
|
2
|
+
|
|
3
|
+
.@{prefix}-navbar {
|
|
4
|
+
list-style: none;
|
|
5
|
+
margin: 0;
|
|
6
|
+
padding: 0;
|
|
7
|
+
display: flex;
|
|
8
|
+
align-items: center;
|
|
9
|
+
|
|
10
|
+
> li {
|
|
11
|
+
font-size: 18px;
|
|
12
|
+
line-height: 1;
|
|
13
|
+
|
|
14
|
+
> a {
|
|
15
|
+
color: @c-text-secondary;
|
|
16
|
+
text-decoration: none;
|
|
17
|
+
transition: all 0.3s;
|
|
18
|
+
|
|
19
|
+
&:hover {
|
|
20
|
+
color: @c-primary;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
&.active {
|
|
24
|
+
color: @c-text;
|
|
25
|
+
font-weight: 500;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
&:not(:last-child) {
|
|
30
|
+
margin-right: 48px;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Link, useIntl, useLocale } from 'dumi';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import "./index.less";
|
|
4
|
+
|
|
5
|
+
var Page404 = function Page404() {
|
|
6
|
+
var intl = useIntl();
|
|
7
|
+
var locale = useLocale();
|
|
8
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
9
|
+
className: "dumi-default-not-found"
|
|
10
|
+
}, /*#__PURE__*/React.createElement("h1", null, intl.formatMessage({
|
|
11
|
+
id: '404.title'
|
|
12
|
+
})), /*#__PURE__*/React.createElement(Link, {
|
|
13
|
+
to: 'base' in locale ? locale.base : '/',
|
|
14
|
+
replace: true
|
|
15
|
+
}, intl.formatMessage({
|
|
16
|
+
id: '404.back'
|
|
17
|
+
}), " \u2192"));
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export default Page404;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
@import (reference) '../../styles/variables.less';
|
|
2
|
+
|
|
3
|
+
.@{prefix}-not-found {
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
height: 65vh;
|
|
7
|
+
align-items: center;
|
|
8
|
+
justify-content: center;
|
|
9
|
+
|
|
10
|
+
> h1 {
|
|
11
|
+
position: relative;
|
|
12
|
+
margin: 24px 0;
|
|
13
|
+
color: @c-border-light;
|
|
14
|
+
font-size: 78px;
|
|
15
|
+
font-weight: 700;
|
|
16
|
+
text-shadow: -1px -1px 0 @c-border;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
> a {
|
|
20
|
+
color: @c-primary;
|
|
21
|
+
|
|
22
|
+
&:not(:hover) {
|
|
23
|
+
text-decoration: none;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -1,9 +1,37 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ReactComponent as IconSearch } from '@ant-design/icons-svg/inline-svg/outlined/search.svg';
|
|
2
|
+
import { useIntl } from 'dumi';
|
|
3
|
+
import React, { useEffect, useRef } from 'react';
|
|
4
|
+
import "./index.less";
|
|
5
|
+
var isAppleDevice = /(mac|iphone|ipod|ipad)/i.test(navigator.platform);
|
|
2
6
|
|
|
3
7
|
var SearchBar = function SearchBar() {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
8
|
+
var intl = useIntl();
|
|
9
|
+
var input = useRef(null);
|
|
10
|
+
var symbol = isAppleDevice ? '⌘' : 'Ctrl';
|
|
11
|
+
useEffect(function () {
|
|
12
|
+
var handler = function handler(ev) {
|
|
13
|
+
if ((isAppleDevice ? ev.metaKey : ev.ctrlKey) && (ev.keyCode === 75 || ev.code === 'KeyK')) {
|
|
14
|
+
var _input$current;
|
|
15
|
+
|
|
16
|
+
(_input$current = input.current) === null || _input$current === void 0 ? void 0 : _input$current.focus();
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
document.addEventListener('keydown', handler);
|
|
21
|
+
return function () {
|
|
22
|
+
return document.removeEventListener('keydown', handler);
|
|
23
|
+
};
|
|
24
|
+
}, []);
|
|
25
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
26
|
+
className: "dumi-default-search-bar"
|
|
27
|
+
}, /*#__PURE__*/React.createElement(IconSearch, null), /*#__PURE__*/React.createElement("input", {
|
|
28
|
+
placeholder: intl.formatMessage({
|
|
29
|
+
id: 'header.search.placeholder'
|
|
30
|
+
}),
|
|
31
|
+
ref: input
|
|
32
|
+
}), /*#__PURE__*/React.createElement("span", {
|
|
33
|
+
className: "dumi-default-search-shortcut"
|
|
34
|
+
}, symbol, " K"));
|
|
7
35
|
};
|
|
8
36
|
|
|
9
37
|
export default SearchBar;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
@import (reference) '../../styles/variables.less';
|
|
2
|
+
|
|
3
|
+
.@{prefix}-search-bar {
|
|
4
|
+
position: relative;
|
|
5
|
+
|
|
6
|
+
&:not(:last-child) {
|
|
7
|
+
margin-right: 28px;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
> svg {
|
|
11
|
+
position: absolute;
|
|
12
|
+
top: 50%;
|
|
13
|
+
margin-top: 1px;
|
|
14
|
+
left: 16px;
|
|
15
|
+
width: 16px;
|
|
16
|
+
fill: @c-text-note;
|
|
17
|
+
transform: translateY(-50%);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
input {
|
|
21
|
+
width: 280px;
|
|
22
|
+
height: 40px;
|
|
23
|
+
padding: 0 12px 0 40px;
|
|
24
|
+
color: @c-text;
|
|
25
|
+
font-size: 14px;
|
|
26
|
+
border: 1px solid @c-border;
|
|
27
|
+
border-radius: 20px;
|
|
28
|
+
box-sizing: border-box;
|
|
29
|
+
outline: none;
|
|
30
|
+
transition: all 0.3s;
|
|
31
|
+
background-color: transparent;
|
|
32
|
+
|
|
33
|
+
&:focus {
|
|
34
|
+
border-color: fade(@c-primary, 50%);
|
|
35
|
+
background-color: #fff;
|
|
36
|
+
box-shadow: 0 0 0 3px fade(@c-primary, 10%);
|
|
37
|
+
|
|
38
|
+
+ .@{prefix}-search-shortcut {
|
|
39
|
+
opacity: 0;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.@{prefix}-search-shortcut {
|
|
45
|
+
position: absolute;
|
|
46
|
+
top: 50%;
|
|
47
|
+
right: 11px;
|
|
48
|
+
display: inline-block;
|
|
49
|
+
padding: 4px 8px;
|
|
50
|
+
color: @c-text-note;
|
|
51
|
+
font-size: 12px;
|
|
52
|
+
line-height: 1;
|
|
53
|
+
white-space: nowrap;
|
|
54
|
+
background-color: fade(#fff, 80%);
|
|
55
|
+
border-radius: 11px;
|
|
56
|
+
border: 1px solid @c-border;
|
|
57
|
+
transform: translateY(-50%);
|
|
58
|
+
transition: all 0.3s;
|
|
59
|
+
pointer-events: none;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -1,14 +1,29 @@
|
|
|
1
|
+
import { NavLink, useLocation, useSidebarData } from 'dumi';
|
|
2
|
+
import Toc from 'dumi/theme/slots/Toc';
|
|
1
3
|
import React from 'react';
|
|
4
|
+
import "./index.less";
|
|
2
5
|
|
|
3
6
|
var Sidebar = function Sidebar() {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
var _useLocation = useLocation(),
|
|
8
|
+
pathname = _useLocation.pathname;
|
|
9
|
+
|
|
10
|
+
var sidebar = useSidebarData();
|
|
11
|
+
return sidebar && /*#__PURE__*/React.createElement("div", {
|
|
12
|
+
className: "dumi-default-sidebar"
|
|
13
|
+
}, sidebar.map(function (item, i) {
|
|
14
|
+
return /*#__PURE__*/React.createElement("dl", {
|
|
15
|
+
className: "dumi-default-sidebar-group",
|
|
16
|
+
key: String(i)
|
|
17
|
+
}, item.title && /*#__PURE__*/React.createElement("dt", null, item.title), item.children.map(function (child) {
|
|
18
|
+
return /*#__PURE__*/React.createElement("dd", {
|
|
19
|
+
key: child.link
|
|
20
|
+
}, /*#__PURE__*/React.createElement(NavLink, {
|
|
21
|
+
to: child.link,
|
|
22
|
+
title: child.title,
|
|
23
|
+
end: true
|
|
24
|
+
}, child.title), child.link === pathname && /*#__PURE__*/React.createElement(Toc, null));
|
|
25
|
+
}));
|
|
26
|
+
}));
|
|
12
27
|
};
|
|
13
28
|
|
|
14
29
|
export default Sidebar;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
@import (reference) '../../styles/variables.less';
|
|
2
|
+
|
|
3
|
+
.@{prefix}-sidebar {
|
|
4
|
+
width: @s-sidebar-width;
|
|
5
|
+
min-height: 100vh;
|
|
6
|
+
padding: 20px 32px 24px 8px;
|
|
7
|
+
box-sizing: border-box;
|
|
8
|
+
|
|
9
|
+
> dl {
|
|
10
|
+
margin: 0;
|
|
11
|
+
padding: 0;
|
|
12
|
+
line-height: 1;
|
|
13
|
+
|
|
14
|
+
> dt {
|
|
15
|
+
margin: 8px 0;
|
|
16
|
+
color: @c-text;
|
|
17
|
+
font-size: 14px;
|
|
18
|
+
font-weight: 500;
|
|
19
|
+
white-space: nowrap;
|
|
20
|
+
overflow: hidden;
|
|
21
|
+
text-overflow: ellipsis;
|
|
22
|
+
text-transform: uppercase;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
> dd {
|
|
26
|
+
margin: 0;
|
|
27
|
+
padding: 10px 0;
|
|
28
|
+
|
|
29
|
+
> a {
|
|
30
|
+
display: block;
|
|
31
|
+
color: @c-text-secondary;
|
|
32
|
+
font-size: 16px;
|
|
33
|
+
text-decoration: none;
|
|
34
|
+
transition: all 0.3s;
|
|
35
|
+
white-space: nowrap;
|
|
36
|
+
overflow: hidden;
|
|
37
|
+
text-overflow: ellipsis;
|
|
38
|
+
|
|
39
|
+
&:hover {
|
|
40
|
+
color: @c-primary;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
&.active {
|
|
44
|
+
color: @c-primary;
|
|
45
|
+
font-weight: 500;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// divider line & gap
|
|
51
|
+
+ dl {
|
|
52
|
+
margin-top: 16px;
|
|
53
|
+
padding-top: 16px;
|
|
54
|
+
border-top: 1px solid @c-border;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
+
|
|
3
|
+
import { useLocation, useRouteMeta } from 'dumi';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import "./index.less";
|
|
6
|
+
|
|
7
|
+
var Toc = function Toc() {
|
|
8
|
+
var _useLocation = useLocation(),
|
|
9
|
+
hash = _useLocation.hash;
|
|
10
|
+
|
|
11
|
+
var _useRouteMeta = useRouteMeta(),
|
|
12
|
+
toc = _useRouteMeta.toc;
|
|
13
|
+
|
|
14
|
+
return /*#__PURE__*/React.createElement("ul", {
|
|
15
|
+
className: "dumi-default-toc"
|
|
16
|
+
}, toc.map(function (item) {
|
|
17
|
+
var link = "#".concat(item.id);
|
|
18
|
+
return /*#__PURE__*/React.createElement("li", {
|
|
19
|
+
key: item.id,
|
|
20
|
+
"data-depth": item.depth
|
|
21
|
+
}, /*#__PURE__*/React.createElement("a", _extends({
|
|
22
|
+
href: link,
|
|
23
|
+
title: item.title
|
|
24
|
+
}, link === hash ? {
|
|
25
|
+
className: 'active'
|
|
26
|
+
} : {}), item.title));
|
|
27
|
+
}));
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export default Toc;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
@import (reference) '../../styles/variables.less';
|
|
2
|
+
|
|
3
|
+
.@{prefix}-toc {
|
|
4
|
+
list-style: none;
|
|
5
|
+
margin: 12px 0 0;
|
|
6
|
+
padding: 4px 0;
|
|
7
|
+
border-left: 1px solid @c-border;
|
|
8
|
+
|
|
9
|
+
&:empty {
|
|
10
|
+
display: none;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
> li > a {
|
|
14
|
+
display: block;
|
|
15
|
+
margin: 6px 0;
|
|
16
|
+
padding: 2px 12px;
|
|
17
|
+
color: @c-text-secondary;
|
|
18
|
+
font-size: 13px;
|
|
19
|
+
line-height: 1;
|
|
20
|
+
text-decoration: none;
|
|
21
|
+
white-space: nowrap;
|
|
22
|
+
overflow: hidden;
|
|
23
|
+
text-overflow: ellipsis;
|
|
24
|
+
|
|
25
|
+
&.active {
|
|
26
|
+
margin-left: -1px;
|
|
27
|
+
color: @c-text;
|
|
28
|
+
border-left: 1px solid @c-primary;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
[data-dumi-tooltip] {
|
|
2
|
+
position: relative;
|
|
3
|
+
|
|
4
|
+
&::before,
|
|
5
|
+
&::after {
|
|
6
|
+
position: absolute;
|
|
7
|
+
bottom: 100%;
|
|
8
|
+
left: 50%;
|
|
9
|
+
transform: translateX(-50%);
|
|
10
|
+
display: inline-block;
|
|
11
|
+
opacity: 0.7;
|
|
12
|
+
pointer-events: none;
|
|
13
|
+
transition: all 0.2s;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
&::before {
|
|
17
|
+
content: attr(data-dumi-tooltip);
|
|
18
|
+
min-width: 30px;
|
|
19
|
+
margin-bottom: 8px;
|
|
20
|
+
padding: 6px 12px;
|
|
21
|
+
color: #fff;
|
|
22
|
+
font-size: 13px;
|
|
23
|
+
line-height: 1.2;
|
|
24
|
+
white-space: nowrap;
|
|
25
|
+
background-color: #000;
|
|
26
|
+
border-radius: 2px;
|
|
27
|
+
box-shadow: 0 4px 10px rgb(0 0 0 / 10%);
|
|
28
|
+
box-sizing: border-box;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
&::after {
|
|
32
|
+
content: '';
|
|
33
|
+
width: 0;
|
|
34
|
+
height: 0;
|
|
35
|
+
border: 4px solid transparent;
|
|
36
|
+
border-top-color: #000;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
&:not(:hover) {
|
|
40
|
+
&::before,
|
|
41
|
+
&::after {
|
|
42
|
+
visibility: hidden;
|
|
43
|
+
opacity: 0;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
@prefix: dumi-default;
|
|
2
|
+
|
|
3
|
+
@s-content-width: 1392px;
|
|
4
|
+
@s-sidebar-width: 184px;
|
|
5
|
+
|
|
6
|
+
@c-primary: #1677ff;
|
|
7
|
+
@c-text: #333;
|
|
8
|
+
@c-text-secondary: #666;
|
|
9
|
+
@c-text-note: #999;
|
|
10
|
+
@c-border: #d0d5d8;
|
|
11
|
+
@c-border-light: #e4e9ec;
|
|
12
|
+
@c-site-bg: #f7f9fb;
|
|
13
|
+
@c-warning: #dd9600;
|