Intent UI
blocksidebar-01source: ok · refreshed
sidebar-01
sidebar-01
npx shadcn add "https://intentui.com/r/sidebar-01"free
Where it goes
sidebardashboard-shell
Use cases
dashboard
Tags auto-generated by rules on 9/24/2026 — empty means no evidence, not lack of support.
Dependencies
Bundle weight · lightRegistry dependencies
https://intentui.com/r/headinghttps://intentui.com/r/sidebarhttps://intentui.com/r/avatarhttps://intentui.com/r/breadcrumbshttps://intentui.com/r/menuhttps://intentui.com/r/link
Files3 · source cached 10/8/2026, 10:10:21 AM
registry/blocks/sidebar-01/page.tsx
import { Heading } from "@/components/ui/heading"
import { SidebarInset, SidebarProvider } from "@/components/ui/sidebar"
import AppSidebar from "@/registry/blocks/sidebar-01/app-sidebar"
import AppSidebarNav from "@/registry/blocks/sidebar-01/app-sidebar-nav"
export default function Page() {
return (
<SidebarProvider>
<AppSidebar collapsible="dock" />
<SidebarInset>
<AppSidebarNav />
<div className="p-4 lg:p-6">
<Heading>Basic</Heading>
</div>
</SidebarInset>
</SidebarProvider>
)
}
registry/blocks/sidebar-01/app-sidebar-nav.tsx
"use client"
import {
ArrowRightOnRectangleIcon,
Cog6ToothIcon,
CommandLineIcon,
Squares2X2Icon,
} from "@heroicons/react/24/outline"
import { Avatar } from "@/components/ui/avatar"
import { Breadcrumbs, BreadcrumbsItem } from "@/components/ui/breadcrumbs"
import {
MenuHeader,
MenuItem,
MenuLabel,
MenuSection,
MenuSeparator,
Menu,
MenuTrigger,
} from "@/components/ui/menu"
import { SidebarNav, SidebarTrigger } from "@/components/ui/sidebar"
import { Button } from "react-aria-components/Button"
export default function AppSidebarNav() {
return (
<SidebarNav>
<span className="flex items-center gap-x-4">
<SidebarTrigger className="-ml-2.5 lg:ml-0" />
<Breadcrumbs className="hidden md:flex">
<BreadcrumbsItem href="/pre-blocks/sidebar/sidebar-01">Dashboard</BreadcrumbsItem>
<BreadcrumbsItem>Newsletter</BreadcrumbsItem>
</Breadcrumbs>
</span>
<UserMenu />
</SidebarNav>
)
}
function UserMenu() {
return (
<MenuTrigger>
<Button className="ml-auto md:hidden" aria-label="Open Menu">
<Avatar isSquare alt="kurt cobain" src="https://intentui.com/images/avatar/cobain.jpg" />
</Button>
<Menu popover={{ placement: "bottom end" }} className="min-w-64">
<MenuSection>
<MenuHeader separator>
<span className="block">Kurt Cobain</span>
<span className="font-normal text-muted-foreground">@cobain</span>
</MenuHeader>
</MenuSection>
<MenuItem href="#dashboard">
<Squares2X2Icon />
<MenuLabel>Dashboard</MenuLabel>
</MenuItem>
<MenuItem href="#settings">
<Cog6ToothIcon />
<MenuLabel>Settings</MenuLabel>
</MenuItem>
<MenuSeparator />
<MenuItem>
<CommandLineIcon />
<MenuLabel>Command Menu</MenuLabel>
</MenuItem>
<MenuSeparator />
<MenuItem href="#contact-s">
<MenuLabel>Contact Support</MenuLabel>
</MenuItem>
<MenuSeparator />
<MenuItem href="#logout">
<ArrowRightOnRectangleIcon />
<MenuLabel>Log out</MenuLabel>
</MenuItem>
</Menu>
</MenuTrigger>
)
}
registry/blocks/sidebar-01/app-sidebar.tsx
"use client"
import { Button } from "react-aria-components/Button"
import { EllipsisHorizontalIcon } from "@heroicons/react/16/solid"
import { ChevronUpDownIcon, PlusIcon } from "@heroicons/react/20/solid"
import {
ArchiveBoxIcon,
ArrowDownTrayIcon,
ArrowRightStartOnRectangleIcon,
ArrowUpTrayIcon,
BuildingOfficeIcon,
ChatBubbleLeftRightIcon,
CheckCircleIcon,
ClockIcon,
Cog6ToothIcon,
CreditCardIcon,
CubeIcon,
DocumentTextIcon,
HashtagIcon,
HomeIcon,
LifebuoyIcon,
ListBulletIcon,
QuestionMarkCircleIcon,
ShieldCheckIcon,
ShoppingBagIcon,
TicketIcon,
} from "@heroicons/react/24/outline"
import { Avatar } from "@/components/ui/avatar"
import { Link } from "@/components/ui/link"
import {
MenuHeader,
MenuItem,
MenuSection,
MenuSeparator,
Menu,
MenuTrigger,
} from "@/components/ui/menu"
import {
Sidebar,
SidebarBadge,
SidebarContent,
SidebarDisclosure,
SidebarDisclosureGroup,
SidebarDisclosurePanel,
SidebarDisclosureTrigger,
SidebarFooter,
SidebarHeader,
SidebarItem,
SidebarLabel,
SidebarLink,
SidebarMenuTrigger,
SidebarRail,
SidebarSection,
SidebarSectionGroup,
useSidebar,
} from "@/components/ui/sidebar"
export default function AppSidebar(props: React.ComponentProps<typeof Sidebar>) {
const { state } = useSidebar()
return (
<Sidebar {...props}>
<SidebarHeader>
<Link href="/docs/components/layouts/sidebar" className="flex items-center gap-x-2">
<Avatar
isSquare
size="sm"
className="outline-hidden"
src="https://design.intentui.com/logo"
/>
<SidebarLabel className="font-medium">
Intent <span className="text-muted-foreground">UI</span>
</SidebarLabel>
</Link>
</SidebarHeader>
<SidebarContent>
<SidebarSectionGroup>
<SidebarSection label="Overview">
<SidebarItem tooltip="Overview" isCurrent href="#">
<HomeIcon />
<SidebarLabel>Overview</SidebarLabel>
</SidebarItem>
<SidebarItem tooltip="Orders">
{({ isCollapsed, isFocused }) => (
<>
<SidebarLink href="#">
<ShoppingBagIcon />
<SidebarLabel>Orders</SidebarLabel>
</SidebarLink>
{(!isCollapsed || isFocused) && (
<MenuTrigger>
<SidebarMenuTrigger aria-label="Manage">
<EllipsisHorizontalIcon />
</SidebarMenuTrigger>
<Menu
popover={{
offset: 0,
placement: "right top",
}}
>
<MenuItem href="#new-order">
<PlusIcon />
Create New Order
</MenuItem>
<MenuItem href="#view-all">
<ListBulletIcon />
View All Orders
</MenuItem>
<MenuItem href="#pending-orders">
<ClockIcon />
Pending Orders
</MenuItem>
<MenuItem href="#completed-orders">
<CheckCircleIcon />
Completed Orders
</MenuItem>
<MenuItem href="#export-orders">
<ArrowUpTrayIcon />
Export Orders
</MenuItem>
</Menu>
</MenuTrigger>
)}
</>
)}
</SidebarItem>
<SidebarItem tooltip="Products">
{({ isCollapsed, isFocused }) => (
<>
<SidebarLink href="#">
<CubeIcon />
<SidebarLabel>Products</SidebarLabel>
</SidebarLink>
{(!isCollapsed || isFocused) && (
<MenuTrigger>
<SidebarMenuTrigger aria-label="Manage">
<EllipsisHorizontalIcon />
</SidebarMenuTrigger>
<Menu
popover={{
offset: 0,
placement: "right top",
}}
>
<MenuItem href="#new-product">
<PlusIcon />
Add New Product
</MenuItem>
<MenuItem href="#archive">
<ArchiveBoxIcon />
Archive Product
</MenuItem>
<MenuItem href="#manage-categories">
<HashtagIcon />
Manage Categories
</MenuItem>
<MenuItem href="#import">
<ArrowDownTrayIcon />
Import Products
</MenuItem>
<MenuItem href="#export">
<ArrowUpTrayIcon />
Export Products
</MenuItem>
</Menu>
</MenuTrigger>
)}
</>
)}
</SidebarItem>
<SidebarItem href="#" tooltip="Payments">
<CreditCardIcon />
<SidebarLabel>Payments</SidebarLabel>
<SidebarBadge>4 Pending</SidebarBadge>
</SidebarItem>
</SidebarSection>
<SidebarDisclosureGroup defaultExpandedKeys={[1]}>
<SidebarDisclosure id={1}>
<SidebarDisclosureTrigger>
<EllipsisHorizontalIcon />
<SidebarLabel>Support</SidebarLabel>
</SidebarDisclosureTrigger>
<SidebarDisclosurePanel>
<SidebarItem href="#" tooltip="Tickets">
<TicketIcon />
<SidebarLabel>Tickets</SidebarLabel>
</SidebarItem>
<SidebarItem href="#" tooltip="Chat Support">
<ChatBubbleLeftRightIcon />
<SidebarLabel>Chat Support</SidebarLabel>
</SidebarItem>
<SidebarItem href="#" tooltip="FAQ">
<QuestionMarkCircleIcon />
<SidebarLabel>FAQ</SidebarLabel>
</SidebarItem>
<SidebarItem href="#" tooltip="Documentation">
<DocumentTextIcon />
<SidebarLabel>Documentation</SidebarLabel>
</SidebarItem>
</SidebarDisclosurePanel>
</SidebarDisclosure>
<SidebarDisclosure id={2}>
<SidebarDisclosureTrigger>
<ArchiveBoxIcon />
<SidebarLabel>Inventory</SidebarLabel>
</SidebarDisclosureTrigger>
<SidebarDisclosurePanel>
<SidebarItem href="#" tooltip="Warehouse">
<BuildingOfficeIcon />
<SidebarLabel>Warehouse</SidebarLabel>
</SidebarItem>
<SidebarItem href="#" tooltip="Stock Levels">
<SidebarLabel>Stock Levels</SidebarLabel>
<SidebarBadge>12</SidebarBadge>
</SidebarItem>
<SidebarItem href="#" tooltip="Shipping">
<SidebarLabel>Shipping</SidebarLabel>
<SidebarBadge>3</SidebarBadge>
</SidebarItem>
</SidebarDisclosurePanel>
</SidebarDisclosure>
</SidebarDisclosureGroup>
</SidebarSectionGroup>
</SidebarContent>
<SidebarFooter className="flex flex-row justify-between gap-4 group-data-[state=collapsed]:flex-col">
<MenuTrigger>
<Button
className="flex w-full items-center justify-between outline-hidden"
aria-label="Profile"
>
<div className="flex items-center gap-x-2">
<Avatar
className="size-8 *:size-8 group-data-[state=collapsed]:size-6 group-data-[state=collapsed]:*:size-6"
isSquare
src="https://intentui.com/images/avatar/cobain.jpg"
/>
<div className="in-data-[collapsible=dock]:hidden text-sm">
<span>Kurt Cobain</span>
<span className="-mt-0.5 block text-muted-foreground">@kurtcobain</span>
</div>
</div>
{state !== "collapsed" && <ChevronUpDownIcon className="size-5 sm:size-4" />}
</Button>
<Menu
className="in-data-[sidebar-collapsible=collapsed]:min-w-56 min-w-(--trigger-width)"
placement="bottom right"
>
<MenuSection>
<MenuHeader separator>
<span className="block">Kurt Cobain</span>
<span className="font-normal text-muted-foreground">@cobain</span>
</MenuHeader>
</MenuSection>
<MenuItem href="#dashboard">
<HomeIcon />
Dashboard
</MenuItem>
<MenuItem href="#settings">
<Cog6ToothIcon />
Settings
</MenuItem>
<MenuItem href="#security">
<ShieldCheckIcon />
Security
</MenuItem>
<MenuSeparator />
<MenuItem href="#contact">
<LifebuoyIcon />
Customer Support
</MenuItem>
<MenuSeparator />
<MenuItem href="#logout">
<ArrowRightStartOnRectangleIcon />
Log out
</MenuItem>
</Menu>
</MenuTrigger>
</SidebarFooter>
<SidebarRail />
</Sidebar>
)
}