Skip to content
Components

Empty

BetaBeta — the props contract is close to final, but small breaking changes can still land.

Empty-state layout for blank lists, zero results, and new workspaces.

Composition

Anatomy

  • <Empty>
    • <EmptyHeader>
      • <EmptyMedia />
      • <EmptyTitle />
      • <EmptyDescription />
      </EmptyHeader>
    • <EmptyContent>
      • <Button />
      </EmptyContent>
    </Empty>

Installation

The Control UI source installs this primitive from src/registry/sources/control-ui/ui/empty.tsx.

Registry command
See registry manifest

Raw code

Primary installed source

src/registry/sources/control-ui/ui/empty.tsx

Knobs

Typed custom properties the recipe paints with. Set one on the root — style, a utility class, or a skin — and every slot inherits it.

--cui-empty-* · 21 knobsHow the cascade resolves
--cui-empty-radius<length-percentage>var(--radius-lg)
--cui-empty-background<color>transparent
--cui-empty-border-color<color>transparent
--cui-empty-border-width<length>var(--control-rim-width)
--cui-empty-border-style*solid
--cui-empty-media-radius<length-percentage>var(--radius-lg)
--cui-empty-media-background<color>var(--muted)
--cui-empty-shadow*none
--cui-empty-foreground<color>var(--foreground)
--cui-empty-description-foreground<color>var(--muted-foreground)
--cui-empty-media-foreground<color>var(--muted-foreground)
--cui-empty-padding<length-percentage>calc(var(--spacing) * 6)
--cui-empty-gap<length-percentage>calc(var(--spacing) * 6)
--cui-empty-header-gap<length-percentage>calc(var(--spacing) * 2)
--cui-empty-content-gap<length-percentage>calc(var(--spacing) * 2)
--cui-empty-content-size<length-percentage>24rem
--cui-empty-media-size<length-percentage>calc(var(--spacing) * 10)
--cui-empty-media-icon-size<length-percentage>calc(var(--spacing) * 5)
--cui-empty-font-size<length-percentage>var(--text-body)
--cui-empty-title-font-weight<number>var(--font-weight-medium)
--cui-empty-media-background-image*none