Capability section with a row of pill filters that swap the list below: each entry becomes a ruled three-column row holding the title, an explanation and the typical duration pinned right.
Capability section with a row of pill filters that swap the list below. Each entry becomes a ruled three-column row holding the title, the explanation and the typical duration pinned to the right edge, so a long service list stays readable without an accordion.
Upgrade to Pro
Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.
Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.
Radix flavor
npx shadcn add "https://ui.beste.co/r/feature246?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/feature246?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/feature246.tsx plus the badge7 component it uses for the eyebrow.
The installed file exports feature246Demo alongside the block: the exact props behind the preview above. Spread it to get a working capability list in one line.
import { Feature246, feature246Demo } from "@/components/beste/block/feature246";
export default function Page() {
return <Feature246 {...feature246Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Feature246 } from "@/components/beste/block/feature246";
export default function Page() {
return (
<Feature246
badge={{ label: "Scope by track" }}
heading="Pick the track, read the whole list."
description="Switch between them to see what the work covers."
labels={{ metaTitle: "Typical duration" }}
groups={[
{
label: "Brand",
items: [
{
title: "Identity system",
description: "Marks, type, colour and the layout grid.",
meta: "6 weeks",
},
],
},
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Eyebrow label rendered as a Badge7 |
heading | string | – | Section heading in the left column |
description | string | – | Supporting paragraph, right-aligned from md up |
groups | CapabilityGroup[] | [] | Each group becomes one filter pill and its own list |
labels | Feature246Labels | {} | Fixed strings that are not content: the label above every duration |
className | string | – | Extra classes for the outer <section> |
type CapabilityGroup = {
label: string;
items: Capability[];
};
type Capability = {
title: string;
description: string;
meta: string;
};
type Feature246Labels = {
metaTitle?: string;
};useState, defaulting to 0, so the first group renders on the server and the block is never empty before hydration.<button type="button"> elements with aria-pressed, not links, so switching a group never changes the URL or scrolls the page.cursor-pointer, since Tailwind v4 leaves buttons on the default arrow cursor.md:grid-cols-[minmax(0,16rem)_1fr_auto] on md:items-baseline, which puts the title, the explanation and the duration on one baseline and lets the middle column absorb the spare width.meta is a free-text string, so a row can read 6 weeks, 2 days or Ongoing without a separate unit prop.md each row stacks into title, paragraph and duration in that order, with the duration keeping its small label so it still reads as a data point rather than a stray line.feature257
An interactive feature where a hairline list of four capabilities swaps the image tile beside it, each one floating a different live asset with its own supporting paragraph.
feature224
Two-column split with an eyebrow, big heading, description, and CTA on the left and a checklist of capabilities with rounded check seals on the right.
feature254
Timeline where every ruled row lines up a year, a photograph from that moment and the explanation of what forced the change, headed by a pill CTA on the heading line and stacking to a readable block on mobile.
feature5
Left-aligned headline followed by a compact two-column grid of capability rows. Each row leads with a Lucide icon.