AhaSlides Design
v0.52.0React · Vue · Lit

Components · Feedback

Skeleton

A greyed placeholder that holds a component's shape while its content loads.

Examples

Variant
Active
Rows
Loading placeholder · avatar + title + paragraph (the common list-item shape)

API

PropTypeDefaultNotes
varianttext | paragraph | title | avatar | button | input | imagetextPlaceholder shape
rowsnumber3Paragraph line count (last row is shorter); paragraph variant only
roundbooleanfalseSoften button/input/image corners to the pill
activebooleantrueAnimate the shimmer (set 'false' to freeze)

Install

# .npmrc — once: point the @ahaslides-product scope at GitHub Packages
@ahaslides-product:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}   # a GitHub token with read:packages

npm i @ahaslides-product/design
import '@ahaslides-product/design/tokens.css';   // once, at the app root
import '@ahaslides-product/design/aha-skeleton';   // registers <aha-skeleton>

Agent feed for this component (absolute, fetchable anywhere): skeleton.agent.json · skeleton.md · skeleton.llms.txt

When to use

When to use
  • Skeleton — content is loading and you want to hold its exact layout to avoid a jump
  • Spin — a short, indeterminate wait where the final shape is unknown
  • Progress — you can measure completion (a percentage)
Match the skeleton to the real content's shape and size so nothing shifts when it resolves. Use it for the first load of a region; don't stack many pulsing blocks for a sub-second wait — a Spin is calmer.
Surfaces
editor dashboard audience

Spec

Fill #F1F1F1 · radius xs (4) · Text height 16 · full width · Paragraph N rows (12 gap); last row 60% width · Title height 24 · 38% width · Avatar 40×40 · radius pill · Button / Input height 32 / 36 · radius default (8) · Image height 96 · centred gray-50 image glyph · radius default · Round corner-bearing variants soften to the pill · Motion opacity pulse 1.6s (respects reduced-motion); active=false stops it