@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.
Files changed (40) hide show
  1. package/dist/Content.js +19 -17
  2. package/dist/NoSSR.js +5 -5
  3. package/dist/hooks/useDark.d.ts +7 -0
  4. package/dist/hooks/useDark.js +7 -0
  5. package/dist/hooks/useFrontmatter.d.ts +4 -0
  6. package/dist/hooks/useFrontmatter.js +9 -0
  7. package/dist/hooks/useI18n.d.ts +1 -0
  8. package/dist/hooks/useI18n.js +10 -0
  9. package/dist/hooks/useLang.d.ts +1 -0
  10. package/dist/hooks/useLang.js +6 -0
  11. package/dist/hooks/useLocaleSiteData.d.ts +5 -0
  12. package/dist/hooks/useLocaleSiteData.js +27 -0
  13. package/dist/hooks/useNav.d.ts +1 -0
  14. package/dist/hooks/useNav.js +12 -0
  15. package/dist/hooks/usePage.d.ts +10 -0
  16. package/dist/hooks/usePage.js +9 -0
  17. package/dist/hooks/usePageData.d.ts +5 -0
  18. package/dist/hooks/usePageData.js +16 -0
  19. package/dist/hooks/usePages.d.ts +4 -0
  20. package/dist/hooks/usePages.js +7 -0
  21. package/dist/hooks/useSidebar.d.ts +9 -0
  22. package/dist/hooks/useSidebar.js +23 -0
  23. package/dist/hooks/useSite.d.ts +4 -0
  24. package/dist/hooks/useSite.js +7 -0
  25. package/dist/hooks/useVersion.d.ts +1 -0
  26. package/dist/hooks/useVersion.js +6 -0
  27. package/dist/hooks/useViewTransition.d.ts +2 -0
  28. package/dist/hooks/useViewTransition.js +23 -0
  29. package/dist/hooks/useWindowSize.d.ts +9 -0
  30. package/dist/hooks/useWindowSize.js +22 -0
  31. package/dist/index.d.ts +20 -8
  32. package/dist/index.js +21 -40
  33. package/dist/route.d.ts +13 -1
  34. package/dist/route.js +10 -4
  35. package/dist/utils.d.ts +11 -8
  36. package/dist/utils.js +17 -19
  37. package/package.json +12 -16
  38. package/server.js +1 -1
  39. package/dist/hooks.d.ts +0 -28
  40. package/dist/hooks.js +0 -67
package/dist/Content.js CHANGED
@@ -1,25 +1,27 @@
1
- import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime";
2
- import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
3
- import * as __WEBPACK_EXTERNAL_MODULE_react_router_dom_5358f3fe__ from "react-router-dom";
4
- import * as __WEBPACK_EXTERNAL_MODULE_virtual_site_data_fa42d4c0__ from "virtual-site-data";
5
- import * as __WEBPACK_EXTERNAL_MODULE__hooks_js_5a9aefb7__ from "./hooks.js";
6
- import * as __WEBPACK_EXTERNAL_MODULE__route_js_d0361f8a__ from "./route.js";
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 (__WEBPACK_EXTERNAL_MODULE_virtual_site_data_fa42d4c0__["default"]?.themeConfig?.enableContentAnimation) element = (0, __WEBPACK_EXTERNAL_MODULE__hooks_js_5a9aefb7__.useViewTransition)(props.el);
9
+ if (virtual_site_data?.themeConfig?.enableContentAnimation) element = useViewTransition(props.el);
10
10
  return element;
11
11
  }
