dumi 2.0.0-alpha.3 → 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.
Files changed (90) hide show
  1. package/dist/client/pages/404.d.ts +1 -0
  2. package/dist/client/pages/404.js +2 -0
  3. package/dist/client/pages/Demo.d.ts +3 -0
  4. package/dist/client/pages/Demo.js +17 -0
  5. package/dist/client/theme-api/DumiDemo.js +8 -5
  6. package/dist/client/theme-api/DumiDemoGrid.d.ts +1 -1
  7. package/dist/client/theme-api/DumiDemoGrid.js +9 -8
  8. package/dist/client/theme-api/context.d.ts +4 -2
  9. package/dist/client/theme-api/context.js +6 -3
  10. package/dist/client/theme-api/index.d.ts +8 -7
  11. package/dist/client/theme-api/index.js +7 -7
  12. package/dist/client/theme-api/types.d.ts +45 -14
  13. package/dist/client/theme-api/useLocale.d.ts +1 -0
  14. package/dist/client/theme-api/useLocale.js +31 -0
  15. package/dist/client/theme-api/useNavData.d.ts +1 -1
  16. package/dist/client/theme-api/useNavData.js +11 -11
  17. package/dist/client/theme-api/useRouteMeta.js +4 -1
  18. package/dist/client/theme-api/useSidebarData.js +11 -12
  19. package/dist/client/theme-api/utils.d.ts +0 -1
  20. package/dist/client/theme-api/utils.js +7 -25
  21. package/dist/client/tsconfig.json +2 -1
  22. package/dist/constants.d.ts +1 -0
  23. package/dist/constants.js +3 -0
  24. package/dist/features/compile.js +1 -1
  25. package/dist/features/configPlugins/schema.js +1 -4
  26. package/dist/features/exports.d.ts +3 -0
  27. package/dist/features/exports.js +45 -0
  28. package/dist/features/locales.js +2 -2
  29. package/dist/features/meta.js +2 -2
  30. package/dist/features/routes.js +28 -1
  31. package/dist/features/theme/index.js +6 -6
  32. package/dist/index.d.ts +2 -1
  33. package/dist/index.js +1 -0
  34. package/dist/loaders/markdown/index.js +4 -2
  35. package/dist/loaders/markdown/transformer/index.d.ts +5 -2
  36. package/dist/loaders/markdown/transformer/index.js +4 -2
  37. package/dist/loaders/markdown/transformer/rehypeDemo.d.ts +3 -0
  38. package/dist/loaders/markdown/transformer/rehypeDemo.js +14 -6
  39. package/dist/loaders/markdown/transformer/rehypeEmbed.d.ts +9 -1
  40. package/dist/loaders/markdown/transformer/rehypeEmbed.js +16 -4
  41. package/dist/loaders/markdown/transformer/rehypeRaw.js +2 -2
  42. package/dist/loaders/markdown/transformer/rehypeSlug.d.ts +4 -0
  43. package/dist/loaders/markdown/transformer/rehypeSlug.js +105 -0
  44. package/dist/loaders/markdown/transformer/remarkMeta.d.ts +4 -2
  45. package/dist/loaders/markdown/transformer/remarkMeta.js +24 -3
  46. package/dist/preset.js +1 -0
  47. package/dist/types.d.ts +2 -1
  48. package/package.json +14 -1
  49. package/theme-default/builtins/{Previewer.d.ts → Previewer/index.d.ts} +2 -1
  50. package/theme-default/builtins/Previewer/index.js +162 -0
  51. package/theme-default/builtins/Previewer/index.less +297 -0
  52. package/theme-default/builtins/SourceCode/index.d.ts +9 -0
  53. package/theme-default/builtins/SourceCode/index.js +87 -0
  54. package/theme-default/builtins/SourceCode/index.less +50 -0
  55. package/theme-default/layouts/DocLayout/index.d.ts +1 -0
  56. package/theme-default/layouts/DocLayout/index.js +20 -19
  57. package/theme-default/layouts/DocLayout/index.less +17 -0
  58. package/theme-default/locales/en-US.json +9 -1
  59. package/theme-default/locales/zh-CN.json +9 -1
  60. package/theme-default/slots/Content/heti.scss +3 -0
  61. package/theme-default/slots/Content/index.d.ts +2 -0
  62. package/theme-default/slots/Content/index.js +6 -5
  63. package/theme-default/slots/Content/index.less +31 -0
  64. package/theme-default/slots/Header/index.d.ts +1 -0
  65. package/theme-default/slots/Header/index.js +10 -7
  66. package/theme-default/slots/Header/index.less +22 -0
  67. package/theme-default/slots/LangSwitch/index.d.ts +4 -0
  68. package/theme-default/slots/LangSwitch/index.js +81 -0
  69. package/theme-default/slots/LangSwitch/index.less +13 -0
  70. package/theme-default/slots/Logo/index.d.ts +1 -0
  71. package/theme-default/slots/Logo/index.js +13 -1
  72. package/theme-default/slots/Logo/index.less +16 -0
  73. package/theme-default/slots/Navbar/index.d.ts +1 -0
  74. package/theme-default/slots/Navbar/index.js +20 -1
  75. package/theme-default/slots/Navbar/index.less +33 -0
  76. package/theme-default/slots/NotFound/index.d.ts +4 -0
  77. package/theme-default/slots/NotFound/index.js +20 -0
  78. package/theme-default/slots/NotFound/index.less +26 -0
  79. package/theme-default/slots/SearchBar/index.d.ts +1 -0
  80. package/theme-default/slots/SearchBar/index.js +32 -4
  81. package/theme-default/slots/SearchBar/index.less +61 -0
  82. package/theme-default/slots/Sidebar/index.d.ts +1 -0
  83. package/theme-default/slots/Sidebar/index.js +23 -8
  84. package/theme-default/slots/Sidebar/index.less +57 -0
  85. package/theme-default/slots/Toc/index.d.ts +4 -0
  86. package/theme-default/slots/Toc/index.js +30 -0
  87. package/theme-default/slots/Toc/index.less +31 -0
  88. package/theme-default/styles/utils.less +46 -0
  89. package/theme-default/styles/variables.less +13 -0
  90. package/theme-default/builtins/Previewer.js +0 -11
