Surface
RequiredMuted responsive container.
divLayout & content
A calm, explanatory collection state with an optional next-step action.
EmptyStateEmptyStatePropsConfigure the production component, inspect it at responsive widths, copy synchronized JSX, and share the exact state from one workspace.
No projects yet
Create one to get started.
This JSX stays synchronized with the controls and uses only public package APIs.
import { Button, EmptyState } from '@ai-created/ui';
export function Example() {
return (
<EmptyState
title={"No projects yet"}
description={"Create one to get started."}
>
<Button size="sm">Create project</Button>
</EmptyState>
);
}
import { EmptyState, Button } from '@ai-created/ui';Replace the version placeholder with the release tag your product has reviewed.
npm install --install-links "git+https://github.com/TheMarco/ai-created-ui.git#vX.Y.Z"@import '@ai-created/ui/styles/tokens.css';
@tailwind base;
@tailwind components;
@tailwind utilities;module.exports = {
presets: [require('@ai-created/ui/tailwind-preset')],
content: [
'./src/**/*.{js,ts,jsx,tsx,mdx}',
'./node_modules/@ai-created/ui/src/**/*.{js,ts,jsx,tsx}',
],
};Named regions define what belongs to the component, what remains optional, and where semantic responsibility lives.
Muted responsive container.
divOptional decorative context cue.
Explains the empty condition.
Optional reason or next-step guidance.
Optional children, usually one Button.
The Figma-equivalent asset model, auto-layout, resizing, properties, slots, content bounds, localization, and governance contract.
Asset kind
component
Design library name
Components/Content/Empty state
Maturity
stable
Last reviewed
2026-08-29
Canvas applicability
Publish icon, title, description, and action properties with nested action support.
| Property | Type | Default | Code mapping | Options or notes |
|---|---|---|---|---|
| Icon | instance-swap | None | icon | No additional constraint |
| TitleRequired | text | No projects yet | title | No additional constraint |
| Description | text | None | description | No additional constraint |
| Action | slot | None | children | No additional constraint |
Muted responsive container.
Internal SurfaceDecorative 48px context icon.
iconUsually one Button.
childrenOverflow: Wrap to two lines; then revise.
The state should remain quickly identifiable.
Overflow: Move longer onboarding guidance outside the component.
The empty state is an orientation point, not a help article.
Overflow: Remove lower-priority actions.
A single next step reduces decision cost.
Translatable: Title, Description, Action labels
Fill the empty collection region.
md: padding increases from 32px to 48px
Accountable owner
Design systems content pattern owner
Canonical source: src/components/EmptyState.tsx
These measurements and semantic tokens define the supported visual contract. Local overrides should preserve the same hierarchy and interaction cues.
Padding
32px mobile / 48px md+
Icon
48 × 48px
Icon bottom margin
16px
Title/description gap
8px
Action top margin
24px
Copy width with icon
max-width 448px
--color-surface2Muted Surface fill.
--color-borderContainer border.
--color-text2Title.
--color-text3Icon and description.
A component is not complete until its passive, interactive, disabled, and exceptional states remain understandable in both themes.
Semantics, accessible naming, keyboard behavior, focus and announcements are implementation requirements, not optional documentation.
Use the public package API and preserve the controlled-state, native-attribute, and ref contracts described below.
import { EmptyState, Button } from '@ai-created/ui';Server Component compatible
<EmptyState title="No projects yet" description="Create one to get started."><Button>Create project</Button></EmptyState>These props and helpers are compatibility contracts. Changes require migration guidance and release notes.
| Prop | Type | Default | Contract |
|---|---|---|---|
| icon | LucideIcon | undefined | Optional decorative icon. |
| title | string | required | Short empty-state heading. |
| description | string | undefined | Supporting explanation. |
| children | ReactNode | undefined | Optional action content. |
| className | string | undefined | Additional classes. |
These rules keep the component recognizable across products without preventing deliberate composition.
The component should be verified as rendered UI, an interaction model, an accessibility surface, and a theme-aware visual artifact.