Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Seats Full Error Block for React

A panel for an invite that can't go out because every seat is taken: six seat cells, two inactive members to remove, and one button that reads Add seats until a seat is free and then Send the invite.

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

Free a seat instead of dead-ending an invite, with this seats full panel for React with Base UI. It's the screen of Rotapad, a shift planner: a header over one framed panel, its corners and bands drawn by Guides. A band says who can't join and how many seats are used, over six seat cells two across: five with a member (an Avatar with initials, name, role and "Active today" or "Inactive 62 days") and a sixth that isn't on the plan yet. The two inactive members carry a ghost Button, Remove, which opens their seat in place. One Shine Button is the way forward: it reads Add seats while every seat is taken, and Send the invite to Iselin once one is free. Undo steps back one change at a time. It's built from Avatar, Button, Shine Button and Guides, with a CSS entrance only. For any team product that charges by seat.

FAQ

How does the panel know which seats are free?

Everything is derived from a typed list of members, the plan's seat count and a log of what you have done here (members removed, seats added, the invite). The seat cells, the banner sentence, the "5 of 5 seats used" count and the label of the one button are all computed from that, so they can't disagree. Change MEMBERS and PLAN_SEATS to your own.

Why can only two members be removed?

Because only they have gone quiet: a member is removable when their typed last-active date is more than 30 days before "today", and the line under their name counts the days from the two dates. Active members have no Remove, so the panel never suggests removing someone who is working. In your product, apply your own rule, and ask for confirmation if removing is destructive.

What stays in the page, and how do I wire it?

All of it: Remove, Add seats and Send the invite change the panel's state and say so in the status line ("Freed the seat of Ravi Ostrowski.", "Invite recorded. Nothing was sent."). Remove the member through your workspace API where the code says so, raise the seat count with your billing provider, and send the invitation email from your server. Adding a seat shows its price, $12.00 a month, in whole cents; nothing is charged here.

What does Undo do?

It takes back the last change, one at a time, in the reverse order you made them: the invite, then an added seat, then a removal. It is always on screen and quiet until there is something to undo, so the buttons never move.

Where does focus go after a seat is freed?

To the one button, which has just changed its label to Send the invite to Iselin, because the Remove button you pressed is gone. Add seats and Send the invite keep focus where it is, since the same button stays under it.

How does it look on a phone?

The cells stay two across (each is a fixed-height card), and the action foot, with the status line, the one button and Undo, is pinned to the bottom of the screen until you reach it.

  • Pro

    Seats on a team plan: members with a role each (viewers are free), a stepper for the seats you pay for, and the monthly and prorated cost worked out before you save.

  • Pro

    Subscription Required Error

    Plans and checkout

    A full-screen 403 for a feature the plan does not include: the facts, what Pro adds, and an editable message that asks the workspace owners, with a Viewing as demo control that turns the ask into an upgrade with the price worked out.

  • Pro

    Trial Expired Error

    Plans and checkout

    A full-screen page for a trial that has ended: what the trial built, how long the data is kept with a bar for the days used, a real export, and two plan cells whose button names the plan you picked.

  • Pro

    Read-Only Document Error

    Locked and removed

    A full-screen read-only page for a document editor: a drawn page with a lock above a table of six actions (allowed or not, and the role each needs), Request edit access that opens a message to the owner in place, and Open in read mode.

  • Pro

    Limit Reached Billing

    Upsell and retention

    The upgrade prompt shown where someone hits a plan limit: what was blocked, the limit reached against the next plan's, a two-column comparison and Upgrade or Remind me later.

  • Pro

    A full-screen permission page for a design-system manager: a role ladder of four rising steps with you at Viewer and Admin marked as needed, 'Two roles up' in words, and a Request access dialog that records a note and an owner in local state.