Staaarter

Service Bento With Figure

Service mosaic whose lead tile floats a photo-strip media piece over a dotted field between its eyebrow and statement, beside a photographic tile captioned on its scrim, an inverted figure tile, and three soft icon tiles.

By Staaarter Team
Bento
Docs
Live preview

Docs

Installation

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

npx shadcn add https://staaarter.com/r/service-bento-with-figure.json

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

Usage

The file also exports bento4Demo, 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 { Bento4, bento4Demo } from "@/components/blocks/bento/bento4";

export default function Page() {
  return <Bento4 {...bento4Demo} />;
}

Props

PropTypeDefaultDescription
leadLeadTilenoneDotted-field tile spanning four columns and two rows, with an eyebrow, a statement, and a floating strip of up to three media thumbnails.
photoPhotoTilenonePhotographic tile with an eyebrow and caption overlaid on a bottom scrim.
figureFigureTilenoneInverted (dark) tile with a big figure and a caption.
servicesServiceItem[]noneExactly three soft tiles, each with an icon, a label, and a short description. The icon is picked from a fixed local array by array position, not passed in the data.
classNamestringnoneExtra classes for the outer section element.

Types

interface LeadTile {
  eyebrow: string;
  statement: ReactNode;
  photos: { src: string; alt: string }[];
}

interface PhotoTile {
  photo: { src: string; alt: string };
  eyebrow: string;
  caption: string;
}

interface FigureTile {
  figure: string;
  caption: string;
}

interface ServiceItem {
  label: string;
  description: string;
}

Behavior notes

  • Purely presentational: no local state, no navigation.
  • Service icons are not part of the `services` data: the component hardcodes a fixed `[Sparkles, Layers, Zap]` array and indexes into it by each service's position, since a component reference can't safely be passed as a prop on blocks whose demo props may later be split across the client boundary.
  • The photo strip in the lead tile is a fixed three-thumbnail row with alternating rotation; it isn't a real carousel or drag-and-drop board.
  • Designed for exactly three `services` items to fill the six-column bottom row evenly; a different count will still render but won't tile as cleanly.