Product mosaic pairing a two-row hero photograph captioned on its scrim with a tall specification tile, then two square macro tiles that carry their caption inside and an inverted figure tile closing the row.
A product study hung as a mosaic. One large photograph carries the object and its shot note, a tall ruled tile lists the measured specifications, two square macro crops sit underneath, and a single inverted figure closes the grid.
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/bento6?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/bento6?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/bento6.tsx plus the badge7 eyebrow it uses.
The installed file exports bento6Demo alongside the block: the exact props behind the preview above. Spread it to get a working bento in one line.
import { Bento6, bento6Demo } from "@/components/beste/block/bento6";
export default function Page() {
return <Bento6 {...bento6Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Bento6 } from "@/components/beste/block/bento6";
export default function Page() {
return (
<Bento6
badge={{ label: "Object study" }}
heading="Every surface, photographed before it was described."
image={{
src: "/object/pair.jpg",
alt: "Headphones on a matte desk",
title: "Reference pair, unopened",
meta: "Shot on the bench it was assembled on",
}}
labels={{ specsTitle: "Measured" }}
details={[
{ src: "/object/edge.jpg", alt: "Brushed aluminium edge", caption: "Brushed edge, unpolished" },
{ src: "/object/shell.jpg", alt: "Matte material macro", caption: "Matte shell, close" },
]}
specs={[
{ title: "Weight", value: "268 g" },
{ title: "Materials", value: "Aluminium, wool" },
]}
figure={{ value: "9", title: "Parts in the housing, down from 21" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Eyebrow label rendered as a Badge7 |
heading | string | – | Section heading above the mosaic |
image | HeroTile | – | Large photograph with its title and shot note on the scrim |
details | DetailTile[] | [] | Square macro crops, each captioned on its own scrim |
specs | SpecRow[] | [] | Ruled specification list in the tall side tile |
figure | FigureTile | – | Inverted dark tile holding one number |
labels | Bento6Labels | {} | Fixed strings that are not content: the specification tile's eyebrow |
className | string | – | Extra classes for the outer <section> |
type HeroTile = {
src: string;
alt: string;
title: string;
meta: string;
};
type DetailTile = {
src: string;
alt: string;
caption: string;
};
type SpecRow = {
title: string;
value: string;
};
type FigureTile = {
value: string;
title: string;
};
type Bento6Labels = {
specsTitle?: string;
};md:col-span-4 md:row-span-2 and the specification tile spans md:col-span-2 md:row-span-2 beside it, so the two tallest tiles share the first band and the crops fill the row below.dl with dt and dd, and each row is separated by border-t border-current/10 rather than a boxed table, which keeps the tile on one surface.items-baseline justify-between, so a long material list and a short weight still sit on the same baseline with the value flush right.aspect-square below md and switch to md:aspect-auto, letting md:auto-rows-[minmax(13rem,auto)] set their height on desktop instead of the image ratio.text-background tokens are hardcoded because that surface is fixed rather than adaptive.bento3
Work mosaic on a six-column track mixing photographic tiles that carry their caption inside on a gradient scrim with a soft statement tile and an inverted figure tile, the lead project spanning four columns and two rows.
bento7
Team mosaic where portraits carry their name and role inside the tile on a scrim, interleaved with an inverted quote tile and a wide soft tenure figure tile that closes the grid flush.
bento9
Magazine mosaic whose cover story fills a two-row photographic tile with its category and page count on the scrim, beside an inverted figure tile, a bordered publication note and three soft article tiles.
bento4
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.