Scroll Reveal
ScrollEntrance on scroll that plays once and stays, staggers its children, scrubs with the scroll position when asked, honours reduced motion, and keeps working after every ClientRouter navigation.
Lists dated releases in a hairline list. Each entry reveals as it is reached, and the newest version catches a shine. Every entry carries its date, so readers can check how often you ship.
Live, from the library itself, at full size: scroll, hover, navigate away and back. The demo is never gated.
Variants · each row writes the attribute the prop writes; the section's own CSS answers
JavaScript of its own
0 B
Uses Reveal and the shared runtime (1.9 kB raw, once per site). With those included: 3.0 kB raw.
CSS 10.4 kB raw including the base tokens. Measured from a production build, and again in CI for every change that can move it.
Browser support
Chrome 120 · Firefox 49 · Safari 14; needs bg-clip-text.
The demo above is never gated; the source is. With a key in components.json (see account), the registry serves it like any other item:
npx shadcn@latest add @moonarc-pro/changelog-section---
import ChangelogSection from '@/components/moonarc/pro/ChangelogSection.astro';
---
<ChangelogSection headline="What shipped" releases={[
{ date: '2026-03-02', version: '1.4.0', items: ['Dark mode for every chart', 'CSV export', 'Search that ignores accents'] },
{ date: '2026-02-09', version: '1.3.0', items: ['Team workspaces'] },
]} />Without a key the registry answers 401 with an upgrade message. Everything this section composes is free: reveal, shiny-text.
| Prop | Type | Default | Description |
|---|---|---|---|
releases | { date, version, items, href? }[] | none | Newest first. |
headline | string | none | Section heading. |
tone | 'surface' | 'muted' | 'ink' | 'brand' | unset (paints nothing) | The ground: the page surface, a muted band, an always-dark ink panel, or a deep brand panel. Each paints --background, --ma-tone-muted (over --muted, with a --border hairline), --ma-tone-ink or --ma-tone-brand (over --primary) with the matching text. With theme.css, a painted tone also re-declares --card, --border, --input and --ring inside the section, so cards and fields follow the ground. Decoration is strongest on brand. |
density | 'compact' | 'cozy' | 'roomy' | 'cozy' | Block padding and the release rows ×0.8 / ×1 / ×1.25 through --ma-density. |
align | 'start' | 'center' | 'start' | Heading alignment. |
linkLabel | string | 'Release notes' | Text of a release's link, shown when the release has an href; screen readers hear the version after it. |
The section reads the theme contract (shadcn's variable names with the base tokens as fallback), so a pasted theme or one --ma-brand recolours it. Its class names are the override surface and stay stable; a named slot replaces the matching prop with your own markup.
.ma-changelog.ma-changelog__aside.ma-changelog__copy.ma-changelog__eyebrow.ma-changelog__head.ma-changelog__headline.ma-changelog__items.ma-changelog__link.ma-changelog__list.ma-changelog__release.ma-changelog__when
slot="eyebrow"slot="headline"slot="copy"slot="aside"
Entries fade in; no shine.
ClientRouterInherits Reveal; nothing to rebind.
Replaces: Changelog sections (Tailwind Plus). See the migration table.
Entrance on scroll that plays once and stays, staggers its children, scrubs with the scroll position when asked, honours reduced motion, and keeps working after every ClientRouter navigation.
The site wears its logo kit: the mark in the header and the footer, and the same drawing on the share cards, the favicons and the home screen icon.
Shows blog posts as cards, with the first post featured across two columns.
A vertical timeline: the line draws itself down the page in step with the scroll, each step revealing from the line's side as it is reached, markers numbered or dated.
Also: view transitions · how costs are measured · browser support · accessibility policy · five-minute setup · MCP for agents · this page as Markdown