O componente DashboardSidebar é usado para exibir uma sidebar em um layout de dashboard. Ele suporta redimensionamento por arraste, persistência de estado e se integra com DashboardGroup, DashboardPanel e DashboardNavbar.
DashboardGroup integration. For a simple, standalone sidebar (chat panel, settings, navigation), use Sidebar instead.O estado dele (tamanho, recolhido, etc.) é salvo com base nas props storage e storage-key que você fornece ao componente DashboardGroup.
Use-o dentro do slot padrão do componente DashboardGroup:
<template>
<NDashboardGroup>
<NDashboardSidebar />
<slot />
</NDashboardGroup>
</template>
resizable, então envolva-o em um container (ex.: <div class="flex flex-1">) se você usar transições de página ou precisar de uma raiz única para o layout.Use os slots header, default e footer para personalizar a sidebar e os slots body ou content para personalizar o menu da sidebar.
Use a prop resizable para tornar a sidebar redimensionável.
<template>
<NDashboardSidebar resizable>
<Placeholder class="h-96" />
</NDashboardSidebar>
</template>
Use a prop collapsible para tornar a sidebar recolhível ao arrastar para perto da borda da tela.
DashboardSidebarCollapse não terá efeito se a sidebar não for collapsible.<template>
<NDashboardSidebar resizable collapsible>
<Placeholder class="h-96" />
</NDashboardSidebar>
</template>
collapsed nas props de slot para personalizar o conteúdo da sidebar quando ela está recolhida.Use as props min-size, max-size, default-size e collapsed-size para personalizar o tamanho da sidebar.
<template>
<NDashboardSidebar
resizable
collapsible
:min-size="22"
:default-size="35"
:max-size="40"
:collapsed-size="0"
>
<Placeholder class="h-96" />
</NDashboardSidebar>
</template>
unit no componente DashboardGroup.collapsed-size é definida como 0 por padrão, mas a sidebar tem um min-w-16 para garantir que ela fique visível.Use a prop side para alterar o lado da sidebar. O padrão é left.
<template>
<NDashboardSidebar side="right" resizable collapsible>
<Placeholder class="h-96" />
</NDashboardSidebar>
</template>
Use a prop mode para alterar o modo do menu da sidebar. O padrão é slideover.
Use o slot body para preencher o corpo do menu (abaixo do cabeçalho) ou o slot content para preencher o menu inteiro.
menu para personalizar o menu da sidebar; ele se adapta dependendo do modo que você escolher.DashboardGroup, DashboardPanel e DashboardNavbar, pois eles são necessários para demonstrar a sidebar no mobile.Use a prop toggle para personalizar o componente DashboardSidebarToggle exibido no mobile.
Você pode passar qualquer propriedade do componente Button para personalizá-lo.
Use a prop toggle-side para alterar o lado do botão de alternância. O padrão é left.
Você pode controlar o estado de abertura usando a prop open ou a diretiva v-model:open.
defineShortcuts, você pode alternar o estado de abertura do DashboardSidebar pressionando O.Você pode controlar o estado recolhido usando a prop collapsed ou a diretiva v-model:collapsed.
defineShortcuts, você pode alternar o estado recolhido do DashboardSidebar pressionando C.| Prop | Default | Type |
|---|---|---|
mode | 'slideover' | TThe mode of the sidebar menu. |
menu | DashboardSidebarMenu<T>The props for the sidebar menu component. | |
toggle | true | boolean | Omit<ButtonProps, LinkPropsKeys> Customize the toggle button to open the sidebar.
|
toggleSide | 'left' | "left" | "right"The side to render the toggle button on. |
autoClose | true | boolean Automatically close when route changes. |
id | useId() | stringThe id of the panel. |
side | 'left' | "left" | "right"The side to render the panel on. |
minSize | 10 | numberThe minimum size of the panel. |
maxSize | 20 | numberThe maximum size of the panel. |
defaultSize | 15 | numberThe default size of the panel. |
resizable | false | boolean Whether to allow the user to resize the panel. |
collapsible | false | boolean Whether to allow the user to collapse the panel. |
collapsedSize | 0 | numberThe size of the panel when collapsed. |
open | false | boolean |
collapsed | false | boolean |
ui | { root?: SlotClass; header?: SlotClass; body?: SlotClass; footer?: SlotClass; toggle?: SlotClass; handle?: SlotClass; content?: SlotClass; overlay?: SlotClass; } |
| Slot | Type |
|---|---|
header | { collapsed: boolean; collapse: (value: boolean) => void; } |
default | { collapsed: boolean; collapse: (value: boolean) => void; } |
footer | { collapsed: boolean; collapse: (value: boolean) => void; } |
toggle | { open: boolean; toggle: () => void; ui: object; } |
content | { close?: (() => void) | undefined; } |
resize-handle | { onMouseDown: (e: MouseEvent) => void; onTouchStart: (e: TouchEvent) => void; onDoubleClick: (e: MouseEvent) => void; ui: object; } |
export default defineAppConfig({
ui: {
dashboardSidebar: {
slots: {
root: 'relative hidden lg:flex flex-col min-h-svh min-w-16 w-(--width) shrink-0',
header: 'h-(--ui-header-height) shrink-0 flex items-center gap-1.5 px-4',
body: 'flex flex-col gap-4 flex-1 overflow-y-auto px-4 py-2',
footer: 'shrink-0 flex items-center gap-1.5 px-4 py-2',
toggle: '',
handle: '',
content: 'lg:hidden',
overlay: 'lg:hidden'
},
variants: {
menu: {
true: {
header: 'sm:px-6',
body: 'sm:px-6',
footer: 'sm:px-6'
}
},
side: {
left: {
root: 'border-e border-default'
},
right: {
root: ''
}
},
toggleSide: {
left: {
toggle: ''
},
right: {
toggle: 'ms-auto'
}
}
}
}
}
})
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nitro/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
ui: {
dashboardSidebar: {
slots: {
root: 'relative hidden lg:flex flex-col min-h-svh min-w-16 w-(--width) shrink-0',
header: 'h-(--ui-header-height) shrink-0 flex items-center gap-1.5 px-4',
body: 'flex flex-col gap-4 flex-1 overflow-y-auto px-4 py-2',
footer: 'shrink-0 flex items-center gap-1.5 px-4 py-2',
toggle: '',
handle: '',
content: 'lg:hidden',
overlay: 'lg:hidden'
},
variants: {
menu: {
true: {
header: 'sm:px-6',
body: 'sm:px-6',
footer: 'sm:px-6'
}
},
side: {
left: {
root: 'border-e border-default'
},
right: {
root: ''
}
},
toggleSide: {
left: {
toggle: ''
},
right: {
toggle: 'ms-auto'
}
}
}
}
}
})
]
})