Components
Skeleton
Loading placeholders matching HeroUI skeleton.css (surface-tertiary/70, rounded-sm, shimmer | pulse | none) and Storybook Default / Grid / SingleShimmer layouts.
Usage
Default story — 200px surface card, hero block + three `h-3` lines (`rounded-lg`).
SizedBox(
width: 200,
child: ClipRRect(
borderRadius: BorderRadius.circular(24),
child: RiseSurface(
variant: RiseSurfaceVariant.default_,
padding: EdgeInsets.all(16),
borderRadius: 24,
showShadow: true,
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
RiseSkeleton(height: 96, borderRadius: 12),
SizedBox(height: 20),
RiseSkeletonGroup(
spacing: 12,
children: [
RiseSkeleton(height: 12, borderRadius: 8, width: 100.8),
RiseSkeleton(height: 12, borderRadius: 8, width: 134.4),
RiseSkeleton(height: 12, borderRadius: 8, width: 67.2),
],
),
],
),
),
),
)Text content
Stacked lines with `space-y-3`-style spacing.
RiseSkeletonGroup(
spacing: 12,
children: [
RiseSkeleton(height: 12, borderRadius: 8),
RiseSkeleton(height: 12, borderRadius: 8),
RiseSkeleton(width: 180, height: 12, borderRadius: 8),
],
)User profile
Avatar circle + two text lines.
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
RiseSkeleton(width: 48, height: 48, borderRadius: 24),
SizedBox(width: 12),
Expanded(
child: RiseSkeletonGroup(
spacing: 8,
children: [
RiseSkeleton(height: 12, borderRadius: 8),
RiseSkeleton(width: 96, height: 12, borderRadius: 8),
],
),
),
],
)List items
Repeated row pattern (line + short pill).
RiseSkeletonGroup(
spacing: 16,
children: [
Row(
children: [
Expanded(child: RiseSkeleton(height: 12, borderRadius: 8)),
SizedBox(width: 10),
RiseSkeleton(width: 52, height: 12, borderRadius: 6),
],
),
// …repeat rows
],
)Animation types
Shimmer, pulse (`animate-pulse`), and none — `h-24` blocks.
Row(
children: [
Expanded(
child: RiseSkeleton(height: 96, borderRadius: 12, animationType: RiseSkeletonAnimation.shimmer),
),
SizedBox(width: 12),
Expanded(
child: RiseSkeleton(height: 96, borderRadius: 12, animationType: RiseSkeletonAnimation.pulse),
),
SizedBox(width: 12),
Expanded(
child: RiseSkeleton(height: 96, borderRadius: 12, animationType: RiseSkeletonAnimation.none),
),
],
)Grid
Storybook `Grid` — 450× row, three `h-24` `rounded-xl` cells, `gap-4`.
SizedBox(
width: 450,
child: Row(
children: [
Expanded(child: RiseSkeleton(height: 96, borderRadius: 12)),
SizedBox(width: 16),
Expanded(child: RiseSkeleton(height: 96, borderRadius: 12)),
SizedBox(width: 16),
Expanded(child: RiseSkeleton(height: 96, borderRadius: 12)),
],
),
)Synchronized shimmer
Storybook `SingleShimmer` geometry — [RiseSkeletonSyncShimmer] shares one sweep phase.
SizedBox(
width: 450,
child: ClipRRect(
borderRadius: BorderRadius.circular(12),
child: RiseSkeletonSyncShimmer(
child: Row(
children: [
Expanded(
child: RiseSkeleton(
height: 96,
borderRadius: 12,
animationType: RiseSkeletonAnimation.shimmer,
),
),
SizedBox(width: 16),
Expanded(
child: RiseSkeleton(
height: 96,
borderRadius: 12,
animationType: RiseSkeletonAnimation.shimmer,
),
),
SizedBox(width: 16),
Expanded(
child: RiseSkeleton(
height: 96,
borderRadius: 12,
animationType: RiseSkeletonAnimation.shimmer,
),
),
],
),
),
),
)