# Inbox Bulk Actions

A message list with checkboxes. Selecting rows swaps the header for a washed bulk toolbar.

Tier: Free

## Installation

```bash
npx shadcn add @fetaui/inbox-bulk-actions
```

## Usage

```tsx
import { InboxBulkActions } from '@/components/fetaui/inbox-bulk-actions'

export function Example({ messages }) {
  return <InboxBulkActions messages={messages} onArchive={archive} onDelete={remove} />
}
```

## API

| Prop | Type | Default |
|---|---|---|
| messages | InboxMessage[] | required |
| title | string | Inbox |
| defaultSelected | string[] | [] |
| onArchive, onMarkRead, onDelete | (ids) => void |  |
| animated | boolean | true |

## When to use

- For a list people triage in batches.

## When not to use

- For records with columns: use Data Table.

## Accessibility

- Every checkbox names its sender.
- The bulk bar is a labelled toolbar.
- Select all goes indeterminate for a partial selection.

## Motion

- The header crossfades into the bulk bar with a 4 px slide over 200 ms.
- The panel fades in and rises 8 px over 400 ms, once.
- Rows fade in over 240 ms with a 40 ms stagger.
- Numbers and bars tween over 240 ms by writing text and transforms, so React does not render per frame.
- With reduced motion, the panel appears in place and values swap at once.
