Components
A composable empty-state block for when there's no data to show — no results, no events, an empty folder, cleared filters. Ships Empty plus EmptyHeader, EmptyMedia (with a stacked 'icon' variant), EmptyTitle, EmptyDescription and EmptyContent, so you can drop in an icon or illustration, a title, supporting copy and call-to-action buttons. Dependency-free (just cva + cn).
Loading preview...
import { FilterXIcon } from "lucide-react";
import {
Empty,
EmptyContent,
EmptyDescription,
EmptyHeader,
EmptyMedia,
EmptyTitle,
} from "@/components/ui/cnippet-empty";
const btnBase =
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lg text-sm font-medium h-8 px-3 transition-colors";
export default function EmptyFilters() {
return (
<div className="flex items-center justify-center p-4">
<Empty className="border">
<EmptyHeader>
<EmptyMedia variant="icon">
<FilterXIcon />
</EmptyMedia>
<EmptyTitle>No matching results</EmptyTitle>
<EmptyDescription>
Your current filters returned no results. Try adjusting or clearing
them.
</EmptyDescription>
</EmptyHeader>
<EmptyContent>
<div className="flex gap-2">
<button
className={`${btnBase} bg-primary text-primary-foreground hover:bg-primary/90`}
type="button"
>
Clear filters
</button>
<button
className={`${btnBase} border border-input bg-background hover:bg-accent hover:text-accent-foreground`}
type="button"
>
Edit filters
</button>
</div>
</EmptyContent>
</Empty>
</div>
);
}
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...