This commit is contained in:
sebastien 2025-07-03 13:11:45 +02:00
parent 114875132b
commit d7fb90e2d6
2 changed files with 49 additions and 6 deletions

View file

@ -6,8 +6,8 @@ slug: /sidebar
Creating a sidebar is useful to: Creating a sidebar is useful to:
- Group multiple **related documents** - Group multiple **related documents** into an ordered tree
- **Display a sidebar** on each of those documents - **Display a common sidebar** on each of those documents
- Provide **paginated navigation**, with next/previous button - Provide **paginated navigation**, with next/previous button
To use sidebars on your Docusaurus site: To use sidebars on your Docusaurus site:
@ -160,6 +160,20 @@ export default {
}; };
``` ```
## Passing CSS classes {#passing-css-classes}
To pass CSS classes to a sidebar item, add the optional `className` attribute to any of the items. This is useful to apply visual customizations to specific sidebar items.
```js
{
type: 'doc',
id: 'doc1',
// highlight-start
className: 'sidebar-item--highlighted',
// highlight-end
};
```
## Passing custom props {#passing-custom-props} ## Passing custom props {#passing-custom-props}
To pass in custom props to a sidebar item, add the optional `customProps` object to any of the items. This is useful to apply site customizations by swizzling React components rendering sidebar items. To pass in custom props to a sidebar item, add the optional `customProps` object to any of the items. This is useful to apply site customizations by swizzling React components rendering sidebar items.
@ -177,6 +191,28 @@ To pass in custom props to a sidebar item, add the optional `customProps` object
}; };
``` ```
## Passing a unique key {#passing-custom-props}
Passing a unique `key` attribute can help uniquely identify a sidebar item. Sometimes other attributes (such as `label`) are not enough to distinguish two sidebar items from each other.
```js
{
type: 'category',
// highlight-start
label: 'API', // You may have multiple categories with this widespread label
key: 'api-for-feature-1', // and now, they can be uniquely identified
// highlight-end
};
```
:::info How is this useful?
Docusaurus only uses the `key` attribute to generate unique i18n translation keys. When a translation key conflict happens ([issue](https://github.com/facebook/docusaurus/issues/10913)), Docusaurus will tell you to apply a `key` to distinguish sidebar items.
Alternatively, you may have your own reasons for using the `key` attribute that will be passed to the respective sidebar item React components.
:::
## Sidebar Breadcrumbs {#sidebar-breadcrumbs} ## Sidebar Breadcrumbs {#sidebar-breadcrumbs}
By default, breadcrumbs are rendered at the top, using the "sidebar path" of the current page. By default, breadcrumbs are rendered at the top, using the "sidebar path" of the current page.

View file

@ -11,14 +11,14 @@ import TabItem from '@theme/TabItem';
import BrowserWindow from '@site/src/components/BrowserWindow'; import BrowserWindow from '@site/src/components/BrowserWindow';
``` ```
We have introduced three types of item types in the example in the previous section: `doc`, `category`, and `link`, whose usages are fairly intuitive. We will formally introduce their APIs. There's also a fourth type: `autogenerated`, which we will explain in detail later. The sidebar supports various item types:
- **[Doc](#sidebar-item-doc)**: link to a doc page, associating it with the sidebar - **[Doc](#sidebar-item-doc)**: link to a doc page, associating it with the sidebar
- **[Link](#sidebar-item-link)**: link to any internal or external page - **[Link](#sidebar-item-link)**: link to any internal or external page
- **[Category](#sidebar-item-category)**: creates a dropdown of sidebar items - **[Category](#sidebar-item-category)**: creates a dropdown of sidebar items
- **[Autogenerated](autogenerated.mdx)**: generate a sidebar slice automatically - **[Autogenerated](autogenerated.mdx)**: generate a sidebar slice automatically
- **[HTML](#sidebar-item-html)**: renders pure HTML in the item's position - **[HTML](#sidebar-item-html)**: renders pure HTML in the item's position
- **[\*Ref](multiple-sidebars.mdx#sidebar-item-ref)**: link to a doc page, without making the item take part in navigation generation - **[Ref](multiple-sidebars.mdx#sidebar-item-ref)**: link to a doc page, without making the item take part in navigation generation
## Doc: link to a doc {#sidebar-item-doc} ## Doc: link to a doc {#sidebar-item-doc}
@ -31,6 +31,7 @@ type SidebarItemDoc =
type: 'doc'; type: 'doc';
id: string; id: string;
label: string; // Sidebar label text label: string; // Sidebar label text
key?: string; // Sidebar key to uniquely identify the item
className?: string; // Class name for sidebar label className?: string; // Class name for sidebar label
customProps?: Record<string, unknown>; // Custom props customProps?: Record<string, unknown>; // Custom props
} }
@ -84,8 +85,10 @@ type SidebarItemLink = {
type: 'link'; type: 'link';
label: string; label: string;
href: string; href: string;
className?: string;
description?: string; description?: string;
key?: string;
className?: string;
customProps?: Record<string, unknown>;
}; };
``` ```
@ -126,7 +129,9 @@ type SidebarItemHtml = {
type: 'html'; type: 'html';
value: string; value: string;
defaultStyle?: boolean; // Use default menu item styles defaultStyle?: boolean; // Use default menu item styles
key?: string;
className?: string; className?: string;
customProps?: Record<string, unknown>;
}; };
``` ```
@ -173,8 +178,10 @@ type SidebarItemCategory = {
type: 'category'; type: 'category';
label: string; // Sidebar label text. label: string; // Sidebar label text.
items: SidebarItem[]; // Array of sidebar items. items: SidebarItem[]; // Array of sidebar items.
className?: string;
description?: string; description?: string;
key?: string;
className?: string;
customProps?: Record<string, unknown>;
// Category options: // Category options:
collapsible: boolean; // Set the category to be collapsible collapsible: boolean; // Set the category to be collapsible