dumi 2.3.0-alpha.0 → 2.3.0-alpha.2

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.
@@ -1,7 +1,7 @@
1
1
  import type { PICKED_PKG_FIELDS } from "../../../constants";
2
2
  import type { AtomComponentAsset } from 'dumi-assets-types';
3
3
  import { type ComponentType } from 'react';
4
- import type { ILocalesConfig, IPreviewerProps, IThemeConfig } from '../types';
4
+ import type { ILocalesConfig, IPreviewerProps, IRouteMeta, IThemeConfig } from '../types';
5
5
  export type DemoInfo = {
6
6
  component: ComponentType;
7
7
  asset: IPreviewerProps['asset'];
@@ -13,6 +13,7 @@ interface ISiteContext {
13
13
  entryExports: Record<string, any>;
14
14
  demos: Record<string, DemoInfo>;
15
15
  components: Record<string, AtomComponentAsset>;
16
+ tabs: IRouteMeta['tabs'];
16
17
  locales: ILocalesConfig;
17
18
  themeConfig: IThemeConfig;
18
19
  hostname?: string;
@@ -31,7 +31,8 @@ export var SiteContext = /*#__PURE__*/createContext({
31
31
  return _getDemoById.apply(this, arguments);
32
32
  }
33
33
  return getDemoById;
34
- }()
34
+ }(),
35
+ tabs: []
35
36
  });
