Radix coverage
Every component in the Radix Primitives catalog, against what this platform actually does for that role. The statuses come from the real imports (@radix-ui/react-*), not from intent — regenerate the underlying facts by re-checking taxonomy.ts when dependencies change.
Styled by us · 4Used, not exported · 3Custom analogue · 14Not used · 9
- Styled by us — we export a styled wrapper of the Radix primitive — use ours, never the raw primitive
- Used, not exported — the primitive is in use inside components, but no generic styled wrapper is exported yet
- Custom analogue — the primitive is not used; a component of our own plays that role
- Not used — not used and nothing of ours plays the role — a gap, or genuinely not needed
Installed, but nothing to import
The primitive is in use inside a component, but no reusable wrapper is exported. Using it means composing the raw primitive yourself.
Accordion · Popover · Toggle Group
Not in the system at all
No Radix dependency, no component of ours. Each is a decision waiting: adopt the primitive, or state that we do not need it.
Aspect Ratio · Context Menu · Hover Card · Menubar · One-Time Password Field · Password Toggle Field · Scroll Area · Toolbar · Tooltip
| Radix primitive | Status | Ours | Notes |
|---|---|---|---|
Accordion @radix-ui/react-accordion | Used, not exported | FAQList | Used only inside FAQList, which is CMS-bound and takes no children. There is no general-purpose accordion to import — Collapse is the nearest generic building block. |
Alert Dialog @radix-ui/react-alert-dialog | Custom analogue | ConfirmationDialog | Built on PublicBaseDialog, not the Radix primitive — no enforced focus/dismiss semantics. |
Aspect Ratio @radix-ui/react-aspect-ratio | Not used | — | Tailwind aspect-* utilities cover this. |
Avatar @radix-ui/react-avatar | Custom analogue | Avatar | Custom image + initials fallback. |
Checkbox @radix-ui/react-checkbox | Custom analogue | CustomFieldRenderer, AcceptDocumentsContent | Native <input type="checkbox"> inline in forms; no shared Checkbox component. The @radix-ui/react-checkbox dependency is declared but imported nowhere — dead weight. |
Collapsible @radix-ui/react-collapsible | Custom analogue | ExpandSection | ExpandSection is the trigger-less transition wrapper (MUI/Chakra "Collapse"); the caller supplies the trigger. |
Context Menu @radix-ui/react-context-menu | Not used | — | |
Dialog @radix-ui/react-dialog | Custom analogue | PublicBaseDialog, DialogCloseButton | Hand-rolled: createPortal + scroll lock + header/footer slots. |
Dropdown Menu @radix-ui/react-dropdown-menu | Styled by us | DropdownMenu | Imported by ui/DropdownMenu.tsx but NOT declared in public-web-shared/package.json — resolves transitively through @radix-ui/themes. Undeclared dependency. |
Form @radix-ui/react-form | Custom analogue | — | Forms are React Hook Form + Zod platform-wide. |
Hover Card @radix-ui/react-hover-card | Not used | — | |
Label @radix-ui/react-label | Custom analogue | — | Plain <label> elements inside the input components. |
Menubar @radix-ui/react-menubar | Not used | — | |
Navigation Menu @radix-ui/react-navigation-menu | Custom analogue | Breadcrumb, LanguagePicker | App chrome is custom (navigation/). |
One-Time Password Field @radix-ui/react-one-time-password-field | Not used | — | |
Password Toggle Field @radix-ui/react-password-toggle-field | Not used | — | Password inputs render their own show/hide affordance. |
Popover @radix-ui/react-popover | Used, not exported | LocaleDateField, PublicMemberSelect, CheckboxSelect, ScheduleFilters, ScheduleDatePicker, CalendarTimezoneNote, ClubSelector (AreaPicker), BookingExperience | The most-used primitive — 10 components — yet no generic styled Popover is exported; every use restyles it locally. Strongest candidate for promotion to ui/. |
Progress @radix-ui/react-progress | Custom analogue | MembershipItem | Inline progress bar in the membership pass; nothing shared. |
Radio Group @radix-ui/react-radio-group | Custom analogue | SegmentedControl | SegmentedControl implements role="radiogroup" with roving tabindex by hand. |
Scroll Area @radix-ui/react-scroll-area | Not used | — | Native scrolling with styled scrollbars. |
Select @radix-ui/react-select | Styled by us | ModernSelect, ClubSelector, CountrySelector | ModernSelect is the generic wrapper; ClubSelector and CountrySelector are domain selects on the same primitive. |
Separator @radix-ui/react-separator | Custom analogue | — | Border utilities. |
Slider @radix-ui/react-slider | Styled by us | RangeSlider | |
Switch @radix-ui/react-switch | Styled by us | ModernToggle | |
Tabs @radix-ui/react-tabs | Custom analogue | ModernTabs | Custom pill/segmented tabs (links or controlled). |
Toast @radix-ui/react-toast | Custom analogue | Providers (react-hot-toast Toaster) | Toasts are react-hot-toast, mounted once in Providers; sonner is also a declared dependency — two toast libraries is one too many. |
Toggle @radix-ui/react-toggle | Custom analogue | FilterChip | FilterChip is a hand-rolled aria-pressed toggle. |
Toggle Group @radix-ui/react-toggle-group | Used, not exported | ThemeModeToggle, ModernToggleGroup | ThemeModeToggle uses the primitive internally; the exported generic ModernToggleGroup is hand-rolled (plain buttons, no aria-pressed) — the two should converge. |
Toolbar @radix-ui/react-toolbar | Not used | — | |
Tooltip @radix-ui/react-tooltip | Not used | — | Native title attributes only — a real Tooltip is an open gap. |