Vertical Bordered Tabs

PreviousNext

Vertical tabs with borders

Docs
shadcnui-blockscomponent

Preview

Loading preview…
components/customized/tabs/tabs-17.tsx
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/registry/ui/tabs";
import { cn } from "@/lib/utils";
import { Bot, Settings, User } from "lucide-react";
import React from "react";

const tabs = [
  {
    value: "profile",
    icon: User,
  },
  {
    value: "chat",
    icon: Bot,
  },
  {
    value: "settings",
    icon: Settings,
  },
];

const VerticalBorderedTabs = () => {
  return (
    <Tabs
      defaultValue={tabs[0].value}
      orientation="vertical"
      className="w-full flex flex-row items-start justify-center gap-2"
    >
      <TabsList className="grid grid-cols-1 h-auto w-fit p-0 divide-y border shrink-0">
        {tabs.map((item) => (
          <TabsTrigger
            key={item.value}
            value={item.value}
            className={cn(
              "rounded-none first:rounded-t-md last:rounded-b-md bg-background h-10 w-11 p-0",
              "data-[state=active]:bg-primary data-[state=active]:text-primary-foreground"
            )}
          >
            <item.icon className="h-5 w-5" />
          </TabsTrigger>
        ))}
      </TabsList>

      <div className="grow w-full max-w-48 aspect-square flex items-center justify-center border rounded-lg p-6">
        {tabs.map((item) => (
          <TabsContent key={item.value} value={item.value}>
            <div className="mx-auto h-12 w-12 flex items-center justify-center rounded-full bg-muted">
              <item.icon />
            </div>
            <p className="text-center text-lg mt-4 font-medium text-muted-foreground tracking-tight capitalize">
              {item.value}
            </p>
          </TabsContent>
        ))}
      </div>
    </Tabs>
  );
};

export default VerticalBorderedTabs;

Installation

npx shadcn@latest add @shadcnui-blocks/tabs-17

Usage

import { Tabs17 } from "@/components/tabs-17"
<Tabs17 />