36
37
  export var useSiteData = function useSiteData() {
37
38
  return useContext(SiteContext);
@@ -3,5 +3,8 @@ type ReactPromise<T> = Promise<T> & {
3
3
  value?: T;
4
4
  reason?: any;
5
5
  };
6
+ /**
7
+ * @private Internal usage. Safe to remove
8
+ */
6
9
  export default function use<T>(promise: ReactPromise<T>): T;
7
10
  export {};
@@ -1,6 +1,9 @@
1
1
  // Copy from React official demo.
2
2
  // This will be replace if React release new version of use hooks
3
3
 
4
+ /**
5
+ * @private Internal usage. Safe to remove
6
+ */
4
7
  export default function use(promise) {
5
8
  if (promise.status === 'fulfilled') {
6
9
  return promise.value;
@@ -10,11 +10,11 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
10
10
  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; }
11
11
  function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
12
12
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
- import { useNavData, useSiteData } from 'dumi';
13
+ import { useNavData } from 'dumi';
14
14
  import { useCallback, useEffect, useRef, useState } from 'react';
15
- import { useLocaleDocRoutes } from "../utils";
16
15
  // @ts-ignore
17
16
  import workerCode from '-!../../../../compiled/_internal/searchWorker.min?dumi-raw';
17
+ import useSearchData from "./useSearchData";
18
18
  var worker;
19
19
 
20
20
  // for ssr
@@ -26,9 +26,8 @@ if (typeof window !== 'undefined') {
26
26
  }
27
27
  export var useSiteSearch = function useSiteSearch() {
28
28
  var debounceTimer = useRef();
29
- var routes = useLocaleDocRoutes();
30
- var _useSiteData = useSiteData(),
31
- demos = _useSiteData.demos;
29
+ // const routes = useLocaleDocRoutes();
30
+ // const { demos } = useSiteData();
32
31
  var _useState = useState(false),
33
32
  _useState2 = _slicedToArray(_useState, 2),
34
33
  loading = _useState2[0],
@@ -37,15 +36,27 @@ export var useSiteSearch = function useSiteSearch() {
37
36
  _useState4 = _slicedToArray(_useState3, 2),
38
37
  keywords = _useState4[0],
39
38
  setKeywords = _useState4[1];
40
- var navData = useNavData();
41
- var _useState5 = useState([]),
39
+ var _useState5 = useState(false),
42
40
  _useState6 = _slicedToArray(_useState5, 2),
43
- result = _useState6[0],
44
- setResult = _useState6[1];
41
+ enabled = _useState6[0],
42
+ setEnabled = _useState6[1];
43
+ var navData = useNavData();
44
+ var _useState7 = useState([]),
45
+ _useState8 = _slicedToArray(_useState7, 2),
46
+ result = _useState8[0],
47
+ setResult = _useState8[1];
45
48
  var setter = useCallback(function (val) {
46
49
  setLoading(true);
47
50
  setKeywords(val);
51
+ if (val) {
52
+ setEnabled(true);
53
+ }
48
54
  }, []);
55
+ var _useSearchData = useSearchData(enabled),
56
+ _useSearchData2 = _slicedToArray(_useSearchData, 2),
57
+ filledRoutes = _useSearchData2[0],
58
+ demos = _useSearchData2[1];
59
+ var mergedLoading = loading || !filledRoutes;
49
60
  useEffect(function () {
50
61
  worker.onmessage = function (e) {
51
62
  setResult(e.data);
@@ -53,6 +64,10 @@ export var useSiteSearch = function useSiteSearch() {
53
64
  };
54
65
  }, []);
55
66
  useEffect(function () {
67
+ if (!filledRoutes || !demos) {
68
+ return;
69
+ }
70
+
56
71
  // omit demo component for postmessage
57
72
  var demoData = Object.entries(demos).reduce(function (acc, _ref) {
58
73
  var _ref2 = _slicedToArray(_ref, 2),
@@ -68,13 +83,16 @@ export var useSiteSearch = function useSiteSearch() {
68
83
  worker.postMessage({
69
84
  action: 'generate-metadata',
70
85
  args: {
71
- routes: JSON.parse(JSON.stringify(routes)),
86
+ routes: JSON.parse(JSON.stringify(filledRoutes)),
72
87
  nav: navData,
73
88
  demos: demoData
74
89
  }
75
90
  });
76
- }, [routes, demos, navData]);
91
+ }, [demos, navData, filledRoutes]);
77
92
  useEffect(function () {
93
+ if (!filledRoutes) {
94
+ return;
95
+ }
78
96
  var str = keywords.trim();
79
97
  if (str) {
80
98
  clearTimeout(debounceTimer.current);
@@ -89,11 +107,11 @@ export var useSiteSearch = function useSiteSearch() {
89
107
  } else {
90
108
  setResult([]);
91
109
  }
92
- }, [keywords]);
110
+ }, [keywords, filledRoutes]);
93
111
  return {
94
112
  keywords: keywords,
95
113
  setKeywords: setter,
96
114
  result: result,
97
- loading: loading
115
+ loading: mergedLoading
98
116
  };
99
117
  };
@@ -0,0 +1,9 @@
1
+ import type { DemoInfo } from '../context';
2
+ import { useLocaleDocRoutes } from '../utils';
3
+ type Demos = Record<string, DemoInfo>;
4
+ type ReturnData = [
5
+ routes: ReturnType<typeof useLocaleDocRoutes> | null,
6
+ demo: Demos | null
7
+ ];
8
+ export default function useSearchData(enabled: boolean): ReturnData;
9
+ export {};
@@ -0,0 +1,76 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
+ 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; }
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
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
6
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
7
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
+ 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."); }
9
+ 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); }
10
+ 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; }
11
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
12
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
+ import { loadFilesMeta, useSiteData } from 'dumi';
14
+ import React from 'react';
15
+ import { useLocaleDocRoutes } from "../utils";
16
+ export default function useSearchData(enabled) {
17
+ var routes = useLocaleDocRoutes();
18
+ var _React$useState = React.useState(null),
19
+ _React$useState2 = _slicedToArray(_React$useState, 2),
20
+ filesMeta = _React$useState2[0],
21
+ setFilesMeta = _React$useState2[1];
22
+ var _useSiteData = useSiteData(),
23
+ tabs = _useSiteData.tabs;
24
+ React.useEffect(function () {
25
+ if (enabled) {
26
+ loadFilesMeta().then(function (data) {
27
+ setFilesMeta(data);
28
+ });
29
+ }
30
+ }, [enabled]);
31
+ return React.useMemo(function () {
32
+ if (!filesMeta) {
33
+ return [null, null];
34
+ }
35
+
36
+ // Route Meta
37
+ var mergedRoutes = {};
38
+ Object.keys(routes).forEach(function (routeId) {
39
+ mergedRoutes[routeId] = _objectSpread({}, routes[routeId]);
40
+
41
+ // Fill routes meta
42
+ if (mergedRoutes[routeId].meta) {
43
+ var _mergedRoutes$routeId;
44
+ mergedRoutes[routeId].meta = _objectSpread(_objectSpread(_objectSpread({}, mergedRoutes[routeId].meta), filesMeta[routeId]), {}, {
45
+ tabs: (_mergedRoutes$routeId = mergedRoutes[routeId].tabs) === null || _mergedRoutes$routeId === void 0 ? void 0 : _mergedRoutes$routeId.map(function (id) {
46
+ var meta = {
47
+ frontmatter: {
48
+ title: tabs[id].title
49
+ },
50
+ toc: [],
51
+ texts: []
52
+ };
53
+ return _objectSpread(_objectSpread({}, tabs[id]), {}, {
54
+ meta: filesMeta[id] || meta
55
+ });
56
+ })
57
+ });
58
+ }
59
+ });
60
+
61
+ // Demos
62
+ var demos = Object.entries(filesMeta).reduce(function (acc, _ref) {
63
+ var _ref2 = _slicedToArray(_ref, 2),
64
+ id = _ref2[0],
65
+ meta = _ref2[1];
66
+ // append route id to demo
67
+ Object.values(meta.demos).forEach(function (demo) {
68
+ demo.routeId = id;
69
+ });
70
+ // merge demos
71
+ Object.assign(acc, meta.demos);
72
+ return acc;
73
+ }, {});
74
+ return [mergedRoutes, demos];
75
+ }, [filesMeta, routes, tabs]);
76
+ }
@@ -45,7 +45,8 @@ var exports_default = (api) => {
45
45
  path: "dumi/exports.ts",
46
46
  content: `export * from '../exports';
47
47
  export * from '${(0, import_plugin_utils.winPath)(require.resolve("../client/theme-api"))}';
48
- export { getRouteMetaById } from './meta/route-meta';`
48
+ export { getRouteMetaById } from './meta/route-meta';
49
+ export { loadFilesMeta } from './meta/search';`
49
50
  });
50
51
  });
51
52
  };
@@ -71,6 +71,14 @@ var meta_default = (api) => {
71
71
  key: "dumi.modifyMetaFiles",
72
72
  initialValue: JSON.parse(JSON.stringify(metaFiles))
73
73
  });
74
+ api.writeTmpFile({
75
+ noPluginDir: true,
76
+ path: "dumi/meta/search.ts",
77
+ tplPath: (0, import_plugin_utils.winPath)((0, import_path.join)(import_constants.TEMPLATES_DIR, "meta-search.ts.tpl")),
78
+ context: {
79
+ metaFiles: parsedMetaFiles
80
+ }
81
+ });
74
82
  api.writeTmpFile({
75
83
  noPluginDir: true,
76
84
  path: "dumi/meta/frontmatter.ts",
@@ -3,6 +3,7 @@ import { useOutlet, history } from 'dumi';
3
3
  import { warning } from 'rc-util';
4
4
  import { SiteContext, type ISiteContext } from '{{{contextPath}}}';
5
5
  import { components } from '../meta/atoms';
6
+ import { tabs } from '../meta/tabs';
6
7
  import { getDemoById } from '../meta/demos';
7
8
  import { locales } from '../locales/config';
8
9
  {{{defaultExport}}}
@@ -47,6 +48,7 @@ export default function DumiContextWrapper() {
47
48
  entryExports,
48
49
  demos: null,
49
50
  components,
51
+ tabs,
50
52
  locales,
51
53
  loading,
52
54
  setLoading,
@@ -70,6 +72,7 @@ export default function DumiContextWrapper() {
70
72
  historyType,
71
73
  entryExports,
72
74
  components,
75
+ tabs,
73
76
  locales,
74
77
  loading,
75
78
  setLoading,
@@ -0,0 +1,43 @@
1
+ // This will bundle all the site demos and meta data into one file
2
+ // which should only async load on search
3
+ const filesMetaTabs = {
4
+ {{#metaFiles}}
5
+ {{#tabs}}
6
+ '{{{id}}}': {{{tabs}}},
7
+ {{/tabs}}
8
+ {{/metaFiles}}
9
+ }
10
+
11
+ // generate demos data in runtime, for reuse route.id to reduce bundle size
12
+ export const demos = {};
13
+
14
+ /** @private Internal usage. Safe to refactor. */
15
+ export async function loadFilesMeta() {
16
+ const metaMap: Record<string, any> = {};
17
+ const idList = [
18
+ {{#metaFiles}}
19
+ '{{{id}}}',
20
+ {{/metaFiles}}
21
+ ];
22
+
23
+ {{#metaFiles}}
24
+ metaMap['{{{id}}}'] = import('{{{file}}}?type=meta');
25
+ {{/metaFiles}}
26
+
27
+ // Wait for all meta data to be loaded
28
+ const metaList = await Promise.all(idList.map(id => metaMap[id]));
29
+
30
+ // Merge into filesMeta
31
+ const filesMeta = {};
32
+
33
+ idList.forEach((id, index) => {
34
+ const meta = metaList[index];
35
+
36
+ filesMeta[id] = {
37
+ ...meta,
38
+ tabs: filesMetaTabs[id],
39
+ };
40
+ });
41
+
42
+ return filesMeta;
43
+ }
package/index.d.ts CHANGED
@@ -9,3 +9,6 @@ export * from './dist';
9
9
  export { defineConfig } from './dist';
10
10
  export * from './dist/client/theme-api';
11
11
  export { IApi } from './dist/types';
12
+ export function getRouteMetaById(id: string): Promise<any>;
13
+ /** @private Internal usage. Safe to remove */
14
+ export function loadFilesMeta(): Promise<any>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dumi",
3
- "version": "2.3.0-alpha.0",
3
+ "version": "2.3.0-alpha.2",
4
4
  "description": "📖 Documentation Generator of React Component",
5
5
  "keywords": [
6
6
  "generator",
@@ -38,5 +38,6 @@
38
38
  "content.footer.actions.previous": "PREV",
39
39
  "content.footer.actions.next": "NEXT",
40
40
  "search.not.found": "No content was found",
41
+ "search.loading": "Loading...",
41
42
  "layout.sidebar.btn": "Sidebar"
42
43
  }
@@ -37,5 +37,6 @@
37
37
  "content.footer.actions.previous": "上一篇",
38
38
  "content.footer.actions.next": "下一篇",
39
39
  "search.not.found": "未找到相关内容",
40
+ "search.loading": "加载中...",
40
41
  "layout.sidebar.btn": "侧边菜单"
41
42
  }
@@ -9,11 +9,11 @@ import { ReactComponent as IconArrowDown } from '@ant-design/icons-svg/inline-sv
9
9
  import { ReactComponent as IconArrowUp } from '@ant-design/icons-svg/inline-svg/outlined/arrow-up.svg';
10
10
  import { ReactComponent as IconSearch } from '@ant-design/icons-svg/inline-svg/outlined/search.svg';
11
11
  import { useSiteSearch } from 'dumi';
12
- import React, { useEffect, useRef, useState } from 'react';
13
12
  import SearchResult from 'dumi/theme/slots/SearchResult';
14
- import "./index.less";
13
+ import React, { useEffect, useRef, useState } from 'react';
15
14
  import { Input } from "./Input";
16
15
  import { Mask } from "./Mask";
16
+ import "./index.less";
17
17
  export { Input as SearchInput } from "./Input";
18
18
  export { Mask as SearchMask } from "./Mask";
19
19
  var isAppleDevice = /(mac|iphone|ipod|ipad)/i.test(typeof navigator !== 'undefined' ? (_navigator = navigator) === null || _navigator === void 0 ? void 0 : _navigator.platform : '');
@@ -100,7 +100,7 @@ var SearchBar = function SearchBar() {
100
100
  ref: inputRef
101
101
  }), /*#__PURE__*/React.createElement("span", {
102
102
  className: "dumi-default-search-shortcut"
103
- }, symbol, " K"), keywords.trim() && focusing && (result.length || !loading) && !modalVisible && /*#__PURE__*/React.createElement("div", {
103
+ }, symbol, " K"), keywords.trim() && focusing && !modalVisible && /*#__PURE__*/React.createElement("div", {
104
104
  className: "dumi-default-search-popover"
105
105
  }, /*#__PURE__*/React.createElement("section", null, /*#__PURE__*/React.createElement(SearchResult, {
106
106
  data: result,
@@ -123,6 +123,39 @@ var SearchResult = function SearchResult(props) {
123
123
  return document.removeEventListener('keydown', handler);
124
124
  };
125
125
  });
126
+ var returnNode = null;
127
+ if (props.loading) {
128
+ returnNode = /*#__PURE__*/React.createElement("div", {
129
+ className: "dumi-default-search-empty"
130
+ }, /*#__PURE__*/React.createElement(IconInbox, null), /*#__PURE__*/React.createElement(FormattedMessage, {
131
+ id: "search.loading"
132
+ }));
133
+ } else if (props.data.length) {
134
+ returnNode = /*#__PURE__*/React.createElement("dl", null, data.map(function (item, i) {
135
+ return item.type === 'title' ? /*#__PURE__*/React.createElement("dt", {
136
+ key: String(i)
137
+ }, item.value.title) : /*#__PURE__*/React.createElement("dd", {
138
+ key: String(i)
139
+ }, /*#__PURE__*/React.createElement(Link, {
140
+ to: item.value.link,
141
+ "data-active": activeIndex === item.activeIndex || undefined,
142
+ onClick: function onClick() {
143
+ var _props$onItemSelect2;
144
+ return (_props$onItemSelect2 = props.onItemSelect) === null || _props$onItemSelect2 === void 0 ? void 0 : _props$onItemSelect2.call(props, item.value);
145
+ }
146
+ }, /*#__PURE__*/React.createElement(ICONS_MAPPING[item.value.type]), /*#__PURE__*/React.createElement("h4", null, /*#__PURE__*/React.createElement(Highlight, {
147
+ texts: item.value.highlightTitleTexts
148
+ })), /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement(Highlight, {
149
+ texts: item.value.highlightTexts
150
+ }))));
151
+ }));
152
+ } else {
153
+ returnNode = /*#__PURE__*/React.createElement("div", {
154
+ className: "dumi-default-search-empty"
155
+ }, /*#__PURE__*/React.createElement(IconInbox, null), /*#__PURE__*/React.createElement(FormattedMessage, {
156
+ id: "search.not.found"
157
+ }));
158
+ }
126
159
  return /*#__PURE__*/React.createElement("div", {
127
160
  className: "dumi-default-search-result",
128
161
  onMouseEnter: function onMouseEnter() {
@@ -136,27 +169,6 @@ var SearchResult = function SearchResult(props) {
136
169
  onMouseUpCapture: function onMouseUpCapture() {
137
170
  document.activeElement.blur();
138
171
  }
139
- }, Boolean(props.data.length || props.loading) ? /*#__PURE__*/React.createElement("dl", null, data.map(function (item, i) {
140
- return item.type === 'title' ? /*#__PURE__*/React.createElement("dt", {
141
- key: String(i)
142
- }, item.value.title) : /*#__PURE__*/React.createElement("dd", {
143
- key: String(i)
144
- }, /*#__PURE__*/React.createElement(Link, {
145
- to: item.value.link,
146
- "data-active": activeIndex === item.activeIndex || undefined,
147
- onClick: function onClick() {
148
- var _props$onItemSelect2;
149
- return (_props$onItemSelect2 = props.onItemSelect) === null || _props$onItemSelect2 === void 0 ? void 0 : _props$onItemSelect2.call(props, item.value);
150
- }
151
- }, /*#__PURE__*/React.createElement(ICONS_MAPPING[item.value.type]), /*#__PURE__*/React.createElement("h4", null, /*#__PURE__*/React.createElement(Highlight, {
152
- texts: item.value.highlightTitleTexts
153
- })), /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement(Highlight, {
154
- texts: item.value.highlightTexts
155
- }))));
156
- })) : /*#__PURE__*/React.createElement("div", {
157
- className: "dumi-default-search-empty"
158
- }, /*#__PURE__*/React.createElement(IconInbox, null), /*#__PURE__*/React.createElement(FormattedMessage, {
159
- id: "search.not.found"
160
- })));
172
+ }, returnNode);
161
173
  };
162
174
  export default SearchResult;
@@ -1,23 +0,0 @@
1
- {{#metaFiles}}
2
- import { frontmatter as fm{{{index}}}, toc as toc{{{index}}} } from '{{{file}}}?type=meta';
3
- {{/metaFiles}}
4
-
5
- export { components } from './atoms';
6
- export { tabs } from './tabs';
7
-
8
- export const filesMeta = {
9
- {{#metaFiles}}
10
- '{{{id}}}': {
11
- frontmatter: fm{{{index}}},
12
- toc: toc{{{index}}},
13
- texts: [],
14
- demos: {},
15
- {{#tabs}}
16
- tabs: {{{tabs}}},
17
- {{/tabs}}
18
- },
19
- {{/metaFiles}}
20
- }
21
-
22
- // generate demos data in runtime, for reuse route.id to reduce bundle size
23
- export const demos = {};