Instalación
npx logic2b@next add drawerUso
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
DrawerTitley, preferiblemente, unDrawerDescriptionpara 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.
<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.
Drawer
ComponenteProps: React.ComponentProps<typeof DrawerPrimitive.Root>DrawerPortal
ComponenteProps: React.ComponentProps<typeof DrawerPrimitive.Portal>DrawerOverlay
ComponenteProps: React.ComponentProps<typeof DrawerPrimitive.Overlay>DrawerTrigger
ComponenteProps: React.ComponentProps<typeof DrawerPrimitive.Trigger>DrawerClose
ComponenteProps: React.ComponentProps<typeof DrawerPrimitive.Close>DrawerContent
ComponenteProps: React.ComponentProps<typeof DrawerPrimitive.Content>DrawerHeader
ComponenteProps: React.ComponentProps<"div">DrawerFooter
ComponenteProps: React.ComponentProps<"div">DrawerTitle
ComponenteProps: React.ComponentProps<typeof DrawerPrimitive.Title>DrawerDescription
ComponenteProps: 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.
- Soporte
- Gestionado por la primitiva
- Patrón
- modal dialog
- Vaul Dialog
| Teclas | Comportamiento |
|---|---|
| Escape | Close the open surface and restore focus. |
| Tab Shift+Tab | Cycle 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.