Staaarter

Feature Tabs Explorer

A centered header sits above a bordered explorer panel: a vertical icon tab rail on the left switches between feature panels on the right, each pairing a preview image with a benefit checklist and a call-to-action.

By Staaarter Team
Feature
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its button, media-slot dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/feature-tabs-explorer.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/feature/feature55.tsx instead.

Usage

The file also exports feature55Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.

import { Feature55, feature55Demo } from "@/components/blocks/feature/feature55";

export default function Page() {
  return <Feature55 {...feature55Demo} />;
}

Props

PropTypeDefaultDescription
eyebrowstringnoneSmall label above the heading.
headingReactNodenoneSection heading.
descriptionstringnoneSupporting copy under the heading.
panelsExplorerPanel[]noneTab panels, rendered in array order in the rail and switched by click.
classNamestringnoneExtra classes for the outer section element.

Types

type ExplorerPanel = {
  label: string;
  title: string;
  description: string;
  image?: { src: string; alt: string };
  benefits: string[];
  cta: { label: string; href: string };
};

Behavior notes

  • Real client-side state: clicking a rail item switches the active panel; the first panel (index 0) is active by default on mount.
  • The rail's icons come from a fixed, hardcoded set indexed by tab position rather than a per-tab icon prop, since a "use client" component can't accept a component reference from a server parent.
  • The rail scrolls horizontally on narrow screens (stacked layout) and becomes a true vertical column from the sm breakpoint up.
  • aria-selected on each tab button and role="tablist"/role="tab" wire the rail for screen readers.
  • Demo props live in a sibling feature55.demo.tsx (no "use client" directive) per the client-block demo-file-split rule.