Empty state

What an empty container says, decided by why it is empty: nothing yet, no matches, or all clear.

Refined portVue source: WildEmptyState.vueStorybook story: Feedback/Empty StateReact component: WEmptyStateRefined

Try it

Change the reason, and the picture, words and action change with it. Remove a filter, or clear them all.

No sites match these filters

42 sites are hidden. Remove a filter to widen the list.
Reason
Size
Description
Actions
<WildEmptyState
  reason="no-matches"
  title="No sites match these filters"
  description="42 sites are hidden. Remove a filter to widen the list."
  :filters="activeFilters"
  @remove-filter="removeFilter"
  primary-label="Add a site"
  @primary="create"
  secondary-label="Clear filters"
  @secondary="recover"
/>
Only nothing-yet gets a filled button, because creating the first record is its way out. The other two step down to grey.

Three reasons

Pick the reason by why the list is empty. Each has its own picture, words and weight of action.

No sites yet

Add your first logger and its readings appear here within a few minutes.
nothing yet

No sites match these filters

42 sites are hidden. Remove a filter to widen the list.
no matches

No alarms this week

Every site reported inside its thresholds.Checked 2 minutes ago
all clear
The picture is a ghost of what belongs there: skeleton cards, a list under a lens, or a tick when empty is good news.

Sizes

A whole page, the body of a card, or a row in a table.

Connect your first logger

Plug in a WildEye logger, press its button, and it appears here with its first reading.
Use page size when the whole screen has nothing yet. It has a larger picture, title and buttons.
AlarmsThis week

No alarms this week

Every site reported inside its thresholds.Checked 2 minutes ago
Panel size fills a card’s body. The card keeps its header, so people still know what would be here.
Loggers0 of 42
NameLast readingBattery

No loggers match “bore 14”

Check the spelling, or search by serial number.
Inline size sits where the rows would be, so the table keeps its header and shape.

Content

Three parts, each with one job.

PartIts jobExample
TitleSay what is empty, in the reader’s words.No sites match these filters
DescriptionSay why, or what to do next. Never repeat the title.42 sites are hidden. Remove a filter to widen the list.
ActionOne verb and a noun. The way out, not a tour.Clear filters

Not an error

A list that loaded and came back empty is an empty state. A list that failed to load is an alert.

Couldn’t load sitesThe readings service did not respond. Try again, or check the status page.
the load failed — alert

No sites yet

Add your first logger to start seeing readings.
the load worked and returned nothing — empty state
Empty says there’s nothing here. An error says the product couldn’t tell you.

Filters

On no-matches, show the filters that emptied the list as filter chips. Each × removes one, and its circle fills on hover.

  • Name how many results the filters hide, so people know removing one is worth it.
  • Offer Clear filters as the secondary action.

Props

PropTypeDefaultDescription
reason'nothing-yet' | 'no-matches' | 'all-clear''nothing-yet'Why it’s empty. Sets the picture and the action’s weight.
size'page' | 'panel' | 'inline''panel'A whole screen, a card body, or a table row.
titlestring—What is empty. Required.
descriptionstring—Why, or what to do next.
primary-labelstring—The way out. Filled only on nothing-yet.
secondary-labelstring—A second, quieter action.
filters{ id, label }[]—no-matches: the filters that emptied the list.
checked-textstring—all-clear: a live line such as “Checked 2 minutes ago”.

Tokens

TokenValueWhere it lands
--color-grey-1300#0A090BTitle.
--color-grey-1000#4F4D55Description.
--color-grey-400 / 500#ECECED / #E6E6E6Skeleton bars in the picture.
--shadow-group0 2px 12px -1px …The ghost cards.
--color-primary#00AEEFThe “+” tile on nothing-yet.
TONE.ok#E1FAEA · #C1F4D4 · #019939Rings and tick on all-clear.
--radius-field10pxGhost cards and the “+” tile.