docs / core / skeleton-group
SkeletonGroup
one light passing over the whole block. each Skeleton is measured against the group, so the shimmer crosses them in the order they sit in rather than restarting inside every one.
intensity · recedesrsc · client
provenance
shaped from sisu-pluslayer
core / primitivesintensity
recedes · safe anywhere, including dense surfacescomposition
any cluster of Skeletons that stands for one thing: a card, a row, a profilewrap the layout you already have. the group takes your flex or grid classesnot around a whole page of unrelated blocks. the sweep then means nothinga single Skeleton needs no group. it already shimmers on its owna11y
the group adds no semantics of its own · the shimmer is decorative and stops under reduced motionjest-axedependencies
Skeleton from the same packagelive demo · try it out
customize
groupedone sweep across all of them
usage
import { Skeleton, SkeletonGroup } from "@usva-ui/react/primitives/skeleton";
<SkeletonGroup>
<Skeleton className="h-10 w-10 rounded-full" />
<Skeleton className="h-4 w-40" />
<Skeleton className="h-4 w-24" />
</SkeletonGroup>props
| prop | type | default | notes |
|---|---|---|---|
| children | ReactNode | — | any markup. every Skeleton beneath it joins the sweep, at any depth. |
| className | string | — | the group is a plain div, so it carries your layout: flex, grid, whatever the real content uses. |
get it
bun add @usva-ui/reactusage
import { Skeleton, SkeletonGroup } from "@usva-ui/react/primitives/skeleton";
<SkeletonGroup className="flex items-start gap-4">
<Skeleton className="size-12 rounded-full" />
<Skeleton className="h-4 w-2/3" />
</SkeletonGroup>