Built-in components
In order to make it easier for you to use these components, the rspress/theme package has been aliased inside Rspress, so you can directly use @theme to import these components.
Badge
The Badge component is used to display a badge. For example:
import { Badge } from '@theme';
function App() {
// Using text prop
return <Badge text="info" type="info" />;
// Using custom children
return (
<Badge>
<img
style={{ height: '18px' }}
src="https://lf3-static.bytednsdoc.com/obj/eden-cn/uhbfnupenuhf/rspress/rspress-logo.png"
/>
<span>Rspress</span>
</Badge>
);
}The effect is as follows:
tip info warning danger outlinedCustom children:
Rspress
Github
Inlined with text Tip
H5 Info
H4 Warning
H3 Danger
The types of props included are as follows:
interface BadgeProps {
/**
* The content to display inside the badge. Can be a string or React nodes.
*/
children?: React.ReactNode;
/**
* The type of badge, which determines its color and style.
* @default 'tip'
*/
type?: 'tip' | 'info' | 'warning' | 'danger';
/**
* The text content to display inside the badge (for backwards compatibility).
*/
text?: string;
/**
* Whether to display the badge with an outline style.
* @default false
*/
outline?: boolean;
}Head
It is generally used to set custom head content in documents (based on unhead). The usage is as follows:
// Below is a custom component, you can import it into your document
import { Head } from '@rspress/core/runtime';
function App() {
return (
<Head>
<meta property="og:description" content="Out-of-box Rspack build tools" />
</Head>
);
}HomeFeature
Feature component in Hero page, look the effect in this website.
import { HomeFeature } from '@rspress/core/theme';
interface Feature {
title: string;
details: string;
icon: string;
// only support [3, 4, 6]
span?: number;
link?: string;
}
export type Features = Feature[];HomeHero
Hero component in Hero page.
import { HomeHero } from '@rspress/core/theme';
interface Hero {
name: string;
text: string;
tagline: string;
image?: {
src: string | { dark: string; light: string };
alt: string;
};
actions: {
text: string;
link: string;
theme: 'brand' | 'alt';
}[];
}LastUpdated
The LastUpdated component is used to display the last update time of the current page. For example:
import { LastUpdated } from '@theme';
function App() {
return <LastUpdated />;
}If lastUpdated: true is not configured in the default theme, you need to install and register the @rspress/plugin-last-updated plugin.
NoSSR
Used to skip the ssr for some components. For example:
import { NoSSR } from '@rspress/core/runtime';
const Component = () => {
return (
<NoSSR>
<div>The content here will only be rendered on the client side</div>
</NoSSR>
);
};Overview
Overview component, look the effect in this website
import { Overview } from '@rspress/core/theme';
interface GroupItem {
text?: string;
link?: string;
headers?: Header[];
}
interface Group {
name: string;
items: GroupItem[];
}
interface OverviewProps {
// content before data rendering
content?: React.ReactNode;
// data
groups?: Group[];
// default title
defaultGroupTitle?: string;
// headers displayed in the overview page of the file
overviewHeaders?: number[];
}PackageManagerTabs
The PackageManagerTabs component is used to display commands for different package managers in the documentation. The usage is as follows:
import { PackageManagerTabs } from '@theme';
function App() {
return <PackageManagerTabs command="install rspress -D" />;
}The effect is as follows:
npm install rspress -DThe types of props included are as follows:
type PackageManagerTabProps = (
| {
command: string;
/**
* If true, the command will be interpreted as a shell command and prefixed with npx for npm,
* or the package manager binary for others.
*/
exec?: boolean;
}
| {
command: {
// Used to set commands for different package managers
npm?: string;
yarn?: string;
pnpm?: string;
bun?: string;
};
exec?: never;
}
) &
// Used to set additional tabs
{
additionalTabs?: {
// Used to set additional package managers
tool: string;
// Used to set the icon of the additional package manager
icon?: ReactNode;
}[];
};When command is set to a string, it will default to displaying three tabs: npm, yarn, pnpm and bun, and the component will automatically add the corresponding package manager command before the command. If you need to display additional tabs, you can achieve this through additionalTabs.
For the string variant of the command prop, an optional exec prop can be used for presenting binary execution usage (by changing the NPM tab's command prefix to npx).
In the install command, special processing has been done for yarn, pnpm and bun. If your command is install some-packages, the install will be automatically replaced with add in the yarn/pnpm/bun tab.
PrevNextPage
The PrevNextPage component is used to display the previous and next pages of the current page. For example:
import { PrevNextPage } from '@theme';
function App() {
return (
<PrevNextPage type="prev" text="Previous Page" href="https://rspress.rs/" />
);
}The types of props included are as follows:
interface PrevNextPageProps {
// Set the link to the previous page or the next page through type
type: 'prev' | 'next';
// Used to set the text of the previous page or the next page
text: string;
// Used to set the link to the previous page or the next page
href: string;
}SourceCode
The SourceCode component is used to jump to the source code. For example:
import { SourceCode } from '@theme';
function App() {
return (
<SourceCode href="https://github.com/web-infra-dev/rspress/blob/main/packages/theme-default/src/components/SourceCode/index.tsx" />
);
}The effect is as follows:
The types of props included are as follows:
interface SourceCodeProps {
// Used to set the link to the source code
href: string;
// Used to set source platform
platform?: 'github' | 'gitlab';
}Steps
The Steps component is used to turn your content into a visual representation of steps.
import { Steps } from '@theme';
function App() {
return (
<Steps>
### Step 1
Body for Step 1.
### Step 2
> Body for Step 2.
</Steps>
);
}The effect is as follows:
Step 1
Body for Step 1.
Step 2
Body for Step 2.
Tab/Tabs
You can use the Tab and Tabs component in the document to achieve the effect of tab switching. For example:
import { Tab, Tabs } from '@rspress/core/theme';
<Tabs>
<Tab label="Tab 1">Tab 1 content</Tab>
<Tab label="Tab 2">Tab 2 content</Tab>
</Tabs>Code blocks
Using Tabs component to switch multiple code blocks.
import { Tab, Tabs } from '@rspress/core/theme';
<Tabs>
<Tab label="Tab 1">
```tsx title="src/index.mjs"
import foo from 'foo';
import bar from 'bar';
```
</Tab>
<Tab label="Tab 2">
```tsx title="src/index.cjs"
const foo = require('foo');
const bar = require('bar');
```
</Tab>
</Tabs>import foo from 'foo';
import bar from 'bar';Props
The props type of the Tabs component is as follows:
interface TabsProps {
children: React.ReactNode;
defaultValue?: string;
groupId?: string;
tabPosition?: 'left' | 'center';
}defaultValueis used to set the tab item selected by default. This value will be compared with the value field of the Tab component props, and if they are equal, the tab will be selected.groupIdis used to sync the selected tab item between multiple Tabs components.The groups with the same groupId will be synchronized.tabPositionis used to set the position of the tab list, it has two values:leftandcenter, the default isleft.
The props types of the Tab component are as follows:
interface TabProps {
label: string;
// Used to identify the current tab, if not passed, the default label will be used
value?: string;
children: React.ReactNode;
}The value field is used to identify the current tab, if not passed, the default label will be used.
CodeBlockRuntime
Render code block in runtime
import { CodeBlockRuntime } from '@theme';
function App() {
return (
<CodeBlockRuntime
lang="js"
title="index.js"
code={`console.log('Hello World!')`}
shikiOptions={{
{/* shikiOptions */}
}}
/>
);
}