@@ -1,3 +1,11 @@
1
1
  {
2
- "a": "A"
2
+ "a": "A",
3
+ "header.search.placeholder": "Type keywords...",
4
+ "previewer.actions.code.expand": "Show Code",
5
+ "previewer.actions.code.shrink": "Hide Code",
6
+ "previewer.actions.codesandbox": "Open in CodeSandbox (Not implemented)",
7
+ "previewer.actions.codepen": "Open in CodePen (Not implemented)",
8
+ "previewer.actions.separate": "Open in separate page",
9
+ "404.title": "PAGE NOT FOUND",
10
+ "404.back": "Back to homepage"
3
11
  }
@@ -1,3 +1,11 @@
1
1
  {
2
- "a": "嘿"
2
+ "a": "嘿",
3
+ "header.search.placeholder": "输入关键字搜索...",
4
+ "previewer.actions.code.expand": "展开代码",
5
+ "previewer.actions.code.shrink": "收起代码",
6
+ "previewer.actions.codesandbox": "在 CodeSandbox 中打开(未实现)",
7
+ "previewer.actions.codepen": "在 CodePen 中打开(未实现)",
8
+ "previewer.actions.separate": "在独立页面中打开",
9
+ "404.title": "页面未找到",
10
+ "404.back": "返回首页"
3
11
  }
@@ -0,0 +1,3 @@
1
+ // override .heti root-selector
2
+ $root-selector: '.markdown';
3
+ @import 'heti/lib/heti.scss';
@@ -1,4 +1,6 @@
1
1
  import { type FC, type ReactNode } from 'react';
2
+ import './heti.scss';
3
+ import './index.less';
2
4
  declare const Content: FC<{
3
5
  children: ReactNode;
4
6
  }>;
@@ -1,12 +1,13 @@
1
+ import { useSidebarData } from 'dumi';
1
2
  import React from 'react';
3
+ import "./heti.scss";
4
+ import "./index.less";
2
5
 
3
6
  var Content = function Content(props) {
7
+ var sidebar = useSidebarData();
4
8
  return /*#__PURE__*/React.createElement("div", {
5
- style: {
6
- flex: 1,
7
- overflow: 'hidden',
8
- padding: 24
9
- }
9
+ className: "dumi-default-content",
10
+ "data-no-sidebar": !sidebar || undefined
10
11
  }, props.children);
11
12
  };
12
13
 
@@ -0,0 +1,31 @@
1
+ @import (reference) '../../styles/variables.less';
2
+
3
+ .markdown {
4
+ color: @c-text;
5
+
6
+ // hyperlink
7
+ a {
8
+ color: @c-primary;
9
+ }
10
+
11
+ // inline code
12
+ *:not(pre) code {
13
+ padding: 2px 5px;
14
+ color: #d56161;
15
+ background: darken(@c-site-bg, 2%);
16
+ border-radius: 2px;
17
+ }
18
+ }
19
+
20
+ .@{prefix}-content {
21
+ flex: 1;
22
+ max-width: 100%;
23
+
24
+ &:not([data-no-sidebar]) {
25
+ padding: 48px;
26
+ background-color: #fff;
27
+ border-top-left-radius: 10px;
28
+ border-top-right-radius: 10px;
29
+ box-shadow: 0 4px 24px 0 rgb(0 0 0 / 5%);
30
+ }
31
+ }
@@ -1,3 +1,4 @@
1
1
  import { type FC } from 'react';
