Components
Navigation
Tabs

Tabs

Use Tabs to build consistent, accessible interfaces aligned with the shared design system.

Installation

1. Copy the source code:

  • Source in this monorepo: packages/ui/src/components/tabs.tsx
  • Place in your project: components/ui/tabs.tsx
  • Required utility: lib/utils.ts (for cn helper)

2. Update the import paths to match your project structure.


Usage

import {
  Tabs,
  TabsContent,
  TabsList,
  TabsTrigger,
} from "@hoag/ui/components/tabs";
 
export default function Demo() {
  return (
    <Tabs defaultValue="account" className="w-full max-w-md">
      <TabsList>
        <TabsTrigger value="account">Account</TabsTrigger>
        <TabsTrigger value="security">Security</TabsTrigger>
      </TabsList>
      <TabsContent value="account" className="text-sm text-muted-foreground">
        Manage your account preferences.
      </TabsContent>
      <TabsContent value="security" className="text-sm text-muted-foreground">
        Configure security settings.
      </TabsContent>
    </Tabs>
  );
}

Import

import {
  Tabs,
  TabsContent,
  TabsList,
  TabsTrigger,
} from "@hoag/ui/components/tabs";

Basic Example

Manage your account preferences.

import {
  Tabs,
  TabsContent,
  TabsList,
  TabsTrigger,
} from "@hoag/ui/components/tabs";
 
export function TabsBasicExample() {
  return (
    <Tabs defaultValue="account" className="w-full max-w-md">
      <TabsList>
        <TabsTrigger value="account">Account</TabsTrigger>
        <TabsTrigger value="security">Security</TabsTrigger>
      </TabsList>
      <TabsContent value="account" className="text-sm text-muted-foreground">
        Manage your account preferences.
      </TabsContent>
      <TabsContent value="security" className="text-sm text-muted-foreground">
        Configure security settings.
      </TabsContent>
    </Tabs>
  );
}

Composition Pattern

import {
  Tabs,
  TabsContent,
  TabsList,
  TabsTrigger,
} from "@hoag/ui/components/tabs";
 
export function TabsSection() {
  return (
    <Tabs defaultValue="overview" className="w-full max-w-md">
      <TabsList>
        <TabsTrigger value="overview">Overview</TabsTrigger>
        <TabsTrigger value="analytics">Analytics</TabsTrigger>
      </TabsList>
      <TabsContent value="overview">Overview content</TabsContent>
      <TabsContent value="analytics">Analytics content</TabsContent>
    </Tabs>
  );
}

Accessibility Checklist

  • Verify semantic roles and ARIA attributes for interactive behavior.
  • Keep keyboard navigation and focus visibility consistent in all states.
  • Ensure color contrast meets accessibility requirements in light and dark themes.
  • Provide screen reader context for dynamic state or content changes.

Testing Checklist

  • Add render tests for default and key variant states.
  • Add interaction tests for callbacks and state transitions.
  • Add visual regression checks for responsive and theme variations.
  • Cover edge states such as loading, empty, disabled, and error.

Production Tips

  • Wrap component logic in feature-level abstractions for domain behavior.
  • Keep visual variants centralized to avoid style drift across screens.
  • Reuse a single import path strategy for simpler refactors.
  • Mirror documented states in Storybook and QA checklists.

Named Exports

  • Tabs
  • TabsContent
  • TabsList
  • TabsTrigger

API Reference

For authoritative prop signatures and implementation details, inspect:

  • packages/ui/src/components/tabs.tsx

MIT 2026 © @hoag/ui