Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Animated Mosaic Team Block for React

Eight people of a tide-table app as a three-by-three mosaic of large initials cells that share their hairlines, with the invitation in the middle cell: how many seats are open and the Shine Button, See open roles.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

A team section for React with Base UI, for Skerryvale, a tide-table app. A centred header sits over a mosaic of cells that share their hairlines, run from rail to rail and end the block. Eight of the nine cells are people, each a large pair of initials; hover or focus one with a mouse and the initials fade into the person's name and role. The cell in the middle is the invitation: how many seats are open and the page's one Shine Button, See open roles. On a phone or a touch screen the name always shows under the initials, and the grid has two columns with the invitation across both and six people under it. It's built from Shine Button and Guides, with CSS transitions and your theme's tokens for every colour. For small teams that are hiring, careers pages and any team that would rather show faces than describe them.

FAQ

How do I change the people and the number of open seats?

Edit PEOPLE and OPEN_SEATS at the top of the file. A person is a name and a role; the initials come from the name. Eight people fill the three-by-three mosaic around the invitation; the first six are the ones a phone shows, set by PHONE_COUNT. Change the invitation's number when you change your list of open roles: it is a plain constant, not counted from anything.

How does the hover and focus reveal work, and what does a keyboard or a screen reader get?

Every person's cell is a link. Hovering it, or focusing it with the keyboard, fades the initials out and the name and role in. A screen reader doesn't depend on the fade: each cell has a visually hidden heading with the name, the role as text and the link's own name ("Anya Volkova's profile"), and the faded layers are hidden from assistive technology. Point the links at your profile pages.

What do a phone and a touch screen see?

The reveal is only for a mouse on a screen at least sm wide. Anywhere else the two layers stack, with the initials above and the name and role below, so nothing needs a hover. A phone shows six people in two columns; a tablet shows all eight.

What happens with reduced motion?

The fade is a CSS transition and it is off with reduced motion: hovering or focusing a cell still swaps the initials for the name, instantly. The header and the mosaic fade up once when the page loads, and that is off too.

Where does the button go?

It is a link (href="#"): point it at your open roles. It is a Shine Button, so a band of light sweeps across it once on hover and keyboard focus, and it is the only primary control in the block. The button renders the link it is given with render, with nativeButton={false}.

How are the lines drawn, and how does the block end?

The grid has a one-pixel gap on a border-coloured background and every cell is a background-coloured box, so the gaps show as the hairlines. The rails and the top rule come from the page's spine and Guides; the block draws no rule at its foot, because the next block's top rule closes it. The invitation cell takes a solid, slightly darker tint, never a translucent one, so the lines stay crisp around it.

  • Pro

    Hover Card Mosaic Team

    Grids and walls

    The planners of an interior-planning studio as a mosaic of mixed spans that shares its hairlines: a two-by-two lead cell, two wide cells, three small ones and a +12 cell, each person a link with a hover card that opens on hover and on focus.

  • Pro

    Hiring Split Team

    Hiring and onboarding

    A hiring split for a charity CRM: the pitch, the headcount and the open-role count with the one Shine Button at the start, and five open roles as a ruled list of links behind a split divider at the end.

  • Pro

    Bento Grid Team

    Grids and walls

    The leadership of a lighting-design studio as a bento that shares its hairlines: a two-by-two founder cell, four leader cells with a focus line each, and a closing cell that counts the studio with a dot for every person.

  • Pro

    Grid Cards Team

    Grids and walls

    Twelve people of a restaurant-software company in a hairline grid that runs from rail to rail, each an initials avatar with a name, a role, a department badge and a city, under a department picker that brings the picked team to the front and dims everyone else.

  • Pro

    Split Panel Team Picker CTA

    Pickers and toggles

    A split CTA where visitors pick the engineer they want to talk to from four choice cards with initials, role and availability, a Shine Button that names their choice, and a closing band of assurances.

  • Pro

    Split Avatar Grid Hero

    Logos and social proof

    A compact split team hero: a headline, a Shine Button, a second action and a line of team facts beside a two-by-two grid of large avatars with names and roles in cells that share hairlines.