Data Display

Empty

Display an empty state placeholder with an icon or avatar, title, description, and optional action buttons. Useful for empty lists, search results, and onboarding.

Playground

Experiment with different props in real-time.

No items

You have no items in your inbox.

Basic Usage

Provide an icon, title, and description for a simple empty state.

No items

You have no items in your inbox.

<script lang="ts">
  import { Empty } from 'sv5ui';
</script>

<Empty
  icon="lucide:inbox"
  title="No items"
  description="You have no items in your inbox."
/>

Variants

Choose between solid, outline, soft, and subtle styling.

Solid
Outline
Soft
Subtle
<Empty icon="lucide:inbox" title="Solid" variant="solid" />
<Empty icon="lucide:inbox" title="Outline" variant="outline" />
<Empty icon="lucide:inbox" title="Soft" variant="soft" />
<Empty icon="lucide:inbox" title="Subtle" variant="subtle" />

Sizes

5 sizes from extra small to extra large.

XS
SM
MD
LG
XL
<Empty icon="lucide:inbox" title="XS" size="xs" />
<Empty icon="lucide:inbox" title="SM" size="sm" />
<Empty icon="lucide:inbox" title="MD" size="md" />
<Empty icon="lucide:inbox" title="LG" size="lg" />
<Empty icon="lucide:inbox" title="XL" size="xl" />

Colors

8 color schemes available.

Primary
Secondary
Tertiary
Success
Warning
Error
Info
Surface
<Empty icon="lucide:inbox" title="Primary" color="primary" />
<Empty icon="lucide:inbox" title="Secondary" color="secondary" />
<Empty icon="lucide:inbox" title="Tertiary" color="tertiary" />
<Empty icon="lucide:inbox" title="Success" color="success" />
<Empty icon="lucide:inbox" title="Warning" color="warning" />
<Empty icon="lucide:inbox" title="Error" color="error" />
<Empty icon="lucide:inbox" title="Info" color="info" />
<Empty icon="lucide:inbox" title="Surface" color="surface" />

With Actions

Use the actions prop to add action buttons.

No results found

Try adjusting your search or filters.

<script lang="ts">
  import { Empty } from 'sv5ui';
</script>

<Empty
  icon="lucide:file-x"
  title="No results found"
  description="Try adjusting your search or filters."
  actions={[
    { label: 'Clear Filters', variant: 'outline', color: 'surface' },
    { label: 'New Search', variant: 'solid' }
  ]}
/>

With Avatar

Use the avatar prop instead of an icon for a personalized empty state.

U
No messages

Start a conversation to see messages here.

<script lang="ts">
  import { Empty } from 'sv5ui';
</script>

<Empty
  avatar={{ src: '/avatar.jpg', alt: 'User' }}
  title="No messages"
  description="Start a conversation to see messages here."
/>

UI Slots

Use the ui prop to override classes on specific internal elements of the Empty.

SlotDescription
rootRoot container — controls layout, background, border, padding
iconIcon element — controls icon size and color
avatarAvatar element — controls avatar styling when using avatar prop
titleTitle text — controls font size, weight, color
descriptionDescription text — controls font size and opacity
actionsActions container — controls layout and gap for action buttons

Snippets

Use Svelte 5 snippets to customize specific parts of the Empty.

SnippetTypeDescription
leadingSnippetCustom content replacing the icon/avatar area
titleSlotSnippetCustom title content — overrides title prop
descriptionSlotSnippetCustom description content — overrides description prop
actionsSlotSnippetCustom actions content — overrides actions prop
childrenSnippetDefault slot for fully custom content

Props

PropTypeDefault
askeyof HTMLElementTagNameMap'div'
iconstring-
avatarAvatarProps-
titlestring-
descriptionstring-
actionsButtonProps[]-
color'primary' | 'secondary' | 'tertiary' | 'success' | 'warning' | 'error' | 'info' | 'surface''surface'
variant'solid' | 'outline' | 'soft' | 'subtle''outline'
size'xs' | 'sm' | 'md' | 'lg' | 'xl''md'
classstring-
uiRecord<Slot, Class>-