Docs

Shift Tabs

A shift highlighting tabs

requires interactionhover

Installation

Run the following command

It will create a new file called shift-tabs.tsx inside the components/animata/container directory.

mkdir -p components/animata/container && touch components/animata/container/shift-tabs.tsx

Paste the code

Open the newly created file and paste the following code:

import { useState } from "react";
 
import { cn } from "@/lib/utils";
 
interface ButtonProps {
  item: string;
  index?: number;
  activeIndex: number;
  onTabClick: () => void;
}
 
const Button = ({ item, index, activeIndex, onTabClick }: ButtonProps) => {
  return (
    <div
      className={cn("rounded-lg bg-black", {
        "border-b-2 border-b-indigo-500": index === activeIndex,
      })}
      onClick={onTabClick}
    >
      <div
        className={cn(
          "flex h-10 cursor-pointer items-center justify-center rounded-md border-2 bg-white p-3 transition-all",
          {
            "border-2 border-indigo-500 text-indigo-600": index === activeIndex,
            "origin-top-right ease-in hover:rotate-6": index !== activeIndex,
          },
        )}
      >
        <p className="p-2 text-center font-mono">{item}</p>
      </div>
    </div>
  );
};
 
export default function ShiftTabs({ items }: { items: string[] }) {
  const [activeTab, setActiveTab] = useState(0);
  return (
    <div className="flex w-full flex-wrap items-center justify-center gap-4">
      {items.map((item, index) => (
        <Button
          onTabClick={() => {
            setActiveTab(index);
          }}
          item={item}
          activeIndex={activeTab}
          index={index}
          key={`shift_tab_${index}`}
        />
      ))}
    </div>
  );
}

Credits

Built by Bibek Bhattarai