MC Tabs

A component for organizing content into tabs.

Overview

The mc-tabs collection is a flexible tab navigation primitive for MicroClub UI. Built on the @base-ui/react tabs primitive, it delivers accessible focus behavior and clean MicroClub styling through Tailwind CSS.

Use mc-tabs when you need a polished tabbed interface with horizontal or vertical layout options.

Preview

Loading...
import { McTabs, McTabsList, McTabsTrigger } from '../ui/mc-tabs';export default function McTabsDemo() {  return (    <McTabs defaultValue="tab1">      <McTabsList>        <McTabsTrigger value="tab1">Tab 1</McTabsTrigger>        <McTabsTrigger value="tab2">Tab 2</McTabsTrigger>        <McTabsTrigger value="tab3">Tab 3</McTabsTrigger>      </McTabsList>    </McTabs>  );}

Add to Your Project

Deploy the mc-tabs components directly to your components/ui directory:

npx mcoli-ui@latest add mc-tabs
pnpm dlx mcoli-ui@latest add mc-tabs
yarn dlx mcoli-ui@latest add mc-tabs
bunx mcoli-ui@latest add mc-tabs

Manual Setup

If you prefer manual control:

Install the core dependencies
npm install @base-ui/react
pnpm add @base-ui/react
yarn add @base-ui/react
bun add @base-ui/react
Copy the source code
'use client';import { Tabs as TabsPrimitive } from '@base-ui/react/tabs';import { cva, type VariantProps } from 'class-variance-authority';import { cn } from '@/lib/utils';const McTabsListVariants = cva('flex bg-muted rounded-lg p-[3px] size-fit', {  variants: {    variant: {      horizontal: 'flex-row',      vertical: 'flex-col',    },  },  defaultVariants: {    variant: 'horizontal',  },});function McTabs({ ...props }: TabsPrimitive.Root.Props) {  return <TabsPrimitive.Root data-slot="tabs" {...props} />;}function McTabsList({  className,  variant,  ...props}: TabsPrimitive.List.Props & VariantProps<typeof McTabsListVariants>) {  return (    <TabsPrimitive.List      data-slot="tabs-list"      className={cn(McTabsListVariants({ variant }), className)}      {...props}    />  );}function McTabsTrigger({ className, ...props }: TabsPrimitive.Tab.Props) {  return (    <TabsPrimitive.Tab      data-slot="tabs-trigger"      className={cn(        'flex flex-col items-center justify-center min-h-7 min-w-19.5 px-2 py-1 rounded-md text-[14px] gap-2.5 paragraph-sm font-medium text-muted-foreground bg-transparent',        'data-active:bg-accent',        'data-active:ring-1 data-active:ring-inset data-active:ring-border',        'data-active:text-accent-foreground',        className      )}      {...props}    />  );}export { McTabs, McTabsList, McTabsTrigger };
Adjust import paths

Ensure your @/lib/utils or equivalent classname helper is correctly imported.

Usage

import { McTabs, McTabsList, McTabsTrigger } from '@/components/ui/mc-tabs';

export default function Example() {
  return (
    <McTabs defaultValue="tab1">
      <McTabsList>
        <McTabsTrigger value="tab1">Tab 1</McTabsTrigger>
        <McTabsTrigger value="tab2">Tab 2</McTabsTrigger>
        <McTabsTrigger value="tab3">Tab 3</McTabsTrigger>
      </McTabsList>
    </McTabs>
  );
}

Examples

Horizontal Tabs

<McTabs defaultValue="tab1">
  <McTabsList>
    <McTabsTrigger value="tab1">Tab 1</McTabsTrigger>
    <McTabsTrigger value="tab2">Tab 2</McTabsTrigger>
    <McTabsTrigger value="tab3">Tab 3</McTabsTrigger>
  </McTabsList>
</McTabs>

Vertical Tabs

<McTabs defaultValue="tab1">
  <McTabsList variant="vertical">
    <McTabsTrigger value="tab1">Tab 1</McTabsTrigger>
    <McTabsTrigger value="tab2">Tab 2</McTabsTrigger>
    <McTabsTrigger value="tab3">Tab 3</McTabsTrigger>
  </McTabsList>
</McTabs>

API Reference

Props

PropTypeDefaultDescription
variant"horizontal" | "vertical""horizontal"Layout for the tab list
defaultValuestringundefinedInitial tab value for uncontrolled mode
valuestringundefinedControlled selected tab value
onValueChange(value: string) => voidundefinedCallback when the active tab changes
classNamestringundefinedAdditional CSS classes

All other props from @base-ui/react/tabs are supported.

On this page