Inbox
A polling conversation list: newest activity first, last-message previews, relative timestamps, STOP badges for opted-out contacts, and infinite scroll.
Installation
npx shadcn@latest add @handset/inboxUsage
import { Inbox } from "@/components/handset/inbox";
<Inbox
selectedId={selectedId}
onSelect={(conversation) => setSelectedId(conversation.id)}
/>Pair it with Thread for a full surface, or use it alone as a "recent texts" panel. The list refreshes every 5 seconds and pauses while the tab is hidden.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| selectedId | string | null | — | Highlights the active conversation. |
| onSelect | (c: Conversation) => void | — | Called when a row is clicked. |
| formatNumber | (e164: string) => string | US formatter | Display formatting for the customer number. |
| tenantId | string | — | Scope to one tenant (usually handled server-side). |
| pollMs | number | 5000 | Refresh interval. 0 disables polling. |
| limit | number | 50 | Page size for pagination. |
| className | string | — | Merged onto the scroll container. |