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.
Files changed (93) 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 +7 -4
  9. package/dist/client/theme-api/context.js +8 -4
  10. package/dist/client/theme-api/index.d.ts +8 -5
  11. package/dist/client/theme-api/index.js +7 -5
  12. package/dist/client/theme-api/types.d.ts +77 -9
  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 +6 -0
  16. package/dist/client/theme-api/useNavData.js +78 -0
  17. package/dist/client/theme-api/{useMatchedRouteMeta.d.ts → useRouteMeta.d.ts} +1 -1
  18. package/dist/client/theme-api/{useMatchedRouteMeta.js → useRouteMeta.js} +6 -3
  19. package/dist/client/theme-api/useSidebarData.d.ts +8 -0
  20. package/dist/client/theme-api/useSidebarData.js +131 -0
  21. package/dist/client/theme-api/utils.d.ts +2 -0
  22. package/dist/client/theme-api/utils.js +44 -0
  23. package/dist/client/tsconfig.json +2 -1
  24. package/dist/constants.d.ts +1 -0
  25. package/dist/constants.js +3 -0
  26. package/dist/features/compile.js +1 -1
  27. package/dist/features/configPlugins/index.js +2 -1
  28. package/dist/features/configPlugins/schema.js +2 -1
  29. package/dist/features/exports.d.ts +3 -0
  30. package/dist/features/exports.js +45 -0
  31. package/dist/features/locales.js +18 -10
  32. package/dist/features/meta.js +2 -2
  33. package/dist/features/routes.js +29 -2
  34. package/dist/features/theme/index.js +6 -6
  35. package/dist/index.d.ts +4 -3
  36. package/dist/index.js +1 -0
  37. package/dist/loaders/markdown/index.js +4 -2
  38. package/dist/loaders/markdown/transformer/index.d.ts +5 -2
  39. package/dist/loaders/markdown/transformer/index.js +4 -2
  40. package/dist/loaders/markdown/transformer/rehypeDemo.d.ts +3 -0
  41. package/dist/loaders/markdown/transformer/rehypeDemo.js +14 -6
  42. package/dist/loaders/markdown/transformer/rehypeEmbed.d.ts +9 -1
  43. package/dist/loaders/markdown/transformer/rehypeEmbed.js +16 -4
  44. package/dist/loaders/markdown/transformer/rehypeRaw.js +2 -2
  45. package/dist/loaders/markdown/transformer/rehypeSlug.d.ts +4 -0
  46. package/dist/loaders/markdown/transformer/rehypeSlug.js +105 -0
  47. package/dist/loaders/markdown/transformer/remarkMeta.d.ts +4 -2
  48. package/dist/loaders/markdown/transformer/remarkMeta.js +24 -3
  49. package/dist/preset.js +1 -0
  50. package/dist/types.d.ts +8 -2
  51. package/package.json +16 -1
  52. package/theme-default/builtins/{Previewer.d.ts → Previewer/index.d.ts} +2 -1
  53. package/theme-default/builtins/Previewer/index.js +162 -0
  54. package/theme-default/builtins/Previewer/index.less +297 -0
  55. package/theme-default/builtins/SourceCode/index.d.ts +9 -0
  56. package/theme-default/builtins/SourceCode/index.js +87 -0
  57. package/theme-default/builtins/SourceCode/index.less +50 -0
  58. package/theme-default/layouts/DocLayout/index.d.ts +1 -0
  59. package/theme-default/layouts/DocLayout/index.js +28 -6
  60. package/theme-default/layouts/DocLayout/index.less +17 -0
  61. package/theme-default/locales/en-US.json +9 -1
  62. package/theme-default/locales/zh-CN.json +9 -1
  63. package/theme-default/slots/Content/heti.scss +3 -0
  64. package/theme-default/slots/Content/index.d.ts +2 -0
  65. package/theme-default/slots/Content/index.js +6 -5
  66. package/theme-default/slots/Content/index.less +31 -0
  67. package/theme-default/slots/Header/index.d.ts +1 -0
  68. package/theme-default/slots/Header/index.js +10 -7
  69. package/theme-default/slots/Header/index.less +22 -0
  70. package/theme-default/slots/LangSwitch/index.d.ts +4 -0
  71. package/theme-default/slots/LangSwitch/index.js +81 -0
  72. package/theme-default/slots/LangSwitch/index.less +13 -0
  73. package/theme-default/slots/Logo/index.d.ts +1 -0
  74. package/theme-default/slots/Logo/index.js +13 -1
  75. package/theme-default/slots/Logo/index.less +16 -0
  76. package/theme-default/slots/Navbar/index.d.ts +1 -0
  77. package/theme-default/slots/Navbar/index.js +20 -1
  78. package/theme-default/slots/Navbar/index.less +33 -0
  79. package/theme-default/slots/NotFound/index.d.ts +4 -0
  80. package/theme-default/slots/NotFound/index.js +20 -0
  81. package/theme-default/slots/NotFound/index.less +26 -0
  82. package/theme-default/slots/SearchBar/index.d.ts +1 -0
  83. package/theme-default/slots/SearchBar/index.js +32 -4
  84. package/theme-default/slots/SearchBar/index.less +61 -0
  85. package/theme-default/slots/Sidebar/index.d.ts +1 -0
  86. package/theme-default/slots/Sidebar/index.js +23 -8
  87. package/theme-default/slots/Sidebar/index.less +57 -0
  88. package/theme-default/slots/Toc/index.d.ts +4 -0
  89. package/theme-default/slots/Toc/index.js +30 -0
  90. package/theme-default/slots/Toc/index.less +31 -0
  91. package/theme-default/styles/utils.less +46 -0
  92. package/theme-default/styles/variables.less +13 -0
  93. 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;
@@ -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;
@@ -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;
@@ -1,11 +0,0 @@
1
- import React from 'react';
2
-
3
- var Previewer = function Previewer(props) {
4
- return /*#__PURE__*/React.createElement("div", {
5
- style: {
6
- border: '1px solid #eee'
7
- }
8
- }, props.children);
9
- };
10
-
11
- export default Previewer;