# ShellDocs.Components
> The Razor Class Library that ships every chrome piece and every markdown-authorable primitive. Where the pixels come from.
Source: https://shelldocs.shellui.dev/docs/packages/components
`ShellDocs.Components` is the visible layer of ShellDocs. Everything you see on a rendered page : the sidebar, the header, the search dialog, the layouts, and every primitive you drop into markdown : lives in this Razor Class Library.
> **You already depend on it**
>
> `shelldocs init` adds `ShellDocs.Components` to your `.csproj` automatically. `ShellDocs.Core` and `ShellDocs.Markdown` come in transitively : nothing else to add.
## Install
**dotnet CLI**
```bash
dotnet add package ShellDocs.Components --prerelease
```
**PackageReference**
```xml
```
## What's inside
Two categories: **chrome** (the layout, header, sidebar, search : the site's skeleton) and **content primitives** (the components authors drop into markdown).
### Chrome
| Name | Type | Default | Description |
|------|------|---------|-------------|
| `DocsLayout` | `component` | | Full-page layout. Two variants: TopNav (classic header + sidebar) and Sidebar (floating card, this site's variant). |
| `DocsHeader` | `component` | | Top nav bar : logo, primary nav links, theme toggle, GitHub link, search trigger. |
| `DocsSidebar` | `component` | | Sidebar nav tree : auto-populated from the content folder. Collapsible sections, active-path highlighting. |
| `DocsSidebarHeader` | `component` | | Sidebar top : brand logo + collapse toggle + search field (Sidebar variant only). The collapse is handled by shelldocs.js and remembered in localStorage. |
| `DocsFooter` | `component` | | Footer band : brand, tagline, socials, columns of links. |
| `DocsMobileBar` | `component` | | Sticky top bar on mobile : hamburger opens the sidebar drawer. Driven by shelldocs.js, so it works on static hosts. |
| `DocsBreadcrumb` | `component` | | Trail from root → current page, auto-derived from the nav graph. |
| `TableOfContents` | `component` | | Right-rail on-this-page nav, scroll-spy indicator. |
| `PrevNextNav` | `component` | | Bottom-of-page prev/next cards, auto-derived from nav adjacency. |
| `SearchDialog` | `component` | | Cmd+K modal that searches titles, sections and body text. Ranked in the browser by shelldocs.js, so it works on static hosts. Part of DocsLayout and HomeLayout. |
| `DocsPageActions` | `component` | | The menu by the page title: Copy page, View as Markdown, Open in Claude, Open in ChatGPT. Shown when EnableLlmsTxt is on. |
| `PackageSelector` | `component` | | Sidebar dropdown for switching between package families. |
| `VersionSelector` | `component` | | Dropdown for switching docs version. Shown once two or more versions are registered. |
| `BrandLogo` | `component` | | Renders your LogoSvg (inline) or LogoLight/LogoDark (URLs), with a placeholder dot fallback. |
| `ThemeToggle` | `component` | | Sun and moon theme switch. Handled by shelldocs.js, stored in localStorage, follows the dark class on the html element. |
### Content primitives (author these in `.md`)
| Name | Type | Default | Description |
|------|------|---------|-------------|
| `Callout` | `component` | | Info / warning / danger / tip box with icon, title, body. |
| `Card / CardGrid / LinkCard` | `component` | | Responsive card family. Cards render as a link when Href is set. |
| `Steps / Step` | `component` | | Numbered ordered list with a rail; badges centered on the spine. |
| `FileTree / FileTreeItem` | `component` | | Recursive project-layout diagram with folder/file glyphs. |
| `Tabs / Tab` | `component` | | Tabbed panels for any content, with sync groups. |
| `CodeGroup / CodeTab` | `component` | | Tabbed code samples. SyncKey groups switch together across pages. CodeTab also goes inside a preview to replace its Code panel. |
| `TypeTable / TypeRow` | `component` | | Props / API reference table with type-code chips and required badge. |
| `AutoTypeTable` | `component` | | Props table generated from a component by reflection and XML doc comments. |
| `PreviewFrame` | `component` | | The frame around every live example: Preview and Code tabs, copy, actions menu, layouts. |
| `DemoPreview` | `component` | | Renders a demo component and shows its .razor file as the source. |
| `ComponentPreview` | `component` | | A live preview written as a tag instead of a fence. |
| `IframePreview` | `component` | | Shows another page in the Preview panel, with the same toolbar and code tabs. |
| `SyncSwitch` | `component` | | A row of tabs on the page that switches every block sharing a SyncKey. |
| `DocsNotFound` | `component` | | The not-found view for DocsPage.razor. Answers HTTP 404. |
| `MarkdownContent` | `component` | | The renderer itself. DocsPage.razor calls this with the resolved .md document. |
## The layout variant
The two `DocsLayoutVariant` options shape the whole site:
| Name | Type | Default | Description |
|------|------|---------|-------------|
| `TopNav` | `DocsLayoutVariant` | | Classic docs shape : full-width header at the top spanning nav + logo + search, sidebar below on the left, TOC on the right. |
| `Sidebar` | `DocsLayoutVariant` | | Floating-card sidebar on the left, containing brand + search + nav. Content area is flush to the page background. This site uses it. |
```csharp
o.LayoutVariant = DocsLayoutVariant.Sidebar; // or TopNav
```
## Auto-chrome
`DocsLayout` auto-renders ``, ``, and `` from a shared scoped service (`DocsPageState`). When `MarkdownContent` publishes the current document, all three chrome components pick up the state and render. Your `DocsPage.razor` collapses to a single call:
```razor
@page "/docs/{*Path:nonfile}"
@layout DocsLayout
@inject NavigationGraph Graph
@inject MarkdownRenderer Renderer
@if (_document is not null)
{
}
else
{
}
@code {
[Parameter] public string? Path { get; set; }
RenderedDocument? _document;
protected override void OnParametersSet()
{
var url = "/docs" + (Path is null ? "" : "/" + Path);
var node = Graph.ResolveByUrl(url);
if (node?.Path is not null) _document = Renderer.RenderFile(node.Path);
}
}
```
No `` boilerplate, no `` slot wiring, no explicit ``. All three appear automatically as long as `MarkdownContent` published the current document to state.
## Learn more
- [Callout](https://shelldocs.shellui.dev/docs/components/callout.md): Info / warning / danger / tip.
- [Card](https://shelldocs.shellui.dev/docs/components/card.md): Anchor-or-div cards with icon + title + description.
- [Steps](https://shelldocs.shellui.dev/docs/components/steps.md): Numbered walkthrough with a rail.
- [CodeGroup](https://shelldocs.shellui.dev/docs/components/code-group.md): Tabbed code samples with cross-page sync.
- [FileTree](https://shelldocs.shellui.dev/docs/components/file-tree.md): Recursive project-layout diagram.
- [TypeTable](https://shelldocs.shellui.dev/docs/components/type-table.md): Props / API reference table.