Misc / Empty
Empty
<Empty />StableA zero-state for any list, table, or search that returns nothing. Built by composing a TextBlock (its tonal icon + heading + body, as-is) with an EmptyActions row — one primary action, or a primary + outline secondary. The action is what unblocks the user, so keep it.
Explorer
Edit any prop in the inspector — preview and code update together. Hover any color for hex + token.
Icon
Icon tone
Text size
Actions
No recruits yet
Drop a Hudl export onto the dashboard, or add one manually.
<Empty><TextBlock variant="lg" align="center" iconPlacement="top" iconName="Inbox" iconTone="neutral"><TextBlockHeading>No recruits yet</TextBlockHeading><TextBlockBody>Drop a Hudl export onto the dashboard.</TextBlockBody></TextBlock><EmptyActions><Button>Add recruit</Button></EmptyActions></Empty>
Patterns
The icon, heading, and body are a TextBlock — same icon square and type ladder as Dialog, Alert, and the rest. Pair it with one action or two.
No recruits yet
Drop a Hudl export onto the dashboard, or add one manually to get started.
import { Empty, EmptyActions, TextBlock, TextBlockHeading, TextBlockBody, Button } from "@/components/upnext";{/* icon + heading + body come from TextBlock as-is; one primary action */}<Empty><TextBlock variant="lg" align="center" iconPlacement="top" iconName="Inbox" iconTone="neutral"><TextBlockHeading>No recruits yet</TextBlockHeading><TextBlockBody>Drop a Hudl export onto the dashboard, or add one manually.</TextBlockBody></TextBlock><EmptyActions><Button><FilePlus data-icon="inline-start" /> Add recruit</Button></EmptyActions></Empty>
Source
The wrapper is a thin re-export; the actual styling lives in the shadcn primitive.