Skip to content

Empty state

In review
Live · web

Variants: each owns an empty content region, centered on both axes

Sessions

No sessions yet

Spin up your first Cloud Agent session and it’ll show up here.

Tasks · search

No results

Type above to filter, then try a different search or clear the filter.

nockerl-design · docs

Start a conversation

Send a message to kick off this session. Your thread appears here.

Files

Couldn’t load files

The file tree failed to load. Check your connection and try again.

Compact: a small inline empty for a short list (denser rhythm, no region chrome)

No unread notifications

You’re all caught up.

Created 0, retried 0, filter untouched · the island is live.

// Web: React, consuming @dizyx/nockerl-tokens. (Web is the laggard platform. Spec + live demo,
// not yet exported from @dizyx/nockerl-react; promotion is tracked.)
import { NockerlButton } from '@dizyx/nockerl-react';
import { Inbox, Plus, RotateCcw } from 'lucide-react';
// First-run onboarding: the brand mark + a primary call-to-action.
<EmptyState
icon={<Plus />}
tone="brand"
title="No sessions yet"
description="Spin up your first Cloud Agent session and it'll show up here."
actions={<NockerlButton text="Create session" variant="primary" onClick={createSession} />}
/>;
// No search results: a hint + a recover action (title switches on the query).
<EmptyState
icon={<Inbox />}
title={query ? 'No matches' : 'No results'}
description="Try a different search or clear the filter."
actions={<NockerlButton text="Clear filter" variant="secondary" onClick={clearFilter} />}
/>;
// Failed to load: the warm error tone + a Retry.
<EmptyState
icon={<RotateCcw />}
tone="error"
title="Couldn't load files"
description="Check your connection and try again."
actions={<NockerlButton text="Retry" variant="tertiary" onClick={reload} />}
/>;
PropTypeDefaultDescription
title *stringThe headline. Bound to the title.large type role.
iconReactNodeA stroke glyph rendered in a recessed icon well above the title (muted by default).
descriptionstringSupporting line under the title (body.medium role). Keep it to one or two short sentences.
tone'neutral' | 'brand' | 'error''neutral'Icon-well treatment: neutral muted, brand cyan (first-run), error warm status (failed-to-load). Never color alone, always paired with icon + text.
actionsReactNodeOptional call-to-action(s), typically one primary Button plus an optional ghost. Centered under the description.
compactbooleanfalseDenser rhythm + smaller well for a short inline list rather than a full region.