Sidebar

Navegación lateral colapsable. Se desliza fuera de pantalla con animación suave y una pestaña que permite re-expandirlo. API JSON: lista plana de items o agrupada por secciones. Submenús con Radix Collapsible. Estado persistido en localStorage.

pnpm dlx nuvo-ui add sidebar

Demo interactivo

Clic en «Usuarios» para el submenú. El chevron izquierdo colapsa el sidebar — desliza fuera de pantalla con una pestaña › para re-expandir.

Ruta activa: /
import { Sidebar } from "@/components/ui/sidebar"

// Flat list
const items = [
  { label: "Dashboard",  href: "/",      icon: HomeIcon },
  { label: "Analíticas", href: "/stats", icon: ChartIcon },
  {
    label: "Usuarios",
    href: "/users",
    icon: UsersIcon,
    badge: 3,               // badge en rojo
    children: [             // submenú colapsable
      { label: "Todos",        href: "/users" },
      { label: "Invitaciones", href: "/users/invites" },
    ],
  },
]

// O agrupado por secciones
const sections = [
  { section: "Principal", items: [{ label: "Dashboard", href: "/" }] },
  { section: "Gestión",   items: [{ label: "Usuarios",  href: "/users" }] },
]

// En Next.js:
const pathname = usePathname()
const router   = useRouter()

<Sidebar
  items={items}              // o sections={sections}
  activeHref={pathname}
  onNavigate={(href) => router.push(href)}
  logo={<MyLogo />}
  footer={<p>v1.0</p>}
  storageKey="mi-app-sidebar"
/>
Nota: El estado de colapso se persiste en localStorage con la clave que pases en storageKey. Cada instancia puede tener su propia clave.

Props — Sidebar

PropTipoDefaultDescripción
itemsSidebarItem[]—Lista plana de items de navegación
sectionsSidebarSection[]—Items agrupados por sección con encabezado. Alternativo a items.
activeHrefstring—Href activo — resalta el item correspondiente con barra lateral
onNavigate(href: string) => void—Callback al hacer clic en un item (previene navegación nativa)
logoReactNode—Área del logo en el header del sidebar
footerReactNode—Contenido del pie, visible solo cuando está expandido
defaultCollapsedbooleanfalseEstado inicial de colapso
storageKeystring"nuvo-ui-sidebar"Clave de localStorage — cada instancia puede tener la suya
widthnumber240Ancho en px del sidebar cuando está expandido
classNamestring—Clases extra en el contenedor raíz

Tipo SidebarItem

PropTipoDefaultDescripción
labelstring—Texto del item
hrefstring—URL de destino
iconElementType—Ícono como componente React (recibe className)
badgestring | number—Contador en badge primario
childrenSidebarChildItem[]—Sub-items del menú colapsable (Radix Collapsible)