Empty
Empty state with media, title, description, and action slots.
pnpm dlx @glinui/cli@latest add emptyYou have answered every conversation. New messages will show up here.
Installation
pnpm dlx @glinui/cli@latest add emptyPrefer the package?
Usage
Variants
Every vocabulary variant on the default tone. Omit variant to follow the ambient design style.
No items yet.
No items yet.
No items yet.
No items yet.
No items yet.
No items yet.
No items yet.
import { Empty, EmptyDescription, EmptyHeader, EmptyTitle } from "@glinui/ui"
export function EmptyVariantsDemo() { return ( <div className="grid gap-4 md:grid-cols-2"> <Empty variant="glinr"><EmptyHeader><EmptyTitle>glinr</EmptyTitle><EmptyDescription>No items yet.</EmptyDescription></EmptyHeader></Empty> <Empty variant="solid"><EmptyHeader><EmptyTitle>solid</EmptyTitle><EmptyDescription>No items yet.</EmptyDescription></EmptyHeader></Empty> <Empty variant="plain"><EmptyHeader><EmptyTitle>plain</EmptyTitle><EmptyDescription>No items yet.</EmptyDescription></EmptyHeader></Empty> <Empty variant="soft"><EmptyHeader><EmptyTitle>soft</EmptyTitle><EmptyDescription>No items yet.</EmptyDescription></EmptyHeader></Empty> <Empty variant="outline"><EmptyHeader><EmptyTitle>outline</EmptyTitle><EmptyDescription>No items yet.</EmptyDescription></EmptyHeader></Empty> <Empty variant="ghost"><EmptyHeader><EmptyTitle>ghost</EmptyTitle><EmptyDescription>No items yet.</EmptyDescription></EmptyHeader></Empty> <Empty variant="gradient"><EmptyHeader><EmptyTitle>gradient</EmptyTitle><EmptyDescription>No items yet.</EmptyDescription></EmptyHeader></Empty> </div> )}No results
A dashed empty state that offers a way back.
Check the spelling, remove a filter, or search by project name instead.
import { MagnifyingGlass, Plus, X } from "@phosphor-icons/react"import { Button, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle} from "@glinui/ui"
export function Demo() { return ( <Empty variant="dashed" className="w-full max-w-lg"> <EmptyHeader> <EmptyMedia variant="icon"><MagnifyingGlass aria-hidden /></EmptyMedia> <EmptyTitle>No results for "quarterly report"</EmptyTitle> <EmptyDescription>Check the spelling, remove a filter, or search by project name instead.</EmptyDescription> </EmptyHeader> <EmptyContent> <div className="flex flex-wrap justify-center gap-2"> <Button variant="outline" size="sm"> <X aria-hidden className="size-4" /> Clear filters </Button> <Button size="sm"> <Plus aria-hidden className="size-4" /> New document </Button> </div> </EmptyContent> </Empty> )}In a layout
An empty state inside a card, below its header actions.
Exports
Download reports as CSV or PDF.
Exports you create stay available for 30 days.
import { FileArchive } from "@phosphor-icons/react"import { Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle} from "@glinui/ui"
export function Demo() { return ( <Card className="w-full max-w-2xl"> <CardHeader> <div className="flex items-center justify-between gap-3"> <CardTitle>Exports</CardTitle> <Button size="sm" variant="outline">Schedule export</Button> </div> <CardDescription>Download reports as CSV or PDF.</CardDescription> </CardHeader> <CardContent> <Empty variant="plain"> <EmptyHeader> <EmptyMedia variant="icon"><FileArchive aria-hidden /></EmptyMedia> <EmptyTitle>No exports yet</EmptyTitle> <EmptyDescription>Exports you create stay available for 30 days.</EmptyDescription> </EmptyHeader> <EmptyContent> <Button size="sm">Create first export</Button> </EmptyContent> </Empty> </CardContent> </Card> )}Accessibility
- Plain content container; headings and links inside keep their native semantics.
- Decorative icons should be `aria-hidden`.
- Use an actual heading element via `EmptyTitle` content when the empty state needs to appear in the document outline.
Keyboard Interactions
| Key | Action |
|---|---|
| Tab | Moves through actions placed in EmptyContent. |
Reduced Motion
Static component with no motion.
API Reference
Empty
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
variant | "default" | "icon" | No | ambient (glinr) | Surface variant. Omit to follow the ambient design style (glinr by default, plain for minimal, glass for glass). |
tone | "neutral" | "accent" | "success" | "warning" | "danger" | "info" | - | neutral | Colour tone for the vocabulary variants. |
EmptyMedia
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
variant | "default" | "icon" | No | default | `icon` wraps the child icon in a tonal tile. |
EmptyHeader / EmptyTitle / EmptyDescription / EmptyContent
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
className | string | - | - | Merged onto each slot. |
variant | "default" | "icon" | No | "default" | Variant option from emptyMediaVariants. |
Source
Import directly from the package or browse the source on GitHub. Click any file to view it.
Import
import { Empty } from "@glinui/ui"Source Files
Dependencies
@glinui/uiclass-variance-authorityGenerated API Snapshot
Beta
Generated API Snapshot
BetaAuto-extracted from TypeScript source in packages/ui/src/components/empty.tsx. This section is in beta and may lag behind hand-curated docs. Regenerate with pnpm --filter @glinui/docs api:generate.
Generated: 2026-10-08T01:41:21.546Z · Full index: /docs/api-metadata
Primary Props Type
EmptyProps
EmptyMediaProps
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
variant | "default" | "icon" | No | "default" | Variant option from emptyMediaVariants. |
EmptyProps
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
tone | SurfaceTone | No | - | - |
variant | SurfaceVariant | "dashed" | "default" | "raised" | "frosted" | No | - | Visual variant. Omit for the ambient design style (glinr: lift shell; plain: shadcn dashed block). Vocabulary: glinr, solid, plain, soft, outline, ghost, gradient, glass. `dashed` is kept as an alias look. |