AhaSlides Design
v0.52.0React · Vue · Lit

Patterns · AhaSlides surfaces

Loader

The full-surface branded loading screen shown while a new environment boots — workspace → editor, or editor → presenting.

Examples

Label
The full-surface loading screen · shown while a new environment boots (workspace → editor, editor → presenting)
Five branded tiles cycle with a staggered soft-flow — each fades + slides + unblurs in, holds, then out
<aha-loader> fills its container on a white ground — make the container full-screen for a real environment transition. The five tiles are the shared <aha-illustration> spot art (the loader-* family), called by name — never an inline SVG. It is decorative brand motion, not a progress bar: pass a present-tense label (announced via role="status"), never a percentage. The loop stills under prefers-reduced-motion. For an inline indeterminate wait inside an existing surface, reach for Spin → instead.

API

PropTypeDefaultNotes
labelstringLoadingAccessible name announced by the role=status live region (e.g. "Opening the editor…")

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-loader';   // registers <aha-loader>

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

When to use

When to use
  • Loader — a full-screen environment transition — the user lands in a new surface (workspace → editor, editor → presenting) and waits for it to boot
  • Spin — an inline, indeterminate wait inside an existing surface — a button, a panel, a section loading in place
  • Skeleton — the layout of the content being loaded is known — show its shape rather than a spinner
One Loader per transition, filling the whole surface. It is decorative brand motion, not a progress bar — don't pair it with a percentage. Keep the `label` a short present-tense phrase naming the destination ("Opening the editor…").
Surfaces
editor dashboard audience settings

Spec

Ground white full-surface (--aha-white); fills its container, min-height 240px · Tiles five 120×120 rounded tiles (radius-xl 16), each centred, one prominent at a time · Art reused <aha-illustration> spot art at 96px — loader-award · loader-wand · loader-plane · loader-ballot · loader-chart · Motion soft-flow keyframe · 7.5s loop · 1.5s stagger across the five · easing --aha-ease-in-out · Reduced motion prefers-reduced-motion stills the loop and holds one branded tile · Duration override the loop length via the CSS custom property --aha-loader-duration (default 7.5s)