Skip to main content

Usage

The DashboardSidebar component provides a flexible sidebar for dashboard layouts with support for resizing, collapsing, and responsive menu modes.
<template>
  <UDashboardSidebar v-model:open="sidebarOpen">
    <nav>
      <UButton label="Dashboard" variant="ghost" block />
      <UButton label="Settings" variant="ghost" block />
      <UButton label="Profile" variant="ghost" block />
    </nav>
  </UDashboardSidebar>
</template>

<script setup lang="ts">
const sidebarOpen = ref(false)
</script>

Resizable

Enable resizing to allow users to adjust the sidebar width.
<UDashboardSidebar
  id="main-sidebar"
  resizable
  :min-size="10"
  :max-size="30"
  :default-size="20"
>
  <nav>
    <!-- Navigation items -->
  </nav>
</UDashboardSidebar>

Collapsible

Enable collapsing to minimize the sidebar.
<UDashboardSidebar
  v-model:collapsed="isCollapsed"
  collapsible
  :collapsed-size="5"
>
  <template #default="{ collapsed }">
    <nav>
      <UButton 
        :icon="collapsed ? 'i-heroicons-home' : undefined"
        :label="collapsed ? undefined : 'Dashboard'"
        variant="ghost" 
        block 
      />
    </nav>
  </template>
</UDashboardSidebar>

<script setup lang="ts">
const isCollapsed = ref(false)
</script>
The sidebar supports different responsive menu modes: modal, slideover, and drawer.
<UDashboardSidebar
  v-model:open="sidebarOpen"
  mode="slideover"
  :menu="{ side: 'left' }"
>
  <nav>
    <!-- Navigation items -->
  </nav>
</UDashboardSidebar>
<UDashboardSidebar
  mode="modal"
  :menu="{ fullscreen: true }"
>
  <!-- Content -->
</UDashboardSidebar>

Drawer Mode

<UDashboardSidebar
  mode="drawer"
>
  <!-- Content -->
</UDashboardSidebar>

Side

Control which side the sidebar appears on.
<UDashboardSidebar side="right">
  <nav>
    <!-- Navigation items -->
  </nav>
</UDashboardSidebar>
Add header and footer sections to the sidebar.
<UDashboardSidebar>
  <template #header>
    <div class="p-4">
      <h2 class="font-bold">My App</h2>
    </div>
  </template>
  
  <nav>
    <!-- Navigation items -->
  </nav>
  
  <template #footer>
    <div class="p-4">
      <UButton label="Logout" block />
    </div>
  </template>
</UDashboardSidebar>

Custom Toggle

Customize the toggle button.
<UDashboardSidebar
  :toggle="{ color: 'primary', variant: 'solid' }"
  toggle-side="right"
>
  <!-- Content -->
</UDashboardSidebar>

Auto Close

The sidebar automatically closes when the route changes by default. Disable this behavior:
<UDashboardSidebar :auto-close="false">
  <!-- Content -->
</UDashboardSidebar>

Props

id
string
Unique identifier for the sidebar (used for persistence).
side
'left' | 'right'
default:"'left'"
Which side of the screen the sidebar appears on.
mode
'modal' | 'slideover' | 'drawer'
default:"'slideover'"
The mode of the sidebar menu for responsive layouts.
menu
ModalProps | SlideoverProps | DrawerProps
Props for the sidebar menu component (based on mode).
toggle
boolean | ButtonProps
default:"true"
Customize the toggle button to open the sidebar.
toggleSide
'left' | 'right'
default:"'left'"
The side to render the toggle button on.
autoClose
boolean
default:"true"
Automatically close when route changes.
resizable
boolean
default:"false"
Enable sidebar resizing.
collapsible
boolean
default:"false"
Enable sidebar collapsing.
minSize
number
default:"10"
Minimum size percentage.
maxSize
number
default:"20"
Maximum size percentage.
defaultSize
number
default:"15"
Default size percentage.
collapsedSize
number
default:"0"
Size percentage when collapsed.
class
any
Custom class to apply to the root element.
ui
Partial<typeof theme>
Override default theme classes.

Models

v-model:open
boolean
default:"false"
Controls whether the sidebar menu is open.
v-model:collapsed
boolean
default:"false"
Controls whether the sidebar is collapsed.

Slots

header
{ collapsed, collapse }
Customize the sidebar header.
default
{ collapsed, collapse }
Customize the main sidebar content.
Customize the sidebar footer.
toggle
{ open, toggle, ui }
Customize the toggle button.
content
{ close }
Customize the menu content.
resize-handle
{ onMouseDown, onTouchStart, onDoubleClick, ui }
Customize the resize handle.

Build docs developers (and LLMs) love