Saltar al contenido
Logic2BUI

Buscar en la documentación

Busca componentes y documentación

Nuevo
Menú

Cajón deslizante

Extiende Dialog para mostrar contenido que entra desde un borde y se arrastra mediante un tirador.

Instalación

npx logic2b@next add drawer

Uso

import {
  Drawer,
  DrawerClose,
  DrawerContent,
  DrawerDescription,
  DrawerFooter,
  DrawerHeader,
  DrawerTitle,
  DrawerTrigger,
} from "@/components/ui/drawer"

<Drawer>
  <DrawerTrigger>Abrir</DrawerTrigger>
  <DrawerContent>
    <DrawerHeader>
      <DrawerTitle>Editar perfil</DrawerTitle>
      <DrawerDescription>Modifica aquí los datos de tu perfil.</DrawerDescription>
    </DrawerHeader>
    <DrawerFooter>
      <DrawerClose>Cancelar</DrawerClose>
    </DrawerFooter>
  </DrawerContent>
</Drawer>

Está construido sobre vaul. A diferencia del panel lateral, que es un Dialog de Radix que entra desde un borde, el cajón admite arrastrar para cerrar y puntos de anclaje, por lo que resulta más adecuado como panel inferior en móvil.

Ejemplos

Desde la derecha

Contenido desplazable

Accesibilidad

  • Extiende el Dialog de Radix mediante vaul, así que retiene el foco mientras está abierto y lo devuelve al disparador al cerrarse.
  • Incluye un DrawerTitle y, preferiblemente, un DrawerDescription para que los lectores de pantalla anuncien el cajón con nombre y descripción.
  • Se cierra con Escape, al pulsar el overlay o al arrastrar hacia el borde desde el que apareció.

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
<Drawer
  direction="bottom"
>
  <DrawerTrigger
    className="rounded-md border px-4 py-2 text-sm font-medium"
  >Open release drawer</DrawerTrigger>
  <DrawerContent>
    <DrawerHeader>
      <DrawerTitle>Release checklist</DrawerTitle>
      <DrawerDescription>Review each quality gate before publishing.</DrawerDescription>
    </DrawerHeader>
    <div
      className="px-4 pb-4 text-sm"
    >Tests · accessibility · visual baselines</div>
    <DrawerFooter>
      <DrawerClose
        className="rounded-md border px-4 py-2 text-sm font-medium"
      >Done</DrawerClose>
    </DrawerFooter>
  </DrawerContent>
</Drawer>

Referencia de API

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

Ver JSON

Drawer

Componente
Props: React.ComponentProps<typeof DrawerPrimitive.Root>

DrawerPortal

Componente
Props: React.ComponentProps<typeof DrawerPrimitive.Portal>

DrawerOverlay

Componente
Props: React.ComponentProps<typeof DrawerPrimitive.Overlay>

DrawerTrigger

Componente
Props: React.ComponentProps<typeof DrawerPrimitive.Trigger>

DrawerClose

Componente
Props: React.ComponentProps<typeof DrawerPrimitive.Close>

DrawerContent

Componente
Props: React.ComponentProps<typeof DrawerPrimitive.Content>

DrawerHeader

Componente
Props: React.ComponentProps<"div">

DrawerFooter

Componente
Props: React.ComponentProps<"div">

DrawerTitle

Componente
Props: React.ComponentProps<typeof DrawerPrimitive.Title>

DrawerDescription

Componente
Props: React.ComponentProps<typeof DrawerPrimitive.Description>

Contrato de accesibilidad

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

Ver JSON
Soporte
Gestionado por la primitiva
Patrón
modal dialog
Vaul Dialog
Interacciones de teclado para drawer
TeclasComportamiento
EscapeClose the open surface and restore focus.
Tab Shift+TabCycle focus inside the drawer.

Semántica incorporada

  • Uses dialog title/description primitives and modal focus management.

Responsabilidades de integración

  • Provide DrawerTitle, an accessible close control and a non-drag dismissal path.