MiHCM
feedback/@mihcm/ui·v0.21.0·stable

Skeleton

Pulsing placeholder for loading states. Always prefer skeletons over spinners to preserve layout.

In context

Four real loading layouts — dashboard tiles, inbox list, profile pane, and a report table — all preserving the destination layout.

Dashboard tiles

Four KPI tiles with sparkline strip.

Inbox

Five threads loading. Layout reserved.

Profile pane

Avatar, identity, details list.

Report table

Header row + 6 data rows. Skeleton replaces real cells.

Text block placeholder

Vary widths to mimic natural text line lengths. This prevents the skeleton from looking like a solid rectangle.

import { Skeleton } from '@mihcm/ui/Skeleton';
 
<div className="space-y-2">
  <Skeleton className="h-4 w-3/4" />
  <Skeleton className="h-4 w-full" />
  <Skeleton className="h-4 w-5/6" />
</div>

Card loading state

Mirror the Card's actual layout with skeletons in the same positions as the final content.

import { Skeleton } from '@mihcm/ui/Skeleton';
import { Card, CardHeader, CardContent } from '@mihcm/ui/Card';
 
<Card>
  <CardHeader>
    <Skeleton className="h-5 w-40" />
    <Skeleton className="h-4 w-64" />
  </CardHeader>
  <CardContent>
    <Skeleton className="h-24 w-full" />
  </CardContent>
</Card>

Profile row placeholder

A circle + two lines pattern for user rows, comment threads, or team lists.

import { Skeleton } from '@mihcm/ui/Skeleton';
 
<div className="flex items-center gap-3">
  <Skeleton className="h-10 w-10 rounded-full" />
  <div className="space-y-1.5">
    <Skeleton className="h-4 w-32" />
    <Skeleton className="h-3 w-24" />
  </div>
</div>