dumi 2.0.0-rc.9 → 2.0.1
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/types.d.ts +4 -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} +46 -75
- 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.js +1 -1
- package/theme-default/builtins/Previewer/index.less +1 -1
- package/theme-default/builtins/SourceCode/index.d.ts +1 -1
- package/theme-default/builtins/SourceCode/index.js +1 -1
- package/theme-default/builtins/SourceCode/index.less +10 -3
- 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;
|
|
@@ -58,6 +55,10 @@ function createMetadataSection(rawTitle, title, link, texts, tocIndex) {
|
|
|
58
55
|
} : null;
|
|
59
56
|
}
|
|
60
57
|
|
|
58
|
+
function generateRouteTitle(fm) {
|
|
59
|
+
return [fm.title, fm.subtitle].filter(Boolean).join(' ');
|
|
60
|
+
}
|
|
61
|
+
|
|
61
62
|
function generateSearchMetadata(routes, demos, nav) {
|
|
62
63
|
var metadata = []; // generate demos mapping by route.id
|
|
63
64
|
|
|
@@ -86,11 +87,11 @@ function generateSearchMetadata(routes, demos, nav) {
|
|
|
86
87
|
|
|
87
88
|
return (_demo$asset = demo.asset) === null || _demo$asset === void 0 ? void 0 : _demo$asset.id;
|
|
88
89
|
});
|
|
89
|
-
var orphanSection = createMetadataSection('', routeMeta.frontmatter
|
|
90
|
+
var orphanSection = createMetadataSection('', generateRouteTitle(routeMeta.frontmatter), routeAbsPath, routeMeta.texts);
|
|
90
91
|
var tocSections = routeMeta.toc.reduce(function (acc, toc, i) {
|
|
91
92
|
// exclude demo id, to avoid duplicate
|
|
92
93
|
if (!demoIds.includes(toc.id) && toc.depth > 1) {
|
|
93
|
-
acc.push(createMetadataSection(toc.title, "".concat(routeMeta.frontmatter
|
|
94
|
+
acc.push(createMetadataSection(toc.title, "".concat(generateRouteTitle(routeMeta.frontmatter), " - ").concat(toc.title), "".concat(routeAbsPath, "#").concat(toc.id), routeMeta.texts, i));
|
|
94
95
|
}
|
|
95
96
|
|
|
96
97
|
return acc;
|
|
@@ -99,25 +100,25 @@ function generateSearchMetadata(routes, demos, nav) {
|
|
|
99
100
|
var key = _ref.key,
|
|
100
101
|
meta = _ref.meta;
|
|
101
102
|
// collect orphan section that not in toc
|
|
102
|
-
var tabOrphanSection = createMetadataSection('', "".concat(routeMeta.frontmatter
|
|
103
|
+
var tabOrphanSection = createMetadataSection('', "".concat(generateRouteTitle(routeMeta.frontmatter), " - ").concat(meta.frontmatter.title), "".concat(routeAbsPath, "?").concat(TAB_QUERY_KEY, "=").concat(key), meta.texts);
|
|
103
104
|
if (tabOrphanSection) acc.push(tabOrphanSection); // collect sections by toc
|
|
104
105
|
|
|
105
106
|
acc.push.apply(acc, _toConsumableArray(meta.toc.map(function (toc, i) {
|
|
106
|
-
return createMetadataSection(toc.title, "".concat(routeMeta.frontmatter
|
|
107
|
+
return createMetadataSection(toc.title, "".concat(generateRouteTitle(routeMeta.frontmatter), " - ").concat(meta.frontmatter.title, " - ").concat(toc.title), "".concat(routeAbsPath, "?").concat(TAB_QUERY_KEY, "=").concat(key, "#").concat(toc.id), meta.texts, i);
|
|
107
108
|
})));
|
|
108
109
|
return acc;
|
|
109
110
|
}, []);
|
|
110
111
|
metadata.push({
|
|
111
112
|
navTitle: routeNav === null || routeNav === void 0 ? void 0 : routeNav.title,
|
|
112
113
|
navOrder: routeNav ? nav.indexOf(routeNav) : Infinity,
|
|
113
|
-
title: routeMeta.frontmatter
|
|
114
|
+
title: generateRouteTitle(routeMeta.frontmatter),
|
|
114
115
|
link: routeAbsPath,
|
|
115
116
|
sections: [].concat(_toConsumableArray(orphanSection ? [orphanSection] : []), _toConsumableArray(tocSections), _toConsumableArray(tabSections)),
|
|
116
117
|
demos: ((_demosMapping$route$i = demosMapping[route.id]) === null || _demosMapping$route$i === void 0 ? void 0 : _demosMapping$route$i.map(function (demo) {
|
|
117
118
|
return {
|
|
118
119
|
link: "".concat(routeAbsPath, "#").concat(demo.asset.id),
|
|
119
120
|
rawTitle: demo.asset.title || '',
|
|
120
|
-
title: demo.asset.title || routeMeta.frontmatter
|
|
121
|
+
title: demo.asset.title || generateRouteTitle(routeMeta.frontmatter),
|
|
121
122
|
description: demo.asset.description || '',
|
|
122
123
|
keywords: demo.asset.keywords || []
|
|
123
124
|
};
|
|
@@ -131,6 +132,7 @@ function generateSearchMetadata(routes, demos, nav) {
|
|
|
131
132
|
function generateHighlightTexts() {
|
|
132
133
|
var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
133
134
|
var keywords = arguments.length > 1 ? arguments[1] : undefined;
|
|
135
|
+
var priority = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
134
136
|
var chunks = findAll({
|
|
135
137
|
textToHighlight: str,
|
|
136
138
|
searchWords: keywords,
|
|
@@ -155,7 +157,7 @@ function generateHighlightTexts() {
|
|
|
155
157
|
highlightText.highlighted = true;
|
|
156
158
|
matchedMapping[keywords.find(function (k) {
|
|
157
159
|
return highlightText.text.includes(k);
|
|
158
|
-
})] =
|
|
160
|
+
})] = priority;
|
|
159
161
|
}
|
|
160
162
|
|
|
161
163
|
return highlightText;
|
|
@@ -180,7 +182,7 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
180
182
|
var p = _step.value;
|
|
181
183
|
|
|
182
184
|
if (matchReg.test(p)) {
|
|
183
|
-
var _generateHighlightTex3 = generateHighlightTexts(sec.title, keywords),
|
|
185
|
+
var _generateHighlightTex3 = generateHighlightTexts(sec.title, keywords, 10),
|
|
184
186
|
_generateHighlightTex4 = _slicedToArray(_generateHighlightTex3, 2),
|
|
185
187
|
_highlightTitleTexts = _generateHighlightTex4[0],
|
|
186
188
|
_titleMatchMapping = _generateHighlightTex4[1];
|
|
@@ -193,7 +195,9 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
193
195
|
hints.push({
|
|
194
196
|
type: 'content',
|
|
195
197
|
link: sec.link,
|
|
196
|
-
priority: Object.
|
|
198
|
+
priority: Object.values(_objectSpread(_objectSpread({}, matchMapping), _titleMatchMapping)).reduce(function (acc, p) {
|
|
199
|
+
return acc + p;
|
|
200
|
+
}, 0),
|
|
197
201
|
highlightTitleTexts: _highlightTitleTexts,
|
|
198
202
|
highlightTexts: highlightTexts
|
|
199
203
|
}); // match at most once in the same section
|
|
@@ -209,7 +213,7 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
209
213
|
}
|
|
210
214
|
|
|
211
215
|
if (matchReg.test(sec.rawTitle)) {
|
|
212
|
-
var _generateHighlightTex = generateHighlightTexts(sec.title, keywords),
|
|
216
|
+
var _generateHighlightTex = generateHighlightTexts(sec.title, keywords, 10),
|
|
213
217
|
_generateHighlightTex2 = _slicedToArray(_generateHighlightTex, 2),
|
|
214
218
|
highlightTitleTexts = _generateHighlightTex2[0],
|
|
215
219
|
titleMatchMapping = _generateHighlightTex2[1];
|
|
@@ -217,7 +221,9 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
217
221
|
hints.push({
|
|
218
222
|
type: 'title',
|
|
219
223
|
link: sec.link,
|
|
220
|
-
priority: Object.
|
|
224
|
+
priority: Object.values(titleMatchMapping).reduce(function (acc, p) {
|
|
225
|
+
return acc + p;
|
|
226
|
+
}, 0),
|
|
221
227
|
highlightTitleTexts: highlightTitleTexts,
|
|
222
228
|
highlightTexts: generateHighlightTexts(sec.paragraphs[0] || '', keywords)[0]
|
|
223
229
|
});
|
|
@@ -226,7 +232,7 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
226
232
|
|
|
227
233
|
data.demos.forEach(function (demo) {
|
|
228
234
|
if (matchReg.test(demo.rawTitle) || matchReg.test(demo.description)) {
|
|
229
|
-
var _generateHighlightTex7 = generateHighlightTexts(demo.title, keywords),
|
|
235
|
+
var _generateHighlightTex7 = generateHighlightTexts(demo.title, keywords, 10),
|
|
230
236
|
_generateHighlightTex8 = _slicedToArray(_generateHighlightTex7, 2),
|
|
231
237
|
highlightTitleTexts = _generateHighlightTex8[0],
|
|
232
238
|
titleMatchMapping = _generateHighlightTex8[1];
|
|
@@ -239,7 +245,9 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
239
245
|
hints.push({
|
|
240
246
|
type: 'demo',
|
|
241
247
|
link: demo.link,
|
|
242
|
-
priority: Object.
|
|
248
|
+
priority: Object.values(_objectSpread(_objectSpread({}, matchMapping), titleMatchMapping)).reduce(function (acc, p) {
|
|
249
|
+
return acc + p;
|
|
250
|
+
}, 0),
|
|
243
251
|
highlightTitleTexts: highlightTitleTexts,
|
|
244
252
|
highlightTexts: highlightTexts
|
|
245
253
|
});
|
|
@@ -249,7 +257,7 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
249
257
|
if (matchReg.test(data.title)) {
|
|
250
258
|
var _data$sections$;
|
|
251
259
|
|
|
252
|
-
var _generateHighlightTex11 = generateHighlightTexts(data.title, keywords),
|
|
260
|
+
var _generateHighlightTex11 = generateHighlightTexts(data.title, keywords, 100),
|
|
253
261
|
_generateHighlightTex12 = _slicedToArray(_generateHighlightTex11, 2),
|
|
254
262
|
highlightTitleTexts = _generateHighlightTex12[0],
|
|
255
263
|
titleMatchMapping = _generateHighlightTex12[1];
|
|
@@ -257,7 +265,9 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
257
265
|
hints.push({
|
|
258
266
|
type: 'page',
|
|
259
267
|
link: data.link,
|
|
260
|
-
priority: Object.
|
|
268
|
+
priority: Object.values(titleMatchMapping).reduce(function (acc, p) {
|
|
269
|
+
return acc + p;
|
|
270
|
+
}, 0),
|
|
261
271
|
highlightTitleTexts: highlightTitleTexts,
|
|
262
272
|
highlightTexts: generateHighlightTexts(((_data$sections$ = data.sections[0]) === null || _data$sections$ === void 0 ? void 0 : _data$sections$.paragraphs[0]) || '', keywords)[0]
|
|
263
273
|
});
|
|
@@ -270,7 +280,7 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
270
280
|
var key = data.navTitle || '$ROOT';
|
|
271
281
|
(_resultMapping$key = resultMapping[key]) !== null && _resultMapping$key !== void 0 ? _resultMapping$key : resultMapping[key] = {
|
|
272
282
|
title: data.navTitle,
|
|
273
|
-
priority: data.navOrder,
|
|
283
|
+
priority: data.navOrder * 1000,
|
|
274
284
|
hints: []
|
|
275
285
|
};
|
|
276
286
|
|
|
@@ -289,59 +299,20 @@ function generateSearchResult(metadata, keywordsStr) {
|
|
|
289
299
|
});
|
|
290
300
|
}
|
|
291
301
|
|
|
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
|
-
};
|
|
302
|
+
var metadata;
|
|
303
|
+
|
|
304
|
+
self.onmessage = function (_ref4) {
|
|
305
|
+
var data = _ref4.data;
|
|
306
|
+
|
|
307
|
+
switch (data.action) {
|
|
308
|
+
case 'generate-metadata':
|
|
309
|
+
metadata = generateSearchMetadata(data.args.routes, data.args.demos, data.args.nav);
|
|
310
|
+
break;
|
|
311
|
+
|
|
312
|
+
case 'get-search-result':
|
|
313
|
+
self.postMessage(generateSearchResult(metadata, data.args.keywords));
|
|
314
|
+
break;
|
|
315
|
+
|
|
316
|
+
default:
|
|
317
|
+
}
|
|
347
318
|
};
|
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 = {});
|