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,297 @@
1
+ @import (reference) '../../styles/variables.less';
2
+ @import '../../styles/utils.less';
3
+
4
+ .@{prefix}-previewer {
5
+ margin: 24px 0 32px;
6
+ border: 1px solid @c-border-light;
7
+ border-radius: 4px;
8
+ background-color: #fff;
9
+
10
+ [data-dumi-demo-grid] & {
11
+ margin: 0 0 16px;
12
+
13
+ &:first-child {
14
+ margin-top: 24px;
15
+ }
16
+
17
+ &:last-child {
18
+ margin-bottom: 32px;
19
+ }
20
+ }
21
+
22
+ &-demo {
23
+ border-top-left-radius: 2px;
24
+ border-top-right-radius: 2px;
25
+ padding: 40px 24px;
26
+
27
+ > iframe {
28
+ display: block;
29
+ width: 100%;
30
+ height: 300px;
31
+ border: 0;
32
+ }
33
+
34
+ // demo render controls
35
+ &[data-iframe] {
36
+ position: relative;
37
+ padding: 0;
38
+ overflow: hidden;
39
+
40
+ &::before {
41
+ content: '';
42
+ display: block;
43
+ height: 24px;
44
+ background-color: @c-border-light;
45
+ }
46
+
47
+ &::after {
48
+ @btn-gap: 8px;
49
+ @btn-width: 12px;
50
+
51
+ content: '';
52
+ position: absolute;
53
+ top: 5px;
54
+ left: @btn-gap;
55
+ display: inline-block;
56
+ width: @btn-width;
57
+ height: @btn-width;
58
+ border-radius: 50%;
59
+ background-color: #fd6458;
60
+ box-shadow: (@btn-width + @btn-gap) 0 0 #ffbf2b,
61
+ (@btn-width + @btn-gap) * 2 0 0 #24cc3d;
62
+ }
63
+ }
64
+
65
+ &[data-transform] {
66
+ transform: translate(0, 0);
67
+ }
68
+
69
+ &[data-compact] {
70
+ padding: 0;
71
+ }
72
+ }
73
+
74
+ &-meta {
75
+ border-top: 1px solid @c-border-light;
76
+ }
77
+
78
+ &-desc {
79
+ position: relative;
80
+
81
+ > .markdown {
82
+ padding: 14px 24px;
83
+ border-bottom: 1px dashed @c-border-light;
84
+ }
85
+
86
+ > h5 {
87
+ position: absolute;
88
+ top: -7px;
89
+ left: 20px;
90
+ margin: 0;
91
+ padding: 0 4px;
92
+ display: inline-block;
93
+ font-size: 14px;
94
+ line-height: 1;
95
+ font-weight: 500;
96
+ background: linear-gradient(
97
+ to top,
98
+ rgb(255 255 255 / 100%),
99
+ rgb(255 255 255 / 100%) 50%,
100
+ rgb(255 255 255 / 0%)
101
+ )
102
+ 100%;
103
+
104
+ > a {
105
+ color: @c-text;
106
+
107
+ &:not(:hover) {
108
+ text-decoration: none;
109
+ }
110
+
111
+ > strong {
112
+ padding-right: 8px;
113
+ color: @c-warning;
114
+ font-size: 12px;
115
+ }
116
+ }
117
+ }
118
+ }
119
+
120
+ &-actions {
121
+ display: flex;
122
+ height: 32px;
123
+ align-items: center;
124
+ justify-content: center;
125
+
126
+ &:not(:last-child) {
127
+ border-bottom: 1px dashed @c-border-light;
128
+ }
129
+ }
130
+
131
+ &-action-btn {
132
+ display: flex;
133
+ align-items: center;
134
+ justify-content: center;
135
+ width: 24px;
136
+ height: 24px;
137
+ padding: 0;
138
+ border: 0;
139
+ background: transparent;
140
+ cursor: pointer;
141
+
142
+ > svg {
143
+ width: 16px;
144
+ fill: darken(@c-border, 20%);
145
+ transition: fill 0.2s;
146
+ }
147
+
148
+ &:hover > svg {
149
+ fill: darken(@c-border, 30%);
150
+ }
151
+
152
+ &:not(:last-child) {
153
+ margin-right: 4px;
154
+ }
155
+ }
156
+
157
+ &-tabs {
158
+ position: relative;
159
+ padding: 0 12px;
160
+
161
+ &::after {
162
+ content: '';
163
+ position: absolute;
164
+ left: 0;
165
+ bottom: 0;
166
+ width: 100%;
167
+ height: 0;
168
+ border-bottom: 1px dashed @c-border-light;
169
+ }
170
+ }
171
+
172
+ // active
173
+ &[data-active] {
174
+ box-shadow: 0 0 0 4px fade(@c-primary, 10%);
175
+ border-color: lighten(@c-primary, 20%);
176
+ }
177
+
178
+ // debug mode
179
+ &[data-debug] {
180
+ border-color: lighten(@c-warning, 20%);
181
+
182
+ &[data-active] {
183
+ box-shadow: 0 0 0 4px fade(@c-warning, 10%);
184
+ }
185
+ }
186
+ }
187
+
188
+ .@{prefix}-tabs {
189
+ overflow: hidden;
190
+
191
+ &-top {
192
+ flex-direction: column;
193
+
194
+ .@{prefix}-tabs-ink-bar {
195
+ bottom: 0;
196
+ }
197
+ }
198
+
199
+ &-nav {
200
+ display: flex;
201
+
202
+ &-wrap {
203
+ display: flex;
204
+ white-space: nowrap;
205
+ overflow: hidden;
206
+
207
+ &&-ping-left {
208
+ box-shadow: 5px 0 5px -5px rgb(0 0 0 / 10%) inset;
209
+ }
210
+
211
+ &&-ping-right ~ * > .@{prefix}-tabs-nav-more {
212
+ box-shadow: 0 0 5px rgb(0 0 0 / 10%);
213
+ }
214
+ }
215
+
216
+ &-list {
217
+ position: relative;
218
+ z-index: 1;
219
+ display: flex;
220
+ transition: transform 0.2s;
221
+ }
222
+
223
+ &-more {
224
+ height: 100%;
225
+ cursor: pointer;
226
+ background: none;
227
+ border: 0;
228
+ transition: box-shadow 0.2s;
229
+ }
230
+ }
231
+
232
+ &-tab {
233
+ display: flex;
234
+ margin: 0 12px;
235
+
236
+ &-btn {
237
+ padding: 0;
238
+ color: @c-text-secondary;
239
+ font-size: 14px;
240
+ line-height: 36px;
241
+ border: 0;
242
+ outline: none;
243
+ background: transparent;
244
+ box-sizing: border-box;
245
+ cursor: pointer;
246
+ transition: all 0.2s;
247
+
248
+ &:hover {
249
+ color: @c-text;
250
+ }
251
+ }
252
+
253
+ &-active &-btn {
254
+ color: @c-text;
255
+ }
256
+ }
257
+
258
+ &-ink-bar {
259
+ position: absolute;
260
+ height: 1px;
261
+ background: @c-primary;
262
+ transition: left 0.2s, width 0.2s;
263
+ pointer-events: none;
264
+ }
265
+
266
+ &-dropdown {
267
+ position: absolute;
268
+ background: #fff;
269
+ border: 1px solid @c-border;
270
+ max-height: 200px;
271
+ overflow: auto;
272
+
273
+ > ul {
274
+ list-style: none;
275
+ margin: 0;
276
+ padding: 0;
277
+
278
+ > li {
279
+ padding: 4px 12px;
280
+ font-size: 14px;
281
+ cursor: pointer;
282
+
283
+ &:hover {
284
+ color: @c-primary;
285
+ }
286
+
287
+ &:not(:last-child) {
288
+ border-bottom: 1px dashed @c-border;
289
+ }
290
+ }
291
+ }
292
+
293
+ &-hidden {
294
+ display: none;
295
+ }
296
+ }
297
+ }
@@ -0,0 +1,9 @@
1
+ import { type Language } from 'prism-react-renderer';
2
+ import 'prismjs/themes/prism.css';
3
+ import { type FC } from 'react';
4
+ import './index.less';
5
+ declare const SourceCode: FC<{
6
+ children: string;
7
+ lang: Language;
8
+ }>;
9
+ export default SourceCode;
@@ -0,0 +1,87 @@
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
+ 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
+ import { ReactComponent as IconCheck } from '@ant-design/icons-svg/inline-svg/outlined/check.svg';
16
+ import { ReactComponent as IconCopy } from '@ant-design/icons-svg/inline-svg/outlined/copy.svg';
17
+ import Highlight, { defaultProps } from 'prism-react-renderer';
18
+ import 'prismjs/themes/prism.css';
19
+ import React, { useRef, useState } from 'react';
20
+ import { CopyToClipboard } from 'react-copy-to-clipboard';
21
+ import "./index.less";
22
+ /**
23
+ * define DSL which can be highlighted as similar language
24
+ */
25
+
26
+ var SIMILAR_DSL = {
27
+ acss: 'css',
28
+ axml: 'markup'
29
+ };
30
+
31
+ var SourceCode = function SourceCode(_ref) {
32
+ var children = _ref.children,
33
+ lang = _ref.lang;
34
+ var timer = useRef();
35
+
36
+ var _useState = useState(false),
37
+ _useState2 = _slicedToArray(_useState, 2),
38
+ isCopied = _useState2[0],
39
+ setIsCopied = _useState2[1];
40
+
41
+ return /*#__PURE__*/React.createElement("div", {
42
+ className: "dumi-default-source-code"
43
+ }, /*#__PURE__*/React.createElement(CopyToClipboard, {
44
+ text: children,
45
+ onCopy: function onCopy() {
46
+ setIsCopied(true);
47
+ clearTimeout(timer.current);
48
+ timer.current = window.setTimeout(function () {
49
+ return setIsCopied(false);
50
+ }, 2000);
51
+ }
52
+ }, /*#__PURE__*/React.createElement("button", {
53
+ type: "button",
54
+ className: "dumi-default-source-code-copy",
55
+ "data-copied": isCopied || undefined
56
+ }, isCopied ? /*#__PURE__*/React.createElement(IconCheck, null) : /*#__PURE__*/React.createElement(IconCopy, null))), /*#__PURE__*/React.createElement(Highlight, _extends({}, defaultProps, {
57
+ code: children.trim(),
58
+ language: SIMILAR_DSL[lang] || lang,
59
+ theme: undefined
60
+ }), function (_ref2) {
61
+ var className = _ref2.className,
62
+ style = _ref2.style,
63
+ tokens = _ref2.tokens,
64
+ getLineProps = _ref2.getLineProps,
65
+ getTokenProps = _ref2.getTokenProps;
66
+ return /*#__PURE__*/React.createElement("pre", {
67
+ className: className,
68
+ style: style
69
+ }, tokens.map(function (line, i) {
70
+ return /*#__PURE__*/React.createElement("div", _extends({
71
+ key: String(i)
72
+ }, getLineProps({
73
+ line: line,
74
+ key: i
75
+ })), line.map(function (token, key) {
76
+ return /*#__PURE__*/React.createElement("span", _extends({
77
+ key: String(i)
78
+ }, getTokenProps({
79
+ token: token,
80
+ key: key
81
+ })));
82
+ }));
83
+ }));
84
+ }));
85
+ };
86
+
87
+ export default SourceCode;
@@ -0,0 +1,50 @@
1
+ @import (reference) '../../styles/variables.less';
2
+
3
+ .@{prefix}-source-code {
4
+ @bg-color: tint(@c-site-bg, 50%);
5
+
6
+ position: relative;
7
+ font-size: 14px;
8
+ background-color: @bg-color;
9
+ border-bottom-left-radius: 4px;
10
+ border-bottom-right-radius: 4px;
11
+
12
+ > pre.prism-code {
13
+ margin: 0;
14
+ padding-left: 24px;
15
+ padding-right: 24px;
16
+ background: transparent;
17
+ }
18
+
19
+ &-copy {
20
+ position: absolute;
21
+ top: 9px;
22
+ right: 12px;
23
+ display: inline-block;
24
+ padding: 8px 12px;
25
+ background-color: fade(@bg-color, 80%);
26
+ border: 0;
27
+ border-radius: 2px;
28
+ cursor: pointer;
29
+ transition: all 0.2s;
30
+
31
+ > svg {
32
+ width: 16px;
33
+ fill: darken(@c-border, 20%);
34
+ transition: fill 0.2s;
35
+ }
36
+
37
+ &:hover > svg {
38
+ fill: darken(@c-border, 30%);
39
+ }
40
+
41
+ &[data-copied] > svg {
42
+ fill: rgb(11 174 11);
43
+ }
44
+ }
45
+
46
+ &:not(:hover) &-copy {
47
+ opacity: 0;
48
+ visibility: hidden;
49
+ }
50
+ }
@@ -1,3 +1,4 @@
1
1
  import { type FC } from 'react';
