1. Home
  2. ChevronRightLayout
  3. ChevronRightSidebar

Sidebar

La barra de navegación lateral izquierda colapsable para listar páginas y guías anidadas.

El componente Sidebar muestra la estructura de directorios del sitio, listando carpetas anidadas, rutas de páginas, encabezados de categorías y etiquetas de navegación.


ImportaciónLink

import { Sidebar } from 'boltdocs/primitives'

Ejemplo de Sidebar ComponibleLink

La primitiva sin estilos Sidebar está diseñada para ser ensamblada usando bloques componibles. El siguiente ejemplo muestra cómo construir una barra lateral personalizada responsiva usando los contenedores primitivos y el hook de enrutamiento automático:

// docs/components/CustomSidebar.tsx
import React from 'react'
import { Sidebar } from 'boltdocs/primitives'
import { useRoutes } from 'boltdocs/client'

export default function CustomSidebar() {
  const { routes } = useRoutes()

  return (
    <>
      {/* 1. Contenedor de Sidebar de Escritorio */}
      <Sidebar className="hidden lg:flex border-r border-subtle bg-zinc-50 dark:bg-zinc-950">
        <Sidebar.Header className="px-4 py-3 flex items-center justify-between border-b">
          <span className="text-xs font-bold uppercase tracking-wider text-muted">Navegación</span>
        </Sidebar.Header>
        <Sidebar.Content>
          {/* Maneja automáticamente rutas anidadas colapsables y encabezados de grupo */}
          <Sidebar.Items routes={routes} />
        </Sidebar.Content>
      </Sidebar>

      {/* 2. Contenedor de Cajón Móvil Responsivo */}
      <Sidebar.Mobile className="bg-zinc-50 dark:bg-zinc-950">
        <Sidebar.Header className="px-4 py-3 flex items-center justify-between border-b">
          <span className="text-xs font-bold uppercase tracking-wider text-muted">Menú</span>
        </Sidebar.Header>
        <Sidebar.Content>
          <Sidebar.Items routes={routes} />
        </Sidebar.Content>
      </Sidebar.Mobile>
    </>
  )
}

Referencia de Producción del Mundo RealLink

A continuación se muestra una implementación de referencia completa y lista para producción que demuestra cómo construir un sistema de navegación de barra lateral con todas las funcionalidades (similar a la barra lateral del tema integrado). Integra marca de logo, controles de cierre de sidebar móvil, estructuras de escritorio vs. móvil, y combina menús desplegables de versión y traducción dentro del cajón del menú móvil:

// docs/components/ProductionSidebar.tsx
import React from 'react'
import { Sidebar, Button, Menu } from 'boltdocs/primitives'
import { useRoutes, useNavbar, useUI, useVersion, useI18n } from 'boltdocs/client'
import { X, ChevronDown, Languages } from 'lucide-react'

export default function ProductionSidebar() {
  const { routes, config } = useRoutes()
  const { logo, title, logoProps } = useNavbar()
  const { closeSidebar } = useUI()

  const { currentVersionLabel, availableVersions, handleVersionChange } = useVersion()
  const { currentLocale, availableLocales, handleLocaleChange } = useI18n()

  const SidebarLogo = logo ? (
    <img
      src={logo}
      alt={logoProps?.alt || title}
      width={24}
      height={24}
      className="rounded-lg"
    />
  ) : null

  // 1. Selector de Cambio de Versión para Diseños Móviles
  const MobileVersionSelector = availableVersions.length > 0 && (
    <select
      value={availableVersions.find(v => v.isCurrent)?.value}
      onChange={(e) => handleVersionChange(e.target.value)}
      className="flex-1 bg-surface border border-subtle rounded-lg px-3 py-2 text-xs font-semibold"
    >
      {availableVersions.map(v => (
        <option key={v.key} value={v.value}>{v.label}</option>
      ))}
    </select>
  )

  // 2. Selector de Idioma para Diseños Móviles
  const MobileLocaleSelector = availableLocales.length > 0 && (
    <select
      value={currentLocale}
      onChange={(e) => handleLocaleChange(e.target.value)}
      className="flex-1 bg-surface border border-subtle rounded-lg px-3 py-2 text-xs font-semibold"
    >
      {availableLocales.map(loc => (
        <option key={loc.key} value={loc.value}>{loc.label}</option>
      ))}
    </select>
  )

  const hasMobileSelectors = availableVersions.length > 0 || availableLocales.length > 0

  return (
    <>
      {/* A. Panel de Sidebar de Escritorio */}
      <Sidebar className="hidden lg:flex border-r border-subtle bg-main">
        <Sidebar.Content>
          <Sidebar.Items routes={routes} />
        </Sidebar.Content>
      </Sidebar>

      {/* B. Panel de Cajón Móvil */}
      <Sidebar.Mobile className="bg-main">
        <Sidebar.Header className="flex items-center justify-between border-b border-subtle px-4 py-3">
          <div className="flex items-center gap-3">
            {SidebarLogo}
            <span className="font-bold text-base text-body truncate max-w-[140px]">
              {title}
            </span>
          </div>
          
          <Button
            onPress={closeSidebar}
            className="h-8 w-8 flex items-center justify-center text-muted hover:text-body rounded-lg hover:bg-surface transition-colors"
          >
            <X size={18} />
          </Button>
        </Sidebar.Header>

        <Sidebar.Content className="p-4">
          {/* Menús desplegables de Versión/Idioma incrustados dentro del cajón móvil */}
          {hasMobileSelectors && (
            <div className="flex flex-col gap-3 mb-6">
              <div className="flex gap-2">
                {MobileVersionSelector}
                {MobileLocaleSelector}
              </div>
              <div className="border-b border-subtle my-2" />
            </div>
          )}

          <Sidebar.Items routes={routes} />
        </Sidebar.Content>
      </Sidebar.Mobile>
    </>
  )
}

