---
## EmptyState
Centered placeholder block for "no data yet" / "no results"
states. Pairs an optional icon with a heading, supporting text, and an
optional call-to-action slot.
**Import:** `import { EmptyState } from '@urbicon-ui/blocks';`
### Examples
```svelte
{#snippet cta()}
{/snippet}
```
### Variants
- density: compact, default (default: default)
### Api
| Prop | Type | Required | Default | Description |
| --- | --- | :---: | --- | --- |
| title | `string` | yes | | Heading line. |
| ...HTMLAttributes | `HTMLAttributes` | no | | HTML attributes (excluding: 'children' | 'title') |
| children | `Snippet` | no | | Optional richer content rendered below the description. |
| class | `string` | no | | Extra classes merged onto the wrapper. In the same Tailwind bucket `class` wins over the `slotClasses` entry for the element it lands on. Presets and provider defaults sit below both. |
| cta | `Snippet` | no | | Action buttons rendered below the description. |
| density | `'compact' | 'default'` | no | 'default' | Visual density. `compact` is suitable for inline empty rows in tables or cards; `default` for full-page empty states. |
| description | `string` | no | | Supporting paragraph below the title. |
| icon | `Component` | no | | Icon component rendered above the title. Pass any icon from `@urbicon-ui/blocks` (or a compatible stroke icon). Its round container is filled `bg-surface-subtle text-text-tertiary` — an empty state is not the call to action, `cta` is. That fill reads as a faint wash on the page ground and as nothing at all inside an elevated container (Card, Popover), where `surface-subtle` and `surface-elevated` resolve to the same colour. For a fill that always reads, or for the accent back, pass `slotClasses={{ iconWrapper: 'bg-primary-subtle text-primary-text' }}`. |
| preset | `string` | no | | Apply a named preset registered via ``. Prefer this over `class` overrides when the same look should be reused across the project. |
| slotClasses | `Partial>` | no | | Per-slot class overrides. Slots: base | iconWrapper | title | description | children | cta. In the same Tailwind bucket `class` wins over the `slotClasses` entry for the element it lands on. Presets and provider defaults sit below both. |
| unstyled | `boolean` | no | | Remove all default tv classes. |
Inherited from:
- Omit, 'children' | 'title'> (omit-pattern)
### Types
```ts
type SlotNames = keyof ReturnType & string
```
### Slots (slotClasses keys)
`base`, `iconWrapper`, `title`, `description`, `children`, `cta`