Empty

Zero-state scaffold. Compose Header, Media, Title, Description, and Content on a dashed-border surface — everything optional. No motion; the content does the emotional work.

Basic

No messages yet
When you start a conversation, it'll land here.

With action

No projects
Create a project to start tracking components and tokens.

Outline

Dashed border around the full surface — use on solid backgrounds where the empty state needs a boundary.

No messages yet
Outlined surface — use when the empty state sits on a solid background and needs a boundary.

Background

Muted tinted surface — quieter than the dashed outline, blends into card layouts.

No messages yet
Tinted surface — blends into card layouts without a dashed border.

Avatar

Swap the icon media for a single Avatar — good for onboarding flows where a real profile will land here.

UB
Invite your first teammate
Collaborators show up here after they accept the invite.

Avatar group

Stack multiple avatars as the media — the empty state is about a collection, not a single entity.

SA
KL
RM
No shared workspaces
Your teammates will appear here once a workspace is shared.

Input group

Compose an InputGroup inside Content to let users retry the query that landed them here.

No results
Refine your query to widen the net.
No matches for "horizon"
Try a shorter query or check your filters — we searched 48 primitives.

Pair the primary action with a quieter link below — the secondary path stays one tap away without competing for attention.

No projects yet
Create one from scratch, or import the components from an existing repo.

In a data table

Render Empty inside a single full-width row when a Table has no data — the table header stays visible so users can see what would have appeared.

Invoice Status Amount
No invoices yet
Once you raise an invoice, it'll appear here.

Empty.Root props

Root accepts native div attributes. Header, Title, Description, and Content accept native div attributes plus `class`.

PropTypeDescription
stringMerged onto the root via tailwind-merge.
HTMLDivElement | nullTwo-way-bindable element reference.

Empty.Media props

PropTypeDescription
'default' | 'icon'Icon variant renders a 40px muted square with a 24px icon inside. Default is an unstyled wrapper for custom artwork.
stringMerged via tailwind-merge.