Typography Component
a simple component for defining Typography following tailwind css best practices.
import { cn } from "@/utils/cn";
import { cva, type VariantProps } from "class-variance-authority";
import React from "react";
const typographyVariants = cva("text-xl", {
variants: {
variant: {
h1: "scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl",
h2: "scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0",
h3: "scroll-m-20 text-2xl font-semibold tracking-tight",
h4: "scroll-m-20 text-xl font-semibold tracking-tight",
p: "leading-7 [&:not(:first-child)]:mt-6",
},
affects: {
default: "",
lead: "text-xl text-muted-foreground",
large: "text-lg font-semibold",
small: "text-sm font-medium leading-none",
muted: "text-sm text-muted-foreground",
removePMargin: "[&:not(:first-child)]:mt-0",
},
},
defaultVariants: {
variant: "h1",
affects: "default",
},
});
export type TypographyProps = React.HTMLAttributes<HTMLHeadingElement> &
VariantProps<typeof typographyVariants>;
export default function Typography({
className,
variant,
affects,
...props
}: TypographyProps) {
const Comp = variant || "p";
return (
<Comp
className={cn(typographyVariants({ variant, affects, className }))}
{...props}
/>
);
}