crucıble

Mono

A self-contained Swiss-minimal theme preset — a stark black-and-white (or paper-and-ink) panel on a strict grid: tight neo-grotesque heading, numbered hairline spec rows, generous negative space, and exactly one restrained accent. A keyboard-operable radiogroup of accent swatches re-tokens the panel live and a role=switch flips light/dark; the palette is fully exposed via accents and colors. The only motion is an accent rule that draws across the top, pinned to its full frame under reduced motion.

motionfree

Installation

CLI

npx shadcn@latest add @crucible/mono

Manual — install dependencies, then copy the source

npm install motion

Props

PropTypeDefaultDescription
variantstringControlled active accent id (matches an accent's id).
defaultVariantstring"red" (first accent)Initial accent id when uncontrolled.
onVariantChange(id: string) => voidFires with the next accent id whenever the switcher changes.
accentsMonoAccent[]the three built-in accentsOverride the built-in accent set (chips + colors).
modeMonoModeControlled light/dark mode.
defaultModeMonoMode"dark"Initial mode when uncontrolled.
onModeChange(mode: MonoMode) => voidFires with the next mode whenever the light/dark switch flips.
colorsPartial<MonoPalette>Token overrides merged over the resolved palette — makes any palette reachable.
speednumber1Draw-rule animation speed multiplier.
pausedbooleanfalseFreeze the draw rule at its resting (full) frame.
eyebrowstring"SPECIMEN — 001"Small mono eyebrow above the heading.
headingstring"Form Follows"Tight neo-grotesque display heading.
descriptionstring"A strict grid, hairline rules, and one restrained accent."Body line under the heading.
specsMonoSpec[]four type-spec rowsNumbered spec rows (auto-indexed 01…N).
tagstring"GRID"Small square tag label.
primaryLabelstring"Continue"Filled (accent) button label.
secondaryLabelstring"Reset"Outline button label.
labelstring"Monochrome theme preset"Accessible label for the panel region.
switcherLabelstring"Accent color"Accessible label for the accent switcher group.
modeLabelstring"Toggle light mode"Accessible label for the light/dark switch.
Also accepts all props of Omit<React.ComponentPropsWithoutRef<"section">, "onChange">they pass through to the underlying element.

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