dumi 2.2.0-alpha.2 → 2.2.0-rc.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/README.md +2 -6
- package/compiled/_internal/searchWorker.min.js +1 -1
- package/compiled/crates/swc_plugin_react_demo.wasm +0 -0
- package/dist/assetParsers/atom.d.ts +2 -0
- package/dist/assetParsers/atom.js +19 -12
- package/dist/client/theme-api/DumiDemoGrid.js +2 -1
- package/dist/client/theme-api/DumiPage.js +2 -0
- package/dist/client/theme-api/types.d.ts +4 -1
- package/dist/client/theme-api/useNavData.js +77 -15
- package/dist/client/theme-api/useSidebarData.js +31 -7
- package/dist/client/theme-api/useSiteSearch/index.d.ts +1 -0
- package/dist/client/theme-api/utils.d.ts +3 -3
- package/dist/client/theme-api/utils.js +1 -1
- package/dist/features/autoAlias.js +20 -23
- package/dist/features/configPlugins/index.js +2 -1
- package/dist/features/configPlugins/schema.js +0 -1
- package/dist/features/derivative.js +0 -1
- package/dist/features/locales.js +2 -1
- package/dist/features/routes.js +25 -12
- package/dist/features/theme/index.js +77 -4
- package/dist/loaders/markdown/transformer/rehypeDemo.js +35 -9
- package/dist/loaders/markdown/transformer/rehypeEnhancedTag.js +1 -0
- package/dist/types.d.ts +2 -8
- package/dist/utils.d.ts +0 -4
- package/dist/utils.js +0 -14
- package/package.json +8 -3
- package/theme-default/builtins/API/index.js +1 -1
- package/theme-default/builtins/SourceCode/index.js +27 -13
- package/theme-default/builtins/SourceCode/index.less +53 -3
- package/theme-default/builtins/Tree/index.d.ts +4 -0
- package/theme-default/builtins/Tree/index.js +206 -0
- package/theme-default/builtins/Tree/index.less +186 -0
- package/theme-default/slots/ColorSwitch/index.less +4 -2
- package/theme-default/slots/Navbar/index.js +80 -13
- package/theme-default/slots/Navbar/index.less +128 -4
- package/theme-default/slots/RtlSwitch/index.less +2 -1
- package/theme-default/slots/SocialIcon/index.less +2 -1
- package/theme-default/slots/Toc/index.js +8 -2
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
2
|
+
|
|
3
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
+
|
|
5
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
+
|
|
7
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
8
|
+
|
|
9
|
+
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."); }
|
|
10
|
+
|
|
11
|
+
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; }
|
|
12
|
+
|
|
13
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
14
|
+
|
|
15
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
16
|
+
|
|
17
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
18
|
+
|
|
19
|
+
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); }
|
|
20
|
+
|
|
21
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
22
|
+
|
|
23
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
24
|
+
|
|
25
|
+
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; }
|
|
26
|
+
|
|
27
|
+
import { ReactComponent as FileOutlined } from '@ant-design/icons-svg/inline-svg/outlined/file.svg';
|
|
28
|
+
import { ReactComponent as FolderOpenOutlined } from '@ant-design/icons-svg/inline-svg/outlined/folder-open.svg';
|
|
29
|
+
import { ReactComponent as FolderOutlined } from '@ant-design/icons-svg/inline-svg/outlined/folder.svg';
|
|
30
|
+
import { ReactComponent as MinusSquareOutlined } from '@ant-design/icons-svg/inline-svg/outlined/minus-square.svg';
|
|
31
|
+
import { ReactComponent as PlusSquareOutlined } from '@ant-design/icons-svg/inline-svg/outlined/plus-square.svg';
|
|
32
|
+
import Tree from 'rc-tree';
|
|
33
|
+
import React, { createRef, useEffect, useState } from 'react';
|
|
34
|
+
import "./index.less";
|
|
35
|
+
|
|
36
|
+
function getTreeFromList(nodes) {
|
|
37
|
+
var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
38
|
+
var data = [];
|
|
39
|
+
[].concat(nodes).forEach(function (node, i) {
|
|
40
|
+
var key = "".concat(prefix ? "".concat(prefix, "-") : '').concat(i);
|
|
41
|
+
|
|
42
|
+
switch (node === null || node === void 0 ? void 0 : node.type) {
|
|
43
|
+
case 'ul':
|
|
44
|
+
{
|
|
45
|
+
var _data;
|
|
46
|
+
|
|
47
|
+
var parent = ((_data = data[data.length - 1]) === null || _data === void 0 ? void 0 : _data.children) || data;
|
|
48
|
+
var ulLeafs = getTreeFromList(node.props.children || [], key);
|
|
49
|
+
parent.push.apply(parent, _toConsumableArray(ulLeafs));
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
case 'li':
|
|
54
|
+
{
|
|
55
|
+
var liLeafs = getTreeFromList(node.props.children, key);
|
|
56
|
+
data.push({
|
|
57
|
+
title: [].concat(node.props.children).filter(function (child) {
|
|
58
|
+
return child.type !== 'ul';
|
|
59
|
+
}),
|
|
60
|
+
key: key,
|
|
61
|
+
children: liLeafs,
|
|
62
|
+
isLeaf: !liLeafs.length
|
|
63
|
+
});
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
default:
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
return data;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
var useListToTree = function useListToTree(nodes) {
|
|
74
|
+
var _useState = useState(getTreeFromList(nodes)),
|
|
75
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
76
|
+
tree = _useState2[0],
|
|
77
|
+
setTree = _useState2[1];
|
|
78
|
+
|
|
79
|
+
useEffect(function () {
|
|
80
|
+
setTree(getTreeFromList(nodes));
|
|
81
|
+
}, [nodes]);
|
|
82
|
+
return tree;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
var getIcon = function getIcon(props) {
|
|
86
|
+
var isLeaf = props.isLeaf,
|
|
87
|
+
expanded = props.expanded;
|
|
88
|
+
|
|
89
|
+
if (isLeaf) {
|
|
90
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
91
|
+
className: "dumi-default-tree-icon"
|
|
92
|
+
}, /*#__PURE__*/React.createElement(FileOutlined, {
|
|
93
|
+
fill: "currentColor"
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return expanded ? /*#__PURE__*/React.createElement("span", {
|
|
98
|
+
className: "dumi-default-tree-icon"
|
|
99
|
+
}, /*#__PURE__*/React.createElement(FolderOpenOutlined, {
|
|
100
|
+
fill: "currentColor"
|
|
101
|
+
})) : /*#__PURE__*/React.createElement("span", {
|
|
102
|
+
className: "dumi-default-tree-icon"
|
|
103
|
+
}, /*#__PURE__*/React.createElement(FolderOutlined, {
|
|
104
|
+
fill: "currentColor"
|
|
105
|
+
}));
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
var renderSwitcherIcon = function renderSwitcherIcon(props) {
|
|
109
|
+
var isLeaf = props.isLeaf,
|
|
110
|
+
expanded = props.expanded;
|
|
111
|
+
|
|
112
|
+
if (isLeaf) {
|
|
113
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
114
|
+
className: "tree-switcher-leaf-line"
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return expanded ? /*#__PURE__*/React.createElement("span", {
|
|
119
|
+
className: "tree-switcher-line-icon"
|
|
120
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
121
|
+
className: "dumi-default-tree-icon"
|
|
122
|
+
}, /*#__PURE__*/React.createElement(MinusSquareOutlined, {
|
|
123
|
+
fill: "currentColor"
|
|
124
|
+
}))) : /*#__PURE__*/React.createElement("span", {
|
|
125
|
+
className: "tree-switcher-line-icon"
|
|
126
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
127
|
+
className: "dumi-default-tree-icon"
|
|
128
|
+
}, /*#__PURE__*/React.createElement(PlusSquareOutlined, {
|
|
129
|
+
fill: "currentColor"
|
|
130
|
+
})));
|
|
131
|
+
}; // ================== Collapse Motion ==================
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
var getCollapsedHeight = function getCollapsedHeight() {
|
|
135
|
+
return {
|
|
136
|
+
height: 0,
|
|
137
|
+
opacity: 0
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
var getRealHeight = function getRealHeight(node) {
|
|
142
|
+
var scrollHeight = node.scrollHeight;
|
|
143
|
+
return {
|
|
144
|
+
height: scrollHeight,
|
|
145
|
+
opacity: 1
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
var getCurrentHeight = function getCurrentHeight(node) {
|
|
150
|
+
return {
|
|
151
|
+
height: node ? node.offsetHeight : 0
|
|
152
|
+
};
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
var skipOpacityTransition = function skipOpacityTransition(_, event) {
|
|
156
|
+
return (event === null || event === void 0 ? void 0 : event.deadline) === true || event.propertyName === 'height';
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
var initCollapseMotion = {
|
|
160
|
+
motionName: 'ant-motion-collapse',
|
|
161
|
+
onAppearStart: getCollapsedHeight,
|
|
162
|
+
onEnterStart: getCollapsedHeight,
|
|
163
|
+
onAppearActive: getRealHeight,
|
|
164
|
+
onEnterActive: getRealHeight,
|
|
165
|
+
onLeaveStart: getCurrentHeight,
|
|
166
|
+
onLeaveActive: getCollapsedHeight,
|
|
167
|
+
onAppearEnd: skipOpacityTransition,
|
|
168
|
+
onEnterEnd: skipOpacityTransition,
|
|
169
|
+
onLeaveEnd: skipOpacityTransition,
|
|
170
|
+
motionDeadline: 500
|
|
171
|
+
};
|
|
172
|
+
export default (function (props) {
|
|
173
|
+
var data = useListToTree(props.children);
|
|
174
|
+
var treeRef = /*#__PURE__*/createRef();
|
|
175
|
+
|
|
176
|
+
var onClick = function onClick(event, node) {
|
|
177
|
+
var isLeaf = node.isLeaf;
|
|
178
|
+
|
|
179
|
+
if (isLeaf || event.shiftKey || event.metaKey || event.ctrlKey) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
treeRef.current.onNodeExpand(event, node);
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
return /*#__PURE__*/React.createElement(Tree, {
|
|
187
|
+
className: "dumi-default-tree",
|
|
188
|
+
icon: getIcon,
|
|
189
|
+
ref: treeRef,
|
|
190
|
+
itemHeight: 20,
|
|
191
|
+
showLine: true,
|
|
192
|
+
selectable: false,
|
|
193
|
+
virtual: false,
|
|
194
|
+
motion: _objectSpread(_objectSpread({}, initCollapseMotion), {}, {
|
|
195
|
+
motionAppear: false
|
|
196
|
+
}),
|
|
197
|
+
onClick: onClick,
|
|
198
|
+
treeData: [{
|
|
199
|
+
key: '0',
|
|
200
|
+
title: props.title || '<root>',
|
|
201
|
+
children: data
|
|
202
|
+
}],
|
|
203
|
+
defaultExpandAll: true,
|
|
204
|
+
switcherIcon: renderSwitcherIcon
|
|
205
|
+
});
|
|
206
|
+
});
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
@import (reference) '../../styles/variables.less';
|
|
2
|
+
@treePrefixCls: ~'rc-tree';
|
|
3
|
+
@treeNodePrefixCls: ~'@{treePrefixCls}-treenode';
|
|
4
|
+
|
|
5
|
+
.@{prefix}-tree {
|
|
6
|
+
@bg-color: tint(@c-site-bg, 50%);
|
|
7
|
+
|
|
8
|
+
padding: 16px;
|
|
9
|
+
margin: 24px 0 32px;
|
|
10
|
+
background: @bg-color;
|
|
11
|
+
border: 1px solid @c-border-light;
|
|
12
|
+
border-radius: 2px;
|
|
13
|
+
color: @c-text;
|
|
14
|
+
overflow-y: auto;
|
|
15
|
+
|
|
16
|
+
@{dark-selector} & {
|
|
17
|
+
@bg-color: shade(@c-site-bg-dark, 50%);
|
|
18
|
+
|
|
19
|
+
color: @c-text-dark;
|
|
20
|
+
background: @bg-color;
|
|
21
|
+
border-color: @c-border-dark;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
small {
|
|
25
|
+
@small-font-color: @c-text-note-dark;
|
|
26
|
+
|
|
27
|
+
padding-left: 24px;
|
|
28
|
+
color: @c-text-note-dark;
|
|
29
|
+
font-size: 14px;
|
|
30
|
+
white-space: nowrap;
|
|
31
|
+
|
|
32
|
+
@{dark-selector} & {
|
|
33
|
+
color: @c-text-note-dark;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&::before {
|
|
37
|
+
content: '# ';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
&.@{treePrefixCls} {
|
|
42
|
+
transition: all 0.3s;
|
|
43
|
+
line-height: 1.5715;
|
|
44
|
+
list-style: none;
|
|
45
|
+
font-size: 14px;
|
|
46
|
+
|
|
47
|
+
.@{treeNodePrefixCls} {
|
|
48
|
+
position: relative;
|
|
49
|
+
display: flex;
|
|
50
|
+
align-items: flex-start;
|
|
51
|
+
|
|
52
|
+
&::before {
|
|
53
|
+
position: absolute;
|
|
54
|
+
top: 0;
|
|
55
|
+
right: 0;
|
|
56
|
+
bottom: 4px;
|
|
57
|
+
left: 0;
|
|
58
|
+
transition: background 0.3s;
|
|
59
|
+
content: '';
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
&:hover::before {
|
|
63
|
+
background: shade(@bg-color, 5%);
|
|
64
|
+
|
|
65
|
+
@{dark-selector} & {
|
|
66
|
+
@bg-color: shade(@c-site-bg-dark, 50%);
|
|
67
|
+
|
|
68
|
+
background: tint(@bg-color, 10%);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
> * {
|
|
73
|
+
z-index: 1;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@treeNode-size: 28px;
|
|
78
|
+
@border: #d9d9d9;
|
|
79
|
+
|
|
80
|
+
.@{treeNodePrefixCls} span.@{treePrefixCls}-switcher {
|
|
81
|
+
display: flex;
|
|
82
|
+
align-items: center;
|
|
83
|
+
justify-content: center;
|
|
84
|
+
width: 24px;
|
|
85
|
+
height: @treeNode-size;
|
|
86
|
+
margin-right: 2px;
|
|
87
|
+
line-height: @treeNode-size;
|
|
88
|
+
background: transparent;
|
|
89
|
+
cursor: pointer;
|
|
90
|
+
flex-shrink: 0;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.@{treeNodePrefixCls} .@{treePrefixCls}-node-content-wrapper {
|
|
94
|
+
flex: auto;
|
|
95
|
+
min-height: @treeNode-size;
|
|
96
|
+
margin: 0;
|
|
97
|
+
padding: 0 4px;
|
|
98
|
+
line-height: @treeNode-size;
|
|
99
|
+
cursor: pointer;
|
|
100
|
+
white-space: nowrap;
|
|
101
|
+
.@{treePrefixCls}-iconEle {
|
|
102
|
+
margin-right: 6px;
|
|
103
|
+
vertical-align: 0;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
&.@{treePrefixCls}-show-line {
|
|
108
|
+
.@{treePrefixCls}-indent {
|
|
109
|
+
display: inline-block;
|
|
110
|
+
height: 0;
|
|
111
|
+
vertical-align: bottom;
|
|
112
|
+
flex-shrink: 0;
|
|
113
|
+
|
|
114
|
+
&-unit {
|
|
115
|
+
position: relative;
|
|
116
|
+
display: inline-block;
|
|
117
|
+
width: 24px;
|
|
118
|
+
height: @treeNode-size;
|
|
119
|
+
|
|
120
|
+
&::before {
|
|
121
|
+
position: absolute;
|
|
122
|
+
top: 0;
|
|
123
|
+
right: 12px;
|
|
124
|
+
bottom: -4px;
|
|
125
|
+
border-right: 1px solid @border;
|
|
126
|
+
content: '';
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
&-end::before {
|
|
130
|
+
display: none;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.tree-switcher-leaf-line {
|
|
136
|
+
position: relative;
|
|
137
|
+
z-index: 1;
|
|
138
|
+
display: inline-block;
|
|
139
|
+
width: 100%;
|
|
140
|
+
height: 100%;
|
|
141
|
+
text-align: center;
|
|
142
|
+
|
|
143
|
+
&::before {
|
|
144
|
+
position: absolute;
|
|
145
|
+
top: 0;
|
|
146
|
+
bottom: -4px;
|
|
147
|
+
margin-left: -1px;
|
|
148
|
+
border-left: 1px solid @border;
|
|
149
|
+
content: ' ';
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
&::after {
|
|
153
|
+
position: absolute;
|
|
154
|
+
top: 0;
|
|
155
|
+
bottom: calc(@treeNode-size / 2);
|
|
156
|
+
width: 12px;
|
|
157
|
+
margin-left: -1px;
|
|
158
|
+
border-bottom: 1px solid @border;
|
|
159
|
+
content: ' ';
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.@{treeNodePrefixCls}-leaf-last {
|
|
164
|
+
.tree-switcher-leaf-line::before {
|
|
165
|
+
height: calc(@treeNode-size / 2);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
&-icon {
|
|
172
|
+
width: 16px;
|
|
173
|
+
color: @c-text;
|
|
174
|
+
vertical-align: -0.225em;
|
|
175
|
+
display: inline-block;
|
|
176
|
+
|
|
177
|
+
@{dark-selector} & {
|
|
178
|
+
color: @c-text-dark;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.ant-motion-collapse {
|
|
184
|
+
overflow: hidden;
|
|
185
|
+
transition: height 0.2s ease-in-out, opacity 0.2s ease-in-out !important;
|
|
186
|
+
}
|
|
@@ -12,13 +12,15 @@
|
|
|
12
12
|
inset-inline-end: -15px;
|
|
13
13
|
transform: none;
|
|
14
14
|
|
|
15
|
-
[class*='-switch'] +
|
|
15
|
+
[class*='-switch'] + &,
|
|
16
|
+
[class*='-select'] + & {
|
|
16
17
|
inset-inline-end: 0;
|
|
17
18
|
}
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
21
|
|
|
21
|
-
[class*='-switch'] +
|
|
22
|
+
[class*='-switch'] + &,
|
|
23
|
+
[class*='-select'] + & {
|
|
22
24
|
margin-inline-start: 15px;
|
|
23
25
|
margin-inline-end: -15px;
|
|
24
26
|
padding-inline: 15px;
|
|
@@ -1,30 +1,97 @@
|
|
|
1
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
2
|
|
|
3
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
4
|
+
|
|
5
|
+
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."); }
|
|
6
|
+
|
|
7
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
8
|
+
|
|
9
|
+
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; }
|
|
10
|
+
|
|
11
|
+
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; }
|
|
12
|
+
|
|
13
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
14
|
+
|
|
15
|
+
/* eslint-disable @typescript-eslint/no-use-before-define */
|
|
16
|
+
import { ReactComponent as IconDown } from '@ant-design/icons-svg/inline-svg/outlined/down.svg';
|
|
3
17
|
import { Link, useLocation, useNavData } from 'dumi';
|
|
4
18
|
import NavbarExtra from 'dumi/theme/slots/NavbarExtra';
|
|
5
|
-
import React from 'react';
|
|
19
|
+
import React, { useState } from 'react';
|
|
6
20
|
import "./index.less";
|
|
7
21
|
|
|
8
|
-
var
|
|
9
|
-
var
|
|
22
|
+
var NavbarItem = function NavbarItem(_ref) {
|
|
23
|
+
var data = _ref.data;
|
|
10
24
|
|
|
11
25
|
var _useLocation = useLocation(),
|
|
12
26
|
pathname = _useLocation.pathname;
|
|
13
27
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
28
|
+
var _useState = useState(function () {
|
|
29
|
+
var _data$children;
|
|
30
|
+
|
|
31
|
+
return (_data$children = data.children) === null || _data$children === void 0 ? void 0 : _data$children.some(function (item) {
|
|
32
|
+
var activePath = item.activePath || item.link;
|
|
33
|
+
return activePath && pathname.startsWith(activePath);
|
|
34
|
+
});
|
|
35
|
+
}),
|
|
36
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
37
|
+
isCollapsed = _useState2[0],
|
|
38
|
+
setIsCollapsed = _useState2[1];
|
|
39
|
+
|
|
40
|
+
var CollapsedBtn = data.children && /*#__PURE__*/React.createElement("button", {
|
|
41
|
+
className: "dumi-default-navbar-collapse-btn",
|
|
42
|
+
type: "button",
|
|
43
|
+
onClick: function onClick(e) {
|
|
44
|
+
e.stopPropagation();
|
|
45
|
+
setIsCollapsed(function (v) {
|
|
46
|
+
return !v;
|
|
47
|
+
});
|
|
48
|
+
},
|
|
49
|
+
"data-collapsed": isCollapsed || undefined
|
|
50
|
+
}, /*#__PURE__*/React.createElement(IconDown, null));
|
|
51
|
+
var NestedNav = data.children && /*#__PURE__*/React.createElement("ul", {
|
|
52
|
+
className: "dumi-default-navbar-dropdown",
|
|
53
|
+
"data-collapsed": isCollapsed || undefined
|
|
54
|
+
}, /*#__PURE__*/React.createElement(NavbarContent, {
|
|
55
|
+
data: data.children
|
|
56
|
+
})); // user custom nav has no activePath, so fallback to link
|
|
57
|
+
|
|
58
|
+
var activePath = data.activePath || data.link;
|
|
59
|
+
var extraProps = activePath && pathname.startsWith(activePath) ? {
|
|
60
|
+
className: 'active'
|
|
61
|
+
} : {};
|
|
62
|
+
return data.link ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Link, _extends({
|
|
63
|
+
to: data.link
|
|
64
|
+
}, extraProps), data.title), CollapsedBtn, NestedNav) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", _extends({
|
|
65
|
+
onClick: function onClick(e) {
|
|
66
|
+
e.stopPropagation();
|
|
67
|
+
setIsCollapsed(function (v) {
|
|
68
|
+
return !v;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}, extraProps), data.title), CollapsedBtn, NestedNav);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
var NavbarContent = function NavbarContent(_ref2) {
|
|
75
|
+
var data = _ref2.data;
|
|
76
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, data.map(function (item) {
|
|
17
77
|
return /*#__PURE__*/React.createElement("li", {
|
|
18
|
-
key: item.
|
|
19
|
-
}, /^(\w+:)\/\/|^(mailto|tel):/.test(item.link) ? /*#__PURE__*/React.createElement("a", {
|
|
78
|
+
key: item.activePath
|
|
79
|
+
}, item.link && /^(\w+:)\/\/|^(mailto|tel):/.test(item.link) ? /*#__PURE__*/React.createElement("a", {
|
|
20
80
|
href: item.link,
|
|
21
81
|
target: "_blank",
|
|
22
82
|
rel: "noreferrer"
|
|
23
|
-
}, item.title) : /*#__PURE__*/React.createElement(
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
83
|
+
}, item.title) : /*#__PURE__*/React.createElement(NavbarItem, {
|
|
84
|
+
data: item
|
|
85
|
+
}));
|
|
86
|
+
}));
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
var Navbar = function Navbar() {
|
|
90
|
+
var nav = useNavData();
|
|
91
|
+
return /*#__PURE__*/React.createElement("ul", {
|
|
92
|
+
className: "dumi-default-navbar"
|
|
93
|
+
}, /*#__PURE__*/React.createElement(NavbarContent, {
|
|
94
|
+
data: nav
|
|
28
95
|
}), /*#__PURE__*/React.createElement(NavbarExtra, null));
|
|
29
96
|
};
|
|
30
97
|
|
|
@@ -13,14 +13,21 @@
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
> li {
|
|
16
|
+
color: @c-text-secondary;
|
|
16
17
|
font-size: 18px;
|
|
17
18
|
line-height: 1;
|
|
18
19
|
text-align: center;
|
|
20
|
+
position: relative;
|
|
21
|
+
|
|
22
|
+
@{dark-selector} & {
|
|
23
|
+
color: @c-text-secondary-dark;
|
|
24
|
+
}
|
|
19
25
|
|
|
20
26
|
@media @mobile {
|
|
21
27
|
padding: 12px 0;
|
|
22
28
|
}
|
|
23
29
|
|
|
30
|
+
> .@{prefix}-navbar-dropdown > li > a,
|
|
24
31
|
> a {
|
|
25
32
|
color: @c-text-secondary;
|
|
26
33
|
text-decoration: none;
|
|
@@ -37,17 +44,134 @@
|
|
|
37
44
|
color: @c-primary-dark;
|
|
38
45
|
}
|
|
39
46
|
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
> a.active,
|
|
50
|
+
> span.active,
|
|
51
|
+
> .@{prefix}-navbar-dropdown > li > a.active {
|
|
52
|
+
color: @c-text;
|
|
53
|
+
font-weight: bold;
|
|
54
|
+
|
|
55
|
+
@{dark-selector} & {
|
|
56
|
+
color: @c-text-dark;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
> .@{prefix}-navbar-collapse-btn {
|
|
61
|
+
appearance: none;
|
|
62
|
+
margin-left: 6px;
|
|
63
|
+
margin-right: -24px;
|
|
64
|
+
width: 18px;
|
|
65
|
+
height: 18px;
|
|
66
|
+
padding: 0;
|
|
67
|
+
border: 0;
|
|
68
|
+
background: transparent;
|
|
69
|
+
vertical-align: middle;
|
|
70
|
+
|
|
71
|
+
> svg {
|
|
72
|
+
fill: @c-text-note;
|
|
73
|
+
width: 14px;
|
|
74
|
+
transition: transform 0.3s;
|
|
75
|
+
|
|
76
|
+
@{dark-selector} & {
|
|
77
|
+
fill: @c-text-note-dark;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
&[data-collapsed] > svg {
|
|
82
|
+
transform: rotate(180deg);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@media @desktop {
|
|
86
|
+
margin-left: 4px;
|
|
87
|
+
margin-right: 0;
|
|
88
|
+
pointer-events: none;
|
|
89
|
+
|
|
90
|
+
> svg {
|
|
91
|
+
width: 12px;
|
|
92
|
+
transition-delay: 0.1s;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
&:hover > .@{prefix}-navbar-collapse-btn > svg {
|
|
98
|
+
transform: rotate(180deg);
|
|
99
|
+
transition-delay: 0;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
> .@{prefix}-navbar-dropdown {
|
|
103
|
+
position: absolute;
|
|
104
|
+
top: 100%;
|
|
105
|
+
left: -18px;
|
|
106
|
+
min-width: calc(100% + 16px);
|
|
107
|
+
list-style: none;
|
|
108
|
+
padding: 0;
|
|
109
|
+
margin: 6px 0 0;
|
|
110
|
+
background-color: #fff;
|
|
111
|
+
box-shadow: 0 4px 16px rgba(0, 0, 0, 10%);
|
|
112
|
+
border-radius: 6px;
|
|
113
|
+
transition: all 0.2s ease-in-out;
|
|
114
|
+
|
|
115
|
+
@{dark-selector} & {
|
|
116
|
+
background-color: lighten(@c-site-bg-dark, 6%);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
> li {
|
|
120
|
+
> a {
|
|
121
|
+
display: block;
|
|
122
|
+
padding: 0 18px;
|
|
123
|
+
color: @c-text-secondary;
|
|
124
|
+
font-size: 15px;
|
|
125
|
+
line-height: 1.5;
|
|
126
|
+
text-align: left;
|
|
127
|
+
|
|
128
|
+
@media @mobile {
|
|
129
|
+
display: inline;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
&:hover {
|
|
133
|
+
color: @c-primary;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
&:first-child > a {
|
|
138
|
+
padding-top: 8px;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
&:last-child > a {
|
|
142
|
+
padding-bottom: 8px;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
40
145
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
146
|
+
@media @mobile {
|
|
147
|
+
position: static;
|
|
148
|
+
background: transparent;
|
|
149
|
+
box-shadow: none;
|
|
150
|
+
min-width: 0;
|
|
44
151
|
|
|
45
152
|
@{dark-selector} & {
|
|
46
|
-
|
|
153
|
+
background: transparent;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
&:not([data-collapsed]) {
|
|
157
|
+
display: none;
|
|
47
158
|
}
|
|
48
159
|
}
|
|
49
160
|
}
|
|
50
161
|
|
|
162
|
+
&:not(:hover) > .@{prefix}-navbar-dropdown {
|
|
163
|
+
visibility: hidden;
|
|
164
|
+
opacity: 0;
|
|
165
|
+
transform: translateY(-6px) scale(0.98);
|
|
166
|
+
transition-delay: 0.1s;
|
|
167
|
+
|
|
168
|
+
@media @mobile {
|
|
169
|
+
visibility: visible;
|
|
170
|
+
opacity: 1;
|
|
171
|
+
transform: none;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
51
175
|
&:not(:last-child) {
|
|
52
176
|
margin-inline-end: 48px;
|
|
53
177
|
|