exclusive-button

ui

src

cn.ts

ts
// npm i clsx tailwind-merge

import { clsx, type ClassValue } from "clsx";
import { twMerge } from "tailwind-merge";

export function cn(...inputs: ClassValue[]) {
    return twMerge(clsx(inputs));
}

page.tsx

tsx
"use client"

import { useState } from "react";
import { cn } from "@/lib/tailwind";

export default function Page() {

    const titles = [ "react", "zustand", "next", "motion", "gsap" ];

    const [ selected, setSelected ] = useState(0);

    return (
        <ul className="flex gap-x-5 justify-center text-white">
            {
                titles.map((title, i) => (
                    <li key={ i }>
                        <button className={ cn("px-8 py-3 bg-cyan-500 cursor-pointer",
                            selected === i && "bg-rose-500") }
                                onClick={ () => setSelected(i) }>
                            { title }
                        </button>
                    </li>
                ))
            }
        </ul>
    )

}

video