Lewati ke konten

Sidebar

Konten ini belum tersedia dalam bahasa Anda.

Terminal window
bosia add sidebar

A composable sidebar with header, scrollable content, grouped menus, collapsible items, and icon-mode collapse. Uses sidebar-* CSS custom properties for theming.

<script lang="ts">
import {
Sidebar, SidebarHeader, SidebarContent,
SidebarGroup, SidebarMenu, SidebarMenuItem,
SidebarFooter,
} from "$lib/components/ui/sidebar";
</script>
<div class="flex h-screen">
<Sidebar>
<SidebarHeader>
<span class="text-lg font-bold">⬡ Bosia</span>
</SidebarHeader>
<SidebarContent>
<SidebarGroup label="Navigation">
<SidebarMenu>
<SidebarMenuItem href="/" label="Home" icon="🏠" active />
<SidebarMenuItem href="/dashboard" label="Dashboard" icon="📊" />
<SidebarMenuItem href="/settings" label="Settings" icon="⚙️" />
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<p class="text-xs text-muted-foreground">v0.1.0</p>
</SidebarFooter>
</Sidebar>
<main class="flex-1 p-6">
<!-- Page content -->
</main>
</div>
ComponentDescription
SidebarRoot container with collapse support
SidebarHeaderTop section with border-bottom
SidebarContentScrollable middle area
SidebarFooterBottom section with border-top
SidebarGroupGroups items under an optional uppercase label
SidebarMenu<ul> wrapper for menu items
SidebarMenuItemLink, button, or static text item with icon
PropTypeDefault
side"left" | "right""left"
collapsible"icon" | "none""icon"
collapsedboolean (bindable)false

SidebarMenuItem supports nested children for collapsible sub-menus:

<SidebarMenuItem label="Analytics" icon="📈">
<SidebarMenuItem href="/analytics/overview" label="Overview" />
<SidebarMenuItem href="/analytics/reports" label="Reports" />
</SidebarMenuItem>
<Sidebar side="right">
...
</Sidebar>
<script lang="ts">
let collapsed = $state(false);
</script>
<Sidebar bind:collapsed>
...
</Sidebar>
<button onclick={() => (collapsed = !collapsed)}>Toggle</button>

Style the sidebar using these CSS variables in your app.css:

:root {
--sidebar-width: 16rem;
--sidebar-width-icon: 3rem;
--color-sidebar: var(--color-background);
--color-sidebar-foreground: var(--color-foreground);
--color-sidebar-accent: var(--color-accent);
--color-sidebar-accent-foreground: var(--color-accent-foreground);
}