EmptyState

Placeholder when a list or panel has no items — message, optional detail, and CTA.

Preview

Live

No applications yet.

Add a job listing to get started.

<div class="empty-state">
  <p>No applications yet.</p>
  <p class="empty-detail">Add a job listing to get started.</p>
  <div class="empty-state__action">
    <button type="button" class="btn btn-primary btn-compact">Add job</button>
  </div>
</div>

Variants

Message only

Minimal empty copy.

Nothing here yet.

With detail

Secondary line via .empty-detail.

No results.

Try clearing filters.

With action

CTA wrapped in .empty-state__action.

Inbox empty.

Accessibility

  • Use a real heading or paragraph for the primary message — not icon-only emptiness.
  • Action buttons need clear labels; icons stay aria-hidden.
  • When filtering yields zero results, say so explicitly so users know why the list is empty.

API

HTML classes

Class Description
.empty-state Empty container.
.empty-detail Secondary detail paragraph.
.empty-state__action CTA wrapper.

React props

From src/core/EmptyState.tsx — extends HTMLAttributes<HTMLDivElement>.

Prop Type Default Description
children ReactNode Primary message (string wraps in <p>).
detail ReactNode Secondary line (.empty-detail).
action ReactNode CTA slot (.empty-state__action).