Ir al contenido
Superposiciones

Sheet

Un panel que entra desde un borde. Los cuatro lados.

import { Sheet, SheetClose, SheetContent, SheetDescription, … } from "sebs7n-ui/sheet"

Ejemplos

Panel lateral de filtros

import { Button } from "sebs7n-ui/button"
import { Input } from "sebs7n-ui/input"
import { Label } from "sebs7n-ui/label"
import { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from "sebs7n-ui/sheet"

function Basico() {
  return (
    <div className="flex flex-wrap gap-3">
      <Sheet>
        <SheetTrigger render={<Button variant="outline" />}>Filtros</SheetTrigger>
        <SheetContent>
          <SheetHeader>
            <SheetTitle>Filtrar facturas</SheetTitle>
            <SheetDescription>Se aplican al listado sin recargar la página.</SheetDescription>
          </SheetHeader>
          <div className="flex flex-col gap-4 px-4">
            <div className="flex flex-col gap-2">
              <Label htmlFor="sheet-cliente">Cliente</Label>
              <Input id="sheet-cliente" placeholder="Acme S.A." />
            </div>
            <div className="flex flex-col gap-2">
              <Label htmlFor="sheet-desde">Desde</Label>
              <Input id="sheet-desde" type="date" />
            </div>
          </div>
          <SheetFooter>
            <Button variant="accent">Aplicar</Button>
          </SheetFooter>
        </SheetContent>
      </Sheet>

      <Sheet>
        <SheetTrigger render={<Button variant="ghost" />}>Desde la izquierda</SheetTrigger>
        <SheetContent side="left">
          <SheetHeader>
            <SheetTitle>Navegación</SheetTitle>
            <SheetDescription>Es el lado que usa el `AppShell` en mobile.</SheetDescription>
          </SheetHeader>
        </SheetContent>
      </Sheet>
    </div>
  )
}

Props

Generadas del TypeScript del paquete. Solo las props propias: las heredadas del primitivo de Base UI o del elemento HTML están en la línea «hereda de».

Sheet

Hereda las props de Sheet.Root.

Sin props propias: pasa todo al primitivo.

SheetClose

Hereda las props de Sheet.Close.

Sin props propias: pasa todo al primitivo.

SheetContent

Hereda las props de Sheet.Popup.

PropTipoPor defectoDescripción
showCloseButtonbooleantrue
side"top" | "bottom" | "left" | "right""right"
classNamestring

SheetDescription

Hereda las props de Sheet.Description.

PropTipoPor defectoDescripción
classNamestring

SheetFooter

Hereda las props de <div>.

PropTipoPor defectoDescripción
classNamestring

SheetHeader

Hereda las props de <div>.

PropTipoPor defectoDescripción
classNamestring

SheetTitle

Hereda las props de Sheet.Title.

PropTipoPor defectoDescripción
classNamestring

SheetTrigger

Hereda las props de Sheet.Trigger.

Sin props propias: pasa todo al primitivo.

Teclado

Escape
Cierra y devuelve el foco.
Tab
Atrapado adentro.
Click en el fondo
Cierra.

Accesibilidad

  • Mismo contrato que Dialog: SheetTitle obligatorio, foco atrapado, fondo inerte.
  • El movimiento de entrada pasa por motion-reduce.

Reglas de uso

  • Un formulario largo o una lista de filtros sin perder la tabla de atrás.
  • side="left" es el del menú mobile —lo usa AppShell—; para contenido, right.
  • En desktop, más de 640px de ancho es una página, no un panel.

Relacionados