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.
Installation
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.
Related
- Pro
Grid Cards Team
Grids and wallsTwelve 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 placesA 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 placesA 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
Choose a Person Contact
Contact formsA 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
Team Presence Live Banner
Live statusA 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
Slot Picker Office Hours Team
Hours and placesWeekly 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.