12
- const TransitionContent = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react__.memo)(TransitionContentImpl, (prevProps, nextProps)=>prevProps.el === nextProps.el);
13
- const Content = ({ fallback = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.Fragment, {}) })=>{
14
- const { pathname } = (0, __WEBPACK_EXTERNAL_MODULE_react_router_dom_5358f3fe__.useLocation)();
15
- const matched = (0, __WEBPACK_EXTERNAL_MODULE__route_js_d0361f8a__.pathnameToRouteService)(pathname);
16
- if (!matched) return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {});
17
- const routesElement = matched.element;
18
- if (!process.env.__REACT_GTE_18__ && process.env.__SSR__) return routesElement;
19
- return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE_react__.Suspense, {
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__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(TransitionContent, {
22
- el: routesElement
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 * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime";
2
- import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
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] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(false);
6
- (0, __WEBPACK_EXTERNAL_MODULE_react__.useEffect)(()=>{
5
+ const [isMounted, setIsMounted] = useState(false);
6
+ useEffect(()=>{
7
7
  setIsMounted(true);
8
8
  }, []);
9
9
  if (!isMounted) return null;
10
- return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.Fragment, {
10
+ return /*#__PURE__*/ jsx(Fragment, {
11
11
  children: children
12
12
  });
13
13
  }
@@ -0,0 +1,7 @@
1
+ interface IThemeContext {
2
+ theme: 'light' | 'dark';
3
+ setTheme?: (theme: 'light' | 'dark') => void;
4
+ }
5
+ export declare const ThemeContext: import("react").Context<IThemeContext>;
6
+ export declare function useDark(): boolean;
7
+ export {};
@@ -0,0 +1,7 @@
1
+ import { createContext, useContext } from "react";
2
+ const ThemeContext = createContext({});
3
+ function useDark() {
4
+ const ctx = useContext(ThemeContext);
5
+ return 'dark' === ctx.theme;
6
+ }
7
+ export { ThemeContext, useDark };
@@ -0,0 +1,4 @@
1
+ import type { FrontMatterMeta } from '@rspress/shared';
2
+ export declare const useFrontmatter: () => {
3
+ frontmatter: FrontMatterMeta;
4
+ };
@@ -0,0 +1,9 @@
1
+ import { usePage } from "./usePage.js";
2
+ const useFrontmatter = ()=>{
3
+ const { page } = usePage();
4
+ const { frontmatter = {} } = page;
5
+ return {
6
+ frontmatter
7
+ };
8
+ };
9
+ export { useFrontmatter };
@@ -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,6 @@
1
+ import { usePage } from "./usePage.js";
2
+ function useLang() {
3
+ const { page } = usePage();
4
+ return page.lang || '';
5
+ }
6
+ export { useLang };
@@ -0,0 +1,5 @@
1
+ import { type NormalizedLocales } from '@rspress/shared';
2
+ /**
3
+ * @deprecated
4
+ */
5
+ export declare function useLocaleSiteData(): NormalizedLocales;
@@ -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,9 @@
1
+ import { createContext, useContext } from "react";
2
+ const PageContext = createContext({});
3
+ function usePage() {
4
+ const ctx = useContext(PageContext);
5
+ return {
6
+ page: ctx.data
7
+ };
8
+ }
9
+ export { PageContext, usePage };
@@ -0,0 +1,5 @@
1
+ import type { PageDataLegacy } from '@rspress/shared';
2
+ /**
3
+ * should use `usePage` and `useSite` instead
4
+ */
5
+ export declare function usePageData(): PageDataLegacy;
@@ -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,4 @@
1
+ import type { PageData } from '@rspress/shared';
2
+ export declare function usePages(): {
3
+ pages: PageData['pages'];
4
+ };
@@ -0,0 +1,7 @@
1
+ import { pageData } from "virtual-page-data";
2
+ function usePages() {
3
+ return {
4
+ pages: pageData.pages
5
+ };
6
+ }
7
+ export { usePages };
@@ -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,4 @@
1
+ import type { SiteData } from '@rspress/shared';
2
+ export declare function useSite(): {
3
+ site: SiteData;
4
+ };
@@ -0,0 +1,7 @@
1
+ import virtual_site_data from "virtual-site-data";
2
+ function useSite() {
3
+ return {
4
+ site: virtual_site_data
5
+ };
6
+ }
7
+ export { useSite };
@@ -0,0 +1 @@
1
+ export declare function useVersion(): string;
@@ -0,0 +1,6 @@
1
+ import { usePage } from "./usePage.js";
2
+ function useVersion() {
3
+ const { page } = usePage();
4
+ return page.version || '';
5
+ }
6
+ export { useVersion };
@@ -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,9 @@
1
+ declare global {
2
+ interface Window {
3
+ __MODERN_PAGE_DATA__: any;
4
+ }
5
+ }
6
+ export declare function useWindowSize(initialWidth?: number, initialHeight?: number): {
7
+ width: number;
8
+ height: number;
9
+ };
@@ -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 { DataContext, ThemeContext, useDark, useI18n, useLang, usePageData, useVersion, useViewTransition, useWindowSize, } from './hooks';
2
- export { Content } from './Content';
3
- export { normalizeHrefInRuntime, normalizeImagePath, withBase, removeBase, addLeadingSlash, removeTrailingSlash, normalizeSlash, isProduction, isEqualPath, } from './utils';
4
- export { useLocation, useNavigate, matchRoutes, BrowserRouter, useSearchParams, matchPath, } from 'react-router-dom';
5
- export { createPortal, flushSync, } from 'react-dom';
6
- export { pathnameToRouteService, normalizeRoutePath, } from './route';
7
- export { Helmet } from '@dr.pogodin/react-helmet';
8
- export { NoSSR } from './NoSSR';
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 * as __WEBPACK_EXTERNAL_MODULE__hooks_js_5a9aefb7__ from "./hooks.js";
2
- import * as __WEBPACK_EXTERNAL_MODULE__Content_js_303edc82__ from "./Content.js";
3
- import * as __WEBPACK_EXTERNAL_MODULE__utils_js_d88b7fe1__ from "./utils.js";
4
- import * as __WEBPACK_EXTERNAL_MODULE_react_router_dom_5358f3fe__ from "react-router-dom";
5
- import * as __WEBPACK_EXTERNAL_MODULE_react_dom_7136dc57__ from "react-dom";
6
- import * as __WEBPACK_EXTERNAL_MODULE__route_js_d0361f8a__ from "./route.js";
7
- import * as __WEBPACK_EXTERNAL_MODULE__dr_pogodin_react_helmet_ecf718aa__ from "@dr.pogodin/react-helmet";
8
- import * as __WEBPACK_EXTERNAL_MODULE__NoSSR_js_7f7b6e71__ from "./NoSSR.js";
9
- var __webpack_exports__BrowserRouter = __WEBPACK_EXTERNAL_MODULE_react_router_dom_5358f3fe__.BrowserRouter;
10
- var __webpack_exports__Content = __WEBPACK_EXTERNAL_MODULE__Content_js_303edc82__.Content;
11
- var __webpack_exports__DataContext = __WEBPACK_EXTERNAL_MODULE__hooks_js_5a9aefb7__.DataContext;
12
- var __webpack_exports__Helmet = __WEBPACK_EXTERNAL_MODULE__dr_pogodin_react_helmet_ecf718aa__.Helmet;
13
- var __webpack_exports__NoSSR = __WEBPACK_EXTERNAL_MODULE__NoSSR_js_7f7b6e71__.NoSSR;
14
- var __webpack_exports__ThemeContext = __WEBPACK_EXTERNAL_MODULE__hooks_js_5a9aefb7__.ThemeContext;
15
- var __webpack_exports__addLeadingSlash = __WEBPACK_EXTERNAL_MODULE__utils_js_d88b7fe1__.addLeadingSlash;
16
- var __webpack_exports__createPortal = __WEBPACK_EXTERNAL_MODULE_react_dom_7136dc57__.createPortal;
17
- var __webpack_exports__flushSync = __WEBPACK_EXTERNAL_MODULE_react_dom_7136dc57__.flushSync;
18
- var __webpack_exports__isEqualPath = __WEBPACK_EXTERNAL_MODULE__utils_js_d88b7fe1__.isEqualPath;
19
- var __webpack_exports__isProduction = __WEBPACK_EXTERNAL_MODULE__utils_js_d88b7fe1__.isProduction;
20
- var __webpack_exports__matchPath = __WEBPACK_EXTERNAL_MODULE_react_router_dom_5358f3fe__.matchPath;
21
- var __webpack_exports__matchRoutes = __WEBPACK_EXTERNAL_MODULE_react_router_dom_5358f3fe__.matchRoutes;
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 * as __WEBPACK_EXTERNAL_MODULE__VIRTUAL_ROUTES__3c8bd3e0__ from "__VIRTUAL_ROUTES__";
2
- import * as __WEBPACK_EXTERNAL_MODULE_react_router_dom_5358f3fe__ from "react-router-dom";
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 = (0, __WEBPACK_EXTERNAL_MODULE_react_router_dom_5358f3fe__.matchRoutes)(__WEBPACK_EXTERNAL_MODULE__VIRTUAL_ROUTES__3c8bd3e0__.routes, normalizeRoutePath(pathname));
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
- export { normalizeRoutePath, pathnameToRouteService };
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, normalizeSlash, removeTrailingSlash } from '@rspress/shared';
2
- export declare function withBase(url?: string): string;
3
- export declare function removeBase(url: string): string;
4
- export declare function isEqualPath(a: string, b: string): boolean;
5
- export declare function normalizeHrefInRuntime(a: string): string;
6
- export declare function normalizeImagePath(imagePath: string): string;
7
- export declare function isAbsoluteUrl(path: string): boolean;
8
- export { addLeadingSlash, removeTrailingSlash, normalizeSlash, isProduction };
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 * as __WEBPACK_EXTERNAL_MODULE__rspress_shared_baa012d0__ from "@rspress/shared";
2
- import * as __WEBPACK_EXTERNAL_MODULE_virtual_site_data_fa42d4c0__ from "virtual-site-data";
3
- function withBase(url = '/') {
4
- return (0, __WEBPACK_EXTERNAL_MODULE__rspress_shared_baa012d0__.withBase)(url, __WEBPACK_EXTERNAL_MODULE_virtual_site_data_fa42d4c0__["default"].base);
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 removeBase(url) {
7
- return (0, __WEBPACK_EXTERNAL_MODULE__rspress_shared_baa012d0__.removeBase)(url, __WEBPACK_EXTERNAL_MODULE_virtual_site_data_fa42d4c0__["default"].base);
6
+ function utils_removeBase(url) {
7
+ return removeBase(url, virtual_site_data.base);
8
8
  }
9
9
  function isEqualPath(a, b) {
10
- return withBase(normalizeHrefInRuntime((0, __WEBPACK_EXTERNAL_MODULE__rspress_shared_baa012d0__.removeHash)(a))) === withBase(normalizeHrefInRuntime((0, __WEBPACK_EXTERNAL_MODULE__rspress_shared_baa012d0__.removeHash)(b)));
10
+ return utils_removeBase(normalizeHref(removeHash(a), true)) === utils_removeBase(normalizeHref(removeHash(b), true));
11
11
  }
12
- function normalizeHrefInRuntime(a) {
13
- const cleanUrls = Boolean(__WEBPACK_EXTERNAL_MODULE_virtual_site_data_fa42d4c0__["default"]?.route?.cleanUrls);
14
- return (0, __WEBPACK_EXTERNAL_MODULE__rspress_shared_baa012d0__.normalizeHref)(a, cleanUrls);
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 withBase(imagePath);
23
+ return utils_withBase(imagePath);
22
24
  }
23
25
  function isAbsoluteUrl(path) {
24
- return (0, __WEBPACK_EXTERNAL_MODULE__rspress_shared_baa012d0__.isExternalUrl)(path) || (0, __WEBPACK_EXTERNAL_MODULE__rspress_shared_baa012d0__.isDataUrl)(path) || path.startsWith('//');
26
+ return isExternalUrl(path) || isDataUrl(path) || path.startsWith('//');
25
27
  }
26
- var __webpack_exports__addLeadingSlash = __WEBPACK_EXTERNAL_MODULE__rspress_shared_baa012d0__.addLeadingSlash;
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",
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
- "@dr.pogodin/react-helmet": "2.0.4",
40
- "react": "^19.1.0",
41
- "react-dom": "^19.1.0",
42
- "react-router-dom": "^6.29.0",
43
- "@rspress/shared": "2.0.0-beta.3"
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.1.1",
47
- "@rslib/core": "0.6.7",
43
+ "@rsbuild/plugin-react": "~1.4.0",
44
+ "@rslib/core": "0.12.4",
48
45
  "@types/jest": "~29.5.14",
49
- "@types/react": "^18.3.20",
50
- "@types/react-dom": "^18.3.6",
51
- "rsbuild-plugin-publint": "^0.3.1",
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
@@ -1,2 +1,2 @@
1
- export { StaticRouter } from 'react-router-dom/server';
2
1
  export { matchPath } from 'react-router-dom';
2
+ export { StaticRouter } from 'react-router-dom/server.mjs';
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 };