2
+ import './index.less';
2
3
  declare const Header: FC;
3
4
  export default Header;
@@ -1,17 +1,20 @@
1
+ import LangSwitch from 'dumi/theme/slots/LangSwitch';
1
2
  import Logo from 'dumi/theme/slots/Logo';
2
3
  import Navbar from 'dumi/theme/slots/Navbar';
3
4
  import SearchBar from 'dumi/theme/slots/SearchBar';
4
5
  import React from 'react';
6
+ import "./index.less";
5
7
 
6
8
  var Header = function Header() {
7
9
  return /*#__PURE__*/React.createElement("div", {
8
- style: {
9
- display: 'flex',
10
- justifyContent: 'space-between',
11
- borderBottom: '1px solid #eee',
12
- padding: '22px 0'
13
- }
14
- }, /*#__PURE__*/React.createElement(Logo, null), "\xA0Header Area\xA0", /*#__PURE__*/React.createElement(Navbar, null), /*#__PURE__*/React.createElement(SearchBar, null));
10
+ className: "dumi-default-header"
11
+ }, /*#__PURE__*/React.createElement("section", {
12
+ className: "dumi-default-header-left"
13
+ }, /*#__PURE__*/React.createElement(Logo, null)), /*#__PURE__*/React.createElement("section", {
14
+ className: "dumi-default-header-right"
15
+ }, /*#__PURE__*/React.createElement(Navbar, null), /*#__PURE__*/React.createElement("div", {
16
+ className: "dumi-default-header-right-aside"
17
+ }, /*#__PURE__*/React.createElement(SearchBar, null), /*#__PURE__*/React.createElement(LangSwitch, null))));
15
18
  };
16
19
 
17
20
  export default Header;
@@ -0,0 +1,22 @@
1
+ @import (reference) '../../styles/variables.less';
2
+
3
+ .@{prefix}-header {
4
+ display: flex;
5
+ align-items: center;
6
+ height: 86px;
7
+
8
+ &-left {
9
+ width: @s-sidebar-width;
10
+ }
11
+
12
+ &-right {
13
+ flex: 1;
14
+ display: flex;
15
+ justify-content: space-between;
16
+
17
+ &-aside {
18
+ display: flex;
19
+ align-items: center;
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,4 @@
1
+ import { type FC } from 'react';
2
+ import './index.less';
3
+ declare const LangSwitch: FC;
4
+ export default LangSwitch;
@@ -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;
@@ -0,0 +1,13 @@
1
+ @import (reference) '../../styles/variables.less';
2
+
3
+ .@{prefix}-lang-switch {
4
+ color: @c-text-secondary;
5
+ font-size: 14px;
6
+ line-height: 1;
7
+ text-decoration: none;
8
+ transition: all 0.3s;
9
+
10
+ &:hover {
11
+ color: @c-primary;
12
+ }
13
+ }
@@ -1,3 +1,4 @@
1
1
  import { type FC } from 'react';
2
+ import './index.less';
2
3
  declare const Logo: FC;
3
4
  export default Logo;
@@ -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
- return /*#__PURE__*/React.createElement(React.Fragment, null, "LOGO");
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,3 +1,4 @@
1
1
  import { type FC } from 'react';
2
+ import './index.less';
2
3
  declare const Navbar: FC;
3
4
  export default Navbar;
@@ -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
- return /*#__PURE__*/React.createElement(React.Fragment, null, "Navbar area");
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,4 @@
1
+ import { type FC } from 'react';
2
+ import './index.less';
3
+ declare const Page404: FC;
4
+ export default Page404;
@@ -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,3 +1,4 @@
1
1
  import { type FC } from 'react';
2
+ import './index.less';
2
3
  declare const SearchBar: FC;
3
4
  export default SearchBar;
@@ -1,9 +1,37 @@
1
- import React from 'react';
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
- return /*#__PURE__*/React.createElement("input", {
5
- placeholder: "SearchBar"
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,3 +1,4 @@
1
1
  import { type FC } from 'react';
2
+ import './index.less';
2
3
  declare const Sidebar: FC;
3
4
  export default Sidebar;
@@ -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
- return /*#__PURE__*/React.createElement("div", {
5
- style: {
6
- borderRight: '1px solid #eee',
7
- width: 240,
8
- minHeight: '100vh',
9
- paddingTop: 16
10
- }
11
- }, "Sidebar Area");
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,4 @@
1
+ import { type FC } from 'react';
2
+ import './index.less';
3
+ declare const Toc: FC;
4
+ export default Toc;