A minimalist React typography library for high-end digital interfaces.
For advanced use cases, you can pass a motionConfig object to define your own CSS keyframe animations, staggered delays, and splitting behavior (per word or character).
<Typography
variant="H2"
font="Bricolage Grotesque"
motionConfig={{
keyframes: `from { opacity: 0; transform: translateY(24px) skewX(6deg); }
to { opacity: 1; transform: none; }`,
duration: "0.8s",
easing: "cubic-bezier(0.16, 1, 0.3, 1)",
delay: "0s",
split: "words",
staggerDelay: 0.07,
}}
>
Your heading text
</Typography>variantTypographyVariant"Body"Semantic variant — sets tag, font size, weight, and line-height.
fontstring—Google Font name e.g. "Bricolage Grotesque". Auto-injects the <link> tag.
colorstring—Any CSS color value applied to the text element.
align"left" | "center" | "right" | "justify"—Text alignment.
asElementType—Override the rendered HTML tag while keeping variant styles.
truncatebooleanfalseSingle-line overflow with ellipsis.
maxLinesnumber—Multi-line line-clamp — clips to N lines with ellipsis.
animationHeroAnimation—Built-in entrance animation. Display and H1 only. 43+ presets.
motionConfigMotionConfig—Custom CSS keyframe animation with optional word/char splitting. Any variant.
motionRef(el: HTMLElement | null) => void—Direct DOM ref callback — fires after mount. Use with GSAP, Framer, or Web Animations API.
italicbooleanfalseWhen true, <em> inside Display / H1 renders in Instrument Serif italic.
accentColorstring"#c8b89a"Color for <em> italic accent text. Only applies when italic={true}.
classNamestring—Additional CSS class names.
styleCSSProperties—Inline styles merged with component defaults.
Wrap your app (or a section of it) with TypographyProvider to set defaults once. Any prop passed directly to <Typography> still wins — the provider is just the fallback.
import { TypographyProvider, Typography } from "inkvelle";
export default function App() {
return (
<TypographyProvider
theme={{
font: "Bricolage Grotesque",
accentColor: "#6366f1",
italic: true,
animation: "rise",
color: "#1a1a1a",
}}
>
{/* Inherits all theme values */}
<Typography variant="Display">
Build with <em>intention</em>
</Typography>
{/* Overrides just the animation */}
<Typography variant="H1" animation="clip">
Another hero heading
</Typography>
{/* italic=false wins over theme's italic=true */}
<Typography variant="Display" italic={false}>
No serif accent here
</Typography>
</TypographyProvider>
);
}