Skip to content
Redpanda UI
Esc
↑↓navigate↵open⌘Jpreview
Made by shadcn
Edit on GitHub

Empty

An empty state for a page, table or panel with no content yet, with an icon, a title, a short explanation and the action that fills it.

Powered by

Installation

bash
npx shadcn@latest add @redpanda/empty
bash
pnpm dlx shadcn@latest add @redpanda/empty
bash
yarn dlx shadcn@latest add @redpanda/empty
bash
bunx shadcn@latest add @redpanda/empty
bash
nubx shadcn@latest add @redpanda/empty
bash
aube dlx shadcn@latest add @redpanda/empty

When to use

Use this decision tree to determine when to use the Empty component:

Usage

tsx
import {  Empty,  EmptyContent,  EmptyDescription,  EmptyHeader,  EmptyMedia,  EmptyTitle,} from '@/components/redpanda-ui/empty';
tsx
<Empty>  <EmptyHeader>    <EmptyMedia variant="icon">      <Icon />    </EmptyMedia>    <EmptyTitle>No data</EmptyTitle>    <EmptyDescription>No data found</EmptyDescription>  </EmptyHeader>  <EmptyContent>    <Button>Add data</Button>  </EmptyContent></Empty>

Anatomy

The Empty component is structured as a centered layout designed to communicate the absence of content. Here’s how the components work together:

tsx
<Empty>           {/* Container with centered flex layout */}  <EmptyHeader>   {/* Groups media, title, and description */}    <EmptyMedia>  {/* Optional visual (icon, avatar, image) */}    <EmptyTitle>  {/* Primary message */}    <EmptyDescription> {/* Supporting details */}  </EmptyHeader>  <EmptyContent>  {/* Optional actions (buttons, links, inputs) */}</Empty>

Layout Structure

  • Empty: Root container that centers content vertically and horizontally
  • EmptyHeader: Stacks media, title, and description in a column with consistent spacing
  • EmptyMedia: Displays visual elements (icons with variant="icon", or custom content like avatars)
  • EmptyTitle: Primary heading styled for prominence
  • EmptyDescription: Secondary text providing context or instructions
  • EmptyContent: Action area for buttons, forms, or links

Typical Usage Pattern

tsx
// Minimal empty state<Empty>  <EmptyHeader>    <EmptyTitle>No results found</EmptyTitle>    <EmptyDescription>Try adjusting your search.</EmptyDescription>  </EmptyHeader></Empty>
// Full empty state with icon and action<Empty>  <EmptyHeader>    <EmptyMedia variant="icon">      <SearchIcon />    </EmptyMedia>    <EmptyTitle>No projects yet</EmptyTitle>    <EmptyDescription>Get started by creating your first project.</EmptyDescription>  </EmptyHeader>  <EmptyContent>    <Button>Create Project</Button>  </EmptyContent></Empty>

Examples

Outline

Use <Empty variant="outline"> for a dashed outline. The component owns the border treatment.

Background

Use <Empty variant="muted"> for a theme-aware gradient from the recessed surface to the background.

Avatar

Use the EmptyMedia component to display an avatar in the empty state.

Avatar Group

Use the EmptyMedia component to display an avatar group in the empty state.

InputGroup

You can add an InputGroup component to the EmptyContent component.

No results

Secondary action

API Reference

Empty

The main component of the empty state. Wraps the EmptyHeader and EmptyContent components.

Prop Type Default
variant "default" | "outline" | "muted" "default"
className string

default has no border or background paint. outline adds the dashed border; muted adds the gradient without a border. These root variants are separate from EmptyMedia’s default and icon variants.

Use className for layout, such as a container height or maximum width. Choose the surface with variant rather than overriding its border or background. Native div attributes and refs are forwarded.

tsx
<Empty variant="outline">  <EmptyHeader />  <EmptyContent /></Empty>

EmptyHeader

The EmptyHeader component wraps the empty media, title, and description.

Prop Type Default
className string
tsx
<EmptyHeader>  <EmptyMedia />  <EmptyTitle />  <EmptyDescription /></EmptyHeader>

EmptyMedia

Use the EmptyMedia component to display the media of the empty state such as an icon or an image. You can also use it to display other components such as an avatar.

Prop Type Default
variant "default" | "icon" default
className string
tsx
<EmptyMedia variant="icon">  <Icon /></EmptyMedia>
tsx
<EmptyMedia>  <Avatar>    <AvatarImage src="..." />    <AvatarFallback>CN</AvatarFallback>  </Avatar></EmptyMedia>

EmptyTitle

Use the EmptyTitle component to display the title of the empty state.

Prop Type Default
className string
tsx
<EmptyTitle>No data</EmptyTitle>

EmptyDescription

Use the EmptyDescription component to display the description of the empty state.

Prop Type Default
className string
tsx
<EmptyDescription>You do not have any notifications.</EmptyDescription>

EmptyContent

Use the EmptyContent component to display the content of the empty state such as a button, input or a link.

Prop Type Default
className string
tsx
<EmptyContent>  <Button>Add Project</Button></EmptyContent>

Props

Credits

  • We take our inspiration from Shadcn UI for the empty component and style.

Recent changes

  • patchv1.2.0Pin shipped dependency floors to the version we develop against. Registry items now declare ranges like `^5.1.9` (the actual installed version) instead of collapsing to `^5.0.0`, so consumers start on the known-tested baseline while caret semantics still allow any compatible release within the same major.#133
  • minorv1.1.0Theme docs refresh, readability pass on semantic foregrounds, and consumer-facing Base UI regression fixes.#121
  • minorv1.0.0Post-Base-UI polish. Public API unchanged.#116
  • majorv1.0.0Migrate every Radix-based primitive to `@base-ui/react@^1.4.0` (Base UI).#114
  • minorv0.3.0Add theme-provider component to the registry with documentation and tests. Includes playground type improvements (export RegistryItem, remove as-const boilerplate) and docs site dark mode border color fix.#109
See full history →

Last updated on

Was this page helpful?