Support Inbox
A three-pane helpdesk inbox: an icon rail, a searchable and status-filterable ticket list, and a conversation pane that loads the selected ticket's message thread. The composer genuinely appends a new reply bubble to the thread on ⌘/Ctrl+Enter or a Send click.
Docs
Installation
A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its button, badge, avatar, avatar-initials dependencies and any missing npm packages, and installs them straight into your project.
npx shadcn add https://staaarter.com/r/support-inbox.jsonPrefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/dashboard/dashboard10.tsx instead.
Usage
The file also exports dashboard10Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.
import { Dashboard10, dashboard10Demo } from "@/components/blocks/dashboard/dashboard10"; export default function Page() { return <Dashboard10 {...dashboard10Demo} />; }
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| tickets | Ticket[] | none | Full ticket list, each carrying its own message thread. Used to seed local component state, so edits made in the demo (replies, filtering) don't mutate the array passed in. |
| className | string | none | Extra classes for the outer section element. |
Types
type TicketStatus = "Open" | "Pending" | "Closed"; type Message = { id: string; sender: string; body: string; timestamp: string; fromCustomer: boolean; }; type Ticket = { id: string; subject: string; requester: string; status: TicketStatus; unread?: boolean; messages: Message[]; };
Behavior notes
- The search input and the All/Open/Pending/Closed filter buttons genuinely filter the visible ticket list in local state; both conditions combine with AND.
- Clicking a ticket row genuinely swaps which thread renders in the conversation pane via real `useState`, it's not a route change.
- The composer really works: typing a reply and pressing ⌘/Ctrl+Enter, or clicking Send, appends a new right-aligned bubble from "You" to that ticket's thread in local state. There is no backend, the message is lost on refresh, and the timestamp is always the literal string "Just now" rather than a real clock read.
- Below the `lg` breakpoint the icon rail hides entirely and the ticket list stacks above the conversation pane in one column, both stay visible rather than one becoming a full-screen view of the other.
- Tickets are seeded into local state once from the `tickets` prop; replying or filtering does not write back to the prop the parent passed in.
More Dashboard Blocks
View all →admin-shell
Admin Shell
Full admin dashboard frame with a collapsible icon sidebar, command-palette trigger, KPI row, and recent-orders table.
customers-table
Customers Table
Sortable, searchable customers table with row selection, pagination, and a per-row action menu.
commerce-analytics
Commerce Analytics
E-commerce analytics dashboard with a four-up KPI row, net-profit area chart, repeat-rate gauge, weekday bar chart, and a best-sellers table.
project-workspace
Project Workspace
Project-management dashboard with a highlighted stats row, weekly hours chart, meeting reminder, team list, progress gauge, and a focus tracker.
booking-workspace
Booking Workspace
Split hotel booking dashboard with tabbed overview, active booking cards, room timelines, and a month calendar with a day agenda.
talent-sourcing
Talent Sourcing
Recruiting project dashboard with a five-up stat strip, stage-filtered candidate pipeline, live search, and per-card wishlist/invite toggles.