crucıble

Editorial

A self-contained glossy-magazine theme preset — a single-column feature with a small-caps kicker and issue rule, a high-contrast serif display headline, an italic standfirst, a small-caps byline, a drop-cap opening, a hairline-barred pull-quote, and a pair of buttons, all breathing in generous whitespace with one disciplined ink accent. A keyboard-operable radiogroup of surface chips re-tokens the whole page live (warm Ivory, cool Slate, dim night-reading Ink); the only motion is a soft CSS color crossfade on switch, and reduced motion makes every swap instant and fully static.

csspro

Installation

CLI

npx shadcn@latest add @crucible/editorial

Props

PropTypeDefaultDescription
variantstringControlled active preset id (matches a preset's id).
defaultVariantstring"ivory" (first preset)Initial preset id when uncontrolled.
onVariantChange(id: string) => voidFires with the next preset id whenever the switcher changes.
presetsEditorialPreset[]the three built-in surfacesOverride the built-in reading surfaces (chips + palettes).
colorsPartial<EditorialPalette>Token overrides merged over the active preset — makes any palette reachable.
durationnumber0.55Seconds the palette crossfade takes when switching surfaces.
pausedbooleanfalseFreeze the palette crossfade — surfaces swap instantly.
kickerstring"The Essay"Small-caps kicker above the headline.
issuestring"Issue 04"Issue marker printed at the top rule.
headingstring"The Quiet Craft of Slow Mornings"Serif display headline.
standfirststringa short generic standfirstItalic standfirst under the headline.
bylinestring"Words by A. Marlowe"Small-caps byline.
readingTimestring"6 min read"Reading-time meta shown beside the byline.
bodystring[]two generic paragraphsBody paragraphs. The first receives the drop-cap; the pull-quote follows it.
pullQuotestringa generic aphorismLarge italic pull-quote set between the body paragraphs.
primaryLabelstring"Read the essay"Filled button label.
secondaryLabelstring"Save"Hairline-outline button label.
labelstring"Editorial theme preset"Accessible label for the panel region.
switcherLabelstring"Reading surface"Accessible label for the surface switcher group.
Also accepts all props of Omit<React.ComponentPropsWithoutRef<"article">, "onChange">they pass through to the underlying element.

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