Hey guys, it's your boy Lucky Jain and today, I thought, why not build my own component library using Tailwind CSS? Every time I start a new project, I have to search for components, copy-paste them, then customize them... It's such a time waste! So I decided to build my own reusable component library.
Let's dive into how I built it, the challenges I faced, and some cool reusable components I created along the way!
Why Tailwind CSS?
Honestly, Tailwind is too good when it comes to styling. It's a utility-first CSS framework where you get pre-defined classes that can be directly added to HTML elements. No more unnecessary CSS files and confusion!
Some reasons why I chose Tailwind:
- Reusability and flexibility
- No need to write custom CSS again and again
- Easy to maintain and scale
- Looks super clean with dark mode support
Now, without wasting any time, let's get started with the setup.
Setting Up the Component Library
First, I created a simple React + Vite project:
npm create vite@latest my-ui-library --template react
cd my-ui-library
npm install
Installing Tailwind CSS
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
Then, I configured Tailwind in tailwind.config.js
:
export default {
content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
theme: {
extend: {},
},
plugins: [],
};
And imported Tailwind in src/index.css
:
@tailwind base;
@tailwind components;
@tailwind utilities;
Building the Components
Now comes the real fun - creating reusable UI components!
1. Button Component
First, let's build a simple but powerful button component:
const Button = ({ text, onClick, variant = "primary" }) => {
const baseStyles = "px-4 py-2 font-semibold rounded-md focus:outline-none";
const variants = {
primary: "bg-blue-500 text-white hover:bg-blue-600",
secondary: "bg-gray-500 text-white hover:bg-gray-600",
danger: "bg-red-500 text-white hover:bg-red-600",
};
return (
<button className={`${baseStyles} ${variants[variant]}`} onClick={onClick}>
{text}
</button>
);
};
export default Button;
Usage:
<Button text="Click Me" onClick={() => alert("Button Clicked!")} variant="primary" />
2. Card Component
A simple card to wrap content and make it look good:
const Card = ({ title, description }) => {
return (
<div className="bg-white shadow-md rounded-lg p-4 border border-gray-200">
<h2 className="text-lg font-bold">{title}</h2>
<p className="text-gray-600">{description}</p>
</div>
);
};
export default Card;
Usage:
<Card title="Tailwind is Awesome!" description="This is a reusable card component." />
Making It a Package
If you want to publish this as an npm
package, just set the main
entry in package.json
and configure the build
command. Then, you can publish it using npm publish
and share your library with others!
{
"name": "my-tailwind-ui",
"version": "1.0.0",
"main": "dist/index.js",
"scripts": {
"build": "tsc"
}
}
To publish:
npm login
npm publish
Then anyone can install it using:
npm install my-tailwind-ui
Conclusion
Building a component library with Tailwind CSS was super fun! Initially, I thought it would be difficult, but once you understand the structure, it's actually quite easy. Plus, now I have my own reusable UI kit that I can use in every new project.
If you're thinking about building your own component library, just go for it! Write code, experiment, and build your own Tailwind UI kit!
If you liked this post, share your thoughts in the comments!
Author Of article : Lucky Jain Read full article