New project requests will show up here as they come in. Invite your team to start collaborating.
npx shadcn@latest add https://sdk-components.thesqd.com/r/empty.jsonimport { Empty } from "@/components/ui/empty";import { Button } from "@/components/ui/button";
import { Empty } from "@/components/ui/empty";
import { FoldersIcon } from "@/components/ui/folders";
export function Example() {
return (
<Empty
icon={FoldersIcon}
title="No projects yet"
description="Create your first project to start collecting assets and briefs."
action={<Button>New project</Button>}
/>
);
}Empty (single component — pass content as props)
├── variant="default | outline"
├── size="sm | lg" (sm = default, compact chip + tighter spacing; lg = full-page hero)
├── icon={LucideAnimatedIcon} (renders FeaturedIconAnimated above the title)
├── inky | inky="lost | celebrate | fine | …" (draws Inky instead of the icon; plain, or with that face)
├── illustration={OpenDoorsIcon} (draws a static scene, e.g. from squad-icons, instead of the icon)
├── illustrationSize={120} (illustration width; defaults 160 sm / 208 lg)
├── iconColor="brand | success | destructive | muted | …"
├── iconVariant="flat | gradient" (default "flat"; "gradient" = brand-tinted card chip)
├── iconSize="sm | md | lg | xl | 2xl" (default "xl"; "2xl" for hero states)
├── iconAutoPlay (play stroke-draw on mount + replay on hover)
├── title="" (renders as SectionHeader)
├── description=""
├── titleSize="xs | sm | md | lg | xl" (default "lg" — text-xl/2xl)
├── titleFont="sans | heading" (default "sans" Inter; "heading" = Albra display)
└── action={<>buttons</>} (action row beneath the description)
Need a custom layout (non-animated icon, multi-region body)? The slot
exports — EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription,
EmptyContent — are still exported as the escape hatch.New project requests will show up here as they come in. Invite your team to start collaborating.
You haven't created any projects yet. Get started by creating your first project.
Create your first project to start collecting assets and briefs.
Your request has been received
Title rendered in Inter — matches body copy weighting.
Title rendered in the Albra display face.
An unexpected error occurred, please try again later. Support has been notified
New project requests will show up here as they come in.
Nothing matches that search. Try a different word or clear the filters.
Final files are on their way to your church.
An unexpected error occurred, please try again later. Support has been notified
First-time guests show up here after they fill out a connect card.
Start a group and it'll appear here for people to join.
Events you add to the calendar will line up here.
| Prop | Type | Default | Description |
|---|---|---|---|
variant | "default" | "outline" | "default" | `outline` adds a dashed border and card background so the empty state reads as a self-contained panel. |
size | "sm" | "lg" | "sm" | `sm` (default) is the compact state — smaller icon chip (`lg`), tighter padding/gap, and a base-size title, for card/section empties. `lg` is the full-page hero. |
icon | AnimatedIconComponent | — | lucide-animated icon component (e.g. `CheckIcon`, `XIcon`, `FoldersIcon`). Rendered through FeaturedIconAnimated above the title. |
inky | InkyEmotion | true | InkyProps | — | Draw Inky instead of the icon chip: `true` for plain Inky (idles, reacts to hover), a face to pin — `lost` for no results, `celebrate` for success, `fine` for an error — or any of Inky's props (`{ costume, preset, shape, emotion, … }`) to dress him up. Wins over `icon`; 96px at `size="sm"`, 128px at `lg` unless the props set `size`. |
illustration | ComponentType<{ size?: number | string }> | — | Draw a static illustration instead of the icon chip — any component with a `size` (width) prop, e.g. a scene from the SVG Library (`OpenDoorsIcon` from `squad-icons`). 160px at `size="sm"`, 208px at `lg`. `inky` wins over it; it wins over `icon`. |
illustrationSize | number | string | 160 / 208 (per size) | Illustration width in px (or any CSS length). Height follows the artwork's aspect ratio. |
iconColor | FeaturedIconColor | — | Chip color — `brand`, `success`, `destructive`, etc. Mirrors the FeaturedIcon palette. |
iconVariant | "flat" | "gradient" | "flat" | Featured-icon chip style. `flat` (default) is a soft borderless tint; `gradient` is the brand-tinted bordered chip. |
iconSize | "sm" | "md" | "lg" | "xl" | "2xl" | "lg" / "xl" (per size) | Chip size. Defaults from `size` (`lg` for `sm`, `xl` for `lg`). Use `2xl` for hero states. |
iconAutoPlay | boolean | false | Play the lucide-animated stroke draw on mount and replay on hover. |
title | string | — | Heading rendered through SectionHeader. |
description | string | — | Subtext rendered through SectionHeader. |
titleSize | "xs" | "sm" | "md" | "lg" | "xl" | "lg" / "sm" (per size) | SectionHeader size. Defaults from `size` (`lg` default — text-xl/2xl; `sm` for the compact state). |
titleFont | "sans" | "heading" | "sans" | Title font family. `sans` (default) is Inter; `heading` switches to the Albra display face. |
action | ReactNode | — | Action row beneath the description — wrap multiple buttons in a fragment. |
className | string | — | Override or extend the resolved root classes. |