## When to use

Use the rich radio group when the user is making a deliberate role decision — invite, promotion, role change inside a drawer. Use the compact select when the role is a column inside a table and the user is sweeping through many rows. Both pull from the same role list, but the surfaces have different rhythms.

## Rich radio group

Each role gets an `option-card-ui` with name, one-line description, and (optionally) a "recommended" badge. Default selection lands on the lowest-privilege role — promote-by-decision, not by accident.

Admin Recommended for leads

## Compact select (table inline)

Used inside a members table. The select replaces the static role tag on row-hover, or stays inline when the table is in edit mode. Falls back to a non-interactive `tag-ui` when the current user can't change roles.

Kim Granlund kim@example.com Viewer Member Admin Owner

## Composition rules

- Default to the lowest privilege — Viewer (or Member if there's no Viewer in your model). Make promotion an explicit click, not an oversight.
- Description is mandatory in the rich variant — users hovering between Member and Admin should see exactly what changes.
- Don't mix scope into role names — "Workspace Admin" vs "Project Admin" are scope distinctions; either pick scope first then role, or use a dedicated permission matrix (36b).
- The role list is short — 3–5 roles. Beyond that, the user can't hold the mental model and you should reach for custom roles (04d).

## See also

- option-card-ui — rich-radio surface.
- select-ui — compact select.
- field-ui — wrapper with label / hint / error.
- form-drawer — host for invite flows.