crucıble

Billet

Content-shaped skeleton placeholder — matte graphite blocks crossed by a single cool-white light pass (heat-pass timing, not a conveyor). Card / text / circle / rect presets compose to prefigure any layout; @property-driven, zero dependencies, role=status + aria-busy, gentle opacity breathe under reduced motion.

cssfree

Installation

CLI

npx shadcn@latest add @crucible/billet

Props

PropTypeDefaultDescription
shape"card" | "text" | "circle" | "rect""card"Which content-shaped placeholder to forge. - card (default): an avatar + heading rows, a media rect, and a paragraph — a full content card blank. - text: a stack of text-line bars, the last one short. - circle: a single avatar disc. - rect: a single media/thumbnail block. Compose several to prefigure any layout.
linesnumber3Number of text-line bars for text (and the card paragraph).
lastLineWidthstring"62%"Width of the final, short line — any CSS length/percentage.
sizenumber48Diameter in px of the circle avatar disc.
speednumber1Sweep-cycle speed multiplier. 1 = default, 2 = twice as fast.
direction"left" | "right""right"Direction the light pass travels.
anglenumber12Tilt of the light band in degrees (0 = vertical bar).
radiusnumber8Corner radius in px for blocks and the card panel.
mode"sweep" | "pulse""sweep"sweep (default): a single cool-white light pass with matte graphite between passes. pulse: a gentle opacity breathe, no pass.
baseColorstring"#1c1e24"Matte base tone of the placeholder blocks. Any CSS color.
highlightColorstring"#e6ecf7"Peak tone of the light pass. Any CSS color.
pausedbooleanfalseFreeze the animation on a designed lit frame.
labelstring"Loading"Accessible label announced while content loads.
Also accepts all props of React.ComponentPropsWithoutRef<"div">they pass through to the underlying element.

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