Skip to main content
Clever Ops

Spec Comparison Table

A two-to-three column vehicle spec table set with drafting precision, mono tabular figures, a per-row winner tick as the single accent, a sticky header row, and real table semantics.

Preview & code

Loading Spec Comparison Table preview

Installation

pnpm dlx shadcn@latest add @cleverui/spec-comparison-table

Requires the @cleverui registry in your components.json, a one-off, two-line setup.

Usage

tsx
import { SpecComparisonTable } from '@/components/blocks/spec-comparison-table'
Exampletsx
import { SpecComparisonTable } from '@/components/blocks/spec-comparison-table'

export default function SpecComparisonTableDemo() {
  return (
    <div className="mx-auto max-w-4xl px-4 py-10 sm:px-6 sm:py-14">
      <SpecComparisonTable
        heading="Compare variants"
        caption="Hilux variant specifications"
        columns={[
          { name: 'Workmate', tagline: 'Fleet ready' },
          { name: 'SR', tagline: 'Workhorse' },
          { name: 'SR5', tagline: 'Weekend capable' },
        ]}
        rows={[
          { label: 'Power', values: ['120 kW', '150 kW', '150 kW'], winner: 1 },
          { label: 'Torque', values: ['400 Nm', '500 Nm', '500 Nm'], winner: 1 },
          { label: 'Towing (braked)', values: ['2,800 kg', '3,500 kg', '3,500 kg'], winner: 2 },
          { label: 'Fuel (combined)', values: ['7.9 L/100km', '7.6 L/100km', '7.9 L/100km'], winner: 1 },
          { label: 'Payload', values: ['1,175 kg', '1,010 kg', '925 kg'], winner: 0 },
          { label: 'Ground clearance', values: ['264 mm', '286 mm', '310 mm'], winner: 2 },
        ]}
        footnote="Manufacturer figures, ADR combined cycle. Towing ratings assume correct ball weight and tyre pressures."
      />
    </div>
  )
}

API reference

SpecComparisonTable accepts the following props.

PropTypeDefaultDescription
headingstring'Compare variants'set above the table in confident sans
captionstringsemantic table caption, rendered sr-only for quiet layout
columns*SpecColumn[]2–3 variants
rows*SpecRow[]
stickyHeaderbooleantrueheader row pins to the top of the scroll context while the body scrolls past
footnotestringquiet source line

…plus everything from React.HTMLAttributes<HTMLElement>: className, event handlers, aria attributes and the rest pass straight through.

Referenced types

Typestsx
export interface SpecColumn {
  name: string
  tagline?: string
}

export interface SpecRow {
  label: string
  /** PREFORMATTED per column */
  values: string[]
  /** column index that earns the tick, omit when no row wins */
  winner?: number
}

Frequently asked questions

How do I install the Spec Comparison Table component?

Register the @cleverui registry in your components.json ("@cleverui": "https://cleverops.com.au/r/{name}.json"), then run `npx shadcn@latest add @cleverui/spec-comparison-table`. The shadcn CLI copies the source into your project, you own the code from that point. You can also copy the source directly from this page.

What dependencies does Spec Comparison Table require?

Spec Comparison Table uses motion and lucide-react on top of React and Tailwind CSS. You don't need to install them manually, the shadcn CLI resolves and installs npm dependencies automatically when you add the component.

Can I theme Spec Comparison Table to match my brand?

Yes. The component is styled entirely with Tailwind utilities over standard design tokens (primary, background, muted, border), so it inherits your existing shadcn/ui theme automatically. Change your CSS variables and the component follows, no source edits needed for palette, radius, or fonts.

Want this built for you?

CleverUI is built by the Clever Ops web team. If you'd rather ship a hand-coded, fast, custom website than assemble one, we build them for Australian businesses every week.

Explore web development services