shadcn.io is not affiliated with official shadcn/ui
Use Case Tab-Filtered Logos Block for React
Three large trigger cells by genre, then a row of five customer wordmarks and a band that says how those studios use a photo proofing tool, in three steps.
Installation
Overview
A tab-filtered logo block for React with Base UI. A header, "Photographers proof on Isinglass in every genre" and one sentence, sits over a band of three large trigger cells divided by hairlines: Weddings, Product shoots and School portraits, each with an icon, its name and one line, the open one tinted and underlined. Choosing a cell swaps the panel under it: a row of five customer wordmarks in cells that share their hairlines, then a band with a heading, a sentence and three numbered steps on how studios of that kind use the product. The panels share one grid cell, so the block keeps its height whichever genre is open, and it ends on the steps, so the next section's top rule closes it. On a phone the cells shrink to an icon and a name, three across, and the logos go two across. Built from Tabs and Guides, with CSS for the entrance and the hover and your theme's tokens for every colour. For products whose customers use them in distinct ways.
FAQ
How do I change the genres, the steps and the customers?
Edit USE_CASES and CUSTOMERS at the top of the file. A use case has an id, an icon, a name, the line on its trigger, a title and a pitch for its panel, and three steps. A customer names its genre in group, with an icon, a name and a style (an index into STYLES). Keep five customers per genre, so the row is full, and three steps.
How does it work with a keyboard and a screen reader?
The cells are a real tab list named "What you shoot": the arrow keys move between them (mirrored in a right-to-left layout), Home and End jump to the first and last, and Tab moves on into the open panel. A trigger's name is its genre and its line. Each panel has an h3 for its title, an h4 per step in a numbered list, and the logos in a list named "Customers".
Focusing a tab selects it, as on the other libraries, so an arrow key both moves and switches.
Why doesn't the page move when I switch genres?
Every genre's panel is also rendered once more, unseen, stacked in the same grid cell as the real panel, hidden from assistive technology and the keyboard (aria-hidden and inert). The cell is as tall as the tallest of them, so switching only swaps what shows and nothing below it moves. Panels that aren't open are not in the page's accessibility tree twice.
How does it fit on a phone?
Below sm the trigger cells drop their one-line description and centre an icon over the name, so three still fit across at 320 pixels. The five logos go two across, the last one spanning the row, and the steps stack under the heading.
Related
- Pro
Company Size Tab-Filtered Logos
Tabs and filtersA boxed three-way size control (1-50, 51-500, 500+) over a split panel: a summary with two figures at the start, six customer wordmarks in hairline cells at the end.
- Pro
Animated Underline Tab-Filtered Logos
Tabs and filtersThree flat tabs on a ruled band with a sliding underline, over six customer wordmarks in cells set apart, for a property listings site.
- Pro
Category Grid Tab-Filtered Logos
Tabs and filtersFour pill tabs (All, Growers, Co-ops, Advisers) over a wall of eight customer wordmarks in shared hairline cells, for a farm planning tool.
- Pro
A bento for an on-call alert router: one tall customer story with a big result, a quote and a link, beside four customers that each carry an industry pill and a retention figure, in cells that share their hairlines.
- Pro
Featured Focal With Metric Trio Logos
Flagship customerA flagship customer for a billing tool in a wide framed card with the modules it runs, closed by a full-width band of three large figures: utilities, years of history and uptime.
- Pro
Tab Swap Split Showcase Features
Tabs and accordionsA features section for a release tool: a line tab switch (Plan, Ship, Review) that swaps one split band, with a drawing flush to the start rail and the copy on the end side.