Features Tabs
Underline tabs (Radix Tabs) switching between product areas: copy + check points on the left, a bordered data card (status rows) on the right.
neo-corporate/section/features-tabsSource
"use client";
import { Tabs } from "radix-ui";
import { Check } from "lucide-react";
import { cn } from "@/lib/utils";
export interface FeaturesTabsItem {
id: string;
label: string;
title: string;
text: string;
points: string[];
rows: { label: string; value: string; tone?: "success" | "warning" | "danger" }[];
}
export interface FeaturesTabsProps {
eyebrow?: string;
title?: string;
items?: FeaturesTabsItem[];
className?: string;
}
const TONE = { success: "text-da-success", warning: "text-da-fg", danger: "text-da-danger" } as const;
const DEFAULT_ITEMS: FeaturesTabsItem[] = [
{
id: "invoice",
label: "Invoice",
title: "Invoices that get paid on time",
text: "Create, send and track invoices with embedded payment links and automatic tax calculation.",
points: ["Templates per entity and currency", "Partial payments and deposits", "Customer portal with history"],
rows: [
{ label: "INV-2041 · Northwind", value: "Paid", tone: "success" },
{ label: "INV-2040 · Lumen Health", value: "Due Oct 14", tone: "warning" },
{ label: "INV-2039 · Parcel", value: "Overdue 6d", tone: "danger" },
],
},
{
id: "collect",
label: "Collect",
title: "Collections on autopilot",
text: "Escalating reminders by email and SMS, with pause rules for key accounts.",
points: ["Custom cadences per segment", "Promise-to-pay tracking", "One-click payment plans"],
rows: [
{ label: "Reminder 1 · friendly", value: "Sent", tone: "success" },
{ label: "Reminder 2 · firm", value: "Scheduled Oct 16" },
{ label: "Escalate to AM", value: "If unpaid Oct 21" },
],
},
{
id: "reconcile",
label: "Reconcile",
title: "Reconciliation you don’t have to do",
text: "Bank feeds are matched to open invoices in real time; exceptions land in a single queue.",
points: ["97% auto-match rate", "Rules for fees and FX", "Audit-ready exports"],
rows: [
{ label: "ACH $18,400.00", value: "Matched INV-2041", tone: "success" },
{ label: "Wire $6,200.00", value: "Needs review", tone: "warning" },
{ label: "Card $3,120.00", value: "Matched INV-2038", tone: "success" },
],
},
];
/** Underline tabs (Radix Tabs) switching between product areas: copy + check points on the left, a bordered data card (status rows) on the right. */
export function FeaturesTabs({
eyebrow = "How it works",
title = "From invoice to reconciled, without the busywork",
items = DEFAULT_ITEMS,
className,
}: FeaturesTabsProps) {
return (
<section aria-labelledby="nc-tabs-title" className={cn("da-section bg-da-surface-2 text-da-fg", className)}>
<div className="da-container">
<p className="text-xs font-semibold tracking-da-label text-da-primary uppercase">{eyebrow}</p>
<h2
id="nc-tabs-title"
className="mt-3 max-w-2xl font-da-display text-[clamp(2rem,4.5vw,3rem)] leading-[1.1] font-extrabold tracking-da-display text-balance"
>
{title}
</h2>
<Tabs.Root defaultValue={items[0]?.id} className="mt-10">
<Tabs.List aria-label="Product areas" className="flex gap-8 relative overflow-x-auto border-b border-da-border-strong">
{items.map((it, i) => (
<Tabs.Trigger
key={it.id}
value={it.id}
className="da-focus da-transition -mb-px flex shrink-0 items-center gap-2 border-b-2 border-transparent pb-3 font-semibold text-da-muted-fg hover:text-da-fg data-[state=active]:border-da-primary data-[state=active]:text-da-fg"
>
<span className="font-da-mono text-xs text-da-muted-fg">0{i + 1}</span>
{it.label}
</Tabs.Trigger>
))}
</Tabs.List>
{items.map((it) => (
<Tabs.Content
key={it.id}
value={it.id}
className="da-focus grid items-center gap-10 rounded-da-md pt-10 transition-opacity duration-(--da-duration) starting:opacity-0 lg:grid-cols-2"
>
<div>
<h3 className="font-da-display text-2xl font-bold">{it.title}</h3>
<p className="mt-3 text-da-muted-fg">{it.text}</p>
<ul className="mt-6 space-y-2.5">
{it.points.map((p) => (
<li key={p} className="flex items-center gap-2.5">
<Check aria-hidden className="size-4 text-da-primary" strokeWidth={3} />
{p}
</li>
))}
</ul>
</div>
<div className="da-stroke rounded-da-lg bg-da-surface p-5 text-da-surface-fg shadow-da-md">
<p className="text-sm font-semibold">{it.label}</p>
<ul className="mt-3 divide-y divide-da-border">
{it.rows.map((r) => (
<li key={r.label} className="flex items-center justify-between gap-4 py-3 text-sm">
<span className="font-da-mono text-xs">{r.label}</span>
<span className={cn("font-semibold", r.tone ? TONE[r.tone] : "text-da-muted-fg")}>{r.value}</span>
</li>
))}
</ul>
</div>
</Tabs.Content>
))}
</Tabs.Root>
</div>
</section>
);
}
export default FeaturesTabs;
modules/neo-corporate/section/features-tabs/index.tsx
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| eyebrow | string | — | Small label above the heading. |
| title | string | — | Heading. |
| items | FeaturesTabsItem[] | — | Content items (see the exported types). |
| className | string | — | Extra classes on the root. |
Other features variants in Neo Corporate
Features Bento
Data-driven bento grid of bordered cards: cash-flow line chart, DSO metric, approval flow, currency list and integrations — each a small realistic mock.
Features Grid
Classic 3×2 bordered feature grid sharing hairline borders (one outer frame), each cell with a blue icon square, title, text and a “Learn more” link.
Features Versus
Before/after comparison: a muted “spreadsheets and email” column with red crosses next to a blue-bordered “with Ledgerly” column with green checks.
Features in other art directions
Features Grid
Six features in a single ruled box (1/2/3 columns) with numbered tiles, color-cycling icon blocks that press on hover, and a two-column section header.
Features Numbered
Full-width ruled rows with giant faded step numbers, uppercase titles, descriptions and a stat chip; each row floods with a different primary color on hover and the number turns solid.
Features Tabs
Tabbed feature explorer: ruled mono tab bar (ink active tab), then a big split panel with title, description and square-bullet list on the left and a stacked mock preview of the channel on the right.
Features Versus
Before/after comparison: two slightly tilted cards side by side — the old way in paper with red crosses, the new way in solid yellow with ink checks — row by row on the same topics.
Features Bento
Glass bento grid on 6 columns: a large AI-recap tile with a mock summary and owner chips, plus five smaller frosted tiles with gradient squircle icons.
Features Glass Grid
Centered header and six frosted feature cards with gradient squircle icons; cards lift with an overshoot and reveal a soft corner glow on hover.
Features Orbit
Integrations section: copy with a chip list on one side, and a central gradient orb with integration bubbles orbiting on two counter-rotating glass rings (bubbles stay upright). Pure CSS.
Features Tabs
Glass pill tab bar (Radix Tabs) with gradient active tab switching a large frosted panel: title, copy and bullets on the left, a layered glass preview on the right.
Features Alternating
Three zig-zag rows, each pairing a numbered kicker, title, copy and link with an HTML product mock-up (routing rules, on-call week, AI postmortem) on a soft tinted plate.
Features Bento
Bento grid of five hairline tiles on a 6-column layout, each with a small token-themed HTML illustration (routing lines, uptime bars, MTTR metric, on-call week) above an icon, title and description.
Features List
Dense four-column feature list: each item has a small indigo line icon, a title and a one-sentence description under a hairline top rule. Eight defaults, left-aligned header.
Features Steps
Five-step workflow (detect, page, coordinate, resolve, learn) laid out horizontally on desktop and vertically on mobile, joined by a hairline, with numbered nodes and timing labels.
Features Index
Features as a numbered index: a label + headline in the left columns, and a two-column ruled list on the right where each item is “01 — Title” with a short description.
Features Numbered
Three large numbered steps: giant outlined-looking numerals in muted ink above a hairline, step title and text; columns on desktop, stacked on mobile.
Features Showcase
Work showcase as the feature: an asymmetric grid (fixed row heights; wide, tall, square and full-width spans) of neutral gray image frames with mono captions (studio — project, template used); captions underline on hover.
Features Specs
Technical spec sheet: grouped key/value definition lists in a 4-column grid, each group under a full-ink rule with a mono heading — reads like a product data sheet.
Features Alternating
Alternating zig-zag rows: copy with check points on one side, a soft blob-shaped tinted panel holding a small product vignette (suppliers, actions, report) on the other.
Features Bento
Soft bento: rounded tinted tiles of mixed sizes — a monthly emissions bar chart, a human equivalence (“= 42 flights”), supplier avatars, a certifications tile and a leaf quote.
Features Cards
Three tall rounded cards in sage, clay and paper tints; each has an icon sitting in an organic blob, a serif title and calm copy.
Features Journey
Horizontal journey: numbered circles connected by a hand-drawn wavy dashed path (vertical list on mobile), each step with a serif title, text and a mono time estimate.
Features Checklist
Interactive split section: copy and a mint progress bar on the left, a white card of four round-checkbox steps on the right that turn mint with a bouncy tick when clicked; celebration at 100%.
Features Icons
Centered 4-column grid of eight small features, each with a large round pastel icon badge (colors rotate), rounded title and one-liner.
Features Pastel
2×2 grid of large pastel feature cards (peach, mint, lavender, butter), each with icon, rounded title, copy and a tiny flat illustration (mini board, bar week, reminder toast, chat bubbles).
Features Steps
Three numbered step cards in peach, lavender and mint joined by a dashed path on desktop, each with a white emoji medallion, mono step label, title and text.