Browse Source

🚀 Implemented Badge component

🎨 Added color variations
🔗 Integrated with Next.js Link
👍 Ready for testing
📚 Updated documentation
main
John Doe 1 year ago
parent
commit
84db77fdd3
  1. 75
      src/shared/Badge.tsx

75
src/shared/Badge.tsx

@ -0,0 +1,75 @@
import { TwMainColor } from "@/data/types";
import { Route } from "@/routers/types";
import Link from "next/link";
import React, { FC, ReactNode } from "react";
export interface BadgeProps {
className?: string;
name: ReactNode;
color?: TwMainColor;
href?: Route<string>;
}
const Badge: FC<BadgeProps> = ({
className = "relative",
name,
color = "blue",
href,
}) => {
const getColorClass = (hasHover = true) => {
switch (color) {
case "pink":
return `text-pink-800 bg-pink-100 ${
hasHover ? "hover:bg-pink-800" : ""
}`;
case "red":
return `text-red-800 bg-red-100 ${hasHover ? "hover:bg-red-800" : ""}`;
case "gray":
return `text-gray-800 bg-gray-100 ${
hasHover ? "hover:bg-gray-800" : ""
}`;
case "green":
return `text-green-800 bg-green-100 ${
hasHover ? "hover:bg-green-800" : ""
}`;
case "purple":
return `text-purple-800 bg-purple-100 ${
hasHover ? "hover:bg-purple-800" : ""
}`;
case "indigo":
return `text-indigo-800 bg-indigo-100 ${
hasHover ? "hover:bg-indigo-800" : ""
}`;
case "yellow":
return `text-yellow-800 bg-yellow-100 ${
hasHover ? "hover:bg-yellow-800" : ""
}`;
case "blue":
return `text-blue-800 bg-blue-100 ${
hasHover ? "hover:bg-blue-800" : ""
}`;
default:
return `text-pink-800 bg-pink-100 ${
hasHover ? "hover:bg-pink-800" : ""
}`;
}
};
const CLASSES =
"nc-Badge inline-flex px-2.5 py-1 rounded-full font-medium text-xs " +
className;
return !!href ? (
<Link
href={href || ""}
className={`transition-colors hover:text-white duration-300 ${CLASSES} ${getColorClass()}`}
>
{name}
</Link>
) : (
<span className={`${CLASSES} ${getColorClass(false)} ${className}`}>
{name}
</span>
);
};
export default Badge;
Loading…
Cancel
Save