# Dashboard Layout Build admin interfaces with resizable sidebars, multi-panel layouts, and toolbars. ## When to use - Admin panels, back-office UIs - Email clients, project management tools - Any app with a persistent sidebar and content panels - Combine with chat or editor layouts for specialized dashboards ## Component tree ``` UApp └── NuxtLayout (dashboard) └── UDashboardGroup ├── UDashboardSidebar │ ├── #header (logo, search button) │ ├── #default (navigation) — receives { collapsed } slot prop │ └── #footer (user menu) └── NuxtPage └── UDashboardPanel ├── #header → UDashboardNavbar + UDashboardToolbar ├── #body (scrollable content) └── #footer (optional) ``` ## Layout ```vue [layouts/dashboard.vue] ``` ## Page ```vue [pages/dashboard/index.vue] ``` ### Common mistakes - Forgetting `definePageMeta({ layout: 'dashboard' })` — the page won't use the dashboard layout without it. - Putting content directly in `UDashboardPanel` without using `#body` slot — content won't scroll properly. - Not handling the `collapsed` slot prop — sidebar content should adapt when collapsed (hide labels, center icons). ## Key components ### DashboardGroup Root wrapper. Manages sidebar state and persistence. | Prop | Default | Purpose | | ------------- | ------------- | ------------------------------------- | | `storage` | `'cookie'` | `'cookie'`, `'localStorage'`, `false` | | `storage-key` | `'dashboard'` | Storage key name | ### DashboardSidebar Resizable, collapsible sidebar. Must be inside `DashboardGroup`. | Prop | Default | Purpose | | ------------- | ------------- | -------------------------------------------- | | `resizable` | `false` | Drag to resize | | `collapsible` | `false` | Collapse when dragged to edge | | `side` | `'left'` | `'left'` or `'right'` | | `mode` | `'slideover'` | Mobile: `'modal'`, `'slideover'`, `'drawer'` | All slots receive `{ collapsed, collapse }` — `collapsed` is the boolean state, `collapse(value)` toggles it programmatically. Use `v-model:collapsed` and `v-model:open` (mobile) for state control. ### DashboardPanel Content panel with `#header`, `#body` (scrollable), `#footer`, and `#default` (raw, no scroll) slots. ### DashboardNavbar / DashboardToolbar Navbar: `#leading`, `#left`, `#default`, `#right` slots + `title` prop. Use `UDashboardSidebarCollapse` in `#leading` to toggle sidebar on mobile. Toolbar: same slots, sits below navbar for filters/actions. ### UNavigationMenu in sidebar Always pass `:collapsed="collapsed"` to `UNavigationMenu` inside a collapsible sidebar — it auto-hides labels and centers icons. Use `NavigationMenuItem[][]` (array of arrays) for separate groups (main nav + footer links). ## Multi-panel (list-detail) ```vue [pages/dashboard/inbox.vue] ``` ## With toolbar ```vue ``` ## With search ```vue [layouts/dashboard.vue] ``` ## Right sidebar ```vue ```