dumi 2.0.0-rc.9 → 2.0.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/dist/client/theme-api/DumiDemo.js +5 -2
- package/dist/client/theme-api/DumiDemoGrid.js +23 -8
- package/dist/client/theme-api/index.d.ts +1 -0
- package/dist/client/theme-api/index.js +1 -0
- package/dist/client/theme-api/openStackBlitz.d.ts +1 -0
- package/dist/client/theme-api/openStackBlitz.js +60 -0
- package/dist/client/theme-api/useSiteSearch/index.d.ts +7 -0
- package/dist/client/theme-api/useSiteSearch/index.js +108 -0
- package/dist/client/theme-api/{useSiteSearch.d.ts → useSiteSearch/worker.d.ts} +1 -7
- package/dist/client/theme-api/{useSiteSearch.js → useSiteSearch/worker.js} +36 -69
- package/dist/constants.js +0 -1
- package/dist/features/exportStatic.js +18 -3
- package/dist/features/routes.js +18 -3
- package/dist/features/tabs.js +7 -4
- package/dist/features/theme/loader.js +1 -1
- package/dist/loaders/markdown/index.js +6 -5
- package/dist/loaders/markdown/transformer/index.d.ts +1 -1
- package/dist/loaders/markdown/transformer/rehypeEnhancedTag.js +12 -2
- package/dist/loaders/markdown/transformer/remarkEmbed.js +33 -9
- package/dist/loaders/markdown/transformer/remarkMeta.js +1 -1
- package/dist/loaders/page/index.js +1 -1
- package/dist/service/cli.js +1 -0
- package/package.json +7 -8
- package/theme-default/builtins/Badge/index.less +1 -1
- package/theme-default/builtins/Container/index.js +1 -1
- package/theme-default/builtins/Container/index.less +15 -11
- package/theme-default/builtins/Previewer/index.less +1 -1
- package/theme-default/builtins/SourceCode/index.less +1 -0
- package/theme-default/layouts/DocLayout/index.js +1 -2
- package/theme-default/layouts/DocLayout/index.less +2 -1
- package/theme-default/locales/en-US.json +1 -0
- package/theme-default/locales/zh-CN.json +1 -0
- package/theme-default/slots/Content/index.less +6 -2
- package/theme-default/slots/ContentTabs/index.less +2 -2
- package/theme-default/slots/Features/index.less +4 -4
- package/theme-default/slots/Header/index.js +2 -1
- package/theme-default/slots/Hero/index.less +1 -1
- package/theme-default/slots/LangSwitch/index.less +5 -2
- package/theme-default/slots/Logo/index.less +1 -1
- package/theme-default/slots/Navbar/index.less +2 -2
- package/theme-default/slots/PreviewerActions/index.d.ts +1 -1
- package/theme-default/slots/PreviewerActions/index.js +13 -3
- package/theme-default/slots/PreviewerActions/index.less +147 -148
- package/theme-default/slots/RtlSwitch/index.d.ts +4 -0
- package/theme-default/slots/RtlSwitch/index.js +50 -0
- package/theme-default/slots/RtlSwitch/index.less +5 -0
- package/theme-default/slots/SearchBar/index.js +2 -2
- package/theme-default/slots/SearchBar/index.less +9 -7
- package/theme-default/slots/SearchResult/index.js +7 -0
- package/theme-default/slots/SearchResult/index.less +12 -9
- package/theme-default/slots/Sidebar/index.less +5 -2
- package/theme-default/slots/Toc/index.less +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
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
3
|
import { SP_ROUTE_PREFIX } from "../../constants";
|
|
4
|
-
import { useSiteData } from 'dumi';
|
|
4
|
+
import { useAppData, useSiteData } from 'dumi';
|
|
5
5
|
import Container from "dumi/theme/builtins/Container";
|
|
6
6
|
import Previewer from "dumi/theme/builtins/Previewer";
|
|
7
7
|
import React, { createElement } from 'react';
|
|
@@ -24,6 +24,9 @@ export var DumiDemo = function DumiDemo(props) {
|
|
|
24
24
|
var _useSiteData = useSiteData(),
|
|
25
25
|
demos = _useSiteData.demos;
|
|
26
26
|
|
|
27
|
+
var _useAppData = useAppData(),
|
|
28
|
+
basename = _useAppData.basename;
|
|
29
|
+
|
|
27
30
|
var _demos$props$demo$id = demos[props.demo.id],
|
|
28
31
|
component = _demos$props$demo$id.component,
|
|
29
32
|
asset = _demos$props$demo$id.asset;
|
|
@@ -35,6 +38,6 @@ export var DumiDemo = function DumiDemo(props) {
|
|
|
35
38
|
return /*#__PURE__*/React.createElement(Previewer, _extends({
|
|
36
39
|
asset: asset,
|
|
37
40
|
demoUrl: // allow user override demoUrl by frontmatter
|
|
38
|
-
props.previewerProps.demoUrl || "
|
|
41
|
+
props.previewerProps.demoUrl || "".concat(basename).concat(SP_ROUTE_PREFIX, "demos/").concat(props.demo.id)
|
|
39
42
|
}, props.previewerProps), props.previewerProps.iframe ? null : /*#__PURE__*/React.createElement(DemoErrorBoundary, null, /*#__PURE__*/createElement(component)));
|
|
40
43
|
};
|
|
@@ -13,19 +13,19 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
13
13
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
14
14
|
|
|
15
15
|
import { DumiDemo, useRouteMeta } from 'dumi';
|
|
16
|
-
import React, { useState } from 'react';
|
|
16
|
+
import React, { useCallback, useEffect, useState } from 'react';
|
|
17
17
|
export var DumiDemoGrid = function DumiDemoGrid(props) {
|
|
18
18
|
var _useRouteMeta = useRouteMeta(),
|
|
19
19
|
fm = _useRouteMeta.frontmatter;
|
|
20
20
|
|
|
21
|
-
var
|
|
21
|
+
var generator = useCallback(function (fm, items) {
|
|
22
22
|
var _fm$demo;
|
|
23
23
|
|
|
24
24
|
var cols = [];
|
|
25
25
|
|
|
26
|
-
if ((_fm$demo = fm.demo) !== null && _fm$demo !== void 0 && _fm$demo.cols && fm.demo.cols > 1) {
|
|
27
|
-
for (var i = 0; i <
|
|
28
|
-
|
|
26
|
+
if ((_fm$demo = fm.demo) !== null && _fm$demo !== void 0 && _fm$demo.cols && fm.demo.cols > 1 && window.innerWidth > 1024) {
|
|
27
|
+
for (var i = 0; i < items.length; i += fm.demo.cols) {
|
|
28
|
+
items.slice(i, i + fm.demo.cols).forEach(function (item, j) {
|
|
29
29
|
var _cols$j;
|
|
30
30
|
|
|
31
31
|
(_cols$j = cols[j]) !== null && _cols$j !== void 0 ? _cols$j : cols[j] = [];
|
|
@@ -35,14 +35,29 @@ export var DumiDemoGrid = function DumiDemoGrid(props) {
|
|
|
35
35
|
|
|
36
36
|
return cols;
|
|
37
37
|
} else {
|
|
38
|
-
cols.push(
|
|
38
|
+
cols.push(items);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
return cols;
|
|
42
|
+
}, []);
|
|
43
|
+
|
|
44
|
+
var _useState = useState(function () {
|
|
45
|
+
return generator(fm, props.items);
|
|
42
46
|
}),
|
|
43
|
-
_useState2 = _slicedToArray(_useState,
|
|
44
|
-
cols = _useState2[0]
|
|
47
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
48
|
+
cols = _useState2[0],
|
|
49
|
+
setCols = _useState2[1];
|
|
50
|
+
|
|
51
|
+
useEffect(function () {
|
|
52
|
+
var handler = function handler() {
|
|
53
|
+
return setCols(generator(fm, props.items));
|
|
54
|
+
};
|
|
45
55
|
|
|
56
|
+
window.addEventListener('resize', handler);
|
|
57
|
+
return function () {
|
|
58
|
+
return window.removeEventListener('resize', handler);
|
|
59
|
+
};
|
|
60
|
+
}, []);
|
|
46
61
|
return /*#__PURE__*/React.createElement("div", {
|
|
47
62
|
style: {
|
|
48
63
|
display: 'flex',
|
|
@@ -4,6 +4,7 @@ export { DumiDemo } from './DumiDemo';
|
|
|
4
4
|
export { DumiDemoGrid } from './DumiDemoGrid';
|
|
5
5
|
export { DumiPage } from './DumiPage';
|
|
6
6
|
export { openCodeSandbox } from './openCodeSandbox';
|
|
7
|
+
export { openStackBlitz } from './openStackBlitz';
|
|
7
8
|
export type { IPreviewerProps } from './types';
|
|
8
9
|
export { useAtomAssets } from './useAtomAssets';
|
|
9
10
|
export { useLocale } from './useLocale';
|
|
@@ -4,6 +4,7 @@ export { DumiDemo } from "./DumiDemo";
|
|
|
4
4
|
export { DumiDemoGrid } from "./DumiDemoGrid";
|
|
5
5
|
export { DumiPage } from "./DumiPage";
|
|
6
6
|
export { openCodeSandbox } from "./openCodeSandbox";
|
|
7
|
+
export { openStackBlitz } from "./openStackBlitz";
|
|
7
8
|
export { useAtomAssets } from "./useAtomAssets";
|
|
8
9
|
export { useLocale } from "./useLocale";
|
|
9
10
|
export { useNavData } from "./useNavData";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const openStackBlitz: (data: IPreviewerProps) => void;
|
|
@@ -0,0 +1,60 @@
|
|
|
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 sdk from '@stackblitz/sdk';
|
|
14
|
+
import { genReactRenderCode } from "./utils";
|
|
15
|
+
export var openStackBlitz = function openStackBlitz(data) {
|
|
16
|
+
var _data$asset$dependenc, _react, _deps$_react, _reactDom, _deps$_reactDom;
|
|
17
|
+
|
|
18
|
+
var isTSX = Boolean((_data$asset$dependenc = data.asset.dependencies) === null || _data$asset$dependenc === void 0 ? void 0 : _data$asset$dependenc['index.tsx']);
|
|
19
|
+
var ext = isTSX ? '.tsx' : '.jsx';
|
|
20
|
+
var deps = {};
|
|
21
|
+
var entryFileName = "index".concat(ext);
|
|
22
|
+
var files = {
|
|
23
|
+
'index.html': '<div style="margin: 16px;" id="root"></div>'
|
|
24
|
+
};
|
|
25
|
+
var config = {
|
|
26
|
+
title: data.title || '',
|
|
27
|
+
description: data.description || 'An auto-generated demo by dumi',
|
|
28
|
+
template: 'create-react-app',
|
|
29
|
+
files: {}
|
|
30
|
+
};
|
|
31
|
+
Object.entries(data.asset.dependencies).forEach(function (_ref) {
|
|
32
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
33
|
+
name = _ref2[0],
|
|
34
|
+
_ref2$ = _ref2[1],
|
|
35
|
+
type = _ref2$.type,
|
|
36
|
+
value = _ref2$.value;
|
|
37
|
+
|
|
38
|
+
if (type === 'NPM') {
|
|
39
|
+
// generate dependencies
|
|
40
|
+
deps[name] = value;
|
|
41
|
+
} else {
|
|
42
|
+
// append other imported local files
|
|
43
|
+
files[name === entryFileName ? "App".concat(ext) : name] = value;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
(_deps$_react = deps[_react = 'react']) !== null && _deps$_react !== void 0 ? _deps$_react : deps[_react] = 'latest';
|
|
47
|
+
(_deps$_reactDom = deps[_reactDom = 'react-dom']) !== null && _deps$_reactDom !== void 0 ? _deps$_reactDom : deps[_reactDom] = deps.react;
|
|
48
|
+
files['package.json'] = JSON.stringify({
|
|
49
|
+
name: data.title,
|
|
50
|
+
description: data.description || 'An auto-generated demo by dumi',
|
|
51
|
+
dependencies: deps,
|
|
52
|
+
// add TypeScript dependency if required, must in devDeps to avoid csb compile error
|
|
53
|
+
devDependencies: isTSX ? {
|
|
54
|
+
typescript: '^4'
|
|
55
|
+
} : {}
|
|
56
|
+
}, null, 2);
|
|
57
|
+
files[entryFileName] = genReactRenderCode(deps.react);
|
|
58
|
+
config.files = files;
|
|
59
|
+
sdk.openProject(config);
|
|
60
|
+
};
|
|
@@ -0,0 +1,108 @@
|
|
|
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 _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); }
|
|
12
|
+
|
|
13
|
+
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; }
|
|
14
|
+
|
|
15
|
+
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; }
|
|
16
|
+
|
|
17
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
18
|
+
|
|
19
|
+
import { useNavData, useSiteData } from 'dumi';
|
|
20
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
21
|
+
import { useLocaleDocRoutes } from "../utils";
|
|
22
|
+
var worker; // for ssr
|
|
23
|
+
|
|
24
|
+
if (typeof window !== 'undefined') {
|
|
25
|
+
worker = new Worker(new URL('./worker', import.meta.url));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export var useSiteSearch = function useSiteSearch() {
|
|
29
|
+
var debounceTimer = useRef();
|
|
30
|
+
var routes = useLocaleDocRoutes();
|
|
31
|
+
|
|
32
|
+
var _useSiteData = useSiteData(),
|
|
33
|
+
demos = _useSiteData.demos;
|
|
34
|
+
|
|
35
|
+
var _useState = useState(false),
|
|
36
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
37
|
+
loading = _useState2[0],
|
|
38
|
+
setLoading = _useState2[1];
|
|
39
|
+
|
|
40
|
+
var _useState3 = useState(''),
|
|
41
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
42
|
+
keywords = _useState4[0],
|
|
43
|
+
setKeywords = _useState4[1];
|
|
44
|
+
|
|
45
|
+
var navData = useNavData();
|
|
46
|
+
|
|
47
|
+
var _useState5 = useState([]),
|
|
48
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
49
|
+
result = _useState6[0],
|
|
50
|
+
setResult = _useState6[1];
|
|
51
|
+
|
|
52
|
+
var setter = useCallback(function (val) {
|
|
53
|
+
setLoading(true);
|
|
54
|
+
setKeywords(val);
|
|
55
|
+
}, []);
|
|
56
|
+
useEffect(function () {
|
|
57
|
+
worker.onmessage = function (e) {
|
|
58
|
+
setResult(e.data);
|
|
59
|
+
setLoading(false);
|
|
60
|
+
};
|
|
61
|
+
}, []);
|
|
62
|
+
useEffect(function () {
|
|
63
|
+
// omit demo component for postmessage
|
|
64
|
+
var demoData = Object.entries(demos).reduce(function (acc, _ref) {
|
|
65
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
66
|
+
key = _ref2[0],
|
|
67
|
+
_ref2$ = _ref2[1],
|
|
68
|
+
asset = _ref2$.asset,
|
|
69
|
+
routeId = _ref2$.routeId;
|
|
70
|
+
|
|
71
|
+
return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, key, {
|
|
72
|
+
asset: asset,
|
|
73
|
+
routeId: routeId
|
|
74
|
+
}));
|
|
75
|
+
}, {});
|
|
76
|
+
worker.postMessage({
|
|
77
|
+
action: 'generate-metadata',
|
|
78
|
+
args: {
|
|
79
|
+
routes: JSON.parse(JSON.stringify(routes)),
|
|
80
|
+
nav: navData,
|
|
81
|
+
demos: demoData
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}, [routes, demos, navData]);
|
|
85
|
+
useEffect(function () {
|
|
86
|
+
var str = keywords.trim();
|
|
87
|
+
|
|
88
|
+
if (str) {
|
|
89
|
+
clearTimeout(debounceTimer.current);
|
|
90
|
+
debounceTimer.current = window.setTimeout(function () {
|
|
91
|
+
worker.postMessage({
|
|
92
|
+
action: 'get-search-result',
|
|
93
|
+
args: {
|
|
94
|
+
keywords: str
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}, 200);
|
|
98
|
+
} else {
|
|
99
|
+
setResult([]);
|
|
100
|
+
}
|
|
101
|
+
}, [keywords]);
|
|
102
|
+
return {
|
|
103
|
+
keywords: keywords,
|
|
104
|
+
setKeywords: setter,
|
|
105
|
+
result: result,
|
|
106
|
+
loading: loading
|
|
107
|
+
};
|
|
108
|
+
};
|
|
@@ -13,11 +13,5 @@ interface ISearchNavResult {
|
|
|
13
13
|
highlightTexts: IHighlightText[];
|
|
14
14
|
}[];
|
|
15
15
|
}
|
|
16
|
-
declare type ISearchResult = ISearchNavResult[];
|
|
17
|
-
export declare const useSiteSearch: () => {
|
|
18
|
-
keywords: string;
|
|
19
|
-
setKeywords: (val: string) => void;
|
|
20
|
-
result: ISearchResult;
|
|
21
|
-
loading: boolean;
|
|
22
|
-
};
|
|
16
|
+
export declare type ISearchResult = ISearchNavResult[];
|
|
23
17
|
export {};
|
|
@@ -26,11 +26,8 @@ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToAr
|
|
|
26
26
|
|
|
27
27
|
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; }
|
|
28
28
|
|
|
29
|
-
import { useNavData, useSiteData } from 'dumi';
|
|
30
29
|
import { findAll } from 'highlight-words-core';
|
|
31
|
-
|
|
32
|
-
import { TAB_QUERY_KEY } from "./useTabMeta";
|
|
33
|
-
import { useLocaleDocRoutes } from "./utils";
|
|
30
|
+
var TAB_QUERY_KEY = 'tab';
|
|
34
31
|
|
|
35
32
|
function createMetadataSection(rawTitle, title, link, texts, tocIndex) {
|
|
36
33
|
var allowEmptyParas = tocIndex !== undefined;
|
|
@@ -131,6 +128,7 @@ function generateSearchMetadata(routes, demos, nav) {
|
|
|
131
128
|
function generateHighlightTexts() {
|
|
132
129
|
var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
133
130
|
var keywords = arguments.length > 1 ? arguments[1] : undefined;
|
|
131
|
+
var priority = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
134
132
|
var chunks = findAll({
|
|
135
133
|
textToHighlight: str,
|
|
136
134
|
searchWords: keywords,
|
|
@@ -155,7 +153,7 @@ function generateHighlightTexts() {
|
|
|
155
153
|
highlightText.highlighted = true;
|
|
156
154
|
matchedMapping[keywords.find(function (k) {
|
|
157
155
|
return highlightText.text.includes(k);
|
|
158
|
-
})] =
|
|
156
|
+
})] = priority;
|
|
159
157
|
}
|
|
160
158
|
|
|
161
159
|
return highlightText;
|
|
@@ -180,7 +178,7 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
180
178
|
var p = _step.value;
|
|
181
179
|
|
|
182
180
|
if (matchReg.test(p)) {
|
|
183
|
-
var _generateHighlightTex3 = generateHighlightTexts(sec.title, keywords),
|
|
181
|
+
var _generateHighlightTex3 = generateHighlightTexts(sec.title, keywords, 10),
|
|
184
182
|
_generateHighlightTex4 = _slicedToArray(_generateHighlightTex3, 2),
|
|
185
183
|
_highlightTitleTexts = _generateHighlightTex4[0],
|
|
186
184
|
_titleMatchMapping = _generateHighlightTex4[1];
|
|
@@ -193,7 +191,9 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
193
191
|
hints.push({
|
|
194
192
|
type: 'content',
|
|
195
193
|
link: sec.link,
|
|
196
|
-
priority: Object.
|
|
194
|
+
priority: Object.values(_objectSpread(_objectSpread({}, matchMapping), _titleMatchMapping)).reduce(function (acc, p) {
|
|
195
|
+
return acc + p;
|
|
196
|
+
}, 0),
|
|
197
197
|
highlightTitleTexts: _highlightTitleTexts,
|
|
198
198
|
highlightTexts: highlightTexts
|
|
199
199
|
}); // match at most once in the same section
|
|
@@ -209,7 +209,7 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
if (matchReg.test(sec.rawTitle)) {
|
|
212
|
-
var _generateHighlightTex = generateHighlightTexts(sec.title, keywords),
|
|
212
|
+
var _generateHighlightTex = generateHighlightTexts(sec.title, keywords, 10),
|
|
213
213
|
_generateHighlightTex2 = _slicedToArray(_generateHighlightTex, 2),
|
|
214
214
|
highlightTitleTexts = _generateHighlightTex2[0],
|
|
215
215
|
titleMatchMapping = _generateHighlightTex2[1];
|
|
@@ -217,7 +217,9 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
217
217
|
hints.push({
|
|
218
218
|
type: 'title',
|
|
219
219
|
link: sec.link,
|
|
220
|
-
priority: Object.
|
|
220
|
+
priority: Object.values(titleMatchMapping).reduce(function (acc, p) {
|
|
221
|
+
return acc + p;
|
|
222
|
+
}, 0),
|
|
221
223
|
highlightTitleTexts: highlightTitleTexts,
|
|
222
224
|
highlightTexts: generateHighlightTexts(sec.paragraphs[0] || '', keywords)[0]
|
|
223
225
|
});
|
|
@@ -226,7 +228,7 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
226
228
|
|
|
227
229
|
data.demos.forEach(function (demo) {
|
|
228
230
|
if (matchReg.test(demo.rawTitle) || matchReg.test(demo.description)) {
|
|
229
|
-
var _generateHighlightTex7 = generateHighlightTexts(demo.title, keywords),
|
|
231
|
+
var _generateHighlightTex7 = generateHighlightTexts(demo.title, keywords, 10),
|
|
230
232
|
_generateHighlightTex8 = _slicedToArray(_generateHighlightTex7, 2),
|
|
231
233
|
highlightTitleTexts = _generateHighlightTex8[0],
|
|
232
234
|
titleMatchMapping = _generateHighlightTex8[1];
|
|
@@ -239,7 +241,9 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
239
241
|
hints.push({
|
|
240
242
|
type: 'demo',
|
|
241
243
|
link: demo.link,
|
|
242
|
-
priority: Object.
|
|
244
|
+
priority: Object.values(_objectSpread(_objectSpread({}, matchMapping), titleMatchMapping)).reduce(function (acc, p) {
|
|
245
|
+
return acc + p;
|
|
246
|
+
}, 0),
|
|
243
247
|
highlightTitleTexts: highlightTitleTexts,
|
|
244
248
|
highlightTexts: highlightTexts
|
|
245
249
|
});
|
|
@@ -249,7 +253,7 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
249
253
|
if (matchReg.test(data.title)) {
|
|
250
254
|
var _data$sections$;
|
|
251
255
|
|
|
252
|
-
var _generateHighlightTex11 = generateHighlightTexts(data.title, keywords),
|
|
256
|
+
var _generateHighlightTex11 = generateHighlightTexts(data.title, keywords, 100),
|
|
253
257
|
_generateHighlightTex12 = _slicedToArray(_generateHighlightTex11, 2),
|
|
254
258
|
highlightTitleTexts = _generateHighlightTex12[0],
|
|
255
259
|
titleMatchMapping = _generateHighlightTex12[1];
|
|
@@ -257,7 +261,9 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
257
261
|
hints.push({
|
|
258
262
|
type: 'page',
|
|
259
263
|
link: data.link,
|
|
260
|
-
priority: Object.
|
|
264
|
+
priority: Object.values(titleMatchMapping).reduce(function (acc, p) {
|
|
265
|
+
return acc + p;
|
|
266
|
+
}, 0),
|
|
261
267
|
highlightTitleTexts: highlightTitleTexts,
|
|
262
268
|
highlightTexts: generateHighlightTexts(((_data$sections$ = data.sections[0]) === null || _data$sections$ === void 0 ? void 0 : _data$sections$.paragraphs[0]) || '', keywords)[0]
|
|
263
269
|
});
|
|
@@ -270,7 +276,7 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
270
276
|
var key = data.navTitle || '$ROOT';
|
|
271
277
|
(_resultMapping$key = resultMapping[key]) !== null && _resultMapping$key !== void 0 ? _resultMapping$key : resultMapping[key] = {
|
|
272
278
|
title: data.navTitle,
|
|
273
|
-
priority: data.navOrder,
|
|
279
|
+
priority: data.navOrder * 1000,
|
|
274
280
|
hints: []
|
|
275
281
|
};
|
|
276
282
|
|
|
@@ -289,59 +295,20 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
289
295
|
});
|
|
290
296
|
}
|
|
291
297
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
var navData = useNavData();
|
|
310
|
-
|
|
311
|
-
var _useState5 = useState([]),
|
|
312
|
-
_useState6 = _slicedToArray(_useState5, 2),
|
|
313
|
-
metadata = _useState6[0],
|
|
314
|
-
setMetadata = _useState6[1];
|
|
315
|
-
|
|
316
|
-
var _useState7 = useState([]),
|
|
317
|
-
_useState8 = _slicedToArray(_useState7, 2),
|
|
318
|
-
result = _useState8[0],
|
|
319
|
-
setResult = _useState8[1];
|
|
320
|
-
|
|
321
|
-
var setter = useCallback(function (val) {
|
|
322
|
-
setLoading(true);
|
|
323
|
-
setKeywords(val);
|
|
324
|
-
}, []);
|
|
325
|
-
useEffect(function () {
|
|
326
|
-
setMetadata(generateSearchMetadata(routes, demos, navData));
|
|
327
|
-
}, [routes, demos, navData]);
|
|
328
|
-
useEffect(function () {
|
|
329
|
-
var str = keywords.trim();
|
|
330
|
-
|
|
331
|
-
if (str) {
|
|
332
|
-
clearTimeout(debounceTimer.current);
|
|
333
|
-
debounceTimer.current = window.setTimeout(function () {
|
|
334
|
-
setResult(generateSearchResult(metadata, str));
|
|
335
|
-
setLoading(false);
|
|
336
|
-
}, 100);
|
|
337
|
-
} else {
|
|
338
|
-
setResult([]);
|
|
339
|
-
}
|
|
340
|
-
}, [keywords, metadata]);
|
|
341
|
-
return {
|
|
342
|
-
keywords: keywords,
|
|
343
|
-
setKeywords: setter,
|
|
344
|
-
result: result,
|
|
345
|
-
loading: loading
|
|
346
|
-
};
|
|
298
|
+
var metadata;
|
|
299
|
+
|
|
300
|
+
self.onmessage = function (_ref4) {
|
|
301
|
+
var data = _ref4.data;
|
|
302
|
+
|
|
303
|
+
switch (data.action) {
|
|
304
|
+
case 'generate-metadata':
|
|
305
|
+
metadata = generateSearchMetadata(data.args.routes, data.args.demos, data.args.nav);
|
|
306
|
+
break;
|
|
307
|
+
|
|
308
|
+
case 'get-search-result':
|
|
309
|
+
self.postMessage(generateSearchResult(metadata, data.args.keywords));
|
|
310
|
+
break;
|
|
311
|
+
|
|
312
|
+
default:
|
|
313
|
+
}
|
|
347
314
|
};
|
package/dist/constants.js
CHANGED
|
@@ -25,18 +25,33 @@ module.exports = __toCommonJS(exportStatic_exports);
|
|
|
25
25
|
var import_constants = require("../constants");
|
|
26
26
|
var import_assets = require("./assets");
|
|
27
27
|
var exportStatic_default = (api) => {
|
|
28
|
+
const prevExtraRoutePaths = [];
|
|
28
29
|
api.describe({ key: "dumi:exportStatic" });
|
|
30
|
+
api.register({
|
|
31
|
+
key: "modifyDefaultConfig",
|
|
32
|
+
stage: Infinity,
|
|
33
|
+
fn(memo) {
|
|
34
|
+
if (memo.exportStatic && memo.exportStatic.extraRoutePaths) {
|
|
35
|
+
prevExtraRoutePaths.push(memo.exportStatic.extraRoutePaths);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
});
|
|
29
39
|
api.register({
|
|
30
40
|
key: "modifyConfig",
|
|
31
41
|
stage: Infinity,
|
|
32
42
|
fn(memo) {
|
|
33
43
|
var _a;
|
|
34
|
-
if (
|
|
35
|
-
|
|
44
|
+
if (memo.exportStatic !== false) {
|
|
45
|
+
if ((_a = memo.exportStatic) == null ? void 0 : _a.extraRoutePaths) {
|
|
46
|
+
prevExtraRoutePaths.push(memo.exportStatic.extraRoutePaths);
|
|
47
|
+
}
|
|
36
48
|
memo.exportStatic ?? (memo.exportStatic = {});
|
|
37
49
|
memo.exportStatic.extraRoutePaths = async () => {
|
|
38
50
|
const examples = (0, import_assets.getExampleAssets)();
|
|
39
|
-
const userExtraPaths =
|
|
51
|
+
const userExtraPaths = [];
|
|
52
|
+
for (const prev of prevExtraRoutePaths) {
|
|
53
|
+
userExtraPaths.push(...typeof prev === "function" ? await prev() : prev);
|
|
54
|
+
}
|
|
40
55
|
return userExtraPaths.concat(examples.map(({ id }) => `/${import_constants.SP_ROUTE_PREFIX}demos/${id}`));
|
|
41
56
|
};
|
|
42
57
|
}
|
package/dist/features/routes.js
CHANGED
|
@@ -40,8 +40,11 @@ function localizeUmiRoute(route, locales) {
|
|
|
40
40
|
if (locale) {
|
|
41
41
|
const base = !("base" in locale) || locale.base === "/" ? "" : locale.base.replace(/^(\/)(.+)$/, "$2$1");
|
|
42
42
|
const suffix = "suffix" in locale ? locale.suffix : "";
|
|
43
|
-
route.path = `${base}${route.path.replace(new RegExp(`/${locale.id}$`), "").replace(/((^|\/)(index|README))$/, "")}${suffix}`;
|
|
43
|
+
route.path = `${base}${route.path.replace(new RegExp(`/${locale.id}$`), "").replace(/((^|\/)(index|README))$/, "").toLowerCase()}${suffix}`;
|
|
44
44
|
route.absPath = route.path !== "/" ? `/${route.path}` : route.path;
|
|
45
|
+
} else {
|
|
46
|
+
route.path = route.path.toLowerCase();
|
|
47
|
+
route.absPath = route.absPath.toLowerCase();
|
|
45
48
|
}
|
|
46
49
|
}
|
|
47
50
|
function flatRoute(route, docLayoutId) {
|
|
@@ -163,8 +166,6 @@ var routes_default = (api) => {
|
|
|
163
166
|
} else if (!route.isLayout) {
|
|
164
167
|
flatRoute(route, docLayoutId);
|
|
165
168
|
localizeUmiRoute(route, api.config.locales);
|
|
166
|
-
route.path = route.path.toLowerCase();
|
|
167
|
-
route.absPath = route.absPath.toLowerCase();
|
|
168
169
|
}
|
|
169
170
|
});
|
|
170
171
|
if (Object.values(pages).every((route) => route.path !== "*")) {
|
|
@@ -201,6 +202,20 @@ var routes_default = (api) => {
|
|
|
201
202
|
}
|
|
202
203
|
return layouts;
|
|
203
204
|
});
|
|
205
|
+
api.addEntryCodeAhead(() => `
|
|
206
|
+
// always remove trailing slash from location.pathname
|
|
207
|
+
if (
|
|
208
|
+
typeof history !== 'undefined' &&
|
|
209
|
+
location.pathname.length > 1 &&
|
|
210
|
+
location.pathname.endsWith('/')
|
|
211
|
+
) {
|
|
212
|
+
history.replaceState(
|
|
213
|
+
{},
|
|
214
|
+
'',
|
|
215
|
+
location.pathname.slice(0, -1) + location.search + location.hash,
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
`);
|
|
204
219
|
};
|
|
205
220
|
// Annotate the CommonJS export names for ESM import in node:
|
|
206
221
|
0 && (module.exports = {});
|
package/dist/features/tabs.js
CHANGED
|
@@ -55,6 +55,7 @@ var tabs_default = (api) => {
|
|
|
55
55
|
api.modifyRoutes((routes) => {
|
|
56
56
|
tabs.length = 0;
|
|
57
57
|
Object.values(routes).forEach((route) => {
|
|
58
|
+
var _a;
|
|
58
59
|
if (route.file && isTabRouteFile(route.file)) {
|
|
59
60
|
delete routes[route.id];
|
|
60
61
|
const rtlFile = (0, import_plugin_utils.winPath)(import_path.default.relative(api.cwd, route.file));
|
|
@@ -67,12 +68,14 @@ var tabs_default = (api) => {
|
|
|
67
68
|
id: routeId,
|
|
68
69
|
file: route.file
|
|
69
70
|
});
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
if (!((_a = routesTabMapping[parentFile]) == null ? void 0 : _a.includes(routeId))) {
|
|
72
|
+
routesTabMapping[parentFile] ?? (routesTabMapping[parentFile] = []);
|
|
73
|
+
routesTabMapping[parentFile].push(routeId);
|
|
74
|
+
}
|
|
72
75
|
} else {
|
|
73
76
|
tabsFromPlugins.forEach((tab) => {
|
|
74
|
-
var
|
|
75
|
-
if ((!tab.test || route.absPath.match(tab.test)) && !((
|
|
77
|
+
var _a2, _b;
|
|
78
|
+
if ((!tab.test || route.absPath.match(tab.test)) && !((_a2 = routesTabMapping[route.file]) == null ? void 0 : _a2.includes(tab.id))) {
|
|
76
79
|
routesTabMapping[_b = route.file] ?? (routesTabMapping[_b] = []);
|
|
77
80
|
routesTabMapping[route.file].push(tab.id);
|
|
78
81
|
}
|
|
@@ -29,7 +29,7 @@ var import_path = __toESM(require("path"));
|
|
|
29
29
|
var import_plugin_utils = require("umi/plugin-utils");
|
|
30
30
|
function getComponentMapFromDir(globExp, dir) {
|
|
31
31
|
return import_plugin_utils.glob.sync(globExp, { cwd: dir }).reduce((ret, file) => {
|
|
32
|
-
const specifier = import_path.default.basename(file.replace(/(\/index)?\.[a-z]+$/, ""));
|
|
32
|
+
const specifier = import_path.default.basename((0, import_plugin_utils.winPath)(file).replace(/(\/index)?\.[a-z]+$/, ""));
|
|
33
33
|
if (/^[A-Z\d]/.test(specifier)) {
|
|
34
34
|
ret[specifier] = {
|
|
35
35
|
specifier,
|
|
@@ -40,10 +40,11 @@ function getDemoSourceFiles(demos = []) {
|
|
|
40
40
|
}, []);
|
|
41
41
|
}
|
|
42
42
|
function emit(opts, ret) {
|
|
43
|
+
const { demos, embeds } = ret.meta;
|
|
44
|
+
embeds.forEach((file) => this.addDependency(file));
|
|
45
|
+
getDemoSourceFiles(demos).forEach((file) => this.addDependency(file));
|
|
43
46
|
if (opts.mode === "meta") {
|
|
44
|
-
const {
|
|
45
|
-
embeds.forEach((file) => this.addDependency(file));
|
|
46
|
-
getDemoSourceFiles(demos).forEach((file) => this.addDependency(file));
|
|
47
|
+
const { frontmatter, toc, texts } = ret.meta;
|
|
47
48
|
if (demos && opts.onResolveDemos) {
|
|
48
49
|
opts.onResolveDemos(demos);
|
|
49
50
|
}
|
|
@@ -126,10 +127,10 @@ function mdLoader(content) {
|
|
|
126
127
|
}
|
|
127
128
|
deferrer[cacheKey] = (0, import_transformer.default)(content, {
|
|
128
129
|
...import_plugin_utils.lodash.omit(opts, ["mode", "builtins", "onResolveDemos"]),
|
|
129
|
-
fileAbsPath: this.resourcePath
|
|
130
|
+
fileAbsPath: (0, import_plugin_utils.winPath)(this.resourcePath)
|
|
130
131
|
});
|
|
131
132
|
deferrer[cacheKey].then((ret) => {
|
|
132
|
-
depsMapping[this.resourcePath] =
|
|
133
|
+
depsMapping[this.resourcePath] = ret.meta.embeds.concat(getDemoSourceFiles(ret.meta.demos));
|
|
133
134
|
const finalCacheKey = [
|
|
134
135
|
baseCacheKey,
|
|
135
136
|
getDepsCacheKey(depsMapping[this.resourcePath])
|