Subcomponentes ComponiblesLink

La primitiva Sidebar proporciona los siguientes subcomponentes para la personalización de la estructura:

ComponenteEtiqueta HTMLDescripciónProps
Sidebar.Root / Sidebar<aside>Contenedor principal exterior de la barra lateral de escritorio.ComponentBaseProps
Sidebar.Mobile<div> (Modal)Contenedor de cajón de barra lateral móvil usando superposiciones accesibles.ComponentBaseProps
Sidebar.Header<div>Contenedor de sección superior con relleno (ideal para logos, entradas de búsqueda o encabezados).ComponentBaseProps
Sidebar.Content<div>Envoltorio de lista de navegación desplazable que mantiene posiciones de scroll.ComponentBaseProps
Sidebar.Group<div>Agrupa un conjunto de enlaces de navegación relacionados bajo un título común.Sidebar.Group Props
Sidebar.Link<a>Un enlace de navegación optimizado a una ruta de página específica.Sidebar.Link Props
Sidebar.SubGroup<div>Un contenedor de sección colapsable para sub-rutas anidadas.Sidebar.SubGroup Props
Sidebar.ItemVaríaUtilidad recursiva de mapeo de enrutador que renderiza enlaces o subgrupos automáticamente.Sidebar.Item Props
Sidebar.ItemsVaríaContenedor de bucle automatizado que mapea y renderiza una colección de rutas.Sidebar.Items Props

Props del ComponenteLink

ComponentBaseProps (Común)Link

PropiedadTipoPredeterminadoDescripción
childrenReactNodeundefinedElementos de contenido hijos.
classNamestringundefinedClases CSS utilitarias personalizadas.
styleCSSPropertiesundefinedConfiguraciones de estilo en línea.

Props de Sidebar.GroupLink

PropiedadTipoPredeterminadoDescripción
titlestringundefinedTexto del título de la categoría del grupo.
iconElementTypeundefinedComponente de icono principal personalizado.
childrenReactNodeRequeridoElementos hijos de la barra lateral.
PropiedadTipoPredeterminadoDescripción
labelstringRequeridoEtiqueta de nombre a mostrar del enlace.
hrefstringRequeridoRuta de destino de la ruta de enlace.
activebooleanfalseInterruptor de estilo de estado activo.
iconElementTypeundefinedEnvoltorio de elemento de icono principal.
badgestring | BadgeConfigundefinedEtiqueta de estado de notificación.

Props de Sidebar.SubGroupLink

Hereda todas las Props de Sidebar.Link más:

PropiedadTipoPredeterminadoDescripción
isOpenbooleanfalseIndicador de visibilidad del estado colapsado.
onToggle() => voidundefinedManipulador de callback del disparador de alternancia.
childrenReactNodeRequeridoEnlaces de navegación del subgrupo.

Props de Sidebar.ItemLink

PropiedadTipoPredeterminadoDescripción
routeComponentRouteRequeridoObjeto de configuración de ruta a analizar.
activePathstringRequeridoRuta URL activa de la ventana.

Props de Sidebar.ItemsLink

PropiedadTipoPredeterminadoDescripción
routesComponentRoute[]RequeridoArreglo de configuraciones de ruta para renderizar recursivamente.
Last updated on July 27, 2026

Was this page helpful?