Drawer

A slide-in panel built on Radix UI Dialog. Supports all four sides. Compound component pattern.

Import

tsx
import { Drawer } from 'fxui-core';

Usage

tsx
<Drawer>
  <Drawer.Trigger>
    <Button>Open Drawer</Button>
  </Drawer.Trigger>
  <Drawer.Content>
    <Drawer.Header>Settings</Drawer.Header>
    <Drawer.Body>
      <p>Drawer content here.</p>
    </Drawer.Body>
    <Drawer.Footer>
      <Button variant="outline">Cancel</Button>
      <Button>Save</Button>
    </Drawer.Footer>
  </Drawer.Content>
</Drawer>

Placements

tsx
<Drawer.Content placement="right">...</Drawer.Content>   {/* default */}
<Drawer.Content placement="left">...</Drawer.Content>
<Drawer.Content placement="top">...</Drawer.Content>
<Drawer.Content placement="bottom">...</Drawer.Content>

Controlled

tsx
const [open, setOpen] = React.useState(false);

<Drawer open={open} onOpenChange={setOpen}>
  <Drawer.Trigger><Button>Open</Button></Drawer.Trigger>
  <Drawer.Content>
    <Drawer.Header>Title</Drawer.Header>
    <Drawer.Body>...</Drawer.Body>
  </Drawer.Content>
</Drawer>

Navigation Drawer

tsx
<Drawer>
  <Drawer.Trigger><Button>☰ Menu</Button></Drawer.Trigger>
  <Drawer.Content placement="left">
    <Drawer.Header>FXUI</Drawer.Header>
    <Drawer.Body>
      <nav>
        <a href="/docs/button">Button</a>
        <a href="/docs/card">Card</a>
      </nav>
    </Drawer.Body>
  </Drawer.Content>
</Drawer>

API Reference

Drawer

| Prop | Type | Default | Description | |------|------|---------|-------------| | open | boolean | — | Controlled open state | | onOpenChange | (open: boolean) => void | — | Called on state change |

Drawer.Content

| Prop | Type | Default | Description | |------|------|---------|-------------| | placement | 'right' \| 'left' \| 'top' \| 'bottom' | 'right' | Slide-in direction | | className | string | — | Additional Tailwind classes |