Navigation
Sidebar
App navigation that collapses to icons on wide screens and opens as a Sheet on phones.
| Class name | Type | Description |
|---|---|---|
sidebarplf:sidebar | Component | The navigation beside the page |
drawerplf:drawer | Component | The layout root |
sidebar-headerplf:sidebar-header | Part | Top area that stays in place |
sidebar-contentplf:sidebar-content | Part | Middle area that scrolls |
sidebar-footerplf:sidebar-footer | Part | Bottom area that stays in place |
sidebar-groupplf:sidebar-group | Part | A group of links |
sidebar-group-labelplf:sidebar-group-label | Part | A group's muted heading |
sidebar-group-contentplf:sidebar-group-content | Part | A collapsible group's content |
sidebar-menuplf:sidebar-menu | Part | A list of links |
sidebar-linkplf:sidebar-link | Part | A link or button row |
sidebar-iconplf:sidebar-icon | Part | A link's SVG icon; an icon class there doesn't need it |
sidebar-labelplf:sidebar-label | Part | A link's text; hidden in icon mode |
sidebar-badgeplf:sidebar-badge | Part | A trailing count; hidden in icon mode |
sidebar-chevronplf:sidebar-chevron | Part | A trailing icon, hidden in icon mode; in a collapsible group, your own in place of the drawn chevron |
sidebar-submenuplf:sidebar-submenu | Part | A nested list with a start border |
sidebar-sub-linkplf:sidebar-sub-link | Part | A lighter link in a submenu |
sidebar-controlplf:sidebar-control | Part | Holds a dropdown in the header or footer |
sidebar-identityplf:sidebar-identity | Part | A taller brand, workspace or account row |
sidebar-identity-iconplf:sidebar-identity-icon | Part | The identity's logo or avatar |
sidebar-nameplf:sidebar-name | Part | The identity's name |
sidebar-descriptionplf:sidebar-description | Part | A muted line under the name |
sidebar-indicatorplf:sidebar-indicator | Part | The current-link line the script adds |
sidebar-dialogplf:sidebar-dialog | Part | The Sheet for phones |
sidebar-mobile-contentplf:sidebar-mobile-content | Part | The Sheet's body, which takes the sidebar on phones |
drawer-bodyplf:drawer-body | Part | The row holding the sidebar and the page |
drawer-contentplf:drawer-content | Part | The page beside the sidebar |
drawer-endplf:drawer-end | Placement | Sidebar on the end side |
drawer-stickyplf:drawer-sticky | Modifier | The page scrolls; the sidebar stays in view |
Default
The dialog, named with aria-label, and every toggle need a name, all in the same root, or the script does not start. Leave the Sheet’s body empty: on phones the script moves the sidebar’s content into it, beside the close button. Each page marks its own link with aria-current="page", which this preview moves on click.
<div class="drawer" data-plf-sidebar data-plf-indicator>
<div class="drawer-body">
<aside class="sidebar" aria-label="Workspace sidebar">
<header class="sidebar-header">
<a class="sidebar-link sidebar-identity" href="#">
<span class="sidebar-identity-icon" style="border-radius: var(--plf-radius-lg); background: var(--plf-color-primary); color: var(--plf-color-on-primary)">
<span class="icon icon-stack-2"></span>
</span>
<span class="sidebar-label">Pelatform</span>
</a>
</header>
<nav class="sidebar-content" aria-label="Workspace">
<div class="sidebar-group">
<p class="sidebar-group-label sidebar-label">Platform</p>
<ul class="sidebar-menu" role="list">
<li>
<a class="sidebar-link" href="#" aria-current="page">
<span class="icon icon-home"></span>
<span class="sidebar-label">Overview</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-layout-dashboard"></span>
<span class="sidebar-label">Components</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-folder"></span>
<span class="sidebar-label">Fields</span>
</a>
</li>
</ul>
</div>
<details class="collapse sidebar-group" open>
<summary class="collapse-trigger sidebar-link">
<span class="icon icon-folder"></span>
<span class="collapse-title sidebar-label">Projects</span>
</summary>
<div class="collapse-content sidebar-group-content">
<ul class="sidebar-submenu" role="list">
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Active projects</span>
</a>
</li>
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Archived projects</span>
</a>
</li>
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Shared with you</span>
</a>
</li>
</ul>
</div>
</details>
<div class="sidebar-group">
<p class="sidebar-group-label sidebar-label">Resources</p>
<ul class="sidebar-menu" role="list">
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-book"></span>
<span class="sidebar-label">Documentation</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-settings"></span>
<span class="sidebar-label">Settings</span>
</a>
</li>
</ul>
</div>
</nav>
<footer class="sidebar-footer">
<div class="dropdown sidebar-control" data-plf-dropdown-menu data-plf-placement="right" data-plf-align="end">
<button class="sidebar-link sidebar-identity" aria-label="Account for John Doe, john@example.com">
<span class="sidebar-identity-icon">
<span class="avatar avatar-sm" style="--plf-avatar-size: 100%">
<img class="avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<span class="sidebar-label">
<span class="sidebar-name">John Doe</span>
<span class="sidebar-description">john@example.com</span>
</span>
<span class="icon icon-selector sidebar-chevron"></span>
</button>
<div class="dropdown-content menu" aria-label="Account actions" hidden>
<div class="item item-sm" style="--plf-item-padding: var(--plf-space-2); flex-wrap: nowrap">
<span class="item-media">
<span class="avatar avatar-sm">
<img class="avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<div class="item-content">
<p class="item-title">John Doe</p>
<p class="item-description">john@example.com</p>
</div>
</div>
<hr class="menu-separator">
<button class="menu-item">
<span class="icon icon-sparkles"></span>
<span>Upgrade to Pro</span>
</button>
<hr class="menu-separator">
<button class="menu-item"><span class="icon icon-user"></span><span>Account</span></button>
<button class="menu-item"><span class="icon icon-credit-card"></span><span>Billing</span></button>
<button class="menu-item"><span class="icon icon-bell"></span><span>Notifications</span></button>
<button class="menu-item">
<span class="icon icon-settings"></span>
<span>Preferences</span>
</button>
<hr class="menu-separator">
<button class="menu-item menu-item-error">
<span class="icon icon-logout"></span>
<span>Log out</span>
</button>
</div>
</div>
</footer>
</aside>
<div class="drawer-content">
<header class="flex items-center gap-3" style="padding: var(--plf-space-3) var(--plf-space-4)">
<button class="btn btn-ghost btn-sm btn-square" data-plf-sidebar-toggle aria-label="Toggle navigation" aria-keyshortcuts="Control+B Meta+B" hidden>
<span class="icon icon-layout-sidebar"></span>
</button>
<nav class="breadcrumbs" aria-label="Page location">
<ol role="list">
<li><a href="#">Workspace</a></li>
<li><span aria-current="page">Overview</span></li>
</ol>
</nav>
</header>
<div style="padding: var(--plf-space-4)">
<!-- Page content -->
</div>
</div>
</div>
<dialog class="modal sheet sheet-start sidebar-dialog" aria-label="Navigation">
<button class="modal-close sheet-close" aria-label="Close navigation" data-plf-trigger="modal:close"></button>
<div class="sheet-body sidebar-mobile-content"></div>
</dialog>
</div><div class="plf:drawer" data-plf-sidebar data-plf-indicator>
<div class="plf:drawer-body">
<aside class="plf:sidebar" aria-label="Workspace sidebar">
<header class="plf:sidebar-header">
<a class="plf:sidebar-link plf:sidebar-identity" href="#">
<span class="plf:sidebar-identity-icon" style="border-radius: var(--plf-radius-lg); background: var(--plf-color-primary); color: var(--plf-color-on-primary)">
<span class="plf:icon plf:icon-stack-2"></span>
</span>
<span class="plf:sidebar-label">Pelatform</span>
</a>
</header>
<nav class="plf:sidebar-content" aria-label="Workspace">
<div class="plf:sidebar-group">
<p class="plf:sidebar-group-label plf:sidebar-label">Platform</p>
<ul class="plf:sidebar-menu" role="list">
<li>
<a class="plf:sidebar-link" href="#" aria-current="page">
<span class="plf:icon plf:icon-home"></span>
<span class="plf:sidebar-label">Overview</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-layout-dashboard"></span>
<span class="plf:sidebar-label">Components</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:sidebar-label">Fields</span>
</a>
</li>
</ul>
</div>
<details class="plf:collapse plf:sidebar-group" open>
<summary class="plf:collapse-trigger plf:sidebar-link">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:collapse-title plf:sidebar-label">Projects</span>
</summary>
<div class="plf:collapse-content plf:sidebar-group-content">
<ul class="plf:sidebar-submenu" role="list">
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Active projects</span>
</a>
</li>
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Archived projects</span>
</a>
</li>
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Shared with you</span>
</a>
</li>
</ul>
</div>
</details>
<div class="plf:sidebar-group">
<p class="plf:sidebar-group-label plf:sidebar-label">Resources</p>
<ul class="plf:sidebar-menu" role="list">
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-book"></span>
<span class="plf:sidebar-label">Documentation</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-settings"></span>
<span class="plf:sidebar-label">Settings</span>
</a>
</li>
</ul>
</div>
</nav>
<footer class="plf:sidebar-footer">
<div class="plf:dropdown plf:sidebar-control" data-plf-dropdown-menu data-plf-placement="right" data-plf-align="end">
<button class="plf:sidebar-link plf:sidebar-identity" aria-label="Account for John Doe, john@example.com">
<span class="plf:sidebar-identity-icon">
<span class="plf:avatar plf:avatar-sm" style="--plf-avatar-size: 100%">
<img class="plf:avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<span class="plf:sidebar-label">
<span class="plf:sidebar-name">John Doe</span>
<span class="plf:sidebar-description">john@example.com</span>
</span>
<span class="plf:icon plf:icon-selector plf:sidebar-chevron"></span>
</button>
<div class="plf:dropdown-content plf:menu" aria-label="Account actions" hidden>
<div class="plf:item plf:item-sm" style="--plf-item-padding: var(--plf-space-2); flex-wrap: nowrap">
<span class="plf:item-media">
<span class="plf:avatar plf:avatar-sm">
<img class="plf:avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<div class="plf:item-content">
<p class="plf:item-title">John Doe</p>
<p class="plf:item-description">john@example.com</p>
</div>
</div>
<hr class="plf:menu-separator">
<button class="plf:menu-item">
<span class="plf:icon plf:icon-sparkles"></span>
<span>Upgrade to Pro</span>
</button>
<hr class="plf:menu-separator">
<button class="plf:menu-item"><span class="plf:icon plf:icon-user"></span><span>Account</span></button>
<button class="plf:menu-item"><span class="plf:icon plf:icon-credit-card"></span><span>Billing</span></button>
<button class="plf:menu-item"><span class="plf:icon plf:icon-bell"></span><span>Notifications</span></button>
<button class="plf:menu-item">
<span class="plf:icon plf:icon-settings"></span>
<span>Preferences</span>
</button>
<hr class="plf:menu-separator">
<button class="plf:menu-item plf:menu-item-error">
<span class="plf:icon plf:icon-logout"></span>
<span>Log out</span>
</button>
</div>
</div>
</footer>
</aside>
<div class="plf:drawer-content">
<header class="plf:flex plf:items-center plf:gap-3" style="padding: var(--plf-space-3) var(--plf-space-4)">
<button class="plf:btn plf:btn-ghost plf:btn-sm plf:btn-square" data-plf-sidebar-toggle aria-label="Toggle navigation" aria-keyshortcuts="Control+B Meta+B" hidden>
<span class="plf:icon plf:icon-layout-sidebar"></span>
</button>
<nav class="plf:breadcrumbs" aria-label="Page location">
<ol role="list">
<li><a href="#">Workspace</a></li>
<li><span aria-current="page">Overview</span></li>
</ol>
</nav>
</header>
<div style="padding: var(--plf-space-4)">
<!-- Page content -->
</div>
</div>
</div>
<dialog class="plf:modal plf:sheet plf:sheet-start plf:sidebar-dialog" aria-label="Navigation">
<button class="plf:modal-close plf:sheet-close" aria-label="Close navigation" data-plf-trigger="modal:close"></button>
<div class="plf:sheet-body plf:sidebar-mobile-content"></div>
</dialog>
</div>import type { CSSProperties } from 'react';
import {
Avatar, AvatarImage, Breadcrumb, BreadcrumbItem, BreadcrumbPage, buttonClass, Collapsible, CollapsibleContent, CollapsibleTitle,
CollapsibleTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, Icon, Item,
ItemContent, ItemDescription, Sidebar, SidebarContent, SidebarDescription, SidebarFooter, SidebarGroup, SidebarGroupLabel,
SidebarHeader, SidebarIdentity, SidebarIdentityIcon, SidebarLabel, SidebarLink, SidebarMenu, SidebarName, SidebarPage,
SidebarPanel, SidebarSubLink, SidebarSubmenu, SidebarTrigger,
} from '@pelatform/react';
export function Example() {
return (
<Sidebar indicator>
<SidebarPanel aria-label="Workspace sidebar">
<SidebarHeader>
<SidebarIdentity href="#">
<SidebarIdentityIcon style={{ borderRadius: 'var(--plf-radius-lg)', background: 'var(--plf-color-primary)', color: 'var(--plf-color-on-primary)' }}>
<Icon name="stack-2" />
</SidebarIdentityIcon>
<SidebarLabel>Pelatform</SidebarLabel>
</SidebarIdentity>
</SidebarHeader>
<SidebarContent aria-label="Workspace">
<SidebarGroup>
<SidebarGroupLabel>Platform</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#" aria-current="page">
<Icon name="home" />
<SidebarLabel>Overview</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="layout-dashboard" />
<SidebarLabel>Components</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Fields</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
<Collapsible className="sidebar-group" open>
<CollapsibleTrigger className="sidebar-link">
<Icon name="folder" />
<CollapsibleTitle className="sidebar-label">Projects</CollapsibleTitle>
</CollapsibleTrigger>
<CollapsibleContent className="sidebar-group-content">
<SidebarSubmenu>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Active projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Archived projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Shared with you</SidebarLabel>
</SidebarSubLink>
</li>
</SidebarSubmenu>
</CollapsibleContent>
</Collapsible>
<SidebarGroup>
<SidebarGroupLabel>Resources</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#">
<Icon name="book" />
<SidebarLabel>Documentation</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="settings" />
<SidebarLabel>Settings</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<DropdownMenu className="sidebar-control" placement="right" align="end">
<DropdownMenuTrigger className="sidebar-link sidebar-identity" aria-label="Account for John Doe, john@example.com">
<SidebarIdentityIcon>
<Avatar size="sm" style={{ '--plf-avatar-size': '100%' } as CSSProperties}>
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</SidebarIdentityIcon>
<SidebarLabel>
<SidebarName>John Doe</SidebarName>
<SidebarDescription>john@example.com</SidebarDescription>
</SidebarLabel>
<Icon name="selector" className="sidebar-chevron" />
</DropdownMenuTrigger>
<DropdownMenuContent aria-label="Account actions">
<Item size="sm" style={{ '--plf-item-padding': 'var(--plf-space-2)', flexWrap: 'nowrap' } as CSSProperties}>
<span className="item-media">
<Avatar size="sm">
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</span>
<ItemContent>
<p className="item-title">John Doe</p>
<ItemDescription>john@example.com</ItemDescription>
</ItemContent>
</Item>
<DropdownMenuSeparator />
<DropdownMenuItem>
<Icon name="sparkles" />
<span>Upgrade to Pro</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem><Icon name="user" /><span>Account</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="credit-card" /><span>Billing</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="bell" /><span>Notifications</span></DropdownMenuItem>
<DropdownMenuItem>
<Icon name="settings" />
<span>Preferences</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem color="error">
<Icon name="logout" />
<span>Log out</span>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</SidebarFooter>
</SidebarPanel>
<SidebarPage>
<header className="flex items-center gap-3" style={{ padding: 'var(--plf-space-3) var(--plf-space-4)' }}>
<SidebarTrigger className={buttonClass({ variant: 'ghost', size: 'sm', shape: 'square' })} aria-keyshortcuts="Control+B Meta+B">
<Icon name="layout-sidebar" />
</SidebarTrigger>
<Breadcrumb aria-label="Page location">
<BreadcrumbItem><a href="#">Workspace</a></BreadcrumbItem>
<BreadcrumbItem><BreadcrumbPage>Overview</BreadcrumbPage></BreadcrumbItem>
</Breadcrumb>
</header>
<div style={{ padding: 'var(--plf-space-4)' }}>
{/* Page content */}
</div>
</SidebarPage>
</Sidebar>
);
}import type { CSSProperties } from 'react';
import {
Avatar, AvatarImage, Breadcrumb, BreadcrumbItem, BreadcrumbPage, buttonClass, Collapsible, CollapsibleContent, CollapsibleTitle,
CollapsibleTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, Icon, Item,
ItemContent, ItemDescription, Sidebar, SidebarContent, SidebarDescription, SidebarFooter, SidebarGroup, SidebarGroupLabel,
SidebarHeader, SidebarIdentity, SidebarIdentityIcon, SidebarLabel, SidebarLink, SidebarMenu, SidebarName, SidebarPage,
SidebarPanel, SidebarSubLink, SidebarSubmenu, SidebarTrigger,
} from '@pelatform/react/prefixed';
export function Example() {
return (
<Sidebar indicator>
<SidebarPanel aria-label="Workspace sidebar">
<SidebarHeader>
<SidebarIdentity href="#">
<SidebarIdentityIcon style={{ borderRadius: 'var(--plf-radius-lg)', background: 'var(--plf-color-primary)', color: 'var(--plf-color-on-primary)' }}>
<Icon name="stack-2" />
</SidebarIdentityIcon>
<SidebarLabel>Pelatform</SidebarLabel>
</SidebarIdentity>
</SidebarHeader>
<SidebarContent aria-label="Workspace">
<SidebarGroup>
<SidebarGroupLabel>Platform</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#" aria-current="page">
<Icon name="home" />
<SidebarLabel>Overview</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="layout-dashboard" />
<SidebarLabel>Components</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Fields</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
<Collapsible className="plf:sidebar-group" open>
<CollapsibleTrigger className="plf:sidebar-link">
<Icon name="folder" />
<CollapsibleTitle className="plf:sidebar-label">Projects</CollapsibleTitle>
</CollapsibleTrigger>
<CollapsibleContent className="plf:sidebar-group-content">
<SidebarSubmenu>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Active projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Archived projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Shared with you</SidebarLabel>
</SidebarSubLink>
</li>
</SidebarSubmenu>
</CollapsibleContent>
</Collapsible>
<SidebarGroup>
<SidebarGroupLabel>Resources</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#">
<Icon name="book" />
<SidebarLabel>Documentation</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="settings" />
<SidebarLabel>Settings</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<DropdownMenu className="plf:sidebar-control" placement="right" align="end">
<DropdownMenuTrigger className="plf:sidebar-link plf:sidebar-identity" aria-label="Account for John Doe, john@example.com">
<SidebarIdentityIcon>
<Avatar size="sm" style={{ '--plf-avatar-size': '100%' } as CSSProperties}>
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</SidebarIdentityIcon>
<SidebarLabel>
<SidebarName>John Doe</SidebarName>
<SidebarDescription>john@example.com</SidebarDescription>
</SidebarLabel>
<Icon name="selector" className="plf:sidebar-chevron" />
</DropdownMenuTrigger>
<DropdownMenuContent aria-label="Account actions">
<Item size="sm" style={{ '--plf-item-padding': 'var(--plf-space-2)', flexWrap: 'nowrap' } as CSSProperties}>
<span className="plf:item-media">
<Avatar size="sm">
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</span>
<ItemContent>
<p className="plf:item-title">John Doe</p>
<ItemDescription>john@example.com</ItemDescription>
</ItemContent>
</Item>
<DropdownMenuSeparator />
<DropdownMenuItem>
<Icon name="sparkles" />
<span>Upgrade to Pro</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem><Icon name="user" /><span>Account</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="credit-card" /><span>Billing</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="bell" /><span>Notifications</span></DropdownMenuItem>
<DropdownMenuItem>
<Icon name="settings" />
<span>Preferences</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem color="error">
<Icon name="logout" />
<span>Log out</span>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</SidebarFooter>
</SidebarPanel>
<SidebarPage>
<header className="plf:flex plf:items-center plf:gap-3" style={{ padding: 'var(--plf-space-3) var(--plf-space-4)' }}>
<SidebarTrigger className={buttonClass({ variant: 'ghost', size: 'sm', shape: 'square' })} aria-keyshortcuts="Control+B Meta+B">
<Icon name="layout-sidebar" />
</SidebarTrigger>
<Breadcrumb aria-label="Page location">
<BreadcrumbItem><a href="#">Workspace</a></BreadcrumbItem>
<BreadcrumbItem><BreadcrumbPage>Overview</BreadcrumbPage></BreadcrumbItem>
</Breadcrumb>
</header>
<div style={{ padding: 'var(--plf-space-4)' }}>
{/* Page content */}
</div>
</SidebarPage>
</Sidebar>
);
}Workspace switcher
For an account with several workspaces, a Dropdown Menu in the header switches between them.
<div class="drawer" data-plf-sidebar data-plf-indicator>
<div class="drawer-body">
<aside class="sidebar" aria-label="Workspace sidebar">
<header class="sidebar-header">
<div class="dropdown sidebar-control" data-plf-dropdown-menu data-plf-placement="right" data-plf-align="start">
<button class="sidebar-link sidebar-identity" aria-label="Switch workspace, Pelatform Enterprise">
<span class="sidebar-identity-icon" style="border-radius: var(--plf-radius-lg); background: var(--plf-color-primary); color: var(--plf-color-on-primary)">
<span class="icon icon-stack-2"></span>
</span>
<span class="sidebar-label">
<span class="sidebar-name">Pelatform</span>
<span class="sidebar-description">Enterprise</span>
</span>
<span class="icon icon-selector sidebar-chevron"></span>
</button>
<div class="dropdown-content menu" aria-label="Workspace switcher" hidden>
<div class="menu-title">Workspaces</div>
<button class="menu-item"><span class="icon icon-stack-2"></span><span>Pelatform</span></button>
<button class="menu-item"><span class="icon icon-stack-2"></span><span>Orbit</span></button>
<button class="menu-item"><span class="icon icon-stack-2"></span><span>Personal</span></button>
</div>
</div>
</header>
<nav class="sidebar-content" aria-label="Workspace">
<div class="sidebar-group">
<p class="sidebar-group-label sidebar-label">Platform</p>
<ul class="sidebar-menu" role="list">
<li>
<a class="sidebar-link" href="#" aria-current="page">
<span class="icon icon-home"></span>
<span class="sidebar-label">Overview</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-layout-dashboard"></span>
<span class="sidebar-label">Components</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-folder"></span>
<span class="sidebar-label">Fields</span>
</a>
</li>
</ul>
</div>
<details class="collapse sidebar-group" open>
<summary class="collapse-trigger sidebar-link">
<span class="icon icon-folder"></span>
<span class="collapse-title sidebar-label">Projects</span>
</summary>
<div class="collapse-content sidebar-group-content">
<ul class="sidebar-submenu" role="list">
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Active projects</span>
</a>
</li>
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Archived projects</span>
</a>
</li>
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Shared with you</span>
</a>
</li>
</ul>
</div>
</details>
<div class="sidebar-group">
<p class="sidebar-group-label sidebar-label">Resources</p>
<ul class="sidebar-menu" role="list">
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-book"></span>
<span class="sidebar-label">Documentation</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-settings"></span>
<span class="sidebar-label">Settings</span>
</a>
</li>
</ul>
</div>
</nav>
<footer class="sidebar-footer">
<div class="dropdown sidebar-control" data-plf-dropdown-menu data-plf-placement="right" data-plf-align="end">
<button class="sidebar-link sidebar-identity" aria-label="Account for John Doe, john@example.com">
<span class="sidebar-identity-icon">
<span class="avatar avatar-sm" style="--plf-avatar-size: 100%">
<img class="avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<span class="sidebar-label">
<span class="sidebar-name">John Doe</span>
<span class="sidebar-description">john@example.com</span>
</span>
<span class="icon icon-selector sidebar-chevron"></span>
</button>
<div class="dropdown-content menu" aria-label="Account actions" hidden>
<div class="item item-sm" style="--plf-item-padding: var(--plf-space-2); flex-wrap: nowrap">
<span class="item-media">
<span class="avatar avatar-sm">
<img class="avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<div class="item-content">
<p class="item-title">John Doe</p>
<p class="item-description">john@example.com</p>
</div>
</div>
<hr class="menu-separator">
<button class="menu-item">
<span class="icon icon-sparkles"></span>
<span>Upgrade to Pro</span>
</button>
<hr class="menu-separator">
<button class="menu-item"><span class="icon icon-user"></span><span>Account</span></button>
<button class="menu-item"><span class="icon icon-credit-card"></span><span>Billing</span></button>
<button class="menu-item"><span class="icon icon-bell"></span><span>Notifications</span></button>
<button class="menu-item">
<span class="icon icon-settings"></span>
<span>Preferences</span>
</button>
<hr class="menu-separator">
<button class="menu-item menu-item-error">
<span class="icon icon-logout"></span>
<span>Log out</span>
</button>
</div>
</div>
</footer>
</aside>
<div class="drawer-content">
<header class="flex items-center gap-3" style="padding: var(--plf-space-3) var(--plf-space-4)">
<button class="btn btn-ghost btn-sm btn-square" data-plf-sidebar-toggle aria-label="Toggle navigation" hidden>
<span class="icon icon-layout-sidebar"></span>
</button>
<nav class="breadcrumbs" aria-label="Page location">
<ol role="list">
<li><a href="#">Workspace</a></li>
<li><span aria-current="page">Overview</span></li>
</ol>
</nav>
</header>
<div style="padding: var(--plf-space-4)">
<!-- Page content -->
</div>
</div>
</div>
<dialog class="modal sheet sheet-start sidebar-dialog" aria-label="Navigation">
<button class="modal-close sheet-close" aria-label="Close navigation" data-plf-trigger="modal:close"></button>
<div class="sheet-body sidebar-mobile-content"></div>
</dialog>
</div><div class="plf:drawer" data-plf-sidebar data-plf-indicator>
<div class="plf:drawer-body">
<aside class="plf:sidebar" aria-label="Workspace sidebar">
<header class="plf:sidebar-header">
<div class="plf:dropdown plf:sidebar-control" data-plf-dropdown-menu data-plf-placement="right" data-plf-align="start">
<button class="plf:sidebar-link plf:sidebar-identity" aria-label="Switch workspace, Pelatform Enterprise">
<span class="plf:sidebar-identity-icon" style="border-radius: var(--plf-radius-lg); background: var(--plf-color-primary); color: var(--plf-color-on-primary)">
<span class="plf:icon plf:icon-stack-2"></span>
</span>
<span class="plf:sidebar-label">
<span class="plf:sidebar-name">Pelatform</span>
<span class="plf:sidebar-description">Enterprise</span>
</span>
<span class="plf:icon plf:icon-selector plf:sidebar-chevron"></span>
</button>
<div class="plf:dropdown-content plf:menu" aria-label="Workspace switcher" hidden>
<div class="plf:menu-title">Workspaces</div>
<button class="plf:menu-item"><span class="plf:icon plf:icon-stack-2"></span><span>Pelatform</span></button>
<button class="plf:menu-item"><span class="plf:icon plf:icon-stack-2"></span><span>Orbit</span></button>
<button class="plf:menu-item"><span class="plf:icon plf:icon-stack-2"></span><span>Personal</span></button>
</div>
</div>
</header>
<nav class="plf:sidebar-content" aria-label="Workspace">
<div class="plf:sidebar-group">
<p class="plf:sidebar-group-label plf:sidebar-label">Platform</p>
<ul class="plf:sidebar-menu" role="list">
<li>
<a class="plf:sidebar-link" href="#" aria-current="page">
<span class="plf:icon plf:icon-home"></span>
<span class="plf:sidebar-label">Overview</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-layout-dashboard"></span>
<span class="plf:sidebar-label">Components</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:sidebar-label">Fields</span>
</a>
</li>
</ul>
</div>
<details class="plf:collapse plf:sidebar-group" open>
<summary class="plf:collapse-trigger plf:sidebar-link">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:collapse-title plf:sidebar-label">Projects</span>
</summary>
<div class="plf:collapse-content plf:sidebar-group-content">
<ul class="plf:sidebar-submenu" role="list">
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Active projects</span>
</a>
</li>
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Archived projects</span>
</a>
</li>
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Shared with you</span>
</a>
</li>
</ul>
</div>
</details>
<div class="plf:sidebar-group">
<p class="plf:sidebar-group-label plf:sidebar-label">Resources</p>
<ul class="plf:sidebar-menu" role="list">
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-book"></span>
<span class="plf:sidebar-label">Documentation</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-settings"></span>
<span class="plf:sidebar-label">Settings</span>
</a>
</li>
</ul>
</div>
</nav>
<footer class="plf:sidebar-footer">
<div class="plf:dropdown plf:sidebar-control" data-plf-dropdown-menu data-plf-placement="right" data-plf-align="end">
<button class="plf:sidebar-link plf:sidebar-identity" aria-label="Account for John Doe, john@example.com">
<span class="plf:sidebar-identity-icon">
<span class="plf:avatar plf:avatar-sm" style="--plf-avatar-size: 100%">
<img class="plf:avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<span class="plf:sidebar-label">
<span class="plf:sidebar-name">John Doe</span>
<span class="plf:sidebar-description">john@example.com</span>
</span>
<span class="plf:icon plf:icon-selector plf:sidebar-chevron"></span>
</button>
<div class="plf:dropdown-content plf:menu" aria-label="Account actions" hidden>
<div class="plf:item plf:item-sm" style="--plf-item-padding: var(--plf-space-2); flex-wrap: nowrap">
<span class="plf:item-media">
<span class="plf:avatar plf:avatar-sm">
<img class="plf:avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<div class="plf:item-content">
<p class="plf:item-title">John Doe</p>
<p class="plf:item-description">john@example.com</p>
</div>
</div>
<hr class="plf:menu-separator">
<button class="plf:menu-item">
<span class="plf:icon plf:icon-sparkles"></span>
<span>Upgrade to Pro</span>
</button>
<hr class="plf:menu-separator">
<button class="plf:menu-item"><span class="plf:icon plf:icon-user"></span><span>Account</span></button>
<button class="plf:menu-item"><span class="plf:icon plf:icon-credit-card"></span><span>Billing</span></button>
<button class="plf:menu-item"><span class="plf:icon plf:icon-bell"></span><span>Notifications</span></button>
<button class="plf:menu-item">
<span class="plf:icon plf:icon-settings"></span>
<span>Preferences</span>
</button>
<hr class="plf:menu-separator">
<button class="plf:menu-item plf:menu-item-error">
<span class="plf:icon plf:icon-logout"></span>
<span>Log out</span>
</button>
</div>
</div>
</footer>
</aside>
<div class="plf:drawer-content">
<header class="plf:flex plf:items-center plf:gap-3" style="padding: var(--plf-space-3) var(--plf-space-4)">
<button class="plf:btn plf:btn-ghost plf:btn-sm plf:btn-square" data-plf-sidebar-toggle aria-label="Toggle navigation" hidden>
<span class="plf:icon plf:icon-layout-sidebar"></span>
</button>
<nav class="plf:breadcrumbs" aria-label="Page location">
<ol role="list">
<li><a href="#">Workspace</a></li>
<li><span aria-current="page">Overview</span></li>
</ol>
</nav>
</header>
<div style="padding: var(--plf-space-4)">
<!-- Page content -->
</div>
</div>
</div>
<dialog class="plf:modal plf:sheet plf:sheet-start plf:sidebar-dialog" aria-label="Navigation">
<button class="plf:modal-close plf:sheet-close" aria-label="Close navigation" data-plf-trigger="modal:close"></button>
<div class="plf:sheet-body plf:sidebar-mobile-content"></div>
</dialog>
</div>import type { CSSProperties } from 'react';
import {
Avatar, AvatarImage, Breadcrumb, BreadcrumbItem, BreadcrumbPage, buttonClass, Collapsible, CollapsibleContent, CollapsibleTitle,
CollapsibleTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTitle,
DropdownMenuTrigger, Icon, Item, ItemContent, ItemDescription, Sidebar, SidebarContent, SidebarDescription, SidebarFooter,
SidebarGroup, SidebarGroupLabel, SidebarHeader, SidebarIdentityIcon, SidebarLabel, SidebarLink, SidebarMenu, SidebarName,
SidebarPage, SidebarPanel, SidebarSubLink, SidebarSubmenu, SidebarTrigger,
} from '@pelatform/react';
export function Example() {
return (
<Sidebar indicator>
<SidebarPanel aria-label="Workspace sidebar">
<SidebarHeader>
<DropdownMenu className="sidebar-control" placement="right" align="start">
<DropdownMenuTrigger className="sidebar-link sidebar-identity" aria-label="Switch workspace, Pelatform Enterprise">
<SidebarIdentityIcon style={{ borderRadius: 'var(--plf-radius-lg)', background: 'var(--plf-color-primary)', color: 'var(--plf-color-on-primary)' }}>
<Icon name="stack-2" />
</SidebarIdentityIcon>
<SidebarLabel>
<SidebarName>Pelatform</SidebarName>
<SidebarDescription>Enterprise</SidebarDescription>
</SidebarLabel>
<Icon name="selector" className="sidebar-chevron" />
</DropdownMenuTrigger>
<DropdownMenuContent aria-label="Workspace switcher">
<DropdownMenuTitle>Workspaces</DropdownMenuTitle>
<DropdownMenuItem><Icon name="stack-2" /><span>Pelatform</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="stack-2" /><span>Orbit</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="stack-2" /><span>Personal</span></DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</SidebarHeader>
<SidebarContent aria-label="Workspace">
<SidebarGroup>
<SidebarGroupLabel>Platform</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#" aria-current="page">
<Icon name="home" />
<SidebarLabel>Overview</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="layout-dashboard" />
<SidebarLabel>Components</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Fields</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
<Collapsible className="sidebar-group" open>
<CollapsibleTrigger className="sidebar-link">
<Icon name="folder" />
<CollapsibleTitle className="sidebar-label">Projects</CollapsibleTitle>
</CollapsibleTrigger>
<CollapsibleContent className="sidebar-group-content">
<SidebarSubmenu>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Active projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Archived projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Shared with you</SidebarLabel>
</SidebarSubLink>
</li>
</SidebarSubmenu>
</CollapsibleContent>
</Collapsible>
<SidebarGroup>
<SidebarGroupLabel>Resources</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#">
<Icon name="book" />
<SidebarLabel>Documentation</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="settings" />
<SidebarLabel>Settings</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<DropdownMenu className="sidebar-control" placement="right" align="end">
<DropdownMenuTrigger className="sidebar-link sidebar-identity" aria-label="Account for John Doe, john@example.com">
<SidebarIdentityIcon>
<Avatar size="sm" style={{ '--plf-avatar-size': '100%' } as CSSProperties}>
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</SidebarIdentityIcon>
<SidebarLabel>
<SidebarName>John Doe</SidebarName>
<SidebarDescription>john@example.com</SidebarDescription>
</SidebarLabel>
<Icon name="selector" className="sidebar-chevron" />
</DropdownMenuTrigger>
<DropdownMenuContent aria-label="Account actions">
<Item size="sm" style={{ '--plf-item-padding': 'var(--plf-space-2)', flexWrap: 'nowrap' } as CSSProperties}>
<span className="item-media">
<Avatar size="sm">
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</span>
<ItemContent>
<p className="item-title">John Doe</p>
<ItemDescription>john@example.com</ItemDescription>
</ItemContent>
</Item>
<DropdownMenuSeparator />
<DropdownMenuItem>
<Icon name="sparkles" />
<span>Upgrade to Pro</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem><Icon name="user" /><span>Account</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="credit-card" /><span>Billing</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="bell" /><span>Notifications</span></DropdownMenuItem>
<DropdownMenuItem>
<Icon name="settings" />
<span>Preferences</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem color="error">
<Icon name="logout" />
<span>Log out</span>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</SidebarFooter>
</SidebarPanel>
<SidebarPage>
<header className="flex items-center gap-3" style={{ padding: 'var(--plf-space-3) var(--plf-space-4)' }}>
<SidebarTrigger className={buttonClass({ variant: 'ghost', size: 'sm', shape: 'square' })}>
<Icon name="layout-sidebar" />
</SidebarTrigger>
<Breadcrumb aria-label="Page location">
<BreadcrumbItem><a href="#">Workspace</a></BreadcrumbItem>
<BreadcrumbItem><BreadcrumbPage>Overview</BreadcrumbPage></BreadcrumbItem>
</Breadcrumb>
</header>
<div style={{ padding: 'var(--plf-space-4)' }}>
{/* Page content */}
</div>
</SidebarPage>
</Sidebar>
);
}import type { CSSProperties } from 'react';
import {
Avatar, AvatarImage, Breadcrumb, BreadcrumbItem, BreadcrumbPage, buttonClass, Collapsible, CollapsibleContent, CollapsibleTitle,
CollapsibleTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTitle,
DropdownMenuTrigger, Icon, Item, ItemContent, ItemDescription, Sidebar, SidebarContent, SidebarDescription, SidebarFooter,
SidebarGroup, SidebarGroupLabel, SidebarHeader, SidebarIdentityIcon, SidebarLabel, SidebarLink, SidebarMenu, SidebarName,
SidebarPage, SidebarPanel, SidebarSubLink, SidebarSubmenu, SidebarTrigger,
} from '@pelatform/react/prefixed';
export function Example() {
return (
<Sidebar indicator>
<SidebarPanel aria-label="Workspace sidebar">
<SidebarHeader>
<DropdownMenu className="plf:sidebar-control" placement="right" align="start">
<DropdownMenuTrigger className="plf:sidebar-link plf:sidebar-identity" aria-label="Switch workspace, Pelatform Enterprise">
<SidebarIdentityIcon style={{ borderRadius: 'var(--plf-radius-lg)', background: 'var(--plf-color-primary)', color: 'var(--plf-color-on-primary)' }}>
<Icon name="stack-2" />
</SidebarIdentityIcon>
<SidebarLabel>
<SidebarName>Pelatform</SidebarName>
<SidebarDescription>Enterprise</SidebarDescription>
</SidebarLabel>
<Icon name="selector" className="plf:sidebar-chevron" />
</DropdownMenuTrigger>
<DropdownMenuContent aria-label="Workspace switcher">
<DropdownMenuTitle>Workspaces</DropdownMenuTitle>
<DropdownMenuItem><Icon name="stack-2" /><span>Pelatform</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="stack-2" /><span>Orbit</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="stack-2" /><span>Personal</span></DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</SidebarHeader>
<SidebarContent aria-label="Workspace">
<SidebarGroup>
<SidebarGroupLabel>Platform</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#" aria-current="page">
<Icon name="home" />
<SidebarLabel>Overview</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="layout-dashboard" />
<SidebarLabel>Components</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Fields</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
<Collapsible className="plf:sidebar-group" open>
<CollapsibleTrigger className="plf:sidebar-link">
<Icon name="folder" />
<CollapsibleTitle className="plf:sidebar-label">Projects</CollapsibleTitle>
</CollapsibleTrigger>
<CollapsibleContent className="plf:sidebar-group-content">
<SidebarSubmenu>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Active projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Archived projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Shared with you</SidebarLabel>
</SidebarSubLink>
</li>
</SidebarSubmenu>
</CollapsibleContent>
</Collapsible>
<SidebarGroup>
<SidebarGroupLabel>Resources</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#">
<Icon name="book" />
<SidebarLabel>Documentation</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="settings" />
<SidebarLabel>Settings</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<DropdownMenu className="plf:sidebar-control" placement="right" align="end">
<DropdownMenuTrigger className="plf:sidebar-link plf:sidebar-identity" aria-label="Account for John Doe, john@example.com">
<SidebarIdentityIcon>
<Avatar size="sm" style={{ '--plf-avatar-size': '100%' } as CSSProperties}>
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</SidebarIdentityIcon>
<SidebarLabel>
<SidebarName>John Doe</SidebarName>
<SidebarDescription>john@example.com</SidebarDescription>
</SidebarLabel>
<Icon name="selector" className="plf:sidebar-chevron" />
</DropdownMenuTrigger>
<DropdownMenuContent aria-label="Account actions">
<Item size="sm" style={{ '--plf-item-padding': 'var(--plf-space-2)', flexWrap: 'nowrap' } as CSSProperties}>
<span className="plf:item-media">
<Avatar size="sm">
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</span>
<ItemContent>
<p className="plf:item-title">John Doe</p>
<ItemDescription>john@example.com</ItemDescription>
</ItemContent>
</Item>
<DropdownMenuSeparator />
<DropdownMenuItem>
<Icon name="sparkles" />
<span>Upgrade to Pro</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem><Icon name="user" /><span>Account</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="credit-card" /><span>Billing</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="bell" /><span>Notifications</span></DropdownMenuItem>
<DropdownMenuItem>
<Icon name="settings" />
<span>Preferences</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem color="error">
<Icon name="logout" />
<span>Log out</span>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</SidebarFooter>
</SidebarPanel>
<SidebarPage>
<header className="plf:flex plf:items-center plf:gap-3" style={{ padding: 'var(--plf-space-3) var(--plf-space-4)' }}>
<SidebarTrigger className={buttonClass({ variant: 'ghost', size: 'sm', shape: 'square' })}>
<Icon name="layout-sidebar" />
</SidebarTrigger>
<Breadcrumb aria-label="Page location">
<BreadcrumbItem><a href="#">Workspace</a></BreadcrumbItem>
<BreadcrumbItem><BreadcrumbPage>Overview</BreadcrumbPage></BreadcrumbItem>
</Breadcrumb>
</header>
<div style={{ padding: 'var(--plf-space-4)' }}>
{/* Page content */}
</div>
</SidebarPage>
</Sidebar>
);
}Compact
Icon mode hides the labels only visually, and each link then shows its label as a tooltip on hover and keyboard focus. The script opens the sidebar in the mode this browser saved.
<div class="drawer" id="sidebar-icons" data-plf-sidebar data-plf-indicator data-plf-collapsed>
<div class="drawer-body">
<aside class="sidebar" aria-label="Workspace sidebar">
<header class="sidebar-header">
<a class="sidebar-link sidebar-identity" href="#">
<span class="sidebar-identity-icon" style="border-radius: var(--plf-radius-lg); background: var(--plf-color-primary); color: var(--plf-color-on-primary)">
<span class="icon icon-stack-2"></span>
</span>
<span class="sidebar-label">Pelatform</span>
</a>
</header>
<nav class="sidebar-content" aria-label="Workspace">
<div class="sidebar-group">
<p class="sidebar-group-label sidebar-label">Platform</p>
<ul class="sidebar-menu" role="list">
<li>
<a class="sidebar-link" href="#" aria-current="page">
<span class="icon icon-home"></span>
<span class="sidebar-label">Overview</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-layout-dashboard"></span>
<span class="sidebar-label">Components</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-folder"></span>
<span class="sidebar-label">Fields</span>
</a>
</li>
</ul>
</div>
<details class="collapse sidebar-group" open>
<summary class="collapse-trigger sidebar-link">
<span class="icon icon-folder"></span>
<span class="collapse-title sidebar-label">Projects</span>
</summary>
<div class="collapse-content sidebar-group-content">
<ul class="sidebar-submenu" role="list">
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Active projects</span>
</a>
</li>
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Archived projects</span>
</a>
</li>
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Shared with you</span>
</a>
</li>
</ul>
</div>
</details>
<div class="sidebar-group">
<p class="sidebar-group-label sidebar-label">Resources</p>
<ul class="sidebar-menu" role="list">
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-book"></span>
<span class="sidebar-label">Documentation</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-settings"></span>
<span class="sidebar-label">Settings</span>
</a>
</li>
</ul>
</div>
</nav>
<footer class="sidebar-footer">
<div class="dropdown sidebar-control" data-plf-dropdown-menu data-plf-placement="right" data-plf-align="end">
<button class="sidebar-link sidebar-identity" aria-label="Account for John Doe, john@example.com">
<span class="sidebar-identity-icon">
<span class="avatar avatar-sm" style="--plf-avatar-size: 100%">
<img class="avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<span class="sidebar-label">
<span class="sidebar-name">John Doe</span>
<span class="sidebar-description">john@example.com</span>
</span>
<span class="icon icon-selector sidebar-chevron"></span>
</button>
<div class="dropdown-content menu" aria-label="Account actions" hidden>
<div class="item item-sm" style="--plf-item-padding: var(--plf-space-2); flex-wrap: nowrap">
<span class="item-media">
<span class="avatar avatar-sm">
<img class="avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<div class="item-content">
<p class="item-title">John Doe</p>
<p class="item-description">john@example.com</p>
</div>
</div>
<hr class="menu-separator">
<button class="menu-item">
<span class="icon icon-sparkles"></span>
<span>Upgrade to Pro</span>
</button>
<hr class="menu-separator">
<button class="menu-item"><span class="icon icon-user"></span><span>Account</span></button>
<button class="menu-item"><span class="icon icon-credit-card"></span><span>Billing</span></button>
<button class="menu-item"><span class="icon icon-bell"></span><span>Notifications</span></button>
<button class="menu-item">
<span class="icon icon-settings"></span>
<span>Preferences</span>
</button>
<hr class="menu-separator">
<button class="menu-item menu-item-error">
<span class="icon icon-logout"></span>
<span>Log out</span>
</button>
</div>
</div>
</footer>
</aside>
<div class="drawer-content">
<header class="flex items-center gap-3" style="padding: var(--plf-space-3) var(--plf-space-4)">
<button class="btn btn-ghost btn-sm btn-square" data-plf-sidebar-toggle aria-label="Toggle navigation" hidden>
<span class="icon icon-layout-sidebar"></span>
</button>
<nav class="breadcrumbs" aria-label="Page location">
<ol role="list">
<li><a href="#">Workspace</a></li>
<li><span aria-current="page">Overview</span></li>
</ol>
</nav>
</header>
<div style="padding: var(--plf-space-4)">
<!-- Page content -->
</div>
</div>
</div>
<dialog class="modal sheet sheet-start sidebar-dialog" aria-label="Navigation">
<button class="modal-close sheet-close" aria-label="Close navigation" data-plf-trigger="modal:close"></button>
<div class="sheet-body sidebar-mobile-content"></div>
</dialog>
</div>
<script>
const sidebar = document.getElementById('sidebar-icons');
try {
const saved = localStorage.getItem('plf-sidebar-collapsed');
if (saved) sidebar.toggleAttribute('data-plf-collapsed', saved === 'true');
} catch {}
sidebar.addEventListener('plf:sidebar:change', (event) => {
try { localStorage.setItem('plf-sidebar-collapsed', event.detail.collapsed); } catch {}
});
</script><div class="plf:drawer" id="sidebar-icons" data-plf-sidebar data-plf-indicator data-plf-collapsed>
<div class="plf:drawer-body">
<aside class="plf:sidebar" aria-label="Workspace sidebar">
<header class="plf:sidebar-header">
<a class="plf:sidebar-link plf:sidebar-identity" href="#">
<span class="plf:sidebar-identity-icon" style="border-radius: var(--plf-radius-lg); background: var(--plf-color-primary); color: var(--plf-color-on-primary)">
<span class="plf:icon plf:icon-stack-2"></span>
</span>
<span class="plf:sidebar-label">Pelatform</span>
</a>
</header>
<nav class="plf:sidebar-content" aria-label="Workspace">
<div class="plf:sidebar-group">
<p class="plf:sidebar-group-label plf:sidebar-label">Platform</p>
<ul class="plf:sidebar-menu" role="list">
<li>
<a class="plf:sidebar-link" href="#" aria-current="page">
<span class="plf:icon plf:icon-home"></span>
<span class="plf:sidebar-label">Overview</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-layout-dashboard"></span>
<span class="plf:sidebar-label">Components</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:sidebar-label">Fields</span>
</a>
</li>
</ul>
</div>
<details class="plf:collapse plf:sidebar-group" open>
<summary class="plf:collapse-trigger plf:sidebar-link">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:collapse-title plf:sidebar-label">Projects</span>
</summary>
<div class="plf:collapse-content plf:sidebar-group-content">
<ul class="plf:sidebar-submenu" role="list">
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Active projects</span>
</a>
</li>
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Archived projects</span>
</a>
</li>
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Shared with you</span>
</a>
</li>
</ul>
</div>
</details>
<div class="plf:sidebar-group">
<p class="plf:sidebar-group-label plf:sidebar-label">Resources</p>
<ul class="plf:sidebar-menu" role="list">
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-book"></span>
<span class="plf:sidebar-label">Documentation</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-settings"></span>
<span class="plf:sidebar-label">Settings</span>
</a>
</li>
</ul>
</div>
</nav>
<footer class="plf:sidebar-footer">
<div class="plf:dropdown plf:sidebar-control" data-plf-dropdown-menu data-plf-placement="right" data-plf-align="end">
<button class="plf:sidebar-link plf:sidebar-identity" aria-label="Account for John Doe, john@example.com">
<span class="plf:sidebar-identity-icon">
<span class="plf:avatar plf:avatar-sm" style="--plf-avatar-size: 100%">
<img class="plf:avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<span class="plf:sidebar-label">
<span class="plf:sidebar-name">John Doe</span>
<span class="plf:sidebar-description">john@example.com</span>
</span>
<span class="plf:icon plf:icon-selector plf:sidebar-chevron"></span>
</button>
<div class="plf:dropdown-content plf:menu" aria-label="Account actions" hidden>
<div class="plf:item plf:item-sm" style="--plf-item-padding: var(--plf-space-2); flex-wrap: nowrap">
<span class="plf:item-media">
<span class="plf:avatar plf:avatar-sm">
<img class="plf:avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<div class="plf:item-content">
<p class="plf:item-title">John Doe</p>
<p class="plf:item-description">john@example.com</p>
</div>
</div>
<hr class="plf:menu-separator">
<button class="plf:menu-item">
<span class="plf:icon plf:icon-sparkles"></span>
<span>Upgrade to Pro</span>
</button>
<hr class="plf:menu-separator">
<button class="plf:menu-item"><span class="plf:icon plf:icon-user"></span><span>Account</span></button>
<button class="plf:menu-item"><span class="plf:icon plf:icon-credit-card"></span><span>Billing</span></button>
<button class="plf:menu-item"><span class="plf:icon plf:icon-bell"></span><span>Notifications</span></button>
<button class="plf:menu-item">
<span class="plf:icon plf:icon-settings"></span>
<span>Preferences</span>
</button>
<hr class="plf:menu-separator">
<button class="plf:menu-item plf:menu-item-error">
<span class="plf:icon plf:icon-logout"></span>
<span>Log out</span>
</button>
</div>
</div>
</footer>
</aside>
<div class="plf:drawer-content">
<header class="plf:flex plf:items-center plf:gap-3" style="padding: var(--plf-space-3) var(--plf-space-4)">
<button class="plf:btn plf:btn-ghost plf:btn-sm plf:btn-square" data-plf-sidebar-toggle aria-label="Toggle navigation" hidden>
<span class="plf:icon plf:icon-layout-sidebar"></span>
</button>
<nav class="plf:breadcrumbs" aria-label="Page location">
<ol role="list">
<li><a href="#">Workspace</a></li>
<li><span aria-current="page">Overview</span></li>
</ol>
</nav>
</header>
<div style="padding: var(--plf-space-4)">
<!-- Page content -->
</div>
</div>
</div>
<dialog class="plf:modal plf:sheet plf:sheet-start plf:sidebar-dialog" aria-label="Navigation">
<button class="plf:modal-close plf:sheet-close" aria-label="Close navigation" data-plf-trigger="modal:close"></button>
<div class="plf:sheet-body plf:sidebar-mobile-content"></div>
</dialog>
</div>
<script>
const sidebar = document.getElementById('sidebar-icons');
try {
const saved = localStorage.getItem('plf-sidebar-collapsed');
if (saved) sidebar.toggleAttribute('data-plf-collapsed', saved === 'true');
} catch {}
sidebar.addEventListener('plf:sidebar:change', (event) => {
try { localStorage.setItem('plf-sidebar-collapsed', event.detail.collapsed); } catch {}
});
</script>import type { CSSProperties } from 'react';
import {
Avatar, AvatarImage, Breadcrumb, BreadcrumbItem, BreadcrumbPage, buttonClass, Collapsible, CollapsibleContent, CollapsibleTitle,
CollapsibleTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, Icon, Item,
ItemContent, ItemDescription, Sidebar, SidebarContent, SidebarDescription, SidebarFooter, SidebarGroup, SidebarGroupLabel,
SidebarHeader, SidebarIdentity, SidebarIdentityIcon, SidebarLabel, SidebarLink, SidebarMenu, SidebarName, SidebarPage,
SidebarPanel, SidebarSubLink, SidebarSubmenu, SidebarTrigger,
} from '@pelatform/react';
export function Example() {
// The mode this browser saved, collapsed until it saves one.
let saved = true;
try { saved = localStorage.getItem('plf-sidebar-collapsed') !== 'false'; } catch {}
const save = (collapsed: boolean) => { try { localStorage.setItem('plf-sidebar-collapsed', String(collapsed)); } catch {} };
return (
<Sidebar indicator defaultCollapsed={saved} onCollapsedChange={save}>
<SidebarPanel aria-label="Workspace sidebar">
<SidebarHeader>
<SidebarIdentity href="#">
<SidebarIdentityIcon style={{ borderRadius: 'var(--plf-radius-lg)', background: 'var(--plf-color-primary)', color: 'var(--plf-color-on-primary)' }}>
<Icon name="stack-2" />
</SidebarIdentityIcon>
<SidebarLabel>Pelatform</SidebarLabel>
</SidebarIdentity>
</SidebarHeader>
<SidebarContent aria-label="Workspace">
<SidebarGroup>
<SidebarGroupLabel>Platform</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#" aria-current="page">
<Icon name="home" />
<SidebarLabel>Overview</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="layout-dashboard" />
<SidebarLabel>Components</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Fields</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
<Collapsible className="sidebar-group" open>
<CollapsibleTrigger className="sidebar-link">
<Icon name="folder" />
<CollapsibleTitle className="sidebar-label">Projects</CollapsibleTitle>
</CollapsibleTrigger>
<CollapsibleContent className="sidebar-group-content">
<SidebarSubmenu>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Active projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Archived projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Shared with you</SidebarLabel>
</SidebarSubLink>
</li>
</SidebarSubmenu>
</CollapsibleContent>
</Collapsible>
<SidebarGroup>
<SidebarGroupLabel>Resources</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#">
<Icon name="book" />
<SidebarLabel>Documentation</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="settings" />
<SidebarLabel>Settings</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<DropdownMenu className="sidebar-control" placement="right" align="end">
<DropdownMenuTrigger className="sidebar-link sidebar-identity" aria-label="Account for John Doe, john@example.com">
<SidebarIdentityIcon>
<Avatar size="sm" style={{ '--plf-avatar-size': '100%' } as CSSProperties}>
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</SidebarIdentityIcon>
<SidebarLabel>
<SidebarName>John Doe</SidebarName>
<SidebarDescription>john@example.com</SidebarDescription>
</SidebarLabel>
<Icon name="selector" className="sidebar-chevron" />
</DropdownMenuTrigger>
<DropdownMenuContent aria-label="Account actions">
<Item size="sm" style={{ '--plf-item-padding': 'var(--plf-space-2)', flexWrap: 'nowrap' } as CSSProperties}>
<span className="item-media">
<Avatar size="sm">
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</span>
<ItemContent>
<p className="item-title">John Doe</p>
<ItemDescription>john@example.com</ItemDescription>
</ItemContent>
</Item>
<DropdownMenuSeparator />
<DropdownMenuItem>
<Icon name="sparkles" />
<span>Upgrade to Pro</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem><Icon name="user" /><span>Account</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="credit-card" /><span>Billing</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="bell" /><span>Notifications</span></DropdownMenuItem>
<DropdownMenuItem>
<Icon name="settings" />
<span>Preferences</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem color="error">
<Icon name="logout" />
<span>Log out</span>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</SidebarFooter>
</SidebarPanel>
<SidebarPage>
<header className="flex items-center gap-3" style={{ padding: 'var(--plf-space-3) var(--plf-space-4)' }}>
<SidebarTrigger className={buttonClass({ variant: 'ghost', size: 'sm', shape: 'square' })}>
<Icon name="layout-sidebar" />
</SidebarTrigger>
<Breadcrumb aria-label="Page location">
<BreadcrumbItem><a href="#">Workspace</a></BreadcrumbItem>
<BreadcrumbItem><BreadcrumbPage>Overview</BreadcrumbPage></BreadcrumbItem>
</Breadcrumb>
</header>
<div style={{ padding: 'var(--plf-space-4)' }}>
{/* Page content */}
</div>
</SidebarPage>
</Sidebar>
);
}import type { CSSProperties } from 'react';
import {
Avatar, AvatarImage, Breadcrumb, BreadcrumbItem, BreadcrumbPage, buttonClass, Collapsible, CollapsibleContent, CollapsibleTitle,
CollapsibleTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, Icon, Item,
ItemContent, ItemDescription, Sidebar, SidebarContent, SidebarDescription, SidebarFooter, SidebarGroup, SidebarGroupLabel,
SidebarHeader, SidebarIdentity, SidebarIdentityIcon, SidebarLabel, SidebarLink, SidebarMenu, SidebarName, SidebarPage,
SidebarPanel, SidebarSubLink, SidebarSubmenu, SidebarTrigger,
} from '@pelatform/react/prefixed';
export function Example() {
// The mode this browser saved, collapsed until it saves one.
let saved = true;
try { saved = localStorage.getItem('plf-sidebar-collapsed') !== 'false'; } catch {}
const save = (collapsed: boolean) => { try { localStorage.setItem('plf-sidebar-collapsed', String(collapsed)); } catch {} };
return (
<Sidebar indicator defaultCollapsed={saved} onCollapsedChange={save}>
<SidebarPanel aria-label="Workspace sidebar">
<SidebarHeader>
<SidebarIdentity href="#">
<SidebarIdentityIcon style={{ borderRadius: 'var(--plf-radius-lg)', background: 'var(--plf-color-primary)', color: 'var(--plf-color-on-primary)' }}>
<Icon name="stack-2" />
</SidebarIdentityIcon>
<SidebarLabel>Pelatform</SidebarLabel>
</SidebarIdentity>
</SidebarHeader>
<SidebarContent aria-label="Workspace">
<SidebarGroup>
<SidebarGroupLabel>Platform</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#" aria-current="page">
<Icon name="home" />
<SidebarLabel>Overview</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="layout-dashboard" />
<SidebarLabel>Components</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Fields</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
<Collapsible className="plf:sidebar-group" open>
<CollapsibleTrigger className="plf:sidebar-link">
<Icon name="folder" />
<CollapsibleTitle className="plf:sidebar-label">Projects</CollapsibleTitle>
</CollapsibleTrigger>
<CollapsibleContent className="plf:sidebar-group-content">
<SidebarSubmenu>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Active projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Archived projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Shared with you</SidebarLabel>
</SidebarSubLink>
</li>
</SidebarSubmenu>
</CollapsibleContent>
</Collapsible>
<SidebarGroup>
<SidebarGroupLabel>Resources</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#">
<Icon name="book" />
<SidebarLabel>Documentation</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="settings" />
<SidebarLabel>Settings</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<DropdownMenu className="plf:sidebar-control" placement="right" align="end">
<DropdownMenuTrigger className="plf:sidebar-link plf:sidebar-identity" aria-label="Account for John Doe, john@example.com">
<SidebarIdentityIcon>
<Avatar size="sm" style={{ '--plf-avatar-size': '100%' } as CSSProperties}>
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</SidebarIdentityIcon>
<SidebarLabel>
<SidebarName>John Doe</SidebarName>
<SidebarDescription>john@example.com</SidebarDescription>
</SidebarLabel>
<Icon name="selector" className="plf:sidebar-chevron" />
</DropdownMenuTrigger>
<DropdownMenuContent aria-label="Account actions">
<Item size="sm" style={{ '--plf-item-padding': 'var(--plf-space-2)', flexWrap: 'nowrap' } as CSSProperties}>
<span className="plf:item-media">
<Avatar size="sm">
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</span>
<ItemContent>
<p className="plf:item-title">John Doe</p>
<ItemDescription>john@example.com</ItemDescription>
</ItemContent>
</Item>
<DropdownMenuSeparator />
<DropdownMenuItem>
<Icon name="sparkles" />
<span>Upgrade to Pro</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem><Icon name="user" /><span>Account</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="credit-card" /><span>Billing</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="bell" /><span>Notifications</span></DropdownMenuItem>
<DropdownMenuItem>
<Icon name="settings" />
<span>Preferences</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem color="error">
<Icon name="logout" />
<span>Log out</span>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</SidebarFooter>
</SidebarPanel>
<SidebarPage>
<header className="plf:flex plf:items-center plf:gap-3" style={{ padding: 'var(--plf-space-3) var(--plf-space-4)' }}>
<SidebarTrigger className={buttonClass({ variant: 'ghost', size: 'sm', shape: 'square' })}>
<Icon name="layout-sidebar" />
</SidebarTrigger>
<Breadcrumb aria-label="Page location">
<BreadcrumbItem><a href="#">Workspace</a></BreadcrumbItem>
<BreadcrumbItem><BreadcrumbPage>Overview</BreadcrumbPage></BreadcrumbItem>
</Breadcrumb>
</header>
<div style={{ padding: 'var(--plf-space-4)' }}>
{/* Page content */}
</div>
</SidebarPage>
</Sidebar>
);
}Offcanvas
data-plf-collapsible="offcanvas" hides the sidebar on wide screens instead of narrowing it to icons; this one starts hidden, and its toggle shows it.
<div class="drawer" data-plf-sidebar data-plf-indicator data-plf-collapsible="offcanvas" data-plf-collapsed>
<div class="drawer-body">
<aside class="sidebar" aria-label="Workspace sidebar">
<header class="sidebar-header">
<a class="sidebar-link sidebar-identity" href="#">
<span class="sidebar-identity-icon" style="border-radius: var(--plf-radius-lg); background: var(--plf-color-primary); color: var(--plf-color-on-primary)">
<span class="icon icon-stack-2"></span>
</span>
<span class="sidebar-label">Pelatform</span>
</a>
</header>
<nav class="sidebar-content" aria-label="Workspace">
<div class="sidebar-group">
<p class="sidebar-group-label sidebar-label">Platform</p>
<ul class="sidebar-menu" role="list">
<li>
<a class="sidebar-link" href="#" aria-current="page">
<span class="icon icon-home"></span>
<span class="sidebar-label">Overview</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-layout-dashboard"></span>
<span class="sidebar-label">Components</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-folder"></span>
<span class="sidebar-label">Fields</span>
</a>
</li>
</ul>
</div>
<details class="collapse sidebar-group" open>
<summary class="collapse-trigger sidebar-link">
<span class="icon icon-folder"></span>
<span class="collapse-title sidebar-label">Projects</span>
</summary>
<div class="collapse-content sidebar-group-content">
<ul class="sidebar-submenu" role="list">
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Active projects</span>
</a>
</li>
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Archived projects</span>
</a>
</li>
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Shared with you</span>
</a>
</li>
</ul>
</div>
</details>
<div class="sidebar-group">
<p class="sidebar-group-label sidebar-label">Resources</p>
<ul class="sidebar-menu" role="list">
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-book"></span>
<span class="sidebar-label">Documentation</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-settings"></span>
<span class="sidebar-label">Settings</span>
</a>
</li>
</ul>
</div>
</nav>
<footer class="sidebar-footer">
<div class="dropdown sidebar-control" data-plf-dropdown-menu data-plf-placement="right" data-plf-align="end">
<button class="sidebar-link sidebar-identity" aria-label="Account for John Doe, john@example.com">
<span class="sidebar-identity-icon">
<span class="avatar avatar-sm" style="--plf-avatar-size: 100%">
<img class="avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<span class="sidebar-label">
<span class="sidebar-name">John Doe</span>
<span class="sidebar-description">john@example.com</span>
</span>
<span class="icon icon-selector sidebar-chevron"></span>
</button>
<div class="dropdown-content menu" aria-label="Account actions" hidden>
<div class="item item-sm" style="--plf-item-padding: var(--plf-space-2); flex-wrap: nowrap">
<span class="item-media">
<span class="avatar avatar-sm">
<img class="avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<div class="item-content">
<p class="item-title">John Doe</p>
<p class="item-description">john@example.com</p>
</div>
</div>
<hr class="menu-separator">
<button class="menu-item">
<span class="icon icon-sparkles"></span>
<span>Upgrade to Pro</span>
</button>
<hr class="menu-separator">
<button class="menu-item"><span class="icon icon-user"></span><span>Account</span></button>
<button class="menu-item"><span class="icon icon-credit-card"></span><span>Billing</span></button>
<button class="menu-item"><span class="icon icon-bell"></span><span>Notifications</span></button>
<button class="menu-item">
<span class="icon icon-settings"></span>
<span>Preferences</span>
</button>
<hr class="menu-separator">
<button class="menu-item menu-item-error">
<span class="icon icon-logout"></span>
<span>Log out</span>
</button>
</div>
</div>
</footer>
</aside>
<div class="drawer-content">
<header class="flex items-center gap-3" style="padding: var(--plf-space-3) var(--plf-space-4)">
<button class="btn btn-ghost btn-sm btn-square" data-plf-sidebar-toggle aria-label="Toggle navigation" hidden>
<span class="icon icon-layout-sidebar"></span>
</button>
<nav class="breadcrumbs" aria-label="Page location">
<ol role="list">
<li><a href="#">Workspace</a></li>
<li><span aria-current="page">Overview</span></li>
</ol>
</nav>
</header>
<div style="padding: var(--plf-space-4)">
<!-- Page content -->
</div>
</div>
</div>
<dialog class="modal sheet sheet-start sidebar-dialog" aria-label="Navigation">
<button class="modal-close sheet-close" aria-label="Close navigation" data-plf-trigger="modal:close"></button>
<div class="sheet-body sidebar-mobile-content"></div>
</dialog>
</div><div class="plf:drawer" data-plf-sidebar data-plf-indicator data-plf-collapsible="offcanvas" data-plf-collapsed>
<div class="plf:drawer-body">
<aside class="plf:sidebar" aria-label="Workspace sidebar">
<header class="plf:sidebar-header">
<a class="plf:sidebar-link plf:sidebar-identity" href="#">
<span class="plf:sidebar-identity-icon" style="border-radius: var(--plf-radius-lg); background: var(--plf-color-primary); color: var(--plf-color-on-primary)">
<span class="plf:icon plf:icon-stack-2"></span>
</span>
<span class="plf:sidebar-label">Pelatform</span>
</a>
</header>
<nav class="plf:sidebar-content" aria-label="Workspace">
<div class="plf:sidebar-group">
<p class="plf:sidebar-group-label plf:sidebar-label">Platform</p>
<ul class="plf:sidebar-menu" role="list">
<li>
<a class="plf:sidebar-link" href="#" aria-current="page">
<span class="plf:icon plf:icon-home"></span>
<span class="plf:sidebar-label">Overview</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-layout-dashboard"></span>
<span class="plf:sidebar-label">Components</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:sidebar-label">Fields</span>
</a>
</li>
</ul>
</div>
<details class="plf:collapse plf:sidebar-group" open>
<summary class="plf:collapse-trigger plf:sidebar-link">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:collapse-title plf:sidebar-label">Projects</span>
</summary>
<div class="plf:collapse-content plf:sidebar-group-content">
<ul class="plf:sidebar-submenu" role="list">
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Active projects</span>
</a>
</li>
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Archived projects</span>
</a>
</li>
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Shared with you</span>
</a>
</li>
</ul>
</div>
</details>
<div class="plf:sidebar-group">
<p class="plf:sidebar-group-label plf:sidebar-label">Resources</p>
<ul class="plf:sidebar-menu" role="list">
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-book"></span>
<span class="plf:sidebar-label">Documentation</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-settings"></span>
<span class="plf:sidebar-label">Settings</span>
</a>
</li>
</ul>
</div>
</nav>
<footer class="plf:sidebar-footer">
<div class="plf:dropdown plf:sidebar-control" data-plf-dropdown-menu data-plf-placement="right" data-plf-align="end">
<button class="plf:sidebar-link plf:sidebar-identity" aria-label="Account for John Doe, john@example.com">
<span class="plf:sidebar-identity-icon">
<span class="plf:avatar plf:avatar-sm" style="--plf-avatar-size: 100%">
<img class="plf:avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<span class="plf:sidebar-label">
<span class="plf:sidebar-name">John Doe</span>
<span class="plf:sidebar-description">john@example.com</span>
</span>
<span class="plf:icon plf:icon-selector plf:sidebar-chevron"></span>
</button>
<div class="plf:dropdown-content plf:menu" aria-label="Account actions" hidden>
<div class="plf:item plf:item-sm" style="--plf-item-padding: var(--plf-space-2); flex-wrap: nowrap">
<span class="plf:item-media">
<span class="plf:avatar plf:avatar-sm">
<img class="plf:avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<div class="plf:item-content">
<p class="plf:item-title">John Doe</p>
<p class="plf:item-description">john@example.com</p>
</div>
</div>
<hr class="plf:menu-separator">
<button class="plf:menu-item">
<span class="plf:icon plf:icon-sparkles"></span>
<span>Upgrade to Pro</span>
</button>
<hr class="plf:menu-separator">
<button class="plf:menu-item"><span class="plf:icon plf:icon-user"></span><span>Account</span></button>
<button class="plf:menu-item"><span class="plf:icon plf:icon-credit-card"></span><span>Billing</span></button>
<button class="plf:menu-item"><span class="plf:icon plf:icon-bell"></span><span>Notifications</span></button>
<button class="plf:menu-item">
<span class="plf:icon plf:icon-settings"></span>
<span>Preferences</span>
</button>
<hr class="plf:menu-separator">
<button class="plf:menu-item plf:menu-item-error">
<span class="plf:icon plf:icon-logout"></span>
<span>Log out</span>
</button>
</div>
</div>
</footer>
</aside>
<div class="plf:drawer-content">
<header class="plf:flex plf:items-center plf:gap-3" style="padding: var(--plf-space-3) var(--plf-space-4)">
<button class="plf:btn plf:btn-ghost plf:btn-sm plf:btn-square" data-plf-sidebar-toggle aria-label="Toggle navigation" hidden>
<span class="plf:icon plf:icon-layout-sidebar"></span>
</button>
<nav class="plf:breadcrumbs" aria-label="Page location">
<ol role="list">
<li><a href="#">Workspace</a></li>
<li><span aria-current="page">Overview</span></li>
</ol>
</nav>
</header>
<div style="padding: var(--plf-space-4)">
<!-- Page content -->
</div>
</div>
</div>
<dialog class="plf:modal plf:sheet plf:sheet-start plf:sidebar-dialog" aria-label="Navigation">
<button class="plf:modal-close plf:sheet-close" aria-label="Close navigation" data-plf-trigger="modal:close"></button>
<div class="plf:sheet-body plf:sidebar-mobile-content"></div>
</dialog>
</div>import type { CSSProperties } from 'react';
import {
Avatar, AvatarImage, Breadcrumb, BreadcrumbItem, BreadcrumbPage, buttonClass, Collapsible, CollapsibleContent, CollapsibleTitle,
CollapsibleTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, Icon, Item,
ItemContent, ItemDescription, Sidebar, SidebarContent, SidebarDescription, SidebarFooter, SidebarGroup, SidebarGroupLabel,
SidebarHeader, SidebarIdentity, SidebarIdentityIcon, SidebarLabel, SidebarLink, SidebarMenu, SidebarName, SidebarPage,
SidebarPanel, SidebarSubLink, SidebarSubmenu, SidebarTrigger,
} from '@pelatform/react';
export function Example() {
return (
<Sidebar indicator collapsible="offcanvas" defaultCollapsed>
<SidebarPanel aria-label="Workspace sidebar">
<SidebarHeader>
<SidebarIdentity href="#">
<SidebarIdentityIcon style={{ borderRadius: 'var(--plf-radius-lg)', background: 'var(--plf-color-primary)', color: 'var(--plf-color-on-primary)' }}>
<Icon name="stack-2" />
</SidebarIdentityIcon>
<SidebarLabel>Pelatform</SidebarLabel>
</SidebarIdentity>
</SidebarHeader>
<SidebarContent aria-label="Workspace">
<SidebarGroup>
<SidebarGroupLabel>Platform</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#" aria-current="page">
<Icon name="home" />
<SidebarLabel>Overview</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="layout-dashboard" />
<SidebarLabel>Components</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Fields</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
<Collapsible className="sidebar-group" open>
<CollapsibleTrigger className="sidebar-link">
<Icon name="folder" />
<CollapsibleTitle className="sidebar-label">Projects</CollapsibleTitle>
</CollapsibleTrigger>
<CollapsibleContent className="sidebar-group-content">
<SidebarSubmenu>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Active projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Archived projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Shared with you</SidebarLabel>
</SidebarSubLink>
</li>
</SidebarSubmenu>
</CollapsibleContent>
</Collapsible>
<SidebarGroup>
<SidebarGroupLabel>Resources</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#">
<Icon name="book" />
<SidebarLabel>Documentation</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="settings" />
<SidebarLabel>Settings</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<DropdownMenu className="sidebar-control" placement="right" align="end">
<DropdownMenuTrigger className="sidebar-link sidebar-identity" aria-label="Account for John Doe, john@example.com">
<SidebarIdentityIcon>
<Avatar size="sm" style={{ '--plf-avatar-size': '100%' } as CSSProperties}>
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</SidebarIdentityIcon>
<SidebarLabel>
<SidebarName>John Doe</SidebarName>
<SidebarDescription>john@example.com</SidebarDescription>
</SidebarLabel>
<Icon name="selector" className="sidebar-chevron" />
</DropdownMenuTrigger>
<DropdownMenuContent aria-label="Account actions">
<Item size="sm" style={{ '--plf-item-padding': 'var(--plf-space-2)', flexWrap: 'nowrap' } as CSSProperties}>
<span className="item-media">
<Avatar size="sm">
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</span>
<ItemContent>
<p className="item-title">John Doe</p>
<ItemDescription>john@example.com</ItemDescription>
</ItemContent>
</Item>
<DropdownMenuSeparator />
<DropdownMenuItem>
<Icon name="sparkles" />
<span>Upgrade to Pro</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem><Icon name="user" /><span>Account</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="credit-card" /><span>Billing</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="bell" /><span>Notifications</span></DropdownMenuItem>
<DropdownMenuItem>
<Icon name="settings" />
<span>Preferences</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem color="error">
<Icon name="logout" />
<span>Log out</span>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</SidebarFooter>
</SidebarPanel>
<SidebarPage>
<header className="flex items-center gap-3" style={{ padding: 'var(--plf-space-3) var(--plf-space-4)' }}>
<SidebarTrigger className={buttonClass({ variant: 'ghost', size: 'sm', shape: 'square' })}>
<Icon name="layout-sidebar" />
</SidebarTrigger>
<Breadcrumb aria-label="Page location">
<BreadcrumbItem><a href="#">Workspace</a></BreadcrumbItem>
<BreadcrumbItem><BreadcrumbPage>Overview</BreadcrumbPage></BreadcrumbItem>
</Breadcrumb>
</header>
<div style={{ padding: 'var(--plf-space-4)' }}>
{/* Page content */}
</div>
</SidebarPage>
</Sidebar>
);
}import type { CSSProperties } from 'react';
import {
Avatar, AvatarImage, Breadcrumb, BreadcrumbItem, BreadcrumbPage, buttonClass, Collapsible, CollapsibleContent, CollapsibleTitle,
CollapsibleTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, Icon, Item,
ItemContent, ItemDescription, Sidebar, SidebarContent, SidebarDescription, SidebarFooter, SidebarGroup, SidebarGroupLabel,
SidebarHeader, SidebarIdentity, SidebarIdentityIcon, SidebarLabel, SidebarLink, SidebarMenu, SidebarName, SidebarPage,
SidebarPanel, SidebarSubLink, SidebarSubmenu, SidebarTrigger,
} from '@pelatform/react/prefixed';
export function Example() {
return (
<Sidebar indicator collapsible="offcanvas" defaultCollapsed>
<SidebarPanel aria-label="Workspace sidebar">
<SidebarHeader>
<SidebarIdentity href="#">
<SidebarIdentityIcon style={{ borderRadius: 'var(--plf-radius-lg)', background: 'var(--plf-color-primary)', color: 'var(--plf-color-on-primary)' }}>
<Icon name="stack-2" />
</SidebarIdentityIcon>
<SidebarLabel>Pelatform</SidebarLabel>
</SidebarIdentity>
</SidebarHeader>
<SidebarContent aria-label="Workspace">
<SidebarGroup>
<SidebarGroupLabel>Platform</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#" aria-current="page">
<Icon name="home" />
<SidebarLabel>Overview</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="layout-dashboard" />
<SidebarLabel>Components</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Fields</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
<Collapsible className="plf:sidebar-group" open>
<CollapsibleTrigger className="plf:sidebar-link">
<Icon name="folder" />
<CollapsibleTitle className="plf:sidebar-label">Projects</CollapsibleTitle>
</CollapsibleTrigger>
<CollapsibleContent className="plf:sidebar-group-content">
<SidebarSubmenu>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Active projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Archived projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Shared with you</SidebarLabel>
</SidebarSubLink>
</li>
</SidebarSubmenu>
</CollapsibleContent>
</Collapsible>
<SidebarGroup>
<SidebarGroupLabel>Resources</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#">
<Icon name="book" />
<SidebarLabel>Documentation</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="settings" />
<SidebarLabel>Settings</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<DropdownMenu className="plf:sidebar-control" placement="right" align="end">
<DropdownMenuTrigger className="plf:sidebar-link plf:sidebar-identity" aria-label="Account for John Doe, john@example.com">
<SidebarIdentityIcon>
<Avatar size="sm" style={{ '--plf-avatar-size': '100%' } as CSSProperties}>
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</SidebarIdentityIcon>
<SidebarLabel>
<SidebarName>John Doe</SidebarName>
<SidebarDescription>john@example.com</SidebarDescription>
</SidebarLabel>
<Icon name="selector" className="plf:sidebar-chevron" />
</DropdownMenuTrigger>
<DropdownMenuContent aria-label="Account actions">
<Item size="sm" style={{ '--plf-item-padding': 'var(--plf-space-2)', flexWrap: 'nowrap' } as CSSProperties}>
<span className="plf:item-media">
<Avatar size="sm">
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</span>
<ItemContent>
<p className="plf:item-title">John Doe</p>
<ItemDescription>john@example.com</ItemDescription>
</ItemContent>
</Item>
<DropdownMenuSeparator />
<DropdownMenuItem>
<Icon name="sparkles" />
<span>Upgrade to Pro</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem><Icon name="user" /><span>Account</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="credit-card" /><span>Billing</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="bell" /><span>Notifications</span></DropdownMenuItem>
<DropdownMenuItem>
<Icon name="settings" />
<span>Preferences</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem color="error">
<Icon name="logout" />
<span>Log out</span>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</SidebarFooter>
</SidebarPanel>
<SidebarPage>
<header className="plf:flex plf:items-center plf:gap-3" style={{ padding: 'var(--plf-space-3) var(--plf-space-4)' }}>
<SidebarTrigger className={buttonClass({ variant: 'ghost', size: 'sm', shape: 'square' })}>
<Icon name="layout-sidebar" />
</SidebarTrigger>
<Breadcrumb aria-label="Page location">
<BreadcrumbItem><a href="#">Workspace</a></BreadcrumbItem>
<BreadcrumbItem><BreadcrumbPage>Overview</BreadcrumbPage></BreadcrumbItem>
</Breadcrumb>
</header>
<div style={{ padding: 'var(--plf-space-4)' }}>
{/* Page content */}
</div>
</SidebarPage>
</Sidebar>
);
}Scrollable
The menu scrolls when it is taller than the layout, which needs a height, or than the screen in a sticky layout.
<div class="drawer" data-plf-sidebar data-plf-indicator style="block-size: 35rem">
<div class="drawer-body">
<aside class="sidebar" aria-label="Workspace sidebar">
<header class="sidebar-header">
<a class="sidebar-link sidebar-identity" href="#">
<span class="sidebar-identity-icon" style="border-radius: var(--plf-radius-lg); background: var(--plf-color-primary); color: var(--plf-color-on-primary)">
<span class="icon icon-stack-2"></span>
</span>
<span class="sidebar-label">Pelatform</span>
</a>
</header>
<nav class="sidebar-content" aria-label="Workspace">
<div class="sidebar-group">
<p class="sidebar-group-label sidebar-label">Platform</p>
<ul class="sidebar-menu" role="list">
<li>
<a class="sidebar-link" href="#" aria-current="page">
<span class="icon icon-home"></span>
<span class="sidebar-label">Overview</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-layout-dashboard"></span>
<span class="sidebar-label">Components</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-folder"></span>
<span class="sidebar-label">Fields</span>
</a>
</li>
</ul>
</div>
<details class="collapse sidebar-group" open>
<summary class="collapse-trigger sidebar-link">
<span class="icon icon-folder"></span>
<span class="collapse-title sidebar-label">Projects</span>
</summary>
<div class="collapse-content sidebar-group-content">
<ul class="sidebar-submenu" role="list">
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Active projects</span>
</a>
</li>
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Archived projects</span>
</a>
</li>
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Shared with you</span>
</a>
</li>
</ul>
</div>
</details>
<div class="sidebar-group">
<p class="sidebar-group-label sidebar-label">Resources</p>
<ul class="sidebar-menu" role="list">
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-book"></span>
<span class="sidebar-label">Documentation</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-settings"></span>
<span class="sidebar-label">Settings</span>
</a>
</li>
</ul>
</div>
<div class="sidebar-group">
<p class="sidebar-group-label sidebar-label">Project spaces</p>
<ul class="sidebar-menu" role="list">
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-folder"></span>
<span class="sidebar-label">Project workspace 1</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-folder"></span>
<span class="sidebar-label">Project workspace 2</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-folder"></span>
<span class="sidebar-label">Project workspace 3</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-folder"></span>
<span class="sidebar-label">Project workspace 4</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-folder"></span>
<span class="sidebar-label">Project workspace 5</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-folder"></span>
<span class="sidebar-label">Project workspace 6</span>
</a>
</li>
</ul>
</div>
</nav>
<footer class="sidebar-footer">
<div class="dropdown sidebar-control" data-plf-dropdown-menu data-plf-placement="right" data-plf-align="end">
<button class="sidebar-link sidebar-identity" aria-label="Account for John Doe, john@example.com">
<span class="sidebar-identity-icon">
<span class="avatar avatar-sm" style="--plf-avatar-size: 100%">
<img class="avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<span class="sidebar-label">
<span class="sidebar-name">John Doe</span>
<span class="sidebar-description">john@example.com</span>
</span>
<span class="icon icon-selector sidebar-chevron"></span>
</button>
<div class="dropdown-content menu" aria-label="Account actions" hidden>
<div class="item item-sm" style="--plf-item-padding: var(--plf-space-2); flex-wrap: nowrap">
<span class="item-media">
<span class="avatar avatar-sm">
<img class="avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<div class="item-content">
<p class="item-title">John Doe</p>
<p class="item-description">john@example.com</p>
</div>
</div>
<hr class="menu-separator">
<button class="menu-item">
<span class="icon icon-sparkles"></span>
<span>Upgrade to Pro</span>
</button>
<hr class="menu-separator">
<button class="menu-item"><span class="icon icon-user"></span><span>Account</span></button>
<button class="menu-item"><span class="icon icon-credit-card"></span><span>Billing</span></button>
<button class="menu-item"><span class="icon icon-bell"></span><span>Notifications</span></button>
<button class="menu-item">
<span class="icon icon-settings"></span>
<span>Preferences</span>
</button>
<hr class="menu-separator">
<button class="menu-item menu-item-error">
<span class="icon icon-logout"></span>
<span>Log out</span>
</button>
</div>
</div>
</footer>
</aside>
<div class="drawer-content">
<header class="flex items-center gap-3" style="padding: var(--plf-space-3) var(--plf-space-4)">
<button class="btn btn-ghost btn-sm btn-square" data-plf-sidebar-toggle aria-label="Toggle navigation" hidden>
<span class="icon icon-layout-sidebar"></span>
</button>
<nav class="breadcrumbs" aria-label="Page location">
<ol role="list">
<li><a href="#">Workspace</a></li>
<li><span aria-current="page">Overview</span></li>
</ol>
</nav>
</header>
<div style="padding: var(--plf-space-4)">
<!-- Page content -->
</div>
</div>
</div>
<dialog class="modal sheet sheet-start sidebar-dialog" aria-label="Navigation">
<button class="modal-close sheet-close" aria-label="Close navigation" data-plf-trigger="modal:close"></button>
<div class="sheet-body sidebar-mobile-content"></div>
</dialog>
</div><div class="plf:drawer" data-plf-sidebar data-plf-indicator style="block-size: 35rem">
<div class="plf:drawer-body">
<aside class="plf:sidebar" aria-label="Workspace sidebar">
<header class="plf:sidebar-header">
<a class="plf:sidebar-link plf:sidebar-identity" href="#">
<span class="plf:sidebar-identity-icon" style="border-radius: var(--plf-radius-lg); background: var(--plf-color-primary); color: var(--plf-color-on-primary)">
<span class="plf:icon plf:icon-stack-2"></span>
</span>
<span class="plf:sidebar-label">Pelatform</span>
</a>
</header>
<nav class="plf:sidebar-content" aria-label="Workspace">
<div class="plf:sidebar-group">
<p class="plf:sidebar-group-label plf:sidebar-label">Platform</p>
<ul class="plf:sidebar-menu" role="list">
<li>
<a class="plf:sidebar-link" href="#" aria-current="page">
<span class="plf:icon plf:icon-home"></span>
<span class="plf:sidebar-label">Overview</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-layout-dashboard"></span>
<span class="plf:sidebar-label">Components</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:sidebar-label">Fields</span>
</a>
</li>
</ul>
</div>
<details class="plf:collapse plf:sidebar-group" open>
<summary class="plf:collapse-trigger plf:sidebar-link">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:collapse-title plf:sidebar-label">Projects</span>
</summary>
<div class="plf:collapse-content plf:sidebar-group-content">
<ul class="plf:sidebar-submenu" role="list">
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Active projects</span>
</a>
</li>
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Archived projects</span>
</a>
</li>
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Shared with you</span>
</a>
</li>
</ul>
</div>
</details>
<div class="plf:sidebar-group">
<p class="plf:sidebar-group-label plf:sidebar-label">Resources</p>
<ul class="plf:sidebar-menu" role="list">
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-book"></span>
<span class="plf:sidebar-label">Documentation</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-settings"></span>
<span class="plf:sidebar-label">Settings</span>
</a>
</li>
</ul>
</div>
<div class="plf:sidebar-group">
<p class="plf:sidebar-group-label plf:sidebar-label">Project spaces</p>
<ul class="plf:sidebar-menu" role="list">
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:sidebar-label">Project workspace 1</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:sidebar-label">Project workspace 2</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:sidebar-label">Project workspace 3</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:sidebar-label">Project workspace 4</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:sidebar-label">Project workspace 5</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:sidebar-label">Project workspace 6</span>
</a>
</li>
</ul>
</div>
</nav>
<footer class="plf:sidebar-footer">
<div class="plf:dropdown plf:sidebar-control" data-plf-dropdown-menu data-plf-placement="right" data-plf-align="end">
<button class="plf:sidebar-link plf:sidebar-identity" aria-label="Account for John Doe, john@example.com">
<span class="plf:sidebar-identity-icon">
<span class="plf:avatar plf:avatar-sm" style="--plf-avatar-size: 100%">
<img class="plf:avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<span class="plf:sidebar-label">
<span class="plf:sidebar-name">John Doe</span>
<span class="plf:sidebar-description">john@example.com</span>
</span>
<span class="plf:icon plf:icon-selector plf:sidebar-chevron"></span>
</button>
<div class="plf:dropdown-content plf:menu" aria-label="Account actions" hidden>
<div class="plf:item plf:item-sm" style="--plf-item-padding: var(--plf-space-2); flex-wrap: nowrap">
<span class="plf:item-media">
<span class="plf:avatar plf:avatar-sm">
<img class="plf:avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<div class="plf:item-content">
<p class="plf:item-title">John Doe</p>
<p class="plf:item-description">john@example.com</p>
</div>
</div>
<hr class="plf:menu-separator">
<button class="plf:menu-item">
<span class="plf:icon plf:icon-sparkles"></span>
<span>Upgrade to Pro</span>
</button>
<hr class="plf:menu-separator">
<button class="plf:menu-item"><span class="plf:icon plf:icon-user"></span><span>Account</span></button>
<button class="plf:menu-item"><span class="plf:icon plf:icon-credit-card"></span><span>Billing</span></button>
<button class="plf:menu-item"><span class="plf:icon plf:icon-bell"></span><span>Notifications</span></button>
<button class="plf:menu-item">
<span class="plf:icon plf:icon-settings"></span>
<span>Preferences</span>
</button>
<hr class="plf:menu-separator">
<button class="plf:menu-item plf:menu-item-error">
<span class="plf:icon plf:icon-logout"></span>
<span>Log out</span>
</button>
</div>
</div>
</footer>
</aside>
<div class="plf:drawer-content">
<header class="plf:flex plf:items-center plf:gap-3" style="padding: var(--plf-space-3) var(--plf-space-4)">
<button class="plf:btn plf:btn-ghost plf:btn-sm plf:btn-square" data-plf-sidebar-toggle aria-label="Toggle navigation" hidden>
<span class="plf:icon plf:icon-layout-sidebar"></span>
</button>
<nav class="plf:breadcrumbs" aria-label="Page location">
<ol role="list">
<li><a href="#">Workspace</a></li>
<li><span aria-current="page">Overview</span></li>
</ol>
</nav>
</header>
<div style="padding: var(--plf-space-4)">
<!-- Page content -->
</div>
</div>
</div>
<dialog class="plf:modal plf:sheet plf:sheet-start plf:sidebar-dialog" aria-label="Navigation">
<button class="plf:modal-close plf:sheet-close" aria-label="Close navigation" data-plf-trigger="modal:close"></button>
<div class="plf:sheet-body plf:sidebar-mobile-content"></div>
</dialog>
</div>import type { CSSProperties } from 'react';
import {
Avatar, AvatarImage, Breadcrumb, BreadcrumbItem, BreadcrumbPage, buttonClass, Collapsible, CollapsibleContent, CollapsibleTitle,
CollapsibleTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, Icon, Item,
ItemContent, ItemDescription, Sidebar, SidebarContent, SidebarDescription, SidebarFooter, SidebarGroup, SidebarGroupLabel,
SidebarHeader, SidebarIdentity, SidebarIdentityIcon, SidebarLabel, SidebarLink, SidebarMenu, SidebarName, SidebarPage,
SidebarPanel, SidebarSubLink, SidebarSubmenu, SidebarTrigger,
} from '@pelatform/react';
export function Example() {
return (
<Sidebar indicator style={{ blockSize: '35rem' }}>
<SidebarPanel aria-label="Workspace sidebar">
<SidebarHeader>
<SidebarIdentity href="#">
<SidebarIdentityIcon style={{ borderRadius: 'var(--plf-radius-lg)', background: 'var(--plf-color-primary)', color: 'var(--plf-color-on-primary)' }}>
<Icon name="stack-2" />
</SidebarIdentityIcon>
<SidebarLabel>Pelatform</SidebarLabel>
</SidebarIdentity>
</SidebarHeader>
<SidebarContent aria-label="Workspace">
<SidebarGroup>
<SidebarGroupLabel>Platform</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#" aria-current="page">
<Icon name="home" />
<SidebarLabel>Overview</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="layout-dashboard" />
<SidebarLabel>Components</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Fields</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
<Collapsible className="sidebar-group" open>
<CollapsibleTrigger className="sidebar-link">
<Icon name="folder" />
<CollapsibleTitle className="sidebar-label">Projects</CollapsibleTitle>
</CollapsibleTrigger>
<CollapsibleContent className="sidebar-group-content">
<SidebarSubmenu>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Active projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Archived projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Shared with you</SidebarLabel>
</SidebarSubLink>
</li>
</SidebarSubmenu>
</CollapsibleContent>
</Collapsible>
<SidebarGroup>
<SidebarGroupLabel>Resources</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#">
<Icon name="book" />
<SidebarLabel>Documentation</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="settings" />
<SidebarLabel>Settings</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
<SidebarGroup>
<SidebarGroupLabel>Project spaces</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Project workspace 1</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Project workspace 2</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Project workspace 3</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Project workspace 4</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Project workspace 5</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Project workspace 6</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<DropdownMenu className="sidebar-control" placement="right" align="end">
<DropdownMenuTrigger className="sidebar-link sidebar-identity" aria-label="Account for John Doe, john@example.com">
<SidebarIdentityIcon>
<Avatar size="sm" style={{ '--plf-avatar-size': '100%' } as CSSProperties}>
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</SidebarIdentityIcon>
<SidebarLabel>
<SidebarName>John Doe</SidebarName>
<SidebarDescription>john@example.com</SidebarDescription>
</SidebarLabel>
<Icon name="selector" className="sidebar-chevron" />
</DropdownMenuTrigger>
<DropdownMenuContent aria-label="Account actions">
<Item size="sm" style={{ '--plf-item-padding': 'var(--plf-space-2)', flexWrap: 'nowrap' } as CSSProperties}>
<span className="item-media">
<Avatar size="sm">
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</span>
<ItemContent>
<p className="item-title">John Doe</p>
<ItemDescription>john@example.com</ItemDescription>
</ItemContent>
</Item>
<DropdownMenuSeparator />
<DropdownMenuItem>
<Icon name="sparkles" />
<span>Upgrade to Pro</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem><Icon name="user" /><span>Account</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="credit-card" /><span>Billing</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="bell" /><span>Notifications</span></DropdownMenuItem>
<DropdownMenuItem>
<Icon name="settings" />
<span>Preferences</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem color="error">
<Icon name="logout" />
<span>Log out</span>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</SidebarFooter>
</SidebarPanel>
<SidebarPage>
<header className="flex items-center gap-3" style={{ padding: 'var(--plf-space-3) var(--plf-space-4)' }}>
<SidebarTrigger className={buttonClass({ variant: 'ghost', size: 'sm', shape: 'square' })}>
<Icon name="layout-sidebar" />
</SidebarTrigger>
<Breadcrumb aria-label="Page location">
<BreadcrumbItem><a href="#">Workspace</a></BreadcrumbItem>
<BreadcrumbItem><BreadcrumbPage>Overview</BreadcrumbPage></BreadcrumbItem>
</Breadcrumb>
</header>
<div style={{ padding: 'var(--plf-space-4)' }}>
{/* Page content */}
</div>
</SidebarPage>
</Sidebar>
);
}import type { CSSProperties } from 'react';
import {
Avatar, AvatarImage, Breadcrumb, BreadcrumbItem, BreadcrumbPage, buttonClass, Collapsible, CollapsibleContent, CollapsibleTitle,
CollapsibleTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, Icon, Item,
ItemContent, ItemDescription, Sidebar, SidebarContent, SidebarDescription, SidebarFooter, SidebarGroup, SidebarGroupLabel,
SidebarHeader, SidebarIdentity, SidebarIdentityIcon, SidebarLabel, SidebarLink, SidebarMenu, SidebarName, SidebarPage,
SidebarPanel, SidebarSubLink, SidebarSubmenu, SidebarTrigger,
} from '@pelatform/react/prefixed';
export function Example() {
return (
<Sidebar indicator style={{ blockSize: '35rem' }}>
<SidebarPanel aria-label="Workspace sidebar">
<SidebarHeader>
<SidebarIdentity href="#">
<SidebarIdentityIcon style={{ borderRadius: 'var(--plf-radius-lg)', background: 'var(--plf-color-primary)', color: 'var(--plf-color-on-primary)' }}>
<Icon name="stack-2" />
</SidebarIdentityIcon>
<SidebarLabel>Pelatform</SidebarLabel>
</SidebarIdentity>
</SidebarHeader>
<SidebarContent aria-label="Workspace">
<SidebarGroup>
<SidebarGroupLabel>Platform</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#" aria-current="page">
<Icon name="home" />
<SidebarLabel>Overview</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="layout-dashboard" />
<SidebarLabel>Components</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Fields</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
<Collapsible className="plf:sidebar-group" open>
<CollapsibleTrigger className="plf:sidebar-link">
<Icon name="folder" />
<CollapsibleTitle className="plf:sidebar-label">Projects</CollapsibleTitle>
</CollapsibleTrigger>
<CollapsibleContent className="plf:sidebar-group-content">
<SidebarSubmenu>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Active projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Archived projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Shared with you</SidebarLabel>
</SidebarSubLink>
</li>
</SidebarSubmenu>
</CollapsibleContent>
</Collapsible>
<SidebarGroup>
<SidebarGroupLabel>Resources</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#">
<Icon name="book" />
<SidebarLabel>Documentation</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="settings" />
<SidebarLabel>Settings</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
<SidebarGroup>
<SidebarGroupLabel>Project spaces</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Project workspace 1</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Project workspace 2</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Project workspace 3</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Project workspace 4</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Project workspace 5</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Project workspace 6</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<DropdownMenu className="plf:sidebar-control" placement="right" align="end">
<DropdownMenuTrigger className="plf:sidebar-link plf:sidebar-identity" aria-label="Account for John Doe, john@example.com">
<SidebarIdentityIcon>
<Avatar size="sm" style={{ '--plf-avatar-size': '100%' } as CSSProperties}>
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</SidebarIdentityIcon>
<SidebarLabel>
<SidebarName>John Doe</SidebarName>
<SidebarDescription>john@example.com</SidebarDescription>
</SidebarLabel>
<Icon name="selector" className="plf:sidebar-chevron" />
</DropdownMenuTrigger>
<DropdownMenuContent aria-label="Account actions">
<Item size="sm" style={{ '--plf-item-padding': 'var(--plf-space-2)', flexWrap: 'nowrap' } as CSSProperties}>
<span className="plf:item-media">
<Avatar size="sm">
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</span>
<ItemContent>
<p className="plf:item-title">John Doe</p>
<ItemDescription>john@example.com</ItemDescription>
</ItemContent>
</Item>
<DropdownMenuSeparator />
<DropdownMenuItem>
<Icon name="sparkles" />
<span>Upgrade to Pro</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem><Icon name="user" /><span>Account</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="credit-card" /><span>Billing</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="bell" /><span>Notifications</span></DropdownMenuItem>
<DropdownMenuItem>
<Icon name="settings" />
<span>Preferences</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem color="error">
<Icon name="logout" />
<span>Log out</span>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</SidebarFooter>
</SidebarPanel>
<SidebarPage>
<header className="plf:flex plf:items-center plf:gap-3" style={{ padding: 'var(--plf-space-3) var(--plf-space-4)' }}>
<SidebarTrigger className={buttonClass({ variant: 'ghost', size: 'sm', shape: 'square' })}>
<Icon name="layout-sidebar" />
</SidebarTrigger>
<Breadcrumb aria-label="Page location">
<BreadcrumbItem><a href="#">Workspace</a></BreadcrumbItem>
<BreadcrumbItem><BreadcrumbPage>Overview</BreadcrumbPage></BreadcrumbItem>
</Breadcrumb>
</header>
<div style={{ padding: 'var(--plf-space-4)' }}>
{/* Page content */}
</div>
</SidebarPage>
</Sidebar>
);
}Sticky
drawer-sticky lets the page scroll: the sidebar stays in view, one screen tall at most, and a sticky header in drawer-content stays at the top of the screen. The layout is at least one screen tall, so it takes no height. Page builders’ scroll effects work as on any page; the application shell uses it.
A bar fixed above the page, such as WordPress’s admin bar, sets --plf-sidebar-top to its height: the sidebar and a header whose top reads it stay below the bar.
<div class="drawer drawer-sticky" data-plf-sidebar>
<div class="drawer-body">
<aside class="sidebar" aria-label="Workspace sidebar"><!-- The sidebar --></aside>
<div class="drawer-content">
<header class="sticky border-b border-base-300 bg-base-100" style="top: var(--plf-sidebar-top, 0px)"><!-- The header --></header>
<main><!-- The page --></main>
</div>
</div>
</div>import { Sidebar, SidebarPage, SidebarPanel } from '@pelatform/react';
export function Example() {
return (
<Sidebar sticky>
<SidebarPanel aria-label="Workspace sidebar">{/* The sidebar */}</SidebarPanel>
<SidebarPage>
<header className="sticky border-b border-base-300 bg-base-100" style={{ top: 'var(--plf-sidebar-top, 0px)' }}>{/* The header */}</header>
<main>{/* The page */}</main>
</SidebarPage>
</Sidebar>
);
}End placement
Leave sheet-start off the dialog so the Sheet opens from the same side.
<div class="drawer drawer-end" data-plf-sidebar data-plf-indicator>
<div class="drawer-body">
<aside class="sidebar" aria-label="Workspace sidebar">
<header class="sidebar-header">
<a class="sidebar-link sidebar-identity" href="#">
<span class="sidebar-identity-icon" style="border-radius: var(--plf-radius-lg); background: var(--plf-color-primary); color: var(--plf-color-on-primary)">
<span class="icon icon-stack-2"></span>
</span>
<span class="sidebar-label">Pelatform</span>
</a>
</header>
<nav class="sidebar-content" aria-label="Workspace">
<div class="sidebar-group">
<p class="sidebar-group-label sidebar-label">Platform</p>
<ul class="sidebar-menu" role="list">
<li>
<a class="sidebar-link" href="#" aria-current="page">
<span class="icon icon-home"></span>
<span class="sidebar-label">Overview</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-layout-dashboard"></span>
<span class="sidebar-label">Components</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-folder"></span>
<span class="sidebar-label">Fields</span>
</a>
</li>
</ul>
</div>
<details class="collapse sidebar-group" open>
<summary class="collapse-trigger sidebar-link">
<span class="icon icon-folder"></span>
<span class="collapse-title sidebar-label">Projects</span>
</summary>
<div class="collapse-content sidebar-group-content">
<ul class="sidebar-submenu" role="list">
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Active projects</span>
</a>
</li>
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Archived projects</span>
</a>
</li>
<li>
<a class="sidebar-link sidebar-sub-link" href="#">
<span class="sidebar-label">Shared with you</span>
</a>
</li>
</ul>
</div>
</details>
<div class="sidebar-group">
<p class="sidebar-group-label sidebar-label">Resources</p>
<ul class="sidebar-menu" role="list">
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-book"></span>
<span class="sidebar-label">Documentation</span>
</a>
</li>
<li>
<a class="sidebar-link" href="#">
<span class="icon icon-settings"></span>
<span class="sidebar-label">Settings</span>
</a>
</li>
</ul>
</div>
</nav>
<footer class="sidebar-footer">
<div class="dropdown sidebar-control" data-plf-dropdown-menu data-plf-placement="right" data-plf-align="end">
<button class="sidebar-link sidebar-identity" aria-label="Account for John Doe, john@example.com">
<span class="sidebar-identity-icon">
<span class="avatar avatar-sm" style="--plf-avatar-size: 100%">
<img class="avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<span class="sidebar-label">
<span class="sidebar-name">John Doe</span>
<span class="sidebar-description">john@example.com</span>
</span>
<span class="icon icon-selector sidebar-chevron"></span>
</button>
<div class="dropdown-content menu" aria-label="Account actions" hidden>
<div class="item item-sm" style="--plf-item-padding: var(--plf-space-2); flex-wrap: nowrap">
<span class="item-media">
<span class="avatar avatar-sm">
<img class="avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<div class="item-content">
<p class="item-title">John Doe</p>
<p class="item-description">john@example.com</p>
</div>
</div>
<hr class="menu-separator">
<button class="menu-item">
<span class="icon icon-sparkles"></span>
<span>Upgrade to Pro</span>
</button>
<hr class="menu-separator">
<button class="menu-item"><span class="icon icon-user"></span><span>Account</span></button>
<button class="menu-item"><span class="icon icon-credit-card"></span><span>Billing</span></button>
<button class="menu-item"><span class="icon icon-bell"></span><span>Notifications</span></button>
<button class="menu-item">
<span class="icon icon-settings"></span>
<span>Preferences</span>
</button>
<hr class="menu-separator">
<button class="menu-item menu-item-error">
<span class="icon icon-logout"></span>
<span>Log out</span>
</button>
</div>
</div>
</footer>
</aside>
<div class="drawer-content">
<header class="flex items-center gap-3" style="padding: var(--plf-space-3) var(--plf-space-4)">
<button class="btn btn-ghost btn-sm btn-square" data-plf-sidebar-toggle aria-label="Toggle navigation" hidden>
<span class="icon icon-layout-sidebar"></span>
</button>
<nav class="breadcrumbs" aria-label="Page location">
<ol role="list">
<li><a href="#">Workspace</a></li>
<li><span aria-current="page">Overview</span></li>
</ol>
</nav>
</header>
<div style="padding: var(--plf-space-4)">
<!-- Page content -->
</div>
</div>
</div>
<dialog class="modal sheet sidebar-dialog" aria-label="Navigation">
<button class="modal-close sheet-close" aria-label="Close navigation" data-plf-trigger="modal:close"></button>
<div class="sheet-body sidebar-mobile-content"></div>
</dialog>
</div><div class="plf:drawer plf:drawer-end" data-plf-sidebar data-plf-indicator>
<div class="plf:drawer-body">
<aside class="plf:sidebar" aria-label="Workspace sidebar">
<header class="plf:sidebar-header">
<a class="plf:sidebar-link plf:sidebar-identity" href="#">
<span class="plf:sidebar-identity-icon" style="border-radius: var(--plf-radius-lg); background: var(--plf-color-primary); color: var(--plf-color-on-primary)">
<span class="plf:icon plf:icon-stack-2"></span>
</span>
<span class="plf:sidebar-label">Pelatform</span>
</a>
</header>
<nav class="plf:sidebar-content" aria-label="Workspace">
<div class="plf:sidebar-group">
<p class="plf:sidebar-group-label plf:sidebar-label">Platform</p>
<ul class="plf:sidebar-menu" role="list">
<li>
<a class="plf:sidebar-link" href="#" aria-current="page">
<span class="plf:icon plf:icon-home"></span>
<span class="plf:sidebar-label">Overview</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-layout-dashboard"></span>
<span class="plf:sidebar-label">Components</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:sidebar-label">Fields</span>
</a>
</li>
</ul>
</div>
<details class="plf:collapse plf:sidebar-group" open>
<summary class="plf:collapse-trigger plf:sidebar-link">
<span class="plf:icon plf:icon-folder"></span>
<span class="plf:collapse-title plf:sidebar-label">Projects</span>
</summary>
<div class="plf:collapse-content plf:sidebar-group-content">
<ul class="plf:sidebar-submenu" role="list">
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Active projects</span>
</a>
</li>
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Archived projects</span>
</a>
</li>
<li>
<a class="plf:sidebar-link plf:sidebar-sub-link" href="#">
<span class="plf:sidebar-label">Shared with you</span>
</a>
</li>
</ul>
</div>
</details>
<div class="plf:sidebar-group">
<p class="plf:sidebar-group-label plf:sidebar-label">Resources</p>
<ul class="plf:sidebar-menu" role="list">
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-book"></span>
<span class="plf:sidebar-label">Documentation</span>
</a>
</li>
<li>
<a class="plf:sidebar-link" href="#">
<span class="plf:icon plf:icon-settings"></span>
<span class="plf:sidebar-label">Settings</span>
</a>
</li>
</ul>
</div>
</nav>
<footer class="plf:sidebar-footer">
<div class="plf:dropdown plf:sidebar-control" data-plf-dropdown-menu data-plf-placement="right" data-plf-align="end">
<button class="plf:sidebar-link plf:sidebar-identity" aria-label="Account for John Doe, john@example.com">
<span class="plf:sidebar-identity-icon">
<span class="plf:avatar plf:avatar-sm" style="--plf-avatar-size: 100%">
<img class="plf:avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<span class="plf:sidebar-label">
<span class="plf:sidebar-name">John Doe</span>
<span class="plf:sidebar-description">john@example.com</span>
</span>
<span class="plf:icon plf:icon-selector plf:sidebar-chevron"></span>
</button>
<div class="plf:dropdown-content plf:menu" aria-label="Account actions" hidden>
<div class="plf:item plf:item-sm" style="--plf-item-padding: var(--plf-space-2); flex-wrap: nowrap">
<span class="plf:item-media">
<span class="plf:avatar plf:avatar-sm">
<img class="plf:avatar-image" src="/previews/assets/avatar-sample.svg" alt="">
</span>
</span>
<div class="plf:item-content">
<p class="plf:item-title">John Doe</p>
<p class="plf:item-description">john@example.com</p>
</div>
</div>
<hr class="plf:menu-separator">
<button class="plf:menu-item">
<span class="plf:icon plf:icon-sparkles"></span>
<span>Upgrade to Pro</span>
</button>
<hr class="plf:menu-separator">
<button class="plf:menu-item"><span class="plf:icon plf:icon-user"></span><span>Account</span></button>
<button class="plf:menu-item"><span class="plf:icon plf:icon-credit-card"></span><span>Billing</span></button>
<button class="plf:menu-item"><span class="plf:icon plf:icon-bell"></span><span>Notifications</span></button>
<button class="plf:menu-item">
<span class="plf:icon plf:icon-settings"></span>
<span>Preferences</span>
</button>
<hr class="plf:menu-separator">
<button class="plf:menu-item plf:menu-item-error">
<span class="plf:icon plf:icon-logout"></span>
<span>Log out</span>
</button>
</div>
</div>
</footer>
</aside>
<div class="plf:drawer-content">
<header class="plf:flex plf:items-center plf:gap-3" style="padding: var(--plf-space-3) var(--plf-space-4)">
<button class="plf:btn plf:btn-ghost plf:btn-sm plf:btn-square" data-plf-sidebar-toggle aria-label="Toggle navigation" hidden>
<span class="plf:icon plf:icon-layout-sidebar"></span>
</button>
<nav class="plf:breadcrumbs" aria-label="Page location">
<ol role="list">
<li><a href="#">Workspace</a></li>
<li><span aria-current="page">Overview</span></li>
</ol>
</nav>
</header>
<div style="padding: var(--plf-space-4)">
<!-- Page content -->
</div>
</div>
</div>
<dialog class="plf:modal plf:sheet plf:sidebar-dialog" aria-label="Navigation">
<button class="plf:modal-close plf:sheet-close" aria-label="Close navigation" data-plf-trigger="modal:close"></button>
<div class="plf:sheet-body plf:sidebar-mobile-content"></div>
</dialog>
</div>import type { CSSProperties } from 'react';
import {
Avatar, AvatarImage, Breadcrumb, BreadcrumbItem, BreadcrumbPage, buttonClass, Collapsible, CollapsibleContent, CollapsibleTitle,
CollapsibleTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, Icon, Item,
ItemContent, ItemDescription, Sidebar, SidebarContent, SidebarDescription, SidebarFooter, SidebarGroup, SidebarGroupLabel,
SidebarHeader, SidebarIdentity, SidebarIdentityIcon, SidebarLabel, SidebarLink, SidebarMenu, SidebarName, SidebarPage,
SidebarPanel, SidebarSubLink, SidebarSubmenu, SidebarTrigger,
} from '@pelatform/react';
export function Example() {
return (
<Sidebar indicator side="end">
<SidebarPanel aria-label="Workspace sidebar">
<SidebarHeader>
<SidebarIdentity href="#">
<SidebarIdentityIcon style={{ borderRadius: 'var(--plf-radius-lg)', background: 'var(--plf-color-primary)', color: 'var(--plf-color-on-primary)' }}>
<Icon name="stack-2" />
</SidebarIdentityIcon>
<SidebarLabel>Pelatform</SidebarLabel>
</SidebarIdentity>
</SidebarHeader>
<SidebarContent aria-label="Workspace">
<SidebarGroup>
<SidebarGroupLabel>Platform</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#" aria-current="page">
<Icon name="home" />
<SidebarLabel>Overview</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="layout-dashboard" />
<SidebarLabel>Components</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Fields</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
<Collapsible className="sidebar-group" open>
<CollapsibleTrigger className="sidebar-link">
<Icon name="folder" />
<CollapsibleTitle className="sidebar-label">Projects</CollapsibleTitle>
</CollapsibleTrigger>
<CollapsibleContent className="sidebar-group-content">
<SidebarSubmenu>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Active projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Archived projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Shared with you</SidebarLabel>
</SidebarSubLink>
</li>
</SidebarSubmenu>
</CollapsibleContent>
</Collapsible>
<SidebarGroup>
<SidebarGroupLabel>Resources</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#">
<Icon name="book" />
<SidebarLabel>Documentation</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="settings" />
<SidebarLabel>Settings</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<DropdownMenu className="sidebar-control" placement="right" align="end">
<DropdownMenuTrigger className="sidebar-link sidebar-identity" aria-label="Account for John Doe, john@example.com">
<SidebarIdentityIcon>
<Avatar size="sm" style={{ '--plf-avatar-size': '100%' } as CSSProperties}>
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</SidebarIdentityIcon>
<SidebarLabel>
<SidebarName>John Doe</SidebarName>
<SidebarDescription>john@example.com</SidebarDescription>
</SidebarLabel>
<Icon name="selector" className="sidebar-chevron" />
</DropdownMenuTrigger>
<DropdownMenuContent aria-label="Account actions">
<Item size="sm" style={{ '--plf-item-padding': 'var(--plf-space-2)', flexWrap: 'nowrap' } as CSSProperties}>
<span className="item-media">
<Avatar size="sm">
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</span>
<ItemContent>
<p className="item-title">John Doe</p>
<ItemDescription>john@example.com</ItemDescription>
</ItemContent>
</Item>
<DropdownMenuSeparator />
<DropdownMenuItem>
<Icon name="sparkles" />
<span>Upgrade to Pro</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem><Icon name="user" /><span>Account</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="credit-card" /><span>Billing</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="bell" /><span>Notifications</span></DropdownMenuItem>
<DropdownMenuItem>
<Icon name="settings" />
<span>Preferences</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem color="error">
<Icon name="logout" />
<span>Log out</span>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</SidebarFooter>
</SidebarPanel>
<SidebarPage>
<header className="flex items-center gap-3" style={{ padding: 'var(--plf-space-3) var(--plf-space-4)' }}>
<SidebarTrigger className={buttonClass({ variant: 'ghost', size: 'sm', shape: 'square' })}>
<Icon name="layout-sidebar" />
</SidebarTrigger>
<Breadcrumb aria-label="Page location">
<BreadcrumbItem><a href="#">Workspace</a></BreadcrumbItem>
<BreadcrumbItem><BreadcrumbPage>Overview</BreadcrumbPage></BreadcrumbItem>
</Breadcrumb>
</header>
<div style={{ padding: 'var(--plf-space-4)' }}>
{/* Page content */}
</div>
</SidebarPage>
</Sidebar>
);
}import type { CSSProperties } from 'react';
import {
Avatar, AvatarImage, Breadcrumb, BreadcrumbItem, BreadcrumbPage, buttonClass, Collapsible, CollapsibleContent, CollapsibleTitle,
CollapsibleTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, Icon, Item,
ItemContent, ItemDescription, Sidebar, SidebarContent, SidebarDescription, SidebarFooter, SidebarGroup, SidebarGroupLabel,
SidebarHeader, SidebarIdentity, SidebarIdentityIcon, SidebarLabel, SidebarLink, SidebarMenu, SidebarName, SidebarPage,
SidebarPanel, SidebarSubLink, SidebarSubmenu, SidebarTrigger,
} from '@pelatform/react/prefixed';
export function Example() {
return (
<Sidebar indicator side="end">
<SidebarPanel aria-label="Workspace sidebar">
<SidebarHeader>
<SidebarIdentity href="#">
<SidebarIdentityIcon style={{ borderRadius: 'var(--plf-radius-lg)', background: 'var(--plf-color-primary)', color: 'var(--plf-color-on-primary)' }}>
<Icon name="stack-2" />
</SidebarIdentityIcon>
<SidebarLabel>Pelatform</SidebarLabel>
</SidebarIdentity>
</SidebarHeader>
<SidebarContent aria-label="Workspace">
<SidebarGroup>
<SidebarGroupLabel>Platform</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#" aria-current="page">
<Icon name="home" />
<SidebarLabel>Overview</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="layout-dashboard" />
<SidebarLabel>Components</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="folder" />
<SidebarLabel>Fields</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
<Collapsible className="plf:sidebar-group" open>
<CollapsibleTrigger className="plf:sidebar-link">
<Icon name="folder" />
<CollapsibleTitle className="plf:sidebar-label">Projects</CollapsibleTitle>
</CollapsibleTrigger>
<CollapsibleContent className="plf:sidebar-group-content">
<SidebarSubmenu>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Active projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Archived projects</SidebarLabel>
</SidebarSubLink>
</li>
<li>
<SidebarSubLink href="#">
<SidebarLabel>Shared with you</SidebarLabel>
</SidebarSubLink>
</li>
</SidebarSubmenu>
</CollapsibleContent>
</Collapsible>
<SidebarGroup>
<SidebarGroupLabel>Resources</SidebarGroupLabel>
<SidebarMenu>
<li>
<SidebarLink href="#">
<Icon name="book" />
<SidebarLabel>Documentation</SidebarLabel>
</SidebarLink>
</li>
<li>
<SidebarLink href="#">
<Icon name="settings" />
<SidebarLabel>Settings</SidebarLabel>
</SidebarLink>
</li>
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<DropdownMenu className="plf:sidebar-control" placement="right" align="end">
<DropdownMenuTrigger className="plf:sidebar-link plf:sidebar-identity" aria-label="Account for John Doe, john@example.com">
<SidebarIdentityIcon>
<Avatar size="sm" style={{ '--plf-avatar-size': '100%' } as CSSProperties}>
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</SidebarIdentityIcon>
<SidebarLabel>
<SidebarName>John Doe</SidebarName>
<SidebarDescription>john@example.com</SidebarDescription>
</SidebarLabel>
<Icon name="selector" className="plf:sidebar-chevron" />
</DropdownMenuTrigger>
<DropdownMenuContent aria-label="Account actions">
<Item size="sm" style={{ '--plf-item-padding': 'var(--plf-space-2)', flexWrap: 'nowrap' } as CSSProperties}>
<span className="plf:item-media">
<Avatar size="sm">
<AvatarImage src="/previews/assets/avatar-sample.svg" alt="" />
</Avatar>
</span>
<ItemContent>
<p className="plf:item-title">John Doe</p>
<ItemDescription>john@example.com</ItemDescription>
</ItemContent>
</Item>
<DropdownMenuSeparator />
<DropdownMenuItem>
<Icon name="sparkles" />
<span>Upgrade to Pro</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem><Icon name="user" /><span>Account</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="credit-card" /><span>Billing</span></DropdownMenuItem>
<DropdownMenuItem><Icon name="bell" /><span>Notifications</span></DropdownMenuItem>
<DropdownMenuItem>
<Icon name="settings" />
<span>Preferences</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem color="error">
<Icon name="logout" />
<span>Log out</span>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</SidebarFooter>
</SidebarPanel>
<SidebarPage>
<header className="plf:flex plf:items-center plf:gap-3" style={{ padding: 'var(--plf-space-3) var(--plf-space-4)' }}>
<SidebarTrigger className={buttonClass({ variant: 'ghost', size: 'sm', shape: 'square' })}>
<Icon name="layout-sidebar" />
</SidebarTrigger>
<Breadcrumb aria-label="Page location">
<BreadcrumbItem><a href="#">Workspace</a></BreadcrumbItem>
<BreadcrumbItem><BreadcrumbPage>Overview</BreadcrumbPage></BreadcrumbItem>
</Breadcrumb>
</header>
<div style={{ padding: 'var(--plf-space-4)' }}>
{/* Page content */}
</div>
</SidebarPage>
</Sidebar>
);
}JavaScript
Sidebar needs JavaScript. The Full script (pelatform-ui.min.js) starts every component on page load, with no code of your own; with ESM imports, call init() yourself, as in Installation. For markup you add later, see Dynamic content.
<link rel="stylesheet" href="pelatform-ui.min.css">
<link rel="stylesheet" href="icons/icons.min.css">
<script src="pelatform-ui.min.js" defer></script><link rel="stylesheet" href="core/pelatform-ui-core.min.css">
<link rel="stylesheet" href="components/button.min.css">
<link rel="stylesheet" href="components/modal.min.css">
<link rel="stylesheet" href="components/sheet.min.css">
<link rel="stylesheet" href="components/tooltip.min.css">
<link rel="stylesheet" href="components/dropdown-menu.min.css">
<link rel="stylesheet" href="components/breadcrumb.min.css">
<link rel="stylesheet" href="components/avatar.min.css">
<link rel="stylesheet" href="components/item.min.css">
<link rel="stylesheet" href="components/collapsible.min.css">
<link rel="stylesheet" href="components/sidebar.min.css">
<link rel="stylesheet" href="icons/icons.min.css">
<script src="core/pelatform-ui-core.min.js" defer></script>
<script src="components/modal.min.js" defer></script>
<script src="components/dropdown-menu.min.js" defer></script>
<script src="components/sidebar.min.js" defer></script>
<script>document.addEventListener('DOMContentLoaded', () => PLF.init());</script><link rel="stylesheet" href="pelatform-ui.prefixed.min.css">
<link rel="stylesheet" href="icons/icons.prefixed.min.css">
<script src="pelatform-ui.min.js" defer></script><link rel="stylesheet" href="core/pelatform-ui-core.prefixed.min.css">
<link rel="stylesheet" href="components/button.prefixed.min.css">
<link rel="stylesheet" href="components/modal.prefixed.min.css">
<link rel="stylesheet" href="components/sheet.prefixed.min.css">
<link rel="stylesheet" href="components/tooltip.prefixed.min.css">
<link rel="stylesheet" href="components/dropdown-menu.prefixed.min.css">
<link rel="stylesheet" href="components/breadcrumb.prefixed.min.css">
<link rel="stylesheet" href="components/avatar.prefixed.min.css">
<link rel="stylesheet" href="components/item.prefixed.min.css">
<link rel="stylesheet" href="components/collapsible.prefixed.min.css">
<link rel="stylesheet" href="components/sidebar.prefixed.min.css">
<link rel="stylesheet" href="icons/icons.prefixed.min.css">
<script src="core/pelatform-ui-core.min.js" defer></script>
<script src="components/modal.min.js" defer></script>
<script src="components/dropdown-menu.min.js" defer></script>
<script src="components/sidebar.min.js" defer></script>
<script>document.addEventListener('DOMContentLoaded', () => PLF.init());</script>| Attribute | Purpose |
|---|---|
data-plf-sidebar |
Marks the drawer container, which holds the <aside> for wide screens inside its drawer-body and the mobile Sheet: a closed, named <dialog> that the script makes a Modal, which a tap outside closes. On narrow screens the Sheet’s empty element takes the aside’s content, and a close button before it sits beside the sidebar’s header; a body with content of its own keeps it |
data-plf-sidebar-toggle |
One or more named button toggles, written with hidden; the script shows them and sets aria-controls and aria-expanded |
data-plf-collapsed |
On the container: starts collapsed on wide screens; the script adds or removes it, and setCollapsed changes it later |
data-plf-collapsible |
On the container: what collapsed means on wide screens, icon (default) for the icons alone or offcanvas for no sidebar |
data-plf-reveal-current |
On the container: scrolls the menu, never the page, so an out-of-view aria-current="page" link sits near the middle, on start and each time the Sheet opens, where that link also takes the focus |
data-plf-indicator |
On the container: a line beside the current link that slides when it changes, also in the phone menu |
Without JavaScript, the toggles stay hidden and the full navigation shows, above the content on narrow screens.
Methods
| Method | Behavior |
|---|---|
PLF. |
Returns the instance, creating it for valid markup |
PLF. |
Returns the instance or null |
instance. |
Returns { collapsed, mobile, open } |
instance. |
Collapses or expands the sidebar for wide screens, also while on a phone; returns false when nothing changes or the event is canceled |
instance. |
Collapses or expands the sidebar on wide screens, or opens or closes the Sheet on phones |
instance., instance. |
Open or close the Sheet on phones; return false on wide screens |
instance. |
Closes the Sheet and removes the enhancements; the collapsed state stays |
| Event | When |
|---|---|
plf:, plf: |
Before and after the sidebar collapses or expands; the first is cancelable |
Each event’s detail:
| Property | Value |
|---|---|
instance |
The Sidebar instance |
collapsed |
true when the sidebar collapses, false when it expands |
previousCollapsed |
Whether the sidebar was collapsed before |
reason |
api or trigger |
trigger |
The toggle button, or null from a method |
The Sheet fires the Modal events.
Keyboard
| Key | Action |
|---|---|
| Enter, Space | On a toggle: collapses or expands the sidebar, or opens the Sheet on phones |
| Control+B, Command+B | With aria-keyshortcuts="Control+B Meta+B" on a toggle: as pressing it, outside text fields |
| Escape | Closes the Sheet and returns focus to the toggle |
React
Sidebar from @pelatform/react renders this layout with its drawer-body, its Sheet and its icon-mode tooltip: it keeps its collapsed state, or the application sets it with collapsed, and on a narrow screen the panel’s content opens in a Sheet. Each part is a component of its own; a collapsible group is a Collapsible, and a row that opens a Dropdown Menu is its trigger, each with the sidebar’s classes as its className.
| Prop | Values | Default |
|---|---|---|
collapsed |
true while the sidebar shows icons only on wide screens, which the application changes in onCollapsedChange; keeping it refuses the change |
Its own state |
defaultCollapsed |
true starts collapsed when the application does not set collapsed |
false |
onCollapsedChange |
(collapsed), called when a trigger collapses or expands the sidebar |
None |
collapsible |
What collapsed means on wide screens: icon for the icons alone, or offcanvas for no sidebar |
icon |
open |
true while the Sheet is open on a narrow screen, which the application changes in onOpenChange |
Its own state |
onOpenChange |
(open, reason), called when a trigger opens or closes the Sheet, or it asks to close: trigger, keyboard (Escape) or backdrop; with no reason when a wide screen closes it |
None |
side |
end puts the sidebar and its Sheet on the end side |
The start side |
sticky |
true lets the page scroll while the sidebar stays in view |
false |
indicator |
true adds the line beside the current link |
false |
revealCurrent |
true scrolls an out-of-view current link to the menu’s middle at start and as the Sheet opens, where it takes the focus |
false |
sheetLabel, closeLabel |
The Sheet’s name and its close button’s | Navigation, Close navigation |
The parts:
| Part | Element |
|---|---|
SidebarPanel |
The aside with sidebar, whose content shows in the Sheet on a narrow screen |
SidebarPage |
A div with drawer-content, the page beside the sidebar |
SidebarTrigger |
A button that collapses or expands the sidebar, or opens the Sheet on a narrow screen, named Toggle navigation unless given another name; aria-keyshortcuts also presses it, and buttonClass gives it a look |
SidebarHeader, SidebarFooter |
A header with sidebar-header, a footer with sidebar-footer |
SidebarContent |
A nav with sidebar-content, which holds the indicator |
SidebarGroup |
A div with sidebar-group |
SidebarGroupLabel |
A p with sidebar-group-label sidebar-label |
SidebarMenu, SidebarSubmenu |
A ul with sidebar-menu or sidebar-submenu |
SidebarLink |
A link with sidebar-link; aria-current="page" marks the current page |
SidebarSubLink, SidebarIdentity |
A link with sidebar-link and sidebar-sub-link or sidebar-identity |
SidebarLabel, SidebarBadge |
A span with sidebar-label or sidebar-badge, hidden in icon mode |
SidebarIdentityIcon, SidebarName, SidebarDescription |
A span with sidebar-identity-icon, sidebar-name or sidebar-description |
The other props are the element’s own, className and ref included. With a router, a link is your router’s own with the sidebar-link class, whose aria-current="page" moves the indicator; as its navigation loads no page, set open to false when the path changes, so the phone’s Sheet closes.
| Variable | Default |
|---|---|
--plf-sidebar-width |
16rem, at most the parent’s width |
--plf-sidebar-compact-width |
3rem |
--plf-sidebar-mobile-width |
18rem, at most the viewport width minus 16px |
--plf-sidebar-bg, --plf-sidebar-color |
--plf-color-surface-raised and --plf-color-text |
--plf-sidebar-border |
--plf-color-border-subtle |
--plf-sidebar-padding |
--plf-space-2 (8px) around the header, menu and footer |
--plf-sidebar-gap |
--plf-space-1 (4px) between links |
--plf-sidebar-hover-bg |
--plf-color-surface-muted |
--plf-sidebar-current-bg, --plf-sidebar-current-color |
--plf-color-primary-subtle and --plf-color-primary-text for the current link |
--plf-sidebar-indicator-color, --plf-sidebar-indicator-width |
--plf-color-primary-border and 2px, with data-plf-indicator |
--plf-sidebar-top |
0; in a sticky layout, the height of a bar fixed above the page |