@rspress/runtime 2.0.0-beta.3 → 2.0.0-beta.30
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/Content.js +19 -17
- package/dist/NoSSR.js +5 -5
- package/dist/hooks/useDark.d.ts +7 -0
- package/dist/hooks/useDark.js +7 -0
- package/dist/hooks/useFrontmatter.d.ts +4 -0
- package/dist/hooks/useFrontmatter.js +9 -0
- package/dist/hooks/useI18n.d.ts +1 -0
- package/dist/hooks/useI18n.js +10 -0
- package/dist/hooks/useLang.d.ts +1 -0
- package/dist/hooks/useLang.js +6 -0
- package/dist/hooks/useLocaleSiteData.d.ts +5 -0
- package/dist/hooks/useLocaleSiteData.js +27 -0
- package/dist/hooks/useNav.d.ts +1 -0
- package/dist/hooks/useNav.js +12 -0
- package/dist/hooks/usePage.d.ts +10 -0
- package/dist/hooks/usePage.js +9 -0
- package/dist/hooks/usePageData.d.ts +5 -0
- package/dist/hooks/usePageData.js +16 -0
- package/dist/hooks/usePages.d.ts +4 -0
- package/dist/hooks/usePages.js +7 -0
- package/dist/hooks/useSidebar.d.ts +9 -0
- package/dist/hooks/useSidebar.js +23 -0
- package/dist/hooks/useSite.d.ts +4 -0
- package/dist/hooks/useSite.js +7 -0
- package/dist/hooks/useVersion.d.ts +1 -0
- package/dist/hooks/useVersion.js +6 -0
- package/dist/hooks/useViewTransition.d.ts +2 -0
- package/dist/hooks/useViewTransition.js +23 -0
- package/dist/hooks/useWindowSize.d.ts +9 -0
- package/dist/hooks/useWindowSize.js +22 -0
- package/dist/index.d.ts +20 -8
- package/dist/index.js +21 -40
- package/dist/route.d.ts +13 -1
- package/dist/route.js +10 -4
- package/dist/utils.d.ts +11 -8
- package/dist/utils.js +17 -19
- package/package.json +12 -16
- package/server.js +1 -1
- package/dist/hooks.d.ts +0 -28
- package/dist/hooks.js +0 -67
package/dist/Content.js
CHANGED
|
@@ -1,25 +1,27 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
1
|
+
import { Fragment, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Suspense, memo, useMemo } from "react";
|
|
3
|
+
import { useLocation } from "react-router-dom";
|
|
4
|
+
import virtual_site_data from "virtual-site-data";
|
|
5
|
+
import { useViewTransition } from "./hooks/useViewTransition.js";
|
|
6
|
+
import { pathnameToRouteService } from "./route.js";
|
|
7
7
|
function TransitionContentImpl(props) {
|
|
8
8
|
let element = props.el;
|
|
9
|
-
if (
|
|
9
|
+
if (virtual_site_data?.themeConfig?.enableContentAnimation) element = useViewTransition(props.el);
|
|
10
10
|
return element;
|
|
11
11
|
}
|
|
12
|
-
const TransitionContent = /*#__PURE__*/
|
|
13
|
-
const Content = ({ fallback = /*#__PURE__*/
|
|
14
|
-
const { pathname } =
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
const TransitionContent = /*#__PURE__*/ memo(TransitionContentImpl, (prevProps, nextProps)=>prevProps.el === nextProps.el);
|
|
13
|
+
const Content = ({ fallback = /*#__PURE__*/ jsx(Fragment, {}) })=>{
|
|
14
|
+
const { pathname } = useLocation();
|
|
15
|
+
const matchedElement = useMemo(()=>{
|
|
16
|
+
const route = pathnameToRouteService(pathname);
|
|
17
|
+
return route?.element;
|
|
18
|
+
}, [
|
|
19
|
+
pathname
|
|
20
|
+
]);
|
|
21
|
+
return /*#__PURE__*/ jsx(Suspense, {
|
|
20
22
|
fallback: fallback,
|
|
21
|
-
children: /*#__PURE__*/
|
|
22
|
-
el:
|
|
23
|
+
children: /*#__PURE__*/ jsx(TransitionContent, {
|
|
24
|
+
el: matchedElement
|
|
23
25
|
})
|
|
24
26
|
});
|
|
25
27
|
};
|
package/dist/NoSSR.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { Fragment, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
3
|
function NoSSR(props) {
|
|
4
4
|
const { children } = props;
|
|
5
|
-
const [isMounted, setIsMounted] =
|
|
6
|
-
|
|
5
|
+
const [isMounted, setIsMounted] = useState(false);
|
|
6
|
+
useEffect(()=>{
|
|
7
7
|
setIsMounted(true);
|
|
8
8
|
}, []);
|
|
9
9
|
if (!isMounted) return null;
|
|
10
|
-
return /*#__PURE__*/
|
|
10
|
+
return /*#__PURE__*/ jsx(Fragment, {
|
|
11
11
|
children: children
|
|
12
12
|
});
|
|
13
13
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useI18n<T = Record<string, Record<string, string>>>(): (key: keyof T) => any;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
2
|
+
import virtual_i18n_text from "virtual-i18n-text";
|
|
3
|
+
import { useLang } from "./useLang.js";
|
|
4
|
+
function useI18n() {
|
|
5
|
+
const lang = useLang();
|
|
6
|
+
return useCallback((key)=>virtual_i18n_text[key][lang], [
|
|
7
|
+
lang
|
|
8
|
+
]);
|
|
9
|
+
}
|
|
10
|
+
export { useI18n };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useLang(): string;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { addTrailingSlash } from "@rspress/shared";
|
|
2
|
+
import { useLang } from "./useLang.js";
|
|
3
|
+
import { useSite } from "./useSite.js";
|
|
4
|
+
function useLocaleSiteData() {
|
|
5
|
+
const { site } = useSite();
|
|
6
|
+
const lang = useLang();
|
|
7
|
+
const themeConfig = site?.themeConfig ?? {};
|
|
8
|
+
const defaultLang = site.lang ?? '';
|
|
9
|
+
const locales = themeConfig?.locales;
|
|
10
|
+
if (!locales || 0 === locales.length) return {
|
|
11
|
+
nav: themeConfig.nav,
|
|
12
|
+
sidebar: themeConfig.sidebar,
|
|
13
|
+
prevPageText: themeConfig.prevPageText,
|
|
14
|
+
nextPageText: themeConfig.nextPageText,
|
|
15
|
+
sourceCodeText: themeConfig.sourceCodeText,
|
|
16
|
+
searchPlaceholderText: themeConfig.searchPlaceholderText,
|
|
17
|
+
searchNoResultsText: themeConfig.searchNoResultsText,
|
|
18
|
+
searchSuggestedQueryText: themeConfig.searchSuggestedQueryText,
|
|
19
|
+
overview: themeConfig.overview
|
|
20
|
+
};
|
|
21
|
+
const localeInfo = locales.find((locale)=>locale.lang === lang);
|
|
22
|
+
return {
|
|
23
|
+
...localeInfo,
|
|
24
|
+
langRoutePrefix: lang === defaultLang ? '/' : addTrailingSlash(lang)
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export { useLocaleSiteData };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useNav(): import("@rspress/shared").NavItem[];
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { useLocaleSiteData } from "./useLocaleSiteData.js";
|
|
2
|
+
import { useVersion } from "./useVersion.js";
|
|
3
|
+
function useNav() {
|
|
4
|
+
const { nav } = useLocaleSiteData();
|
|
5
|
+
const version = useVersion();
|
|
6
|
+
if (Array.isArray(nav)) return nav;
|
|
7
|
+
const navKey = version.length > 0 ? version : 'default';
|
|
8
|
+
return [
|
|
9
|
+
...nav[navKey]
|
|
10
|
+
];
|
|
11
|
+
}
|
|
12
|
+
export { useNav };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PageDataLegacy } from '@rspress/shared';
|
|
2
|
+
interface IPageContext {
|
|
3
|
+
data: PageDataLegacy['page'];
|
|
4
|
+
setData?: (data: PageDataLegacy['page']) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare const PageContext: import("react").Context<IPageContext>;
|
|
7
|
+
export declare function usePage(): {
|
|
8
|
+
page: PageDataLegacy['page'];
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { usePage } from "./usePage.js";
|
|
2
|
+
import { usePages } from "./usePages.js";
|
|
3
|
+
import { useSite } from "./useSite.js";
|
|
4
|
+
function usePageData() {
|
|
5
|
+
const { page } = usePage();
|
|
6
|
+
const { pages } = usePages();
|
|
7
|
+
const { site } = useSite();
|
|
8
|
+
return {
|
|
9
|
+
page,
|
|
10
|
+
siteData: {
|
|
11
|
+
...site,
|
|
12
|
+
pages
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export { usePageData };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type NormalizedSidebar, type SidebarData } from '@rspress/shared';
|
|
2
|
+
/**
|
|
3
|
+
* get the sidebar group for the current page
|
|
4
|
+
* @param sidebar const { sidebar } = useLocaleSiteData();
|
|
5
|
+
* @param currentPathname
|
|
6
|
+
* @returns
|
|
7
|
+
*/
|
|
8
|
+
export declare const getSidebarDataGroup: (sidebar: NormalizedSidebar, currentPathname: string) => SidebarData;
|
|
9
|
+
export declare function useSidebar(): SidebarData;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { matchSidebar } from "@rspress/shared";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { useLocation } from "react-router-dom";
|
|
4
|
+
import { useLocaleSiteData } from "./useLocaleSiteData.js";
|
|
5
|
+
const getSidebarDataGroup = (sidebar, currentPathname)=>{
|
|
6
|
+
const navRoutes = Object.keys(sidebar).sort((a, b)=>b.length - a.length);
|
|
7
|
+
for (const name of navRoutes)if (matchSidebar(name, currentPathname)) {
|
|
8
|
+
const sidebarGroup = sidebar[name];
|
|
9
|
+
return sidebarGroup;
|
|
10
|
+
}
|
|
11
|
+
return [];
|
|
12
|
+
};
|
|
13
|
+
function useSidebar() {
|
|
14
|
+
const { sidebar } = useLocaleSiteData();
|
|
15
|
+
const { pathname: rawPathname } = useLocation();
|
|
16
|
+
const pathname = decodeURIComponent(rawPathname);
|
|
17
|
+
const sidebarData = useMemo(()=>getSidebarDataGroup(sidebar, pathname), [
|
|
18
|
+
sidebar,
|
|
19
|
+
pathname
|
|
20
|
+
]);
|
|
21
|
+
return sidebarData;
|
|
22
|
+
}
|
|
23
|
+
export { getSidebarDataGroup, useSidebar };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useVersion(): string;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export declare function useViewTransition(dom: ReactNode): string | number | bigint | boolean | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | import("react").ReactPortal | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | null | undefined;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { useLayoutEffect, useState } from "react";
|
|
2
|
+
import { flushSync } from "react-dom";
|
|
3
|
+
function useViewTransition(dom) {
|
|
4
|
+
const [element, setElement] = useState(dom);
|
|
5
|
+
useLayoutEffect(()=>{
|
|
6
|
+
if (document.startViewTransition && element !== dom) document.startViewTransition(()=>{
|
|
7
|
+
flushSync(()=>{
|
|
8
|
+
setElement(dom);
|
|
9
|
+
});
|
|
10
|
+
window.dispatchEvent(new Event('RspressReloadContent'));
|
|
11
|
+
});
|
|
12
|
+
else {
|
|
13
|
+
flushSync(()=>{
|
|
14
|
+
setElement(dom);
|
|
15
|
+
});
|
|
16
|
+
window.dispatchEvent(new Event('RspressReloadContent'));
|
|
17
|
+
}
|
|
18
|
+
}, [
|
|
19
|
+
dom
|
|
20
|
+
]);
|
|
21
|
+
return element;
|
|
22
|
+
}
|
|
23
|
+
export { useViewTransition };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useLayoutEffect, useState } from "react";
|
|
2
|
+
function useWindowSize(initialWidth, initialHeight) {
|
|
3
|
+
const [size, setSize] = useState({
|
|
4
|
+
width: initialWidth ?? 1 / 0,
|
|
5
|
+
height: initialHeight ?? 1 / 0
|
|
6
|
+
});
|
|
7
|
+
useLayoutEffect(()=>{
|
|
8
|
+
const handleResize = ()=>{
|
|
9
|
+
setSize({
|
|
10
|
+
width: window.innerWidth,
|
|
11
|
+
height: window.innerHeight
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
handleResize();
|
|
15
|
+
window.addEventListener('resize', handleResize);
|
|
16
|
+
return ()=>{
|
|
17
|
+
window.removeEventListener('resize', handleResize);
|
|
18
|
+
};
|
|
19
|
+
}, []);
|
|
20
|
+
return size;
|
|
21
|
+
}
|
|
22
|
+
export { useWindowSize };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
1
|
+
export { Head } from '@unhead/react';
|
|
2
|
+
export { createPortal, flushSync } from 'react-dom';
|
|
3
|
+
export { BrowserRouter, matchPath, matchRoutes, useLocation, useNavigate, useSearchParams, } from 'react-router-dom';
|
|
4
|
+
export { Content } from './Content.js';
|
|
5
|
+
export { ThemeContext, useDark } from './hooks/useDark.js';
|
|
6
|
+
export { useFrontmatter } from './hooks/useFrontmatter.js';
|
|
7
|
+
export { useI18n } from './hooks/useI18n.js';
|
|
8
|
+
export { useLang } from './hooks/useLang.js';
|
|
9
|
+
export { useLocaleSiteData } from './hooks/useLocaleSiteData.js';
|
|
10
|
+
export { useNav } from './hooks/useNav.js';
|
|
11
|
+
export { PageContext, usePage } from './hooks/usePage.js';
|
|
12
|
+
export { usePageData } from './hooks/usePageData.js';
|
|
13
|
+
export { usePages } from './hooks/usePages.js';
|
|
14
|
+
export { getSidebarDataGroup, useSidebar } from './hooks/useSidebar.js';
|
|
15
|
+
export { useSite } from './hooks/useSite.js';
|
|
16
|
+
export { useVersion } from './hooks/useVersion.js';
|
|
17
|
+
export { useWindowSize } from './hooks/useWindowSize.js';
|
|
18
|
+
export { NoSSR } from './NoSSR.js';
|
|
19
|
+
export { isActive, pathnameToRouteService } from './route.js';
|
|
20
|
+
export { addLeadingSlash, cleanUrlByConfig, isEqualPath, isProduction, normalizeHrefInRuntime, normalizeImagePath, removeBase, removeTrailingSlash, withBase, } from './utils.js';
|
package/dist/index.js
CHANGED
|
@@ -1,40 +1,21 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
var __webpack_exports__normalizeHrefInRuntime = __WEBPACK_EXTERNAL_MODULE__utils_js_d88b7fe1__.normalizeHrefInRuntime;
|
|
23
|
-
var __webpack_exports__normalizeImagePath = __WEBPACK_EXTERNAL_MODULE__utils_js_d88b7fe1__.normalizeImagePath;
|
|
24
|
-
var __webpack_exports__normalizeRoutePath = __WEBPACK_EXTERNAL_MODULE__route_js_d0361f8a__.normalizeRoutePath;
|
|
25
|
-
var __webpack_exports__normalizeSlash = __WEBPACK_EXTERNAL_MODULE__utils_js_d88b7fe1__.normalizeSlash;
|
|
26
|
-
var __webpack_exports__pathnameToRouteService = __WEBPACK_EXTERNAL_MODULE__route_js_d0361f8a__.pathnameToRouteService;
|
|
27
|
-
var __webpack_exports__removeBase = __WEBPACK_EXTERNAL_MODULE__utils_js_d88b7fe1__.removeBase;
|
|
28
|
-
var __webpack_exports__removeTrailingSlash = __WEBPACK_EXTERNAL_MODULE__utils_js_d88b7fe1__.removeTrailingSlash;
|
|
29
|
-
var __webpack_exports__useDark = __WEBPACK_EXTERNAL_MODULE__hooks_js_5a9aefb7__.useDark;
|
|
30
|
-
var __webpack_exports__useI18n = __WEBPACK_EXTERNAL_MODULE__hooks_js_5a9aefb7__.useI18n;
|
|
31
|
-
var __webpack_exports__useLang = __WEBPACK_EXTERNAL_MODULE__hooks_js_5a9aefb7__.useLang;
|
|
32
|
-
var __webpack_exports__useLocation = __WEBPACK_EXTERNAL_MODULE_react_router_dom_5358f3fe__.useLocation;
|
|
33
|
-
var __webpack_exports__useNavigate = __WEBPACK_EXTERNAL_MODULE_react_router_dom_5358f3fe__.useNavigate;
|
|
34
|
-
var __webpack_exports__usePageData = __WEBPACK_EXTERNAL_MODULE__hooks_js_5a9aefb7__.usePageData;
|
|
35
|
-
var __webpack_exports__useSearchParams = __WEBPACK_EXTERNAL_MODULE_react_router_dom_5358f3fe__.useSearchParams;
|
|
36
|
-
var __webpack_exports__useVersion = __WEBPACK_EXTERNAL_MODULE__hooks_js_5a9aefb7__.useVersion;
|
|
37
|
-
var __webpack_exports__useViewTransition = __WEBPACK_EXTERNAL_MODULE__hooks_js_5a9aefb7__.useViewTransition;
|
|
38
|
-
var __webpack_exports__useWindowSize = __WEBPACK_EXTERNAL_MODULE__hooks_js_5a9aefb7__.useWindowSize;
|
|
39
|
-
var __webpack_exports__withBase = __WEBPACK_EXTERNAL_MODULE__utils_js_d88b7fe1__.withBase;
|
|
40
|
-
export { __webpack_exports__BrowserRouter as BrowserRouter, __webpack_exports__Content as Content, __webpack_exports__DataContext as DataContext, __webpack_exports__Helmet as Helmet, __webpack_exports__NoSSR as NoSSR, __webpack_exports__ThemeContext as ThemeContext, __webpack_exports__addLeadingSlash as addLeadingSlash, __webpack_exports__createPortal as createPortal, __webpack_exports__flushSync as flushSync, __webpack_exports__isEqualPath as isEqualPath, __webpack_exports__isProduction as isProduction, __webpack_exports__matchPath as matchPath, __webpack_exports__matchRoutes as matchRoutes, __webpack_exports__normalizeHrefInRuntime as normalizeHrefInRuntime, __webpack_exports__normalizeImagePath as normalizeImagePath, __webpack_exports__normalizeRoutePath as normalizeRoutePath, __webpack_exports__normalizeSlash as normalizeSlash, __webpack_exports__pathnameToRouteService as pathnameToRouteService, __webpack_exports__removeBase as removeBase, __webpack_exports__removeTrailingSlash as removeTrailingSlash, __webpack_exports__useDark as useDark, __webpack_exports__useI18n as useI18n, __webpack_exports__useLang as useLang, __webpack_exports__useLocation as useLocation, __webpack_exports__useNavigate as useNavigate, __webpack_exports__usePageData as usePageData, __webpack_exports__useSearchParams as useSearchParams, __webpack_exports__useVersion as useVersion, __webpack_exports__useViewTransition as useViewTransition, __webpack_exports__useWindowSize as useWindowSize, __webpack_exports__withBase as withBase };
|
|
1
|
+
import { Head } from "@unhead/react";
|
|
2
|
+
import { createPortal, flushSync } from "react-dom";
|
|
3
|
+
import { BrowserRouter, matchPath, matchRoutes, useLocation, useNavigate, useSearchParams } from "react-router-dom";
|
|
4
|
+
import { Content } from "./Content.js";
|
|
5
|
+
import { ThemeContext, useDark } from "./hooks/useDark.js";
|
|
6
|
+
import { useFrontmatter } from "./hooks/useFrontmatter.js";
|
|
7
|
+
import { useI18n } from "./hooks/useI18n.js";
|
|
8
|
+
import { useLang } from "./hooks/useLang.js";
|
|
9
|
+
import { useLocaleSiteData } from "./hooks/useLocaleSiteData.js";
|
|
10
|
+
import { useNav } from "./hooks/useNav.js";
|
|
11
|
+
import { PageContext, usePage } from "./hooks/usePage.js";
|
|
12
|
+
import { usePageData } from "./hooks/usePageData.js";
|
|
13
|
+
import { usePages } from "./hooks/usePages.js";
|
|
14
|
+
import { getSidebarDataGroup, useSidebar } from "./hooks/useSidebar.js";
|
|
15
|
+
import { useSite } from "./hooks/useSite.js";
|
|
16
|
+
import { useVersion } from "./hooks/useVersion.js";
|
|
17
|
+
import { useWindowSize } from "./hooks/useWindowSize.js";
|
|
18
|
+
import { NoSSR } from "./NoSSR.js";
|
|
19
|
+
import { isActive, pathnameToRouteService } from "./route.js";
|
|
20
|
+
import { addLeadingSlash, cleanUrlByConfig, isEqualPath, isProduction, normalizeHrefInRuntime, normalizeImagePath, removeBase, removeTrailingSlash, withBase } from "./utils.js";
|
|
21
|
+
export { BrowserRouter, Content, Head, NoSSR, PageContext, ThemeContext, addLeadingSlash, cleanUrlByConfig, createPortal, flushSync, getSidebarDataGroup, isActive, isEqualPath, isProduction, matchPath, matchRoutes, normalizeHrefInRuntime, normalizeImagePath, pathnameToRouteService, removeBase, removeTrailingSlash, useDark, useFrontmatter, useI18n, useLang, useLocaleSiteData, useLocation, useNav, useNavigate, usePage, usePageData, usePages, useSearchParams, useSidebar, useSite, useVersion, useWindowSize, withBase };
|
package/dist/route.d.ts
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import type { Route } from '@rspress/shared';
|
|
2
|
-
export declare function normalizeRoutePath(routePath: string): string;
|
|
3
2
|
/**
|
|
4
3
|
* this is a bridge of two core features Sidebar and RouteService
|
|
5
4
|
* @param pathname useLocation().pathname
|
|
6
5
|
* @returns
|
|
7
6
|
*/
|
|
8
7
|
export declare function pathnameToRouteService(pathname: string): Route | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* link: /api/config
|
|
10
|
+
* currentPathname:
|
|
11
|
+
* 0. /api/config
|
|
12
|
+
* 1. /api/config.html
|
|
13
|
+
* 2. /api/config/
|
|
14
|
+
* 3. /api/config/index
|
|
15
|
+
* 4. /api/config/index.html
|
|
16
|
+
* @param itemLink
|
|
17
|
+
* @param currentPathname
|
|
18
|
+
* @returns
|
|
19
|
+
*/
|
|
20
|
+
export declare function isActive(itemLink: string, currentPathname: string): boolean;
|
package/dist/route.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { matchPath, matchRoutes } from "react-router-dom";
|
|
2
|
+
import { routes } from "virtual-routes";
|
|
3
3
|
function normalizeRoutePath(routePath) {
|
|
4
4
|
return decodeURIComponent(routePath).replace(/\.html$/, '').replace(/\/index$/, '/');
|
|
5
5
|
}
|
|
@@ -7,9 +7,15 @@ const cache = new Map();
|
|
|
7
7
|
function pathnameToRouteService(pathname) {
|
|
8
8
|
const cacheItem = cache.get(pathname);
|
|
9
9
|
if (cacheItem) return cacheItem;
|
|
10
|
-
const matched =
|
|
10
|
+
const matched = matchRoutes(routes, normalizeRoutePath(pathname));
|
|
11
11
|
const route = matched?.[0]?.route;
|
|
12
12
|
if (route) cache.set(pathname, route);
|
|
13
13
|
return route;
|
|
14
14
|
}
|
|
15
|
-
|
|
15
|
+
function isActive(itemLink, currentPathname) {
|
|
16
|
+
const normalizedItemLink = normalizeRoutePath(itemLink);
|
|
17
|
+
const normalizedCurrentPathname = normalizeRoutePath(currentPathname);
|
|
18
|
+
const linkMatched = matchPath(normalizedItemLink, normalizedCurrentPathname);
|
|
19
|
+
return null !== linkMatched;
|
|
20
|
+
}
|
|
21
|
+
export { isActive, pathnameToRouteService };
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import { addLeadingSlash, isProduction,
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { addLeadingSlash, isProduction, removeTrailingSlash } from '@rspress/shared';
|
|
2
|
+
declare function withBase(url?: string): string;
|
|
3
|
+
declare function removeBase(url: string): string;
|
|
4
|
+
declare function isEqualPath(a: string, b: string): boolean;
|
|
5
|
+
declare function normalizeHrefInRuntime(link: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* we do cleanUrls in runtime side
|
|
8
|
+
*/
|
|
9
|
+
declare function cleanUrlByConfig(link: string): string;
|
|
10
|
+
declare function normalizeImagePath(imagePath: string): string;
|
|
11
|
+
export { addLeadingSlash, removeTrailingSlash, isProduction, normalizeImagePath, cleanUrlByConfig, removeBase, withBase, isEqualPath, normalizeHrefInRuntime, };
|
package/dist/utils.js
CHANGED
|
@@ -1,30 +1,28 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
function
|
|
4
|
-
return
|
|
1
|
+
import { addLeadingSlash, isDataUrl, isExternalUrl, isProduction, normalizeHref, removeBase, removeHash, removeTrailingSlash, withBase } from "@rspress/shared";
|
|
2
|
+
import virtual_site_data from "virtual-site-data";
|
|
3
|
+
function utils_withBase(url = '/') {
|
|
4
|
+
return withBase(url, virtual_site_data.base);
|
|
5
5
|
}
|
|
6
|
-
function
|
|
7
|
-
return
|
|
6
|
+
function utils_removeBase(url) {
|
|
7
|
+
return removeBase(url, virtual_site_data.base);
|
|
8
8
|
}
|
|
9
9
|
function isEqualPath(a, b) {
|
|
10
|
-
return
|
|
10
|
+
return utils_removeBase(normalizeHref(removeHash(a), true)) === utils_removeBase(normalizeHref(removeHash(b), true));
|
|
11
11
|
}
|
|
12
|
-
function normalizeHrefInRuntime(
|
|
13
|
-
const cleanUrls = Boolean(
|
|
14
|
-
return
|
|
12
|
+
function normalizeHrefInRuntime(link) {
|
|
13
|
+
const cleanUrls = Boolean(virtual_site_data?.route?.cleanUrls);
|
|
14
|
+
return normalizeHref(link, cleanUrls);
|
|
15
|
+
}
|
|
16
|
+
function cleanUrlByConfig(link) {
|
|
17
|
+
if (virtual_site_data?.route?.cleanUrls) return normalizeHref(link, true);
|
|
18
|
+
return link;
|
|
15
19
|
}
|
|
16
20
|
function normalizeImagePath(imagePath) {
|
|
17
|
-
const isProd = (0, __WEBPACK_EXTERNAL_MODULE__rspress_shared_baa012d0__.isProduction)();
|
|
18
|
-
if (!isProd) return imagePath;
|
|
19
21
|
if (isAbsoluteUrl(imagePath)) return imagePath;
|
|
20
22
|
if (!imagePath.startsWith('/')) return imagePath;
|
|
21
|
-
return
|
|
23
|
+
return utils_withBase(imagePath);
|
|
22
24
|
}
|
|
23
25
|
function isAbsoluteUrl(path) {
|
|
24
|
-
return
|
|
26
|
+
return isExternalUrl(path) || isDataUrl(path) || path.startsWith('//');
|
|
25
27
|
}
|
|
26
|
-
|
|
27
|
-
var __webpack_exports__isProduction = __WEBPACK_EXTERNAL_MODULE__rspress_shared_baa012d0__.isProduction;
|
|
28
|
-
var __webpack_exports__normalizeSlash = __WEBPACK_EXTERNAL_MODULE__rspress_shared_baa012d0__.normalizeSlash;
|
|
29
|
-
var __webpack_exports__removeTrailingSlash = __WEBPACK_EXTERNAL_MODULE__rspress_shared_baa012d0__.removeTrailingSlash;
|
|
30
|
-
export { isAbsoluteUrl, isEqualPath, normalizeHrefInRuntime, normalizeImagePath, removeBase, withBase, __webpack_exports__addLeadingSlash as addLeadingSlash, __webpack_exports__isProduction as isProduction, __webpack_exports__normalizeSlash as normalizeSlash, __webpack_exports__removeTrailingSlash as removeTrailingSlash };
|
|
28
|
+
export { addLeadingSlash, cleanUrlByConfig, isEqualPath, isProduction, normalizeHrefInRuntime, normalizeImagePath, utils_removeBase as removeBase, removeTrailingSlash, utils_withBase as withBase };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rspress/runtime",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.30",
|
|
4
4
|
"description": "The Runtime of Rspress Documentation Framework",
|
|
5
5
|
"bugs": "https://github.com/web-infra-dev/rspress/issues",
|
|
6
6
|
"repository": {
|
|
@@ -13,10 +13,7 @@
|
|
|
13
13
|
"*.css",
|
|
14
14
|
"*.less",
|
|
15
15
|
"*.sass",
|
|
16
|
-
"*.scss"
|
|
17
|
-
"**/virtual-global-styles.js",
|
|
18
|
-
"virtual-global-styles",
|
|
19
|
-
"./src/theme-default/styles/index.ts"
|
|
16
|
+
"*.scss"
|
|
20
17
|
],
|
|
21
18
|
"type": "module",
|
|
22
19
|
"exports": {
|
|
@@ -36,19 +33,19 @@
|
|
|
36
33
|
"server.d.ts"
|
|
37
34
|
],
|
|
38
35
|
"dependencies": {
|
|
39
|
-
"@
|
|
40
|
-
"react": "^19.1.
|
|
41
|
-
"react-dom": "^19.1.
|
|
42
|
-
"react-router-dom": "^6.
|
|
43
|
-
"@rspress/shared": "2.0.0-beta.
|
|
36
|
+
"@unhead/react": "^2.0.14",
|
|
37
|
+
"react": "^19.1.1",
|
|
38
|
+
"react-dom": "^19.1.1",
|
|
39
|
+
"react-router-dom": "^6.30.1",
|
|
40
|
+
"@rspress/shared": "2.0.0-beta.30"
|
|
44
41
|
},
|
|
45
42
|
"devDependencies": {
|
|
46
|
-
"@rsbuild/plugin-react": "~1.
|
|
47
|
-
"@rslib/core": "0.
|
|
43
|
+
"@rsbuild/plugin-react": "~1.4.0",
|
|
44
|
+
"@rslib/core": "0.12.4",
|
|
48
45
|
"@types/jest": "~29.5.14",
|
|
49
|
-
"@types/react": "^
|
|
50
|
-
"@types/react-dom": "^
|
|
51
|
-
"rsbuild-plugin-publint": "^0.3.
|
|
46
|
+
"@types/react": "^19.1.12",
|
|
47
|
+
"@types/react-dom": "^19.1.9",
|
|
48
|
+
"rsbuild-plugin-publint": "^0.3.3",
|
|
52
49
|
"typescript": "^5.8.2",
|
|
53
50
|
"@rspress/config": "1.0.0"
|
|
54
51
|
},
|
|
@@ -57,7 +54,6 @@
|
|
|
57
54
|
},
|
|
58
55
|
"publishConfig": {
|
|
59
56
|
"access": "public",
|
|
60
|
-
"provenance": true,
|
|
61
57
|
"registry": "https://registry.npmjs.org/"
|
|
62
58
|
},
|
|
63
59
|
"scripts": {
|
package/server.js
CHANGED
package/dist/hooks.d.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { PageData } from '@rspress/shared';
|
|
2
|
-
import { type ReactElement } from 'react';
|
|
3
|
-
declare global {
|
|
4
|
-
interface Window {
|
|
5
|
-
__MODERN_PAGE_DATA__: any;
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
interface IDataContext {
|
|
9
|
-
data: PageData;
|
|
10
|
-
setData?: (data: PageData) => void;
|
|
11
|
-
}
|
|
12
|
-
interface IThemeContext {
|
|
13
|
-
theme: 'light' | 'dark';
|
|
14
|
-
setTheme?: (theme: 'light' | 'dark') => void;
|
|
15
|
-
}
|
|
16
|
-
export declare const DataContext: import("react").Context<IDataContext>;
|
|
17
|
-
export declare const ThemeContext: import("react").Context<IThemeContext>;
|
|
18
|
-
export declare function usePageData(): PageData;
|
|
19
|
-
export declare function useLang(): string;
|
|
20
|
-
export declare function useVersion(): string;
|
|
21
|
-
export declare function useDark(): boolean;
|
|
22
|
-
export declare function useI18n<T = Record<string, Record<string, string>>>(): (key: keyof T) => any;
|
|
23
|
-
export declare function useViewTransition(dom: ReactElement): ReactElement<any, string | import("react").JSXElementConstructor<any>>;
|
|
24
|
-
export declare function useWindowSize(initialWidth?: number, initialHeight?: number): {
|
|
25
|
-
width: number;
|
|
26
|
-
height: number;
|
|
27
|
-
};
|
|
28
|
-
export {};
|
package/dist/hooks.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
|
|
2
|
-
import * as __WEBPACK_EXTERNAL_MODULE_react_dom_7136dc57__ from "react-dom";
|
|
3
|
-
import * as __WEBPACK_EXTERNAL_MODULE_virtual_i18n_text_58811962__ from "virtual-i18n-text";
|
|
4
|
-
const DataContext = (0, __WEBPACK_EXTERNAL_MODULE_react__.createContext)({});
|
|
5
|
-
const ThemeContext = (0, __WEBPACK_EXTERNAL_MODULE_react__.createContext)({});
|
|
6
|
-
function usePageData() {
|
|
7
|
-
const ctx = (0, __WEBPACK_EXTERNAL_MODULE_react__.useContext)(DataContext);
|
|
8
|
-
return ctx.data;
|
|
9
|
-
}
|
|
10
|
-
function useLang() {
|
|
11
|
-
const ctx = (0, __WEBPACK_EXTERNAL_MODULE_react__.useContext)(DataContext);
|
|
12
|
-
return ctx.data.page.lang || '';
|
|
13
|
-
}
|
|
14
|
-
function useVersion() {
|
|
15
|
-
const ctx = (0, __WEBPACK_EXTERNAL_MODULE_react__.useContext)(DataContext);
|
|
16
|
-
return ctx.data.page.version || '';
|
|
17
|
-
}
|
|
18
|
-
function useDark() {
|
|
19
|
-
const ctx = (0, __WEBPACK_EXTERNAL_MODULE_react__.useContext)(ThemeContext);
|
|
20
|
-
return 'dark' === ctx.theme;
|
|
21
|
-
}
|
|
22
|
-
function useI18n() {
|
|
23
|
-
const lang = useLang();
|
|
24
|
-
return (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((key)=>__WEBPACK_EXTERNAL_MODULE_virtual_i18n_text_58811962__["default"][key][lang], [
|
|
25
|
-
lang
|
|
26
|
-
]);
|
|
27
|
-
}
|
|
28
|
-
function useViewTransition(dom) {
|
|
29
|
-
const [element, setElement] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(dom);
|
|
30
|
-
(0, __WEBPACK_EXTERNAL_MODULE_react__.useLayoutEffect)(()=>{
|
|
31
|
-
if (document.startViewTransition && element !== dom) document.startViewTransition(()=>{
|
|
32
|
-
(0, __WEBPACK_EXTERNAL_MODULE_react_dom_7136dc57__.flushSync)(()=>{
|
|
33
|
-
setElement(dom);
|
|
34
|
-
});
|
|
35
|
-
window.dispatchEvent(new Event('RspressReloadContent'));
|
|
36
|
-
});
|
|
37
|
-
else {
|
|
38
|
-
(0, __WEBPACK_EXTERNAL_MODULE_react_dom_7136dc57__.flushSync)(()=>{
|
|
39
|
-
setElement(dom);
|
|
40
|
-
});
|
|
41
|
-
window.dispatchEvent(new Event('RspressReloadContent'));
|
|
42
|
-
}
|
|
43
|
-
}, [
|
|
44
|
-
dom
|
|
45
|
-
]);
|
|
46
|
-
return element;
|
|
47
|
-
}
|
|
48
|
-
function useWindowSize(initialWidth, initialHeight) {
|
|
49
|
-
const [size, setSize] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)({
|
|
50
|
-
width: initialWidth ?? Number.POSITIVE_INFINITY,
|
|
51
|
-
height: initialHeight ?? Number.POSITIVE_INFINITY
|
|
52
|
-
});
|
|
53
|
-
(0, __WEBPACK_EXTERNAL_MODULE_react__.useLayoutEffect)(()=>{
|
|
54
|
-
const handleResize = ()=>{
|
|
55
|
-
setSize({
|
|
56
|
-
width: window.innerWidth,
|
|
57
|
-
height: window.innerHeight
|
|
58
|
-
});
|
|
59
|
-
};
|
|
60
|
-
window.addEventListener('resize', handleResize);
|
|
61
|
-
return ()=>{
|
|
62
|
-
window.removeEventListener('resize', handleResize);
|
|
63
|
-
};
|
|
64
|
-
}, []);
|
|
65
|
-
return size;
|
|
66
|
-
}
|
|
67
|
-
export { DataContext, ThemeContext, useDark, useI18n, useLang, usePageData, useVersion, useViewTransition, useWindowSize };
|