
kind="default" (aka "primary"), though may be kind="muted". Do not mix kinds.The four most likely scenarios for an empty state are Zero State, No Results, New Feature, and Not Enabled. This is not an exhaustive list, but a good starting point for most use cases.
The Empty State should guide the user on how to achieve a non-empty state. You might provide a useful tip, such as a shortcut or explanation of what needs to occur if no direct action can be taken.

When an action results in no data or information to display, recommend alternate steps to take. For example, suggest an alternative filter if a table search yields no results, or guide the user on creating a new entry with the desired properties.

An opportunity to introduce something new or not yet take advantage of. If it includes a plan change, clearly inform the user. Use this space to entice the user to explore and utilize the new feature.

Appropriate for indicating that something is currently unavailable to them. Provide guidance on how they can gain access or why the feature is not enabled.

A few rules to keep in nothing-to-see-here when choosing a size variant.
400 and 300 sizes
200 size
<dt-empty-state header-text="Nothing to see here" body-text="Looks like there is no data to display here." > <template #body> <dt-stack direction="row" gap="50"> <dt-button importance="clear">Action</dt-button> <dt-button>Action</dt-button> </dt-stack> </template> <template #illustration> <dt-illustration-nothing-to-see-here></dt-illustration-nothing-to-see-here> </template> </dt-empty-state>
<dt-empty-state header-text="Nothing to see here" body-text="Looks like there is no data to display here." > <template #body> <dt-stack direction="row" gap="50"> <dt-button importance="clear">Action</dt-button> <dt-button>Action</dt-button> </dt-stack> </template> <template #icon="{ iconSize }"> <dt-icon-box :size="iconSize"></dt-icon-box> </template> </dt-empty-state>
<dt-empty-state :size="300" header-text="Nothing to see here" body-text="Looks like there is no data to display here." > <template #body> <dt-stack direction="row" gap="50"> <dt-button importance="clear">Action</dt-button> <dt-button>Action</dt-button> </dt-stack> </template> <template #illustration> <dt-illustration-nothing-to-see-here></dt-illustration-nothing-to-see-here> </template> </dt-empty-state>
<dt-empty-state :size="300" header-text="Nothing to see here" body-text="Looks like there is no data to display here." > <template #body> <dt-stack direction="row" gap="50"> <dt-button importance="clear">Action</dt-button> <dt-button>Action</dt-button> </dt-stack> </template> <template #icon="{ iconSize }"> <dt-icon-box :size="iconSize"></dt-icon-box> </template> </dt-empty-state>
<dt-empty-state :size="200" header-text="Nothing to see here" body-text="Looks like there is no data to display here." > <template #body> <dt-stack direction="row" gap="50"> <dt-button importance="clear">Action</dt-button> <dt-button>Action</dt-button> </dt-stack> </template> <template #icon="{ iconSize }"> <dt-icon-box :size="iconSize"></dt-icon-box> </template> </dt-empty-state>
<dt-empty-state header-text="Nothing to see here" body-text="Looks like there is no data to display here." > <template #illustration> <dt-illustration-nothing-to-see-here></dt-illustration-nothing-to-see-here> </template> </dt-empty-state>
<dt-empty-state header-text="Nothing to see here" > <template #illustration> <dt-illustration-nothing-to-see-here></dt-illustration-nothing-to-see-here> </template> </dt-empty-state>
<dt-empty-state header-text="Nothing to see here" body-text="Looks like there is no data to display here." > <template #body> <dt-stack direction="row" gap="50"> <dt-button importance="clear">Action</dt-button> <dt-button>Action</dt-button> </dt-stack> </template> <template #illustration> <dt-illustration-nothing-to-see-here></dt-illustration-nothing-to-see-here> </template> </dt-empty-state>
<dt-empty-state :size="200" header-text="Nothing to see here" body-text="Looks like there is no data to display here." > <template #body> <dt-stack direction="row" gap="50"> <dt-button kind="muted" :size="200" importance="clear">Action</dt-button> <dt-button kind="muted" importance="outlined" :size="200">Action</dt-button> </dt-stack> </template> <template #icon="{ iconSize }"> <dt-icon-box :size="iconSize"></dt-icon-box> </template> </dt-empty-state>
<a class="d-link">...</a>) may be appropriate given its use case, though first consider if it should be an action button.Encourage and guide the user through product engagement.
Title: No Ai recaps yet
Description: Enable Ai for calls and meetings and check back here!
Action: [Show me how]
Consider the user's intent and provide guidance to resolve in a useful result.
Title: No matching results
Description: Try adjusting your search criteria or filters.
Call out interesting new features or services, and entice the user to explore them.
Title: Discover Ai recaps
Description: Enable Ai for calls and meetings to view and share a recap.
Action: [Tell me more]
Be direct in communicating the unavailability of a feature or service, and provide quick actions.
Title: Restricted access
Description: Permission required. You can request access from the owner.
Action: [Cancel] [Request access]
import { DtEmpty_state } from '@dialpad/dialtone-vue';At a minimum, empty state requires a body of content. It can optionally contain a header with buttons, or a footer with buttons/text.
Class
|
Applies to
|
Description
|
|---|
Empty State documentation last updated Friday, September 4, 2026
fix/popover-modal-zindex-scope