Reference index

Components

Sheet

Sheet on Base UI Dialog: full-height paper panel from any side, 1px inner ink rule, focus trapped.

Preview

Install

bash

npx shadcn add @eloquent/sheet

Usage

tsx

import { Button } from "@/components/ui/button";
import {
  Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger,
} from "@/components/ui/sheet";

<Sheet>
  <SheetTrigger render={<Button variant="outline" />}>Filters</SheetTrigger>
  <SheetContent side="right" closeLabel="Close">
    <SheetHeader>
      <SheetTitle>Filters</SheetTitle>
      <SheetDescription>Narrow the story list by desk and author.</SheetDescription>
    </SheetHeader>
    <SheetFooter>
      <SheetClose render={<Button />}>Apply filters</SheetClose>
    </SheetFooter>
  </SheetContent>
</Sheet>

States

StateTreatment
OpenPaper panel with a 1px ink rule on the inner edge; slides in with transform, none under reduced motion; backdrop paper at 85%
Focus2px ink outline, 2px offset
Close pressedtint-1 fill on the 44px ✕; no hover effect

Keyboard

KeyAction
Tab / Shift+TabFrom the page, reach the trigger. While open, move between the sheet's controls; focus wraps and never leaves the sheet
Enter / SpaceOpen from the trigger; activate a control
EscClose; focus returns to the trigger

Vietnamese

Ink adaptation

Upstream shadcn's shadow, dark overlay and muted description are removed. The panel is paper with a 1px ink rule on its inner edge; the header opens with a heavy rule and the footer with a hairline. Motion is a transform slide only. Built on Base UI Dialog, as upstream builds Sheet on Dialog.