Skeleton
A hand-drawn placeholder whose hachure shading sweeps while content loads.
Text lines
Shapes
Card placeholder
Installation
Add Skeleton with the shadcn CLI.
npx shadcn@latest add https://sketchcn.chuwii.com/r/skeleton.jsonExamples
Loading states for profiles, lists, and a slower drawing hand.
Profile loading
import { Skeleton } from "@/components/ui/skeleton";
export function ProfileLoading() {
return (
<div className="flex items-center gap-3">
<Skeleton className="size-10 rounded-full" />
<div className="flex flex-col gap-2">
<Skeleton className="h-4 w-32" />
<Skeleton className="h-3 w-20" />
</div>
</div>
);
}List loading
import { Skeleton } from "@/components/ui/skeleton";
export function NoteListLoading() {
return (
<ul className="flex w-full flex-col gap-3">
{[0, 1, 2].map((row) => (
<li key={row} className="flex flex-col gap-2">
<Skeleton className="h-4 w-1/2" />
<Skeleton className="h-3 w-full" />
</li>
))}
</ul>
);
}Wider hatching
import { Skeleton } from "@/components/ui/skeleton";
export function CalmSkeleton() {
return <Skeleton className="h-24 w-full [--sketch-bg-hachure-gap:8]" />;
}Upright hatching
import { Skeleton } from "@/components/ui/skeleton";
export function UprightSkeleton() {
return (
<Skeleton className="h-24 w-full [--sketch-bg-hachure-angle:90]" />
);
}