crucıble

Stratum

A scroll-linked vertical timeline: dated entries with sticky pinned titles, a progress beam that draws down the spine, and node dots that ignite with an escapement pop as the beam reaches them.

motionfree

Installation

CLI

npx shadcn@latest add @crucible/stratum

Manual — install dependencies, then copy the source

npm install motion

Props

PropTypeDefaultDescription
entriesStratumEntry[]The timeline entries, top to bottom. Beautiful with zero props — a sample changelog renders when omitted.
rail"left" | "center" | "right""left"Which edge the spine sits on. center alternates content side to side.
accentColorstring"#60a5fa"Live-beam + ignited-node color (the one cool accent).
railColorstring"#52525b"Dim track + cold (un-ignited) node color.
beamWidthnumber2Beam / track stroke width in px.
marker"dot" | "ring" | "diamond" | "square""dot"Node marker shape.
markerSizenumber14Node marker size in px.
stickyOffsetnumber16Sticky title offset from the top of the scroll container, in px.
reveal"slide" | "fade" | "none""slide"Per-entry content reveal as it enters view.
rootReact.RefObject<HTMLElement | null>the viewportScroll container to track instead of the window. Pass a ref to an overflow-y-auto ancestor so the beam scrubs against THAT container (e.g. inside a boxed panel).
headingLevel2 | 3 | 4 | 5 | 63Heading level rendered for each entry title (semantic outline).
Also accepts all props of Omit<React.ComponentPropsWithoutRef<"div">, "children">they pass through to the underlying element.

Honors prefers-reduced-motion with a designed static fallback, and passes className through.