Drawer
Panel que entra deslizándose desde un borde de la pantalla.
- Navegadores
- Chrome 123+Firefox 121+Safari 17.5+
- Nivel
- 0
- Tamaño comprimido
- 4.01 kB
- Presupuesto de diseño forzado
- 0 ms
- Presupuesto de axe
- 0
- Compatible con SSR
- Sí
- Basado en
- elements/dialog
- Contrato publicado
- Entorno de pruebas
Zona de pruebas
API
DrawerPanel
| Prop | Tipo | Predeterminado | Descripción |
|---|---|---|---|
size | "sm" | "md" | "lg" | "full" | "md" | Anchos de escritorio: 24rem, 32rem, 40rem o el ancho disponible. En móviles, todos los tamaños se convierten en un panel inferior vertical. |
dismiss | "any" | "closerequest" | "none" | "any" | Política de cierre nativa. Any permite cerrar al tocar el fondo, con Escape y un deslizamiento hacia abajo en móvil; none requiere un control de cierre explícito. |
backdrop | "opaque" | "transparent" | "opaque" | Apariencia del fondo; no cambia la semántica modal. |
footer | ReactNode | — | Acciones después del cuerpo desplazable. |
id* | string | — | Id único de diálogo al que apuntan el activador y el botón de cierre, para que el panel se abra y se cierre antes de la hidratación. |
trigger* | ReactNode | — | Contenido del botón que abre el panel. |
title* | ReactNode | — | Encabezado renderizado dentro del panel que se usa como nombre accesible. |
description | ReactNode | — | Texto de apoyo renderizado bajo el título y referenciado por aria-describedby. |
children | ReactNode | — | Contenido del cuerpo situado entre la descripción y el botón de cierre. |
side | "top" | "right" | "bottom" | "left" | "bottom" | Borde desde el que entra el panel. |
closeLabel | string | "Close" | Etiqueta accesible del ícono circular de cierre. |
className | string | — | Clase aplicada al elemento dialog. |
Drawer.Root (client)
| Prop | Tipo | Predeterminado | Descripción |
|---|---|---|---|
open | boolean | — | Estado de apertura controlado. |
defaultOpen | boolean | — | Estado de apertura inicial no controlado. |
onOpenChange | DialogChangeHandler | — | Se llama con el siguiente estado de apertura y los detalles de la causa del cambio. |
side | "top" | "right" | "bottom" | "left" | "bottom" | Borde desde el que entra el panel, que también determina el eje de arrastre. |
modal | boolean | true | Abre con showModal() para que el resto de la página quede inerte detrás de un fondo. |
dismissible | boolean | true | Permite cerrar el panel al arrastrar más allá del último punto de ajuste. |
snapPoints | readonly number[] | — | Fracciones del tamaño del panel en las que se asienta al arrastrarlo. |
activeSnapPoint | number | — | Punto de ajuste controlado, como uno de los valores de snapPoints. |
defaultActiveSnapPoint | number | — | Punto de ajuste inicial no controlado. |
onSnapChange | (snap: number) => void | — | Se llama con el punto de ajuste en el que se asentó el panel. |
children | ReactNode | — | Las partes Trigger, Content e internas. |
Drawer.Trigger (client)
| Prop | Tipo | Predeterminado | Descripción |
|---|---|---|---|
className | string | — | Clase aplicada al botón activador. |
onClick | (event: MouseEvent<HTMLButtonElement>) => void | — | Se llama al hacer clic en el activador, antes de abrir el panel. |
ref | Ref<HTMLButtonElement> | — | Ref del botón activador, que recupera el foco al cerrar el panel. |
children | ReactNode | — | Contenido del botón activador. |
Drawer.Content (client)
| Prop | Tipo | Predeterminado | Descripción |
|---|---|---|---|
className | string | — | Clase aplicada al elemento dialog. |
style | CSSProperties | — | Estilo en línea que se combina con la transformación de arrastre aplicada por el panel. |
onCancel | ReactEventHandler<HTMLDialogElement> | — | Se llama en el evento cancel del diálogo nativo, por ejemplo al presionar Escape. |
onClose | ReactEventHandler<HTMLDialogElement> | — | Se llama en el evento close del diálogo nativo. |
ref | Ref<HTMLDialogElement> | — | Ref del elemento dialog. |
children | ReactNode | — | Contenido del panel. |
Drawer.Title (client)
| Prop | Tipo | Predeterminado | Descripción |
|---|---|---|---|
className | string | — | Clase aplicada al elemento del título. |
children | ReactNode | — | Contenido del título, que se convierte en el nombre accesible del panel. |
Drawer.Description (client)
| Prop | Tipo | Predeterminado | Descripción |
|---|---|---|---|
className | string | — | Clase aplicada al elemento de descripción. |
children | ReactNode | — | Contenido de la descripción, referenciado por aria-describedby. |
Drawer.Close (client)
| Prop | Tipo | Predeterminado | Descripción |
|---|---|---|---|
className | string | — | Clase aplicada al botón de cierre. |
onClick | (event: MouseEvent<HTMLButtonElement>) => void | — | Se llama al hacer clic en el botón de cierre, antes de cerrar el panel. |
children | ReactNode | — | Contenido del botón de cierre. |
Drawer.Handle (client)
| Prop | Tipo | Predeterminado | Descripción |
|---|---|---|---|
className | string | — | Clase aplicada al tirador de arrastre. |
onPointerDown | (event: PointerEvent<HTMLDivElement>) => void | — | Se llama cuando comienza un arrastre en el tirador. |
onPointerMove | (event: PointerEvent<HTMLDivElement>) => void | — | Se llama a medida que se mueve el puntero durante un arrastre. |
onPointerUp | (event: PointerEvent<HTMLDivElement>) => void | — | Se llama cuando termina el arrastre y el panel se asienta en un punto de ajuste. |
onPointerCancel | (event: PointerEvent<HTMLDivElement>) => void | — | Se llama cuando el navegador cancela el arrastre. |
Teclado
| Tecla | Acción |
|---|---|
| Enter / Space | Abrir el diálogo desde su activador o activar Close |
| Escape | Solicitar el cierre salvo que dismiss sea none |
| Tab / Shift+Tab | Moverse dentro del diálogo modal |
Accesibilidad
DrawerPanel usa un diálogo con ids de destino, por lo que la apertura, el cierre, la contención del foco y su devolución funcionan antes de la hidratación; dismiss controla el fondo y Escape. Los paneles tienen anchos sm, md, lg y full, y se convierten en paneles inferiores en teléfonos. El deslizamiento comienza en el tirador o el encabezado, por lo que el cuerpo sigue siendo desplazable. La API de cliente añade estado controlado y puntos de ajuste.
Puntos de estilo
data-uiify-drawerdata-partdata-sidedata-sizedata-backdropdata-statedata-dragging--uiify-drawer-inline-size--uiify-drawer-transform--uiify-sheet-offset