<Heading/>

heading.tsx

import { cn } from "@/utils/cn";

interface HeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {
  level?: 1 | 2 | 3 | 4 | 5 | 6;
}

export function Heading({
  level = 1,
  children,
  className,
  ...props
}: Readonly<HeadingProps>) {
  switch (level) {
    case 1: {
      return (
        <h1 className={cn("text-3xl font-semibold", className)} {...props}>
          {children}
        </h1>
      );
    }
    case 2: {
      return (
        <h2 className={cn("text-2xl font-semibold", className)} {...props}>
          {children}
        </h2>
      );
    }
    case 3: {
      return (
        <h3 className={cn("text-xl font-semibold", className)} {...props}>
          {children}
        </h3>
      );
    }
    case 4: {
      return (
        <h4 className={cn("text-lg font-semibold", className)} {...props}>
          {children}
        </h4>
      );
    }
    case 5: {
      return (
        <h5 className={cn("text-base font-semibold", className)} {...props}>
          {children}
        </h5>
      );
    }
    case 6: {
      return (
        <h6 className={cn("text-sm font-semibold", className)} {...props}>
          {children}
        </h6>
      );
    }
    default:
  }
}

Loved this post?

Comments

Interested in
working
with me?