Empty states
Four empty states in one illustration whose shapes morph between scenes as you switch tabs.
Preview
Empty states preview
Live · keyboard ready
No results for “Q3 roadmap”
Two filters are on: owner is Emma Collins and status is archived.
When to use
- A reference for no results, offline, inbox zero, and 404 moments with one shared illustration style.
- Extracting one scene as a richer empty state for a key screen.
When not to use
- Use empty-state for a simple empty state with an icon, text, and action.
- Use onboarding-illustration for first-run screens that teach the product.
- Use skeleton while content is still loading.
shadcn CLI
Also installs (2)
- manicat-foundation
- button
Manual install(+)
registry.jsonjson
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "empty-states",
"type": "registry:block",
"title": "Empty states",
"description": "Four empty states in one illustration whose shapes morph between scenes as you switch tabs.",
"categories": [
"blocks"
],
"dependencies": [
"motion"
],
"registryDependencies": [
"https://manicat.viraza.net/r/manicat-foundation.json",
"https://manicat.viraza.net/r/button.json"
],
"files": [
{
"path": "registry/blocks/empty-states/empty-states.tsx",
"type": "registry:component",
"target": "@components/manicat/blocks/empty-states/empty-states.tsx"
},
{
"path": "registry/blocks/empty-states/empty-states.module.css",
"type": "registry:component",
"target": "@components/manicat/blocks/empty-states/empty-states.module.css"
},
{
"path": "registry/blocks/empty-states/empty-states-art.ts",
"type": "registry:component",
"target": "@components/manicat/blocks/empty-states/empty-states-art.ts"
},
{
"path": "registry/components/button/button.tsx",
"type": "registry:component",
"target": "@components/manicat/button/button.tsx"
},
{
"path": "registry/components/button/button.module.css",
"type": "registry:component",
"target": "@components/manicat/button/button.module.css"
}
],
"docs": "Docs and live preview: https://uiarc.dev/components/blocks/empty-states",
"meta": {
"tier": "free",
"kind": "block",
"docs": "https://manicat.viraza.net/components/blocks/empty-states",
"markdown": "https://uiarc.dev/components/blocks/empty-states/markdown"
}
}Usage
Install the component, then copy this into your app. Change the content and the props to fit your screen.
example.tsxtsx
"use client";
import { EmptyStates } from "manicat/registry/blocks/empty-states/empty-states";
export function EmptyStatesExample() {
return <EmptyStates />;
}
Examples
Real screens rather than isolated props. Switch to Code to copy a whole example into your project.
Empty states Pick the illustration that fits: no results, no data, offline.
Empty states
Pick the illustration that fits: no results, no data, offline. preview
Live · keyboard ready
No results for “Q3 roadmap”
Two filters are on: owner is Emma Collins and status is archived.
empty-states-pick-the-illustration-that-fits-no-results-no-data-offline-.tsxtsx
"use client";
import { EmptyStates } from "manicat/registry/blocks/empty-states/empty-states";
export function EmptyStatesGalleryExample() {
return <EmptyStates />;
}
Keyboard interactions
| Keys | Action |
|---|---|
| Left / Right | Move between scene tabs (wraps around). |
| Home / End | Jump to the first or last scene. |
Accessibility
- Scenes use role="tablist", "tab" and "tabpanel" with aria-selected and aria-controls.
- The illustration is a role="img" labelled by the scene; a polite live region reports action results.
Motion
- Each shape morphs its path to the next scene with slight per-shape delays, and the tab indicator glides with a layoutId.
- Reduced motion swaps scenes with a short fade and no morph.
Responsive behavior
- The block is a container query root; from a 560px container the title steps up a size.
- Pointer parallax only turns on for hover-capable fine pointers, so touch devices get a still illustration.
Performance
- Shape morphs run on a small requestAnimationFrame loop that stops as soon as every shape settles.
- A ResizeObserver springs the copy height when scenes change.
Notes for AI
- Use as a reference for no results, offline, inbox zero or 404 moments; usually you extract one scene rather than ship the tabbed gallery.
- Actions (clear filters, retry, refresh, search) are simulated; wire them to your real handlers.
- For a single simple empty state, prefer the empty-state component.