The problem
A region with nothing in it is one of three genuinely different situations, and a reader cannot tell them apart unless the interface says which:- Nothing here yet. The reader hasn’t created anything. The right next step is to create the first one.
- Nothing matched. Data exists; a filter, search, or query excluded all of it. The right next step is to widen or clear the narrowing.
- Something went wrong. A load or an action failed, and the region is empty because the attempt to fill it didn’t succeed. This is not this pattern’s job — see Error handling.
Deciding which case applies
When this applies
- A region that normally holds content currently has none, and the load that would have produced content completed successfully.
- The reader benefits from knowing why the region is empty and, where one exists, what to do about it.
- The region is large enough that a bare line of text would read as a rendering failure rather than a message — see EmptyState’s own guidance.
When it doesn’t
Structure
Behavior
Constraints
Content
Never fall back to the component’s default message (“No Records found!”) for either case
— it names neither cause and satisfies none of the rules above. Always pass an explicit title.
Accessibility
- The title is real text, not baked into the illustration — an illustration carrying the message is invisible to a screen reader. See EmptyState’s own accessibility section.
- An empty state that appears in response to an action — clearing a filter, running a search — is announced. Nothing about the component announces itself; the region that swapped its content owns that announcement.
- The illustration carries no information the text doesn’t already state; it is decorative.