Components

EmptyState

Heading, description and actions for when a screen cannot show its usual content

Overview

EmptyState tells people what happened and what to do next when a screen cannot show its usual content.

  • One block for four cases — nothing added yet, nothing in the chosen range, failed to load, page not found
  • Title → Description → Actions — say what happened, then why or how to fix it, then offer at most one primary button
  • Two sizes — medium sits inside a page below its title; large is the whole page, such as a 404

Nothing added yet

Nothing logged yet today

Add what you plan to do, or log something you’ve completed.

Failed to load

Add role="alert" so screen readers read it out when it appears.

Page not found

Page not found

The page you’re looking for doesn’t exist or has moved.

Props

PropTypeDefaultRequiredDescription
size'medium' | 'large''medium'Nomedium sits inside a page below its title (top space 96). large fills a whole page, such as 404 or a crash
align'center' | 'start''center'Nostart lines the block up with page content, such as a docs page
childrenReactNode-YesEmptyState.Title, EmptyState.Description and EmptyState.Actions

EmptyState.Title

PropTypeDefaultRequiredDescription
childrenReactNode-YesTitle text
as'h1' | 'h2' | 'h3' | 'p''h2'NoHeading level. Use h1 when the block is the whole page

EmptyState.Description

PropTypeDefaultRequiredDescription
childrenReactNode-YesDescription text

EmptyState.Actions

PropTypeDefaultRequiredDescription
childrenReactNode-YesButtons or links

Specification

base

상태요소속성값
enabledrootgap$size.space.200
enabledtitlecolor$color.text.default.default
enableddescriptioncolor$color.text.default.secondary
enableddescriptiontypography$text.bodyBase
enabledactionsgap$size.space.400
enabledactionsmarginTop$size.space.200

size=medium

상태요소속성값
enabledrootpaddingTop$size.space.2400
enabledtitletypography$text.bodyStrong

size=large

상태요소속성값
enabledtitletypography$text.subtitle

align=center

상태요소속성값
enabledroottextAligncenter토큰 아님 — alignment is not tokenized

align=start

상태요소속성값
enabledroottextAlignstart토큰 아님 — alignment is not tokenized

Guidelines

  • Keep the page title and navigation on screen. Replace only the content area.
  • Inside a page, use a secondary button so it does not compete with the page's primary button.
  • When nothing is found in a chosen range, a one-line description is enough: "No logs this week". The controls to change the range are already on the page.
  • Never show internal error messages. Map them to a short, human sentence.
  • While data loads, use Skeleton instead.