Dense caption-free mosaic where every tile carries an expand seal and opens a full-screen viewer with arrow controls on the picture, escape and arrow keys, a counter, the caption and a thumbnail filmstrip.
A dense mosaic of ten pictures with mixed spans, each revealing an expand seal on hover, opening into a dark full-screen viewer with arrows on the picture and a scrolling thumbnail strip at the foot.
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/gallery6?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/gallery6?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/gallery6.tsx plus the badge7 eyebrow it uses.
The installed file exports gallery6Demo alongside the block: the exact props behind the preview above. Spread it to get a working gallery in one line.
import { Gallery6, gallery6Demo } from "@/components/beste/block/gallery6";
export default function Page() {
return <Gallery6 {...gallery6Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Gallery6 } from "@/components/beste/block/gallery6";
export default function Page() {
return (
<Gallery6
badge={{ label: "Open any of them" }}
heading="A dense wall of pictures, one tap from full screen."
items={[
{
src: "/wall/specimen.jpg",
alt: "Printed editorial spread",
caption: "Specimen spread, uncut",
meta: "Rotterdam, March",
},
{
src: "/wall/object.jpg",
alt: "Minimal object on stone",
caption: "Object on stone",
meta: "Studio, February",
},
]}
labels={{
openLabel: "Open full screen",
closeLabel: "Close",
previousLabel: "Previous picture",
nextLabel: "Next picture",
counterSeparator: "of",
}}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Eyebrow label rendered as a Badge7 |
heading | string | – | Section heading above the mosaic |
items | MosaicImage[] | [] | Pictures in the mosaic, in order |
labels | Gallery6Labels | {} | Fixed strings that are not content: viewer controls and the counter separator |
lightbox | boolean | true | Render the built-in viewer; set false to leave the frames static |
className | string | – | Extra classes for the outer <section> |
type MosaicImage = {
src: string;
alt: string;
caption: string;
meta: string;
};
type Gallery6Labels = {
openLabel?: string;
closeLabel?: string;
previousLabel?: string;
nextLabel?: string;
counterSeparator?: string;
};auto-rows-[9rem] growing to md:auto-rows-[12rem], which is what keeps the wall dense rather than letting tall pictures stretch it.group/gallery6) so it responds to its own tile rather than any ancestor group on the page.lightbox={false} disables every tile button and switches the cursor back to default, leaving a plain photographic wall.overflow-x-auto, so a long set stays one row rather than pushing the picture off the screen.background shades on a bg-foreground/95 surface, correct for a panel that is dark in both themes.gallery2
Captioned image grid where any tile opens a full-screen lightbox on a dark scrim, with a frame counter, keyboard arrows, escape to close and previous and next controls beside the caption.
gallery10
Square grid whose viewer holds two states: a single frame with caption and controls, or an in-place overview of the whole set that you can jump from without closing the layer.
gallery9
Justified rows of frames that grow to fill every line, opening a viewer whose picture doubles as the zoom control: clicking switches between fitting the screen and filling it, with the caption and controls on one closing rule.
gallery11
Edge-to-edge strip of tall frames opening a viewer where the picture fills the screen and the caption, note and thumbnails sit in a sheet that slides off the bottom when you want the frame uncovered.