2
+ import './index.less';
2
3
  declare const DocLayout: FC;
3
4
  export default DocLayout;
@@ -1,16 +1,38 @@
1
- import { useOutlet } from 'dumi';
1
+ import { useIntl, useOutlet, useRouteMeta } from 'dumi';
2
2
  import Content from 'dumi/theme/slots/Content';
3
3
  import Header from 'dumi/theme/slots/Header';
4
4
  import Sidebar from 'dumi/theme/slots/Sidebar';
5
5
  import React from 'react';
6
+ import Helmet from 'react-helmet';
7
+ import "./index.less";
6
8
 
7
9
  var DocLayout = function DocLayout() {
10
+ var intl = useIntl();
8
11
  var outlet = useOutlet();
9
- return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Header, null), /*#__PURE__*/React.createElement("main", {
10
- style: {
11
- display: 'flex'
12
- }
13
- }, /*#__PURE__*/React.createElement(Sidebar, null), /*#__PURE__*/React.createElement(Content, null, outlet)));
12
+
13
+ var _useRouteMeta = useRouteMeta(),
14
+ fm = _useRouteMeta.frontmatter;
15
+
16
+ return /*#__PURE__*/React.createElement("div", {
17
+ className: "dumi-default-doc-layout"
18
+ }, /*#__PURE__*/React.createElement(Helmet, null, /*#__PURE__*/React.createElement("html", {
19
+ lang: intl.locale.replace(/-.+$/, '')
20
+ }), fm.title && /*#__PURE__*/React.createElement("title", null, fm.title), fm.title && /*#__PURE__*/React.createElement("meta", {
21
+ property: "og:title",
22
+ content: fm.title
23
+ }), fm.description && /*#__PURE__*/React.createElement("meta", {
24
+ name: "description",
25
+ content: fm.description
26
+ }), fm.description && /*#__PURE__*/React.createElement("meta", {
27
+ property: "og:description",
28
+ content: fm.description
29
+ }), fm.keywords && /*#__PURE__*/React.createElement("meta", {
30
+ name: "keywords",
31
+ content: fm.keywords.join(',')
32
+ }), fm.keywords && /*#__PURE__*/React.createElement("meta", {
33
+ property: "og:keywords",
34
+ content: fm.keywords.join(',')
35
+ })), /*#__PURE__*/React.createElement(Header, null), /*#__PURE__*/React.createElement("main", null, /*#__PURE__*/React.createElement(Sidebar, null), /*#__PURE__*/React.createElement(Content, null, outlet)));
14
36
  };
15
37
 
16
38
  export default DocLayout;
@@ -0,0 +1,17 @@
1
+ @import (reference) '../../styles/variables.less';
2
+
3
+ body {
4
+ margin: 0;
5
+ padding: 0;
6
+ background-color: @c-site-bg;
7
+ }
8
+
9
+ .@{prefix}-doc-layout {
10
+ max-width: @s-content-width;
11
+ margin: 0 auto;
12
+ padding: 0 24px;
13
+
14
+ > main {
15
+ display: flex;
16
+ }
17
+ }
@@ -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;