Skip to main content
Urbicon UI

EmptyState

Centered placeholder block for 'no data yet' and 'no results' states. Pairs an icon with a heading, supporting text, and an optional CTA.

Playground

No items yet

Get started by adding the first item.

Density
<EmptyState
  description="Get started by adding the first item."
  title="No items yet"
>
  {#snippet cta()}
    <Button intent="primary">
      <PlusIcon />
      Add item
    </Button>
  {/snippet}
</EmptyState>

01 Examples

With icon and CTA

No apartments yet

Get started by adding the first apartment.

<EmptyState
  icon={BuildingIcon}
  title="No apartments yet"
  description="Get started by adding the first apartment."
>
  {#snippet cta()}
    <Button intent="primary"><PlusIcon />Add apartment</Button>
  {/snippet}
</EmptyState>

Compact — for inline empty rows

Use density='compact' inside table bodies and small cards where the full-page layout is too tall.

No matches

Try adjusting your filter.

<EmptyState
  density="compact"
  icon={FunnelIcon}
  title="No matches"
  description="Try adjusting your filter."
/>

Embedded inside a Card

The compact density shines when nested inside a container — Cards, table bodies, sidebar panels, search-result lists. The default density would dominate the parent; compact stays proportional.

Recent activity

Nothing here yet

New events will show up as they happen.

<Card variant="outlined" padding="md">
  <h3 class="text-text-primary mb-3 text-sm font-semibold">Recent activity</h3>
  <EmptyState
    density="compact"
    icon={SearchIcon}
    title="Nothing here yet"
    description="New events will show up as they happen."
  />
</Card>

02 Customization

Pair with any icon from @urbicon-ui/blocks. The container picks up the semantic bg-primary-subtle / text-primary tokens, so the look adapts automatically to your theme override.

Use the cta snippet for the primary action; render arbitrary markup via children for richer empty states (e.g. tutorials, illustrations).

03 Accessibility

The icon is decorative

The decorative icon is hidden from screen readers via its built-in aria-hidden.

The title is an h3

The title renders as <h3> so it slots into existing page heading hierarchy without competing with the page <h1>.

04 API Reference

11 props
11 props 1 required
Prop
Type
Default
Description

05 Types

Local type definitions used by this component.

4 types
Name
Kind
Category
Used by
Description

06 Installation

Import

import { EmptyState, BuildingIcon } from '@urbicon-ui/blocks';