Skeleton

Use to display a placeholder preview of your content before the data gets loaded to reduce cognitive load.

Examples

Shapes

Circle (circle)

Rectangle (rect - default)

Text (text)

blade
<div class="flex flex-wrap items-end gap-12">
    <div class="space-y-2">
        <p class="text-sm font-medium text-foreground/80 dark:text-background-200">Circle (circle)
        </p>
        <x-plume::skeleton shape="circle" class="size-12" />
    </div>
    <div class="space-y-2">
        <p class="text-sm font-medium text-foreground/80 dark:text-background-200">Rectangle (rect -
            default)</p>
        <x-plume::skeleton shape="rect" class="h-12 w-24" />
    </div>
    <div class="space-y-2">
        <p class="text-sm font-medium text-foreground/80 dark:text-background-200">Text (text)</p>
        <div class="w-[300px] space-y-2">
            <x-plume::skeleton shape="text" />
            <x-plume::skeleton shape="text" class="w-3/4" />
        </div>
    </div>
</div>

Animations

Pulse (default)

Wave (shimmer)

None

blade
<div class="flex flex-wrap items-end gap-12">
    <div class="space-y-2">
        <p class="text-sm font-medium text-foreground/80 dark:text-background-200">Pulse (default)
        </p>
        <x-plume::skeleton animation="pulse" class="h-12 w-24" />
    </div>
    <div class="space-y-2">
        <p class="text-sm font-medium text-foreground/80 dark:text-background-200">Wave (shimmer)
        </p>
        <x-plume::skeleton animation="wave" class="h-12 w-24" />
    </div>
    <div class="space-y-2">
        <p class="text-sm font-medium text-foreground/80 dark:text-background-200">None</p>
        <x-plume::skeleton animation="none" class="h-12 w-24" />
    </div>
</div>

With Content

With Icon

With Text

Loading
blade
<div class="flex flex-wrap items-end gap-12">
    <div class="space-y-2">
        <p class="text-sm font-medium text-foreground/80 dark:text-background-200">With Icon</p>
        <x-plume::skeleton class="size-12" shape="circle" animation="wave">
            <x-plume::icon i="icon-[fluent--image-24-regular]" class="size-6" />
        </x-plume::skeleton>
    </div>
    <div class="space-y-2">
        <p class="text-sm font-medium text-foreground/80 dark:text-background-200">With Text</p>
        <x-plume::skeleton class="h-12 w-32" animation="pulse">
            <span class="text-xs font-bold uppercase tracking-tighter">Loading</span>
        </x-plume::skeleton>
    </div>
</div>
Prop Type Default Description
shape string 'rect' The shape of the skeleton: 'rect', 'circle', 'text'.
animation string 'pulse' The animation style: 'pulse', 'wave', 'none'.

Usage

blade
<!-- Basic circle skeleton with wave animation -->
                <x-plume::skeleton shape="circle" animation="wave" class="size-12" />

                <!-- Text skeleton (width defaults to full) -->
                <x-plume::skeleton shape="text" class="w-3/4" />

                <!-- Skeleton with internal content -->
                <x-plume::skeleton class="size-12" shape="circle">
                <x-plume::icon i="icon-[fluent--image-24-regular]" class="size-6" />
                </x-plume::skeleton>