Saltar al contenido
Logic2BUI

Buscar en la documentación

Busca componentes y documentación

Nuevo
Menú

Barra lateral

Barra lateral componible y tematizable para construir shells de aplicaciones y dashboards.

Instalación

npx logic2b@next add sidebar

Uso

Envuelve el layout con SidebarProvider, coloca Sidebar y SidebarInset como hermanos y usa SidebarTrigger para alternar su estado. Este persiste entre recargas mediante una cookie y también se alterna con ⌘/Ctrl + B.

import {
  Sidebar,
  SidebarContent,
  SidebarHeader,
  SidebarInset,
  SidebarProvider,
  SidebarTrigger,
} from "@/components/ui/sidebar"

export function AppLayout() {
  return (
    <SidebarProvider>
      <Sidebar>
        <SidebarHeader>Mi aplicación</SidebarHeader>
        <SidebarContent>{/* SidebarGroup, SidebarMenu… */}</SidebarContent>
      </Sidebar>
      <SidebarInset>
        <header>
          <SidebarTrigger />
        </header>
        {/* Contenido de la página */}
      </SidebarInset>
    </SidebarProvider>
  )
}

Sidebar acepta side (left | right), variant (sidebar | floating | inset) y collapsible (offcanvas | icon | none). En viewports estrechos se convierte automáticamente en un Sheet. Consulta el estado actual (state, open, isMobile, toggleSidebar) con el hook useSidebar() desde cualquier descendiente.

Notas de uso

SidebarTrigger es un Button que llama a toggleSidebar() y reenvía todas las propiedades del botón.

Ejemplos

Rail de iconos

Variante flotante

Accesibilidad

  • La barra lateral se alterna con ⌘/Ctrl + B, además del botón SidebarTrigger.
  • SidebarTrigger renderiza un botón etiquetado mediante texto solo para lectores de pantalla y conectado a toggleSidebar().
  • En móvil se convierte en un Sheet, del que hereda la retención de foco y el cierre mediante Escape.
  • Al contraerla a icon, añade un tooltip a cada SidebarMenuButton para que el destino siga siendo reconocible.

Playground interactivo

Edita las propiedades del componente y revisa el JSX exacto antes de copiarlo. La vista previa se carga solo cuando esta sección entra en pantalla.

JSX generado
<SidebarProvider
  defaultOpen
  className="min-h-72 overflow-hidden rounded-lg border"
>
  <Sidebar
    collapsible="none"
    className="h-72"
  >
    <SidebarHeader>
      <SidebarInput
        placeholder="Search…"
        aria-label="Search navigation"
       />
    </SidebarHeader>
    <SidebarContent>
      <SidebarGroup>
        <SidebarGroupLabel>Platform</SidebarGroupLabel>
        <SidebarGroupContent>
          <SidebarMenu>
            <SidebarMenuItem>
              <SidebarMenuButton
                type="button"
                isActive
              >Registry</SidebarMenuButton>
            </SidebarMenuItem>
            <SidebarMenuItem>
              <SidebarMenuButton
                type="button"
              >Design tokens</SidebarMenuButton>
            </SidebarMenuItem>
            <SidebarMenuItem>
              <SidebarMenuButton
                type="button"
              >Benchmarks</SidebarMenuButton>
            </SidebarMenuItem>
          </SidebarMenu>
        </SidebarGroupContent>
      </SidebarGroup>
    </SidebarContent>
    <SidebarFooter>logic2b ui</SidebarFooter>
  </Sidebar>
  <SidebarInset
    className="min-h-72 p-6"
  >
    <SidebarTrigger />
    <p
      className="mt-6 text-sm text-muted-foreground"
    >Project workspace</p>
  </SidebarInset>
</SidebarProvider>

Referencia de API

Generada a partir de las exportaciones públicas de TypeScript en src/ui/sidebar.tsx. Las descripciones técnicas conservan el texto canónico del código fuente.

Ver JSON

Sidebar

Componente
Props: React.ComponentProps<"div"> & { side?: "left" | "right" variant?: "sidebar" | "floating" | "inset" collapsible?: "offcanvas" | "icon" | "none" }
PropiedadTipoObligatoriaValor predeterminadoDescripción
side"left" | "right"No"left"—
variant"sidebar" | "floating" | "inset"No"sidebar"—
collapsible"offcanvas" | "icon" | "none"No"offcanvas"—

SidebarContent

Componente
Props: React.ComponentProps<"div">

SidebarFooter

Componente
Props: React.ComponentProps<"div">

SidebarGroup

Componente
Props: React.ComponentProps<"div">

SidebarGroupAction

Componente
Props: React.ComponentProps<"button"> & { asChild?: boolean }
PropiedadTipoObligatoriaValor predeterminadoDescripción
asChildbooleanNofalse—

SidebarGroupContent

Componente
Props: React.ComponentProps<"div">

SidebarGroupLabel

Componente
Props: React.ComponentProps<"div"> & { asChild?: boolean }
PropiedadTipoObligatoriaValor predeterminadoDescripción
asChildbooleanNofalse—

SidebarHeader

Componente
Props: React.ComponentProps<"div">

SidebarInput

Componente
Props: React.ComponentProps<typeof Input>

SidebarInset

Componente
Props: React.ComponentProps<"main">

SidebarMenu

Componente
Props: React.ComponentProps<"ul">

SidebarMenuAction

Componente
Props: React.ComponentProps<"button"> & { asChild?: boolean showOnHover?: boolean }
PropiedadTipoObligatoriaValor predeterminadoDescripción
asChildbooleanNofalse—
showOnHoverbooleanNofalse—

SidebarMenuBadge

Componente
Props: React.ComponentProps<"div">

SidebarMenuButton

Componente
Props: React.ComponentProps<"button"> & { asChild?: boolean isActive?: boolean tooltip?: string | React.ComponentProps<typeof TooltipContent> } & VariantProps<typeof sidebarMenuButtonVariants>
PropiedadTipoObligatoriaValor predeterminadoDescripción
asChildbooleanNofalse—
isActivebooleanNofalse—
variantnull | "default" | "outline"No"default"—
sizenull | "default" | "sm" | "lg"No"default"—
tooltipstring | React.ComponentProps<typeof TooltipContent>No——

SidebarMenuItem

Componente
Props: React.ComponentProps<"li">

SidebarMenuSkeleton

Componente
Props: React.ComponentProps<"div"> & { showIcon?: boolean }
PropiedadTipoObligatoriaValor predeterminadoDescripción
showIconbooleanNofalse—

SidebarMenuSub

Componente
Props: React.ComponentProps<"ul">

SidebarMenuSubButton

Componente
Props: React.ComponentProps<"a"> & { asChild?: boolean size?: "sm" | "md" isActive?: boolean }
PropiedadTipoObligatoriaValor predeterminadoDescripción
asChildbooleanNofalse—
size"sm" | "md"No"md"—
isActivebooleanNofalse—

SidebarMenuSubItem

Componente
Props: React.ComponentProps<"li">

SidebarProvider

Componente
Props: React.ComponentProps<"div"> & { defaultOpen?: boolean open?: boolean onOpenChange?: (open: boolean) => void }
PropiedadTipoObligatoriaValor predeterminadoDescripción
defaultOpenbooleanNotrue—
openbooleanNo——
onOpenChange(open: boolean) => voidNo——

SidebarRail

Componente
Props: React.ComponentProps<"button">

SidebarSeparator

Componente
Props: React.ComponentProps<typeof Separator>

SidebarTrigger

Componente
Props: React.ComponentProps<typeof Button>

useSidebar

Hook
(): SidebarContextProps

Contrato de accesibilidad

Comportamiento legible por máquinas y responsabilidades de quien integra sidebar. Los detalles normativos conservan el texto canónico del registro.

Ver JSON
Soporte
Comportamiento implementado
Patrón
application navigation
Interacciones de teclado para sidebar
TeclasComportamiento
Enter SpaceActivate the focused control.
Tab Shift+TabMove through sidebar controls and links.

Semántica incorporada

  • Trigger buttons name their action; mobile mode uses a labelled sheet/dialog surface.

Responsabilidades de integración

  • Wrap navigation links in a labelled nav landmark and mark the current route with aria-current.