Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Contact Grid Team Block for React

Six people of a legal-intake service in cells that stand apart, each an initials avatar with a presence dot and the same state in words, a role, an address and an outline Copy email button that copies it and confirms in place.

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 contact section for React with Base UI, for Ravensgill, a legal-intake service. A centred header sits over six cells that stand apart, each drawing its own lines with a + on its start corner. Every cell is an initials avatar with a presence dot, the same state in words beside it (Available, In a meeting, Away today), a name, a specific role, the person's address and one outline Copy email button. Pressing the button copies the address and swaps its icon for a check, and a polite status says "Email copied"; it is the only control in a cell. Three columns from lg, two from sm and on a phone, where the address is left out of view (the button still copies it). It's built from Avatar, Copy Button and Guides, with CSS transitions and your theme's tokens for every colour. For legal and medical practices, support teams and any page that should put a name before a contact form.

FAQ

How do I change the people and their addresses?

Edit MEMBERS and DOMAIN at the top of the file. A person is a name, a role, a presence and the handle before the @; the address is the handle at DOMAIN (the reserved .example domain here, so nothing real is shown). The initials come from the name and the avatar's tone from the person's place in the list. Six people fill two rows of three at lg and three rows of two below it.

How does the Copy email button work?

It writes the address to the clipboard, swaps its copy icon for a check for three seconds and tells assistive technology "Email copied" in a polite status inside the button. If the browser refuses (a page not served over HTTPS, or no permission) it shows a cross and says "Couldn't copy". Every button has a name that includes the person ("Copy email for Tomas Lindqvist"), so six of them are not six identical stops.

What do the presence dots mean, and is it live?

The dot is green for available, amber for in a meeting and grey for away, with the same words beside it, so colour is never the only signal. It is example data in the file: connect presence to your own source (a status API, a rota) to make it live. These are the only colours in the block besides the theme's greys, and they are used only because presence is a real status.

How does it fit on a phone?

Below sm the grid keeps two columns, so a half-width cell has no room for a long address: the address is not shown there, but the Copy email button still copies it. From sm the address is shown, written left to right inside the cell even in a right-to-left page. Nothing scrolls sideways at 320 pixels.

How are the lines drawn?

Each cell is a relative box with its own Guides: four sides, a little overshoot past each corner and a + on the start corner. The overshoot needs room, so the cells sit 24 pixels apart (32 from lg) and inset from the page's rails. The top rule and the rails come from the spine, and the block keeps its bottom padding because nothing runs rail to rail at its end.

What moves, and what happens with reduced motion?

The header and the grid fade up once when the page loads, and the button's icon cross-fades to the check. With reduced motion the entrance is off and the icon changes without scaling.

  • 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

    Status Filter Team

    Hours and places

    A live-chat widget's eight people in rows under a ruled pill filter (All, Online, Away, Busy) with counts, each row showing a presence dot, what they are doing and when they were last seen.

  • Pro

    Hour Scrubber Team

    Hours and places

    A framed slider over the 24 hours of the day in UTC, above nine people in rows that show who is working at that hour with their local time, a day strip and a live count.

  • Pro

    A band of four people, each a radio cell with initials, role and reply time, that addresses the form below it: a form that names its recipient, checks itself and confirms in place.

  • Pro

    A presence callout for a team workspace: a live "4 of 5 teammates active" count over a band of five cells, each an initials avatar with an active or idle dot, a name and the document they are in.

  • Pro

    Weekly office hours of a pair-programming service: five day tabs, each with three engineers' half-hour slots as pills, and a single Shine Button that reads 'Book Thu 14:00 with Noor' once a slot is picked.