TailwindInstallation npm install -D tailwindcss npx tailwindcss init Tailwind config \*\* @type {import('tailwindcss').Config} \*/ module.exports = { content: [ "./src/**/*.{js,jsx,ts,tsx}", ], theme: { extend: {}, }, plugins: [], } @tailwind base; @tailwind components; @tailwind utilities; Install Tailwind Combo $ npm install --save clsx $ npm i tailwind-merge $ npm i class-variance-authority Create Cn Function import { clsx, ClassValue } from 'clsx'; import { twMerge } from 'tailwind-merge'; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } Create Reusable Button import { VariantProps, cva } from 'class-variance-authority'; import React, { ButtonHTMLAttributes, FC, forwardRef } from 'react'; import { cn } from '../lib/util'; // Customized navigation variations const buttonVariants = cva( "px-3 py-2 rounded-xl transition-all hove:ring-2 ring-indigo-300 hover:text-white", variant: { primary: 'bg-blue-400', danger: 'bg-red-500', alert: 'bg-yellow-500', }, size: { small: 'py-2 px-4', large: 'text-xl py-3 px-6', }, defaultVariants: { size: 'small', variant: 'primary', } ); export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> { ref?: React.Ref<HTMLButtonElement>; } const Button: FC<ButtonProps> = forwardRef( ({ size, variant, className, children, ...props }, ref) => { return ( <button ref={ref} type='button' className={cn(buttonVariants({ className, variant, size }))} {...props} > {children} </button> )}); export default Button;