Theme Components

Live examples of all components in the armpitMFG design system.

Tabs

Tabs support both horizontal and vertical orientations with animated active indicators.

Horizontal Tabs

<div class="tabs">
  <div class="tabs-item">
    <button class="tabs-link active">Overview</button>
  </div>
  <div class="tabs-item">
    <button class="tabs-link">Features</button>
  </div>
</div>

Vertical Tabs

Add .tabs-vertical class for sidebar-style navigation.

<div class="tabs tabs-vertical">
  <div class="tabs-item">
    <button class="tabs-link active">Dashboard</button>
  </div>
  <div class="tabs-item">
    <button class="tabs-link">Settings</button>
  </div>
</div>

Unlisted Tab (Page-Defined Colors)

Pages not in the main navigation can define a custom tab label and color using the useSetUnlistedTab hook. This creates a dynamic navigation indicator.

Default Unlisted Tab

Without configuration, unlisted pages show an italic "Unlisted" label with a flag icon.

Unlisted 🏴
// Page component (no configuration)
// Header automatically shows "Unlisted 🏴" in italic

<span class="tabs-link unlisted-content active">
  Unlisted 🏴
</span>

Custom Label & Color

Pages can set a custom label and accent color for their tab indicator.

GMP Mode (Orange):

⚑ GMP Mode

Admin Panel (Red):

⚑ Admin Panel

Beta Feature (Purple):

⚑ Beta Feature
// In your page component:
import { useSetUnlistedTab } from '@/shared-theme/useSetUnlistedTab';

export default function GmpPage() {
  useSetUnlistedTab({
    label: 'GMP Mode',    // Custom label (replaces "Unlisted")
    color: '#f39c12'      // Custom accent color (orange)
  });

  return <div>Page content</div>;
}

// The CSS variable --nav-unlisted-tab-color controls the color:
// Header component injects: :root { --nav-unlisted-tab-color: #f39c12; }

React Hook API

// UnlistedTabContext provides:
interface UnlistedTabContextType {
  label: string | null;     // Current tab label
  color: string | null;     // Current accent color
  setLabel: (label: string | null) => void;
  setColor: (color: string | null) => void;
}

// useSetUnlistedTab hook (recommended):
useSetUnlistedTab({
  label?: string;  // Optional: defaults to "Unlisted" with flag
  color?: string;  // Optional: defaults to theme primary blue
});

// Hook automatically cleans up on unmount

Buttons

Button Variants

<button class="btn">Primary</button>
<button class="btn btn-secondary">Secondary</button>
<button class="btn btn-outline">Outline</button>
<button class="btn btn-ghost">Ghost</button>

Button Sizes

<button class="btn btn-sm">Small</button>
<button class="btn">Medium</button>
<button class="btn btn-lg">Large</button>

Block Button

<button class="btn btn-block">Full Width</button>

Cards

Default Card

This is a default card with header and body.

Feature Card

Feature cards have a gradient background and enhanced hover.

Glass Card

Glass cards have a frosted glass effect with backdrop blur.

<div class="card">...</div>
<div class="card card-feature">...</div>
<div class="card card-glass">...</div>

Alerts

This is an info alert - used for general information.
This is a success alert - operation completed successfully.
This is a warning alert - proceed with caution.
This is an error alert - something went wrong.
<div class="alert alert-info">Info message</div>
<div class="alert alert-success">Success message</div>
<div class="alert alert-warning">Warning message</div>
<div class="alert alert-error">Error message</div>

Badges

DefaultSecondarySuccessWarningError
<span class="badge">Default</span>
<span class="badge badge-success">Success</span>
<span class="badge badge-warning">Warning</span>
<span class="badge badge-error">Error</span>

Modals

Modals support multiple sizes and drawer variants.

Modal Sizes

.modal-sm (40rem).modal (60rem default).modal-lg (80rem).modal-fullscreen (100%)

Drawer Variants

Side panels that slide in from the edge of the screen.

.modal-drawer (right side).modal-drawer-left (left side)
<div class="modal-overlay active">
  <div class="modal modal-lg">
    <div class="modal-header">
      <h2 class="modal-title">Modal Title</h2>
      <button class="modal-close">&times;</button>
    </div>
    <div class="modal-body">Content</div>
    <div class="modal-footer">
      <button class="btn">Save</button>
    </div>
  </div>
</div>

Progress Bars

Basic Progress

Color Variants

<div class="progress">
  <div class="progress-bar" style="width: 50%"></div>
</div>
<div class="progress">
  <div class="progress-bar progress-bar-success" style="width: 60%"></div>
</div>

Forms

This field is required.

Tables

NameStatusRoleActions
John DoeActiveAdmin
Jane SmithPendingUser
Bob JohnsonInactiveUser

Typography

Heading 1 (text-4xl)

Heading 2 (text-3xl)

Heading 3 (text-2xl)

Heading 4 (text-xl)

Large paragraph text for introductions and emphasis.

Regular paragraph text for body content. This is the default text size used throughout the application.

Small secondary text for captions and metadata.

Additional Components

The theme also includes these components (see CSS for full documentation):

Layout

  • .container - Centered content container
  • .section - Page sections with padding
  • .divider - Horizontal dividers

Navigation

  • .breadcrumbs - Breadcrumb navigation
  • .pagination - Page pagination

Feedback

  • .toast - Toast notifications
  • .tooltip - Hover tooltips
  • .spinner - Loading spinner
  • .skeleton - Loading skeletons

Content

  • .accordion - Collapsible sections
  • .avatar - User avatars
  • .list